diff --git a/.gitignore b/.gitignore index d8e6459bf06..f67226125a9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.rpm .*.swp *.ninja +.ccls-cache/ .ninja_* *.mri *.mri.tpl diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0a9113a36c7..2798bf166c8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,6 +27,7 @@ stages: - build - test - Salsa-CI + - sast default: # Base image for builds and tests unless otherwise defined @@ -206,7 +207,7 @@ fedora-sanitizer: - builddir/_CPack_Packages/Linux/RPM/SPECS/ parallel: matrix: - - SANITIZER: [-DWITH_ASAN=YES, -DWITH_TSAN=YES, -DWITH_UBSAN=YES, -DWITH_MSAN=YES] + - SANITIZER: [-DWITH_ASAN=YES, -DWITH_TSAN=YES, -DWITH_UBSAN=YES] centos8: stage: build @@ -298,6 +299,7 @@ centos7: main.mysqldump : Field separator argument is not what is expected; check the manual when executing 'SELECT INTO OUTFILE' main.flush_logs_not_windows : query 'flush logs' succeeded - should have failed with error ER_CANT_CREATE_FILE (1004) main.mysql_upgrade_noengine : upgrade output order does not match the expected + main.func_math : MDEV-20966 - Wrong error code " > skiplist - ./mtr --suite=main --force --parallel=auto --xml-report=$CI_PROJECT_DIR/junit.xml --skip-test-list=skiplist $RESTART_POLICY @@ -370,22 +372,6 @@ mysql-test-run-ubsan: junit: - junit.xml -mysql-test-run-msan: - stage: test - variables: - RESTART_POLICY: "--force-restart" - dependencies: - - "fedora-sanitizer: [-DWITH_MSAN=YES]" - needs: - - "fedora-sanitizer: [-DWITH_MSAN=YES]" - <<: *mysql-test-run-def - allow_failure: true - artifacts: - when: always # Also show results when tests fail - reports: - junit: - - junit.xml - rpmlint: stage: test dependencies: @@ -440,52 +426,70 @@ fedora install: - installed-database.sql - upgraded-database.sql -fedora upgrade: - stage: test - dependencies: - - fedora - needs: - - fedora +cppcheck: + stage: sast + needs: [] + variables: + GIT_STRATEGY: fetch + GIT_SUBMODULE_STRATEGY: normal script: - - dnf install -y mariadb-server - # Fedora does not support running services in Docker (like Debian packages do) so start it manually - - /usr/libexec/mariadb-check-socket - - /usr/libexec/mariadb-prepare-db-dir - - sudo -u mysql /usr/libexec/mariadbd --basedir=/usr & sleep 10 - # Dump database contents in installed state - - mariadb-dump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert > old-installed-database.sql - - /usr/libexec/mariadb-check-upgrade - # Dump database contents in upgraded state - - mariadb-dump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert > old-upgraded-database.sql - - mariadb --skip-column-names -e "SELECT @@version, @@version_comment" # Show version - # @TODO: Upgrade from Fedora 33 MariaDB 10.4 to MariaDB.org latest does not work - # so do this manual step to remove conflicts until packaging is fixed - - yum remove -y mariadb-server-utils mariadb-gssapi-server mariadb-cracklib-password-check mariadb-backup mariadb-connector-c-config - - rm -f rpm/*debuginfo* # Not relevant in this test - - yum install -y rpm/*.rpm - # nothing provides galera-4 on Fedora, so this step fails if built with wsrep - - mysql -e "SHUTDOWN;" - - /usr/bin/mariadb-install-db # This step should not do anything on upgrades, just exit - - sudo -u mysql /usr/sbin/mariadbd & sleep 10 - # Dump database contents in installed state - - mariadb-dump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert > new-installed-database.sql || true - # The step above fails on: mariadb-dump: Couldn't execute 'show events': Cannot proceed, because event scheduler is disabled (1577) - # @TODO: Since we did a manual start, we also need to run upgrade manually - - /usr/bin/mariadb-upgrade - # Dump database contents in upgraded state - - mariadb-dump --all-databases --all-tablespaces --triggers --routines --events --skip-extended-insert > new-upgraded-database.sql - - | - mariadb --skip-column-names -e "SELECT @@version, @@version_comment" | tee /tmp/version - grep $MARIADB_MAJOR_VERSION /tmp/version || echo "MariaDB didn't upgrade properly" - - mariadb --table -e "SELECT * FROM mysql.global_priv; SHOW CREATE USER root@localhost; SHOW CREATE USER 'mariadb.sys'@localhost" - - mariadb --table -e "SELECT * FROM mysql.plugin; SHOW PLUGINS" + - yum install -y cppcheck diffutils + # --template: use a single-line template + # --force: check large directories without warning + # -i: ignore this directory when scanning + # -j: run multiple cppcheck threads + # Use newline to escape colon in yaml + - > + cppcheck --template="{file}:{line}: {severity}: {message}" --force + client dbug extra include libmariadb libmysqld libservices mysql-test mysys mysys_ssl pcre plugin + strings tests unittest vio wsrep-lib sql sql-common storage + -istorage/mroonga -istorage/tokudb -istorage/spider -istorage/rocksdb -iextra/ -ilibmariadb/ -istorage/columnstore + --output-file=cppcheck.txt -j $(nproc) + # Parallel jobs may output findings in an nondeterministic order. Sort to match ignorelist. + - cat cppcheck.txt | sort > cppcheck_sorted.txt + # Remove line numbers for diff + - sed 's/:[^:]*:/:/' cppcheck_sorted.txt > cppcheck_sorted_no_line_numbers.txt + # Only print new issues not found in ignore list + - echo "Problems found in ignore list that were not discovered by cppcheck (may have been fixed)." + - diff --changed-group-format='%>' --unchanged-group-format='' cppcheck_sorted_no_line_numbers.txt tests/code_quality/cppcheck_ignorelist.txt || true + - echo "Problems found by cppcheck that were not in ignore list." + - diff --changed-group-format='%<' --unchanged-group-format='' cppcheck_sorted_no_line_numbers.txt tests/code_quality/cppcheck_ignorelist.txt > lines_not_ignored.txt || true + - cat lines_not_ignored.txt && test ! -s lines_not_ignored.txt artifacts: + when: always paths: - - old-installed-database.sql - - old-upgraded-database.sql - - new-installed-database.sql - - new-upgraded-database.sql + - cppcheck_sorted.txt +flawfinder: + stage: sast + needs: [] + variables: + GIT_STRATEGY: fetch + GIT_SUBMODULE_STRATEGY: normal + script: + - yum install -y python3 python3-pip jq diffutils git + - pip install flawfinder + - flawfinder --falsepositive --quiet --html . > flawfinder-all-vulnerabilities.html + - cat flawfinder-all-vulnerabilities.html | grep "Hits =" + - flawfinder --falsepositive --quiet --minlevel=5 --sarif . > flawfinder-output.json + # FlawFinder's --sarif output will display all vulnerabilities despite having --minlevel=5 specified. + # Therefore, we postprocess the results with jq and filter out findings where the vulnerability level is less than 5. + # Also in the SARIF output format, the vulnerabilities are ranked as 0.2/0.4/0.6/0.8/1.0 which correspond to the --minlevel=1/2/3/4/5 of FlawFinder. + # Additionally, we sort the results because individual findings are consistent across different runs, but their ordering may not be. + # Vulnerabilities can also be ignored in-line (/* Flawfinder: ignore */), but this option was chosen as to not clutter the codebase. + - jq 'del(.runs[] | .tool | .driver | .rules) | del(.runs[] | .results[] | select(.rank < 1)) | del(.runs[] | .results[] | .locations[] | .physicalLocation | .region | .startLine) | .runs[0].results|=sort_by(.fingerprints)' flawfinder-output.json > flawfinder-min-level5.json + # Diff against known vulnerabilities, but ignore the line number. + - echo "Problems found in ignore list that were not discovered by flawfinder (may have been fixed)." + - diff --changed-group-format='%>' --unchanged-group-format='' flawfinder-min-level5.json tests/code_quality/flawfinder_ignorelist.json || true + - echo "Problems found by flawfinder that were not in ignore list." + - diff --changed-group-format='%<' --unchanged-group-format='' flawfinder-min-level5.json tests/code_quality/flawfinder_ignorelist.json > lines_not_ignored.txt || true + - cat lines_not_ignored.txt && test ! -s lines_not_ignored.txt + artifacts: + when: always + paths: + - flawfinder-all-vulnerabilities.html + - flawfinder-min-level5.json + # Once all RPM builds and tests have passed, also run the DEB builds and tests # @NOTE: This is likely to work well only on salsa.debian.org as the Gitlab.com # runners are too small for everything this stage does. diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d85b84182d..8dd6e826faa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,8 +27,6 @@ IF(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) "None" "Debug" "Release" "MinSizeRel" "RelWithDebInfo") ENDIF() -PROJECT(MySQL) - # Remove the following comment if you don't want to have striped binaries # in RPM's: @@ -50,6 +48,8 @@ IF(POLICY CMP0069) CMAKE_POLICY(SET CMP0069 NEW) ENDIF() +PROJECT(MySQL) + MESSAGE(STATUS "Running cmake version ${CMAKE_VERSION}") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} diff --git a/client/mysql.cc b/client/mysql.cc index e47527af390..c56f32bbda0 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -1963,7 +1963,7 @@ static int get_options(int argc, char **argv) current_db= my_strdup(PSI_NOT_INSTRUMENTED, *argv, MYF(MY_WME)); } if (tty_password) - opt_password= get_tty_password(NullS); + opt_password= my_get_tty_password(NullS); if (debug_info_flag) my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO; if (debug_check_flag) @@ -4671,7 +4671,7 @@ char *mysql_authentication_dialog_ask(MYSQL *mysql, int type, if (type == 2) /* password */ { - s= get_tty_password(""); + s= my_get_tty_password(""); strnmov(buf, s, buf_len); buf[buf_len-1]= 0; my_free(s); diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c index 598045a013b..60eb61938d4 100644 --- a/client/mysql_upgrade.c +++ b/client/mysql_upgrade.c @@ -1436,7 +1436,7 @@ int main(int argc, char **argv) if (tty_password) { - opt_password= get_tty_password(NullS); + opt_password= my_get_tty_password(NullS); /* add password to defaults file */ add_one_option_cnf_file(&ds_args, "password", opt_password); } diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc index 8f29c83a441..d72a34445f5 100644 --- a/client/mysqladmin.cc +++ b/client/mysqladmin.cc @@ -343,7 +343,7 @@ int main(int argc,char *argv[]) } commands = temp_argv; if (tty_password) - opt_password = get_tty_password(NullS); + opt_password = my_get_tty_password(NullS); (void) signal(SIGINT,endprog); /* Here if abort */ (void) signal(SIGTERM,endprog); /* Here if abort */ @@ -1132,8 +1132,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) else if (argc == 1) { /* prompt for password */ - typed_password= get_tty_password("New password: "); - verified= get_tty_password("Confirm new password: "); + typed_password= my_get_tty_password("New password: "); + verified= my_get_tty_password("Confirm new password: "); if (strcmp(typed_password, verified) != 0) { my_printf_error(0,"Passwords don't match",MYF(ME_BELL)); diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 9dd31c14e81..b0f1f4954e4 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -2039,7 +2039,7 @@ get_one_option(const struct my_option *opt, const char *argument, const char *) break; } if (tty_password) - pass= get_tty_password(NullS); + pass= my_get_tty_password(NullS); return 0; } diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 0803aa3224d..34cbcadbdf5 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -464,7 +464,7 @@ static int get_options(int *argc, char ***argv) DBUG_RETURN(1); } if (tty_password) - opt_password = get_tty_password(NullS); + opt_password = my_get_tty_password(NullS); if (debug_info_flag) my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO; if (debug_check_flag) diff --git a/client/mysqldump.c b/client/mysqldump.c index d649684b9d7..00054d4b2bb 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1275,7 +1275,7 @@ static int get_options(int *argc, char ***argv) return EX_USAGE; } if (tty_password) - opt_password=get_tty_password(NullS); + opt_password=my_get_tty_password(NullS); return(0); } /* get_options */ diff --git a/client/mysqlimport.c b/client/mysqlimport.c index f8dd44e2781..d64e1daac50 100644 --- a/client/mysqlimport.c +++ b/client/mysqlimport.c @@ -304,7 +304,7 @@ static int get_options(int *argc, char ***argv) current_db= *((*argv)++); (*argc)--; if (tty_password) - opt_password=get_tty_password(NullS); + opt_password=my_get_tty_password(NullS); return(0); } diff --git a/client/mysqlshow.c b/client/mysqlshow.c index 3e8f399d610..e1dc840cf8f 100644 --- a/client/mysqlshow.c +++ b/client/mysqlshow.c @@ -357,7 +357,7 @@ get_options(int *argc,char ***argv) exit(ho_error); if (tty_password) - opt_password=get_tty_password(NullS); + opt_password=my_get_tty_password(NullS); if (opt_count) { /* diff --git a/client/mysqlslap.c b/client/mysqlslap.c index c27e3f4010d..f94bb2ad956 100644 --- a/client/mysqlslap.c +++ b/client/mysqlslap.c @@ -1528,7 +1528,7 @@ get_options(int *argc,char ***argv) } if (tty_password) - opt_password= get_tty_password(NullS); + opt_password= my_get_tty_password(NullS); DBUG_RETURN(0); } diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 489beec1d91..9814a1734cf 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -7322,7 +7322,7 @@ int parse_args(int argc, char **argv) if (argc == 1) opt_db= *argv; if (tty_password) - opt_pass= get_tty_password(NullS); /* purify tested */ + opt_pass= my_get_tty_password(NullS); /* purify tested */ if (debug_info_flag) my_end_arg= MY_CHECK_ERROR | MY_GIVE_INFO; if (debug_check_flag) @@ -8998,6 +8998,8 @@ int util_query(MYSQL* org_mysql, const char* query){ org_mysql->unix_socket); cur_con->util_mysql= mysql; + if (mysql->charset != org_mysql->charset) + mysql_set_character_set(mysql, org_mysql->charset->csname); } } else diff --git a/cmake/aws_sdk.cmake b/cmake/aws_sdk.cmake index f6f88f2b880..a0d46e1a892 100644 --- a/cmake/aws_sdk.cmake +++ b/cmake/aws_sdk.cmake @@ -10,7 +10,7 @@ FUNCTION (CHECK_AWS_SDK RETVAL REASON) SKIP_AWS_SDK("AWS_SDK_EXTERNAL_PROJECT is not ON") ENDIF() IF(NOT NOT_FOR_DISTRIBUTION) - SKIP_AWS_SDK("AWS SDK has Apache 2.0 License which is not complatible with GPLv2. Set -DNOT_FOR_DISTRIBUTION=ON if you need it") + SKIP_AWS_SDK("AWS SDK has Apache 2.0 License which is not compatible with GPLv2. Set -DNOT_FOR_DISTRIBUTION=ON if you need it") ENDIF() # Check compiler support IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU") diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index 3cc24375c06..a196ff56dfc 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -72,7 +72,7 @@ It was originally forked from Percona XtraBackup 2.3.8.") # Packages with default description SET(CPACK_RPM_client_PACKAGE_SUMMARY "MariaDB database client binaries") SET(CPACK_RPM_client_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_DESCRIPTION}") -SET(CPACK_RPM_common_PACKAGE_SUMMARY "MariaDB database common files (e.g. /etc/mysql/conf.d/mariadb.cnf)") +SET(CPACK_RPM_common_PACKAGE_SUMMARY "MariaDB database common configuration files (e.g. /etc/mysql/conf.d/mariadb.cnf)") SET(CPACK_RPM_common_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_DESCRIPTION}") SET(CPACK_RPM_compat_PACKAGE_SUMMARY "MariaDB database client library MySQL compat package") SET(CPACK_RPM_compat_PACKAGE_DESCRIPTION "${CPACK_RPM_PACKAGE_DESCRIPTION}") @@ -107,6 +107,8 @@ SET(CPACK_RPM_SPEC_MORE_DEFINE " %define restart_flag_dir %{_localstatedir}/lib/rpm-state/mariadb %define restart_flag %{restart_flag_dir}/need-restart +%define pretrans %{nil} + %{?filter_setup: %filter_provides_in \\\\.\\\\(test\\\\|result\\\\|h\\\\|cc\\\\|c\\\\|inc\\\\|opt\\\\|ic\\\\|cnf\\\\|rdiff\\\\|cpp\\\\)$ %filter_requires_in \\\\.\\\\(test\\\\|result\\\\|h\\\\|cc\\\\|c\\\\|inc\\\\|opt\\\\|ic\\\\|cnf\\\\|rdiff\\\\|cpp\\\\)$ diff --git a/debian/control b/debian/control index e22760ee19f..89f379ab1d3 100644 --- a/debian/control +++ b/debian/control @@ -72,9 +72,9 @@ Description: MariaDB database development files language in the world. The main goals of MariaDB are speed, robustness and ease of use. . - This package includes development libraries and header files. To allow sources + This package includes development libraries and header files to allow sources expecting the MariaDB Connector/C to build. Sources that expect the MySQL - Client libraries should use files from the libmariadb-dev-compat package. + client libraries should use files from the libmariadb-dev-compat package. Package: libmariadb-dev-compat Architecture: any @@ -216,18 +216,18 @@ Breaks: libmariadb-dev (<< ${source:Version}), Replaces: libmariadb-dev (<< ${source:Version}), libmariadbclient-dev (<< ${source:Version}), libmysqld-dev -Description: MariaDB embedded database, development files +Description: MariaDB embedded database, development files package MariaDB is a fast, stable and true multi-user, multi-threaded SQL database server. SQL (Structured Query Language) is the most popular database query language in the world. The main goals of MariaDB are speed, robustness and ease of use. . - This package includes the embedded server library development and header files. + This package includes the MariaDB embedded server library development and header files. Package: mysql-common Architecture: all Depends: ${misc:Depends} -Description: MariaDB database common files (e.g. /etc/mysql/my.cnf) +Description: MariaDB client common configuration files package (e.g. /etc/mysql/my.cnf) MariaDB is a fast, stable and true multi-user, multi-threaded SQL database server. SQL (Structured Query Language) is the most popular database query language in the world. The main goals of MariaDB are speed, robustness and @@ -241,7 +241,7 @@ Architecture: all Depends: mysql-common (>= 5.6.25), ${misc:Depends} Multi-Arch: foreign -Description: MariaDB common configuration files +Description: MariaDB database common files (e.g. /etc/mysql/mariadb.conf.d/) MariaDB is a fast, stable and true multi-user, multi-threaded SQL database server. SQL (Structured Query Language) is the most popular database query language in the world. The main goals of MariaDB are speed, robustness and @@ -578,7 +578,7 @@ Package: mariadb-server Architecture: all Depends: mariadb-server-10.5 (>= ${source:Version}), ${misc:Depends} -Description: MariaDB database server (metapackage depending on the latest version) +Description: MariaDB database server binaries (metapackage depending on the latest version) This is an empty package that depends on the current "best" version of mariadb-server (currently mariadb-server-10.5), as determined by the MariaDB maintainers. Install this package if in doubt about which MariaDB @@ -594,11 +594,16 @@ Package: mariadb-client Architecture: all Depends: mariadb-client-10.5 (>= ${source:Version}), ${misc:Depends} -Description: MariaDB database client (metapackage depending on the latest version) +Description: MariaDB database client binaries (metapackage depending on the latest version) This is an empty package that depends on the current "best" version of mariadb-client (currently mariadb-client-10.5), as determined by the MariaDB maintainers. Install this package if in doubt about which MariaDB version you want, as this is the one considered to be in the best shape. + . + MariaDB is a fast, stable and true multi-user, multi-threaded SQL database + server. SQL (Structured Query Language) is the most popular database query + language in the world. The main goals of MariaDB are speed, robustness and + ease of use. Package: mariadb-backup Architecture: any @@ -610,8 +615,8 @@ Depends: mariadb-client-core-10.5 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Description: Backup tool for MariaDB server - This backup tool is guaranteed to be compatible with MariaDB. - Based on Xtrabackup, but improved to work with MariaDB. + Based on Xtrabackup, but improved to work with MariaDB server. + This backup tool is guaranteed to be compatible with MariaDB server. . Please refer to the MariaDB Knowledge Base on more information on how to use this tool. @@ -632,11 +637,11 @@ Replaces: mariadb-connect-engine-10.1, mariadb-connect-engine-10.2, mariadb-connect-engine-10.3, mariadb-connect-engine-10.4 -Description: Connect storage engine for MariaDB +Description: Connect storage engine for MariaDB server Connect engine supports a number of file formats (dbf, xml, txt, bin, etc), connections to ODBC tables and remote MySQL tables, as well as a number of other interesting features. - This package contains the Connect plugin for MariaDB. + This package contains the Connect plugin for MariaDB server. Package: mariadb-plugin-s3 Architecture: any @@ -663,10 +668,10 @@ Replaces: mariadb-rocksdb-engine-10.2, mariadb-rocksdb-engine-10.3, mariadb-rocksdb-engine-10.4 Recommends: python3-mysqldb -Description: RocksDB storage engine for MariaDB +Description: RocksDB storage engine for MariaDB server The RocksDB storage engine is a high performance storage engine, aimed at maximising storage efficiency while maintaining InnoDB-like performance. - This package contains the RocksDB plugin for MariaDB. + This package contains the RocksDB plugin for MariaDB server. Package: mariadb-plugin-oqgraph Architecture: any @@ -682,10 +687,10 @@ Replaces: mariadb-oqgraph-engine-10.1, mariadb-oqgraph-engine-10.2, mariadb-oqgraph-engine-10.3, mariadb-oqgraph-engine-10.4 -Description: OQGraph storage engine for MariaDB +Description: OQGraph storage engine for MariaDB server The OQGraph engine is a computation engine plugin for handling hierarchies (trees) and graphs (friend-of-a-friend, etc) cleanly through standard SQL. - This package contains the OQGraph plugin for MariaDB. + This package contains the OQGraph plugin for MariaDB server. Package: mariadb-plugin-mroonga Architecture: any-alpha any-amd64 any-arm any-arm64 any-i386 any-ia64 any-mips64el any-mips64r6el any-mipsel any-mipsr6el any-nios2 any-powerpcel any-ppc64el any-sh3 any-sh4 any-tilegx @@ -702,10 +707,10 @@ Replaces: mariadb-server-10.0, mariadb-server-10.2, mariadb-server-10.3, mariadb-server-10.4 -Description: Mroonga storage engine for MariaDB +Description: Mroonga storage engine for MariaDB server Mroonga (formerly named Groonga Storage Engine) is a storage engine that provides fast CJK-ready full text searching using column store. - This package contains the Mroonga plugin for MariaDB. + This package contains the Mroonga plugin for MariaDB server. Package: mariadb-plugin-spider Architecture: any @@ -722,9 +727,9 @@ Replaces: mariadb-server-10.0, mariadb-server-10.2, mariadb-server-10.3, mariadb-server-10.4 -Description: Spider storage engine for MariaDB +Description: Spider storage engine for MariaDB server The Spider storage engine with built-in sharding features. It supports - partitioning and xa transactions, and allows tables of different MariaDB + partitioning and xa transactions, and allows tables of different MariaDB server instances to be handled as if they were on the same instance. It refers to one possible implementation of ISO/IEC 9075-9:2008 SQL/MED. @@ -775,11 +780,11 @@ Depends: libcrack2 (>= 2.9.0), mariadb-server-10.5, ${misc:Depends}, ${shlibs:Depends} -Description: CrackLib Password Validation Plugin for MariaDB +Description: CrackLib Password Validation Plugin for MariaDB server This password validation plugin uses cracklib to allow only - sufficiently secure (as defined by cracklib) user passwords in MariaDB. + sufficiently secure (as defined by cracklib) user passwords in MariaDB server. . - Install and configure this to enforce stronger passwords for MariaDB users. + Install and configure this to enforce stronger passwords for MariaDB server users. Package: mariadb-test Architecture: any diff --git a/include/handler_ername.h b/include/handler_ername.h index c9d09717a14..c72e570468a 100644 --- a/include/handler_ername.h +++ b/include/handler_ername.h @@ -79,4 +79,5 @@ { "HA_ERR_ABORTED_BY_USER", HA_ERR_ABORTED_BY_USER, "" }, { "HA_ERR_DISK_FULL", HA_ERR_DISK_FULL, "" }, { "HA_ERR_INCOMPATIBLE_DEFINITION", HA_ERR_INCOMPATIBLE_DEFINITION, "" }, +{ "HA_ERR_NO_ENCRYPTION", HA_ERR_NO_ENCRYPTION, "" }, { "HA_ERR_COMMIT_ERROR", HA_ERR_COMMIT_ERROR, "" }, diff --git a/include/json_lib.h b/include/json_lib.h index 2ec3e9de8f8..71e5d578855 100644 --- a/include/json_lib.h +++ b/include/json_lib.h @@ -35,6 +35,7 @@ typedef struct st_json_string_t const uchar *c_str; /* Current position in JSON string */ const uchar *str_end; /* The end on the string. */ my_wc_t c_next; /* UNICODE of the last read character */ + int c_next_len; /* character lenght of the last read character. */ int error; /* error code. */ CHARSET_INFO *cs; /* Character set of the JSON string. */ @@ -48,7 +49,7 @@ void json_string_set_cs(json_string_t *s, CHARSET_INFO *i_cs); void json_string_set_str(json_string_t *s, const uchar *str, const uchar *end); #define json_next_char(j) \ - (j)->wc((j)->cs, &(j)->c_next, (j)->c_str, (j)->str_end) + ((j)->c_next_len= (j)->wc((j)->cs, &(j)->c_next, (j)->c_str, (j)->str_end)) #define json_eos(j) ((j)->c_str >= (j)->str_end) /* read_string_const_chr() reads the next character of the string constant diff --git a/include/my_base.h b/include/my_base.h index 8936a55214d..ccd0310dcfe 100644 --- a/include/my_base.h +++ b/include/my_base.h @@ -48,6 +48,7 @@ #define HA_OPEN_NO_PSI_CALL 1024U /* Don't call/connect PSI */ #define HA_OPEN_MERGE_TABLE 2048U #define HA_OPEN_FOR_CREATE 4096U +#define HA_OPEN_FOR_DROP (1U << 13) /* Open part of drop */ /* Allow opening even if table is incompatible as this is for ALTER TABLE which @@ -520,14 +521,15 @@ enum ha_base_keytype { #define HA_ERR_DISK_FULL 189 #define HA_ERR_INCOMPATIBLE_DEFINITION 190 #define HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE 191 /* Too many words in a phrase */ -#define HA_ERR_DECRYPTION_FAILED 192 /* Table encrypted but decypt failed */ +#define HA_ERR_DECRYPTION_FAILED 192 /* Table encrypted but decrypt failed */ #define HA_ERR_FK_DEPTH_EXCEEDED 193 /* FK cascade depth exceeded */ #define HA_ERR_TABLESPACE_MISSING 194 /* Missing Tablespace */ #define HA_ERR_SEQUENCE_INVALID_DATA 195 #define HA_ERR_SEQUENCE_RUN_OUT 196 #define HA_ERR_COMMIT_ERROR 197 #define HA_ERR_PARTITION_LIST 198 -#define HA_ERR_LAST 198 /* Copy of last error nr * */ +#define HA_ERR_NO_ENCRYPTION 199 +#define HA_ERR_LAST 199 /* Copy of last error nr * */ /* Number of different errors */ #define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1) diff --git a/include/my_handler_errors.h b/include/my_handler_errors.h index 96632629775..df414888907 100644 --- a/include/my_handler_errors.h +++ b/include/my_handler_errors.h @@ -109,7 +109,8 @@ static const char *handler_error_messages[]= "Sequence has been run out", "Sequence values are conflicting", "Error during commit", - "Cannot select partitions" + "Cannot select partitions", + "Cannot initialize encryption. Check that all encryption parameters have been set" }; #endif /* MYSYS_MY_HANDLER_ERRORS_INCLUDED */ diff --git a/include/my_sys.h b/include/my_sys.h index 2a7cb32fe68..0ead4e84299 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -1049,7 +1049,7 @@ extern void add_compiled_extra_collation(struct charset_info_st *cs); extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info, char *to, size_t to_length, const char *from, size_t length); -extern char *get_tty_password(const char *opt_message); +extern char *my_get_tty_password(const char *opt_message); #ifdef _WIN32 #define BACKSLASH_MBTAIL /* File system character set */ diff --git a/include/mysql.h b/include/mysql.h index 9bed5262905..bcadaf2c407 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -151,6 +151,7 @@ typedef unsigned long long my_ulonglong; #define ER_WRONG_FK_OPTION_FOR_VIRTUAL_COLUMN ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN #define ER_UNSUPPORTED_ACTION_ON_VIRTUAL_COLUMN ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN #define ER_UNSUPPORTED_ENGINE_FOR_VIRTUAL_COLUMNS ER_UNSUPPORTED_ENGINE_FOR_GENERATED_COLUMNS +#define ER_QUERY_EXCEEDED_ROWS_EXAMINED_LIMIT ER_QUERY_RESULT_INCOMPLETE typedef struct st_mysql_rows { struct st_mysql_rows *next; /* list of rows */ diff --git a/include/ssl_compat.h b/include/ssl_compat.h index bea3484a1f2..7a652d46121 100644 --- a/include/ssl_compat.h +++ b/include/ssl_compat.h @@ -24,8 +24,8 @@ #define HAVE_OPENSSL11 1 #define SSL_LIBRARY OpenSSL_version(OPENSSL_VERSION) #define ERR_remove_state(X) ERR_clear_error() -#define EVP_CIPHER_CTX_SIZE 176 -#define EVP_MD_CTX_SIZE 72 +#define EVP_CIPHER_CTX_SIZE 200 +#define EVP_MD_CTX_SIZE 80 #undef EVP_MD_CTX_init #define EVP_MD_CTX_init(X) do { memset((X), 0, EVP_MD_CTX_SIZE); EVP_MD_CTX_reset(X); } while(0) #undef EVP_CIPHER_CTX_init diff --git a/libmariadb b/libmariadb index a3bba4639f5..d543bed61ba 160000 --- a/libmariadb +++ b/libmariadb @@ -1 +1 @@ -Subproject commit a3bba4639f55148c59a28a506df8a2b88e5e83ab +Subproject commit d543bed61ba9a117e95764dd1429b21c3e0579d1 diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c index d29126467e2..0c69f4fdd68 100644 --- a/libmysqld/libmysqld.c +++ b/libmysqld/libmysqld.c @@ -226,3 +226,7 @@ error: DBUG_RETURN(0); } +char *get_tty_password(const char *opt_message) +{ + return my_get_tty_password(opt_message); +} diff --git a/mysql-test/include/ctype_E05C.inc b/mysql-test/include/ctype_E05C.inc index 71861044664..d157d8a7c88 100644 --- a/mysql-test/include/ctype_E05C.inc +++ b/mysql-test/include/ctype_E05C.inc @@ -76,6 +76,15 @@ INSERT INTO t1 VALUES (_BINARY'\\'' SELECT a, HEX(a) FROM t1; DROP TABLE t1; +# +# test how strings are written into view's frm +# +disable_view_protocol; +create view v1 as select hex('ŕ\'), hex('ŕ\t'); +select * from v1; +drop view v1; +enable_view_protocol; + # Checking that with character_set_client=binary 0x5C in 0xE05C # is treated as escape rather than the second byte of a multi-byte character, # even if character_set_connection is big5/cp932/gbk/sjis. @@ -109,5 +118,5 @@ SELECT HEX(a) FROM t1; DROP TABLE t1; --enable_view_protocol ---echo # Start of ctype_E05C.inc +--echo # End of ctype_E05C.inc diff --git a/mysql-test/include/wait_until_connected_again.inc b/mysql-test/include/wait_until_connected_again.inc index 15a1e5bf847..f644ec8645f 100644 --- a/mysql-test/include/wait_until_connected_again.inc +++ b/mysql-test/include/wait_until_connected_again.inc @@ -11,7 +11,7 @@ let $counter= 5000; let $mysql_errno= 9999; while ($mysql_errno) { - --error 0,ER_ACCESS_DENIED_ERROR,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,ER_LOCK_WAIT_TIMEOUT,2002,2006,2013 + --error 0,ER_ACCESS_DENIED_ERROR,ER_SERVER_SHUTDOWN,ER_CONNECTION_KILLED,ER_LOCK_WAIT_TIMEOUT,2002,2006,2013,HA_ERR_NO_ENCRYPTION show status; dec $counter; @@ -30,6 +30,10 @@ while ($mysql_errno) { let $mysql_errno=0; } + if ($mysql_errno == 199) + { + let $mysql_errno=0; + } --sleep 0.1 } --enable_query_log diff --git a/mysql-test/lib/My/Debugger.pm b/mysql-test/lib/My/Debugger.pm index 0f2585f45a7..626bc6d3733 100644 --- a/mysql-test/lib/My/Debugger.pm +++ b/mysql-test/lib/My/Debugger.pm @@ -116,19 +116,19 @@ for my $k (sort keys %debuggers) { my $v = $debuggers{$k}; $v = $debuggers{$k} = $debuggers{$v} if not ref $v; # resolve aliases - sub register_opt($$) { - my ($name, $msg) = @_; - $opts{"$name=s"} = \$opt_vals{$name}; - $help .= wrap(sprintf(" %-23s", $name), ' 'x25, "$msg under $name\n"); + sub register_opt($$$) { + my ($prefix, $name, $msg) = @_; + $opts{"$prefix$name=s"} = \$opt_vals{$prefix.$name}; + $help .= wrap(sprintf(" %-23s", $prefix.$name), ' 'x25, "$msg under $name\n"); } $v->{script} = '' unless $v->{script}; $v->{options} =~ s/(\{exe\}|$)/ {options} $&/ unless $v->{options} =~ /\{options\}/; - register_opt "$k" => "Start mariadbd"; - register_opt "client-$k" => "Start mariadb-test client"; - register_opt "boot-$k" => "Start bootstrap server"; - register_opt "manual-$k" => "Before running test(s) let user manually start mariadbd"; + register_opt "", $k, "Start mysqld"; + register_opt "client-", $k, "Start mysqltest client"; + register_opt "boot-", $k, "Start bootstrap server"; + register_opt "manual-", "$k", "Before running test(s) let user manually start mariadbd"; } sub subst($%) { diff --git a/mysql-test/lib/My/SysInfo.pm b/mysql-test/lib/My/SysInfo.pm index 1e5ac353def..211f72c0561 100644 --- a/mysql-test/lib/My/SysInfo.pm +++ b/mysql-test/lib/My/SysInfo.pm @@ -68,7 +68,7 @@ sub _cpuinfo { } } $F= undef; # Close file - return $self; + return $self->{cpus}; } @@ -95,12 +95,7 @@ sub _kstat { push(@{$self->{cpus}}, $cpuinfo); } - # At least one cpu should have been found - # if this method worked - if ( $self->{cpus} ) { - return $self; - } - return undef; + return $self->{cpus}; } diff --git a/mysql-test/main/create_w_max_indexes_128.result b/mysql-test/main/create_w_max_indexes_128.result index d86bc912e58..112df1b7c41 100644 --- a/mysql-test/main/create_w_max_indexes_128.result +++ b/mysql-test/main/create_w_max_indexes_128.result @@ -470,7 +470,7 @@ t1 CREATE TABLE `t1` ( KEY `a126_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a127_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a128_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci flush tables; show create table t1; Table Create Table @@ -619,7 +619,7 @@ t1 CREATE TABLE `t1` ( KEY `a126_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a127_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a128_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci drop table t1; create table t1 (c1 int, c2 int, c3 int, c4 int, c5 int, c6 int, c7 int, c8 int, c9 int, c10 int, c11 int, c12 int, c13 int, c14 int, c15 int, c16 int); @@ -1092,7 +1092,7 @@ t1 CREATE TABLE `t1` ( KEY `a126_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a127_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a128_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci flush tables; show create table t1; Table Create Table @@ -1241,7 +1241,7 @@ t1 CREATE TABLE `t1` ( KEY `a126_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a127_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`), KEY `a128_long_123456789_123456789_123456789_123456789_123456789_1234` (`c1`,`c2`,`c3`,`c4`,`c5`,`c6`,`c7`,`c8`,`c9`,`c10`,`c11`,`c12`,`c13`,`c14`,`c15`,`c16`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci alter table t1 add key a129_long_123456789_123456789_123456789_123456789_123456789_1234 ( c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16); diff --git a/mysql-test/main/cte_recursive.result b/mysql-test/main/cte_recursive.result index dd82ef46229..f441ed42dcf 100644 --- a/mysql-test/main/cte_recursive.result +++ b/mysql-test/main/cte_recursive.result @@ -1214,6 +1214,8 @@ generation name 2 Grandma Ann 2 Grandma Sally 2 Grandpa Ben +Warnings: +Warning 1931 Query execution was interrupted. The query exceeded max_recursive_iterations = 1. The query result may be incomplete # query with recursive tables using key access alter table folks add primary key (id); explain @@ -2594,6 +2596,8 @@ select * from applied_modules; m m1 m2 +Warnings: +Warning 1931 Query execution was interrupted. The query exceeded max_recursive_iterations = 2. The query result may be incomplete drop table value_nodes, module_nodes, module_arguments, module_results; # # mdev-12519: recursive references in subqueries diff --git a/mysql-test/main/ctype_big5.result b/mysql-test/main/ctype_big5.result index 487f36c21fb..20d6a97cc5d 100644 --- a/mysql-test/main/ctype_big5.result +++ b/mysql-test/main/ctype_big5.result @@ -537,15 +537,15 @@ create table t1 (a blob); insert into t1 values (0xEE00); select * into outfile 'test/t1.txt' from t1; delete from t1; -select hex(load_file('MYSQLD_DATADIR/test/t1.txt'));; -hex(load_file('MYSQLD_DATADIR/test/t1.txt')) +select hex(load_file('MYSQLD_DATADIR/test/t1.txt')) as lf; +lf 5CEE5C300A load data infile 't1.txt' into table t1; select hex(a) from t1; hex(a) EE00 drop table t1; -End of 5.0 tests +# End of 5.0 tests # # Start of 5.5 tests # @@ -4705,6 +4705,11 @@ a HEX(a) \'ŕ\ 5C27E05C ŕ\'\ E05C275C DROP TABLE t1; +create view v1 as select hex('ŕ\'), hex('ŕ\t'); +select * from v1; +hex('ŕ\') hex('ŕ\t') +E05C E05C74 +drop view v1; SET character_set_client=binary, character_set_results=binary; SELECT @@character_set_client, @@character_set_connection, @@character_set_results; @@character_set_client @@character_set_connection @@character_set_results @@ -4744,7 +4749,7 @@ HEX(a) E05C5B E05B DROP TABLE t1; -# Start of ctype_E05C.inc +# End of ctype_E05C.inc SET NAMES big5; CREATE TABLE t1 (a ENUM('Č@') CHARACTER SET big5); SHOW CREATE TABLE t1; diff --git a/mysql-test/main/ctype_big5.test b/mysql-test/main/ctype_big5.test index 204c20901fd..65ccdd76653 100644 --- a/mysql-test/main/ctype_big5.test +++ b/mysql-test/main/ctype_big5.test @@ -79,18 +79,15 @@ create table t1 (a blob); insert into t1 values (0xEE00); select * into outfile 'test/t1.txt' from t1; delete from t1; -#enable after fix MDEV-27871 ---disable_view_protocol let $MYSQLD_DATADIR= `select @@datadir`; --replace_result $MYSQLD_DATADIR MYSQLD_DATADIR ---eval select hex(load_file('$MYSQLD_DATADIR/test/t1.txt')); +--eval select hex(load_file('$MYSQLD_DATADIR/test/t1.txt')) as lf load data infile 't1.txt' into table t1; select hex(a) from t1; --remove_file $MYSQLD_DATADIR/test/t1.txt drop table t1; -#enable_view_protocol # ---echo End of 5.0 tests +--echo # End of 5.0 tests --echo # diff --git a/mysql-test/main/ctype_cp932_binlog_stm.result b/mysql-test/main/ctype_cp932_binlog_stm.result index 1de52ba5f6e..66f015141c8 100644 --- a/mysql-test/main/ctype_cp932_binlog_stm.result +++ b/mysql-test/main/ctype_cp932_binlog_stm.result @@ -20413,6 +20413,11 @@ a HEX(a) \'ŕ\ 5C27E05C ŕ\'\ E05C275C DROP TABLE t1; +create view v1 as select hex('ŕ\'), hex('ŕ\t'); +select * from v1; +hex('ŕ\') hex('ŕ\t') +E05C E05C74 +drop view v1; SET character_set_client=binary, character_set_results=binary; SELECT @@character_set_client, @@character_set_connection, @@character_set_results; @@character_set_client @@character_set_connection @@character_set_results @@ -20452,7 +20457,7 @@ HEX(a) E05C5B E05B DROP TABLE t1; -# Start of ctype_E05C.inc +# End of ctype_E05C.inc # # End of 10.0 tests # diff --git a/mysql-test/main/ctype_gbk.result b/mysql-test/main/ctype_gbk.result index 9b4500820ef..d2b273e2314 100644 --- a/mysql-test/main/ctype_gbk.result +++ b/mysql-test/main/ctype_gbk.result @@ -5053,6 +5053,11 @@ a HEX(a) \'ŕ\ 5C27E05C ŕ\'\ E05C275C DROP TABLE t1; +create view v1 as select hex('ŕ\'), hex('ŕ\t'); +select * from v1; +hex('ŕ\') hex('ŕ\t') +E05C E05C74 +drop view v1; SET character_set_client=binary, character_set_results=binary; SELECT @@character_set_client, @@character_set_connection, @@character_set_results; @@character_set_client @@character_set_connection @@character_set_results @@ -5092,7 +5097,7 @@ HEX(a) E05C5B E05B DROP TABLE t1; -# Start of ctype_E05C.inc +# End of ctype_E05C.inc SET NAMES utf8, character_set_connection=gbk; # # MDEV-13118 Wrong results with LOWER and UPPER and subquery diff --git a/mysql-test/main/ctype_sjis.result b/mysql-test/main/ctype_sjis.result index 8771d2a9786..53560e7108e 100644 --- a/mysql-test/main/ctype_sjis.result +++ b/mysql-test/main/ctype_sjis.result @@ -18677,6 +18677,11 @@ a HEX(a) \'ŕ\ 5C27E05C ŕ\'\ E05C275C DROP TABLE t1; +create view v1 as select hex('ŕ\'), hex('ŕ\t'); +select * from v1; +hex('ŕ\') hex('ŕ\t') +E05C E05C74 +drop view v1; SET character_set_client=binary, character_set_results=binary; SELECT @@character_set_client, @@character_set_connection, @@character_set_results; @@character_set_client @@character_set_connection @@character_set_results @@ -18716,7 +18721,7 @@ HEX(a) E05C5B E05B DROP TABLE t1; -# Start of ctype_E05C.inc +# End of ctype_E05C.inc # # End of 10.0 tests # diff --git a/mysql-test/main/derived_cond_pushdown.result b/mysql-test/main/derived_cond_pushdown.result index 79a664f685a..01c67772220 100644 --- a/mysql-test/main/derived_cond_pushdown.result +++ b/mysql-test/main/derived_cond_pushdown.result @@ -18356,7 +18356,7 @@ from (select a, sum(b) as s from t2 group by a) as dt, t3 where dt.a=t1.a and t3.a < 3 -) +) as SUBQ from t1 limit 5; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 1000 @@ -18370,14 +18370,9 @@ from (select a, sum(b) as s from t2 group by a) as dt, t3 where dt.a=t1.a and t3.a < 3 -) +) as SUBQ from t1 limit 5; -a ( select concat(t3.a,'=',dt.s) -from -(select a, sum(b) as s from t2 group by a) as dt, -t3 -where dt.a=t1.a and t3.a < 3 -) +a SUBQ 1 1=804 2 1=1056 3 1=846 @@ -18396,7 +18391,7 @@ from (select a, sum(b) as s from t2 group by a) as dt, t3 where dt.a=t1.a and t3.a < 3 -) +) as SUBQ from t1 limit 5; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY t1 ALL NULL NULL NULL NULL 1000 @@ -18410,14 +18405,9 @@ from (select a, sum(b) as s from t2 group by a) as dt, t3 where dt.a=t1.a and t3.a < 3 -) +) as SUBQ from t1 limit 5; -a ( select concat(t3.a,'=',dt.s) -from -(select a, sum(b) as s from t2 group by a) as dt, -t3 -where dt.a=t1.a and t3.a < 3 -) +a SUBQ 1 1=11858 2 1=11380 3 1=11588 diff --git a/mysql-test/main/derived_cond_pushdown.test b/mysql-test/main/derived_cond_pushdown.test index 7a4d9b4ad7d..fa22ba9513b 100644 --- a/mysql-test/main/derived_cond_pushdown.test +++ b/mysql-test/main/derived_cond_pushdown.test @@ -3997,7 +3997,7 @@ select (select a, sum(b) as s from t2 group by a) as dt, t3 where dt.a=t1.a and t3.a < 3 - ) + ) as SUBQ from t1 limit 5; eval explain $q; diff --git a/mysql-test/main/explain_innodb.result b/mysql-test/main/explain_innodb.result index c44d7baadea..ffd62c6611c 100644 --- a/mysql-test/main/explain_innodb.result +++ b/mysql-test/main/explain_innodb.result @@ -19,20 +19,5 @@ id select_type table type possible_keys key key_len ref rows Extra SET GLOBAL slow_query_log = @sql_tmp; drop table t1; # -# MDEV-31181: Server crash in subselect_uniquesubquery_engine::print -# upon EXPLAIN EXTENDED DELETE -# -CREATE TABLE t1 (a INT); -INSERT INTO t1 VALUES (1),(2); -CREATE TABLE t2 (pk INT PRIMARY KEY); -INSERT INTO t2 VALUES (1),(2); -EXPLAIN EXTENDED DELETE FROM t1 WHERE a IN (SELECT pk FROM t2); -id select_type table type possible_keys key key_len ref rows filtered Extra -1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where -2 DEPENDENT SUBQUERY t2 unique_subquery PRIMARY PRIMARY 4 func 1 100.00 Using index -Warnings: -Note 1003 /* select#1 */ delete from `test`.`t1` where (`test`.`t1`.`a`,(((`test`.`t1`.`a`)))) -drop table t1, t2; -# # End of 10.4 tests # diff --git a/mysql-test/main/explain_innodb.test b/mysql-test/main/explain_innodb.test index 3dcad4c2d49..e72cae2cf23 100644 --- a/mysql-test/main/explain_innodb.test +++ b/mysql-test/main/explain_innodb.test @@ -19,21 +19,6 @@ SELECT * FROM (SELECT id FROM t1 GROUP BY id) dt WHERE 1=0; SET GLOBAL slow_query_log = @sql_tmp; drop table t1; - ---echo # ---echo # MDEV-31181: Server crash in subselect_uniquesubquery_engine::print ---echo # upon EXPLAIN EXTENDED DELETE ---echo # - -CREATE TABLE t1 (a INT); -INSERT INTO t1 VALUES (1),(2); -CREATE TABLE t2 (pk INT PRIMARY KEY); -INSERT INTO t2 VALUES (1),(2); - -EXPLAIN EXTENDED DELETE FROM t1 WHERE a IN (SELECT pk FROM t2); - -drop table t1, t2; - --echo # --echo # End of 10.4 tests --echo # diff --git a/mysql-test/main/explain_non_select.result b/mysql-test/main/explain_non_select.result index 1200a3f9400..009a568e2c2 100644 --- a/mysql-test/main/explain_non_select.result +++ b/mysql-test/main/explain_non_select.result @@ -278,6 +278,37 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ALL NULL NULL NULL NULL 2 drop table t1,t2; # +# MDEV-31181: EXPLAIN EXTENDED for single-table DELETE with IN predicand +# +create table t1 (a int); +insert into t1 values (3), (7), (1), (3), (4); +create table t2 (pk int primary key); +insert into t2 values (3), (5), (1); +create table t3 (a int, key(a)); +insert into t3 values (7), (5), (7), (3); +explain extended delete from t1 where a in (select pk from t2); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 5 100.00 Using where +2 DEPENDENT SUBQUERY t2 unique_subquery PRIMARY PRIMARY 4 func 1 100.00 Using index +Warnings: +Note 1003 /* select#1 */ delete from `test`.`t1` where (`test`.`t1`.`a`,(((`test`.`t1`.`a`) in t2 on PRIMARY))) +delete from t1 where a in (select pk from t2); +select * from t1; +a +7 +4 +explain extended delete from t1 where a in (select a from t3); +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 2 100.00 Using where +2 DEPENDENT SUBQUERY t3 index_subquery a a 5 func 2 100.00 Using index +Warnings: +Note 1003 /* select#1 */ delete from `test`.`t1` where (`test`.`t1`.`a`,(((`test`.`t1`.`a`) in t3 on a))) +delete from t1 where a in (select a from t3); +select * from t1; +a +4 +drop table t1,t2,t3; +# # MDEV-31224: EXPLAIN EXTENDED for multi-table update of system table # CREATE TABLE t1 (a INT); diff --git a/mysql-test/main/explain_non_select.test b/mysql-test/main/explain_non_select.test index f87a5d9ec8d..e861955b3f1 100644 --- a/mysql-test/main/explain_non_select.test +++ b/mysql-test/main/explain_non_select.test @@ -250,6 +250,33 @@ PREPARE stmt FROM 'EXPLAIN INSERT INTO t1 SELECT * FROM t2'; EXECUTE stmt; drop table t1,t2; +--echo # +--echo # MDEV-31181: EXPLAIN EXTENDED for single-table DELETE with IN predicand +--echo # + +create table t1 (a int); +insert into t1 values (3), (7), (1), (3), (4); +create table t2 (pk int primary key); +insert into t2 values (3), (5), (1); +create table t3 (a int, key(a)); +insert into t3 values (7), (5), (7), (3); + +let $q1= +delete from t1 where a in (select pk from t2); + +eval explain extended $q1; +eval $q1; +select * from t1; + +let $q2= +delete from t1 where a in (select a from t3); + +eval explain extended $q2; +eval $q2; +select * from t1; + +drop table t1,t2,t3; + --echo # --echo # MDEV-31224: EXPLAIN EXTENDED for multi-table update of system table --echo # diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result index 44d50261de4..0cf30e5415e 100644 --- a/mysql-test/main/func_json.result +++ b/mysql-test/main/func_json.result @@ -1043,9 +1043,6 @@ SELECT JSON_EXTRACT('{"a":null, "b":10, "c":"null"}', '$.a'); JSON_EXTRACT('{"a":null, "b":10, "c":"null"}', '$.a') null # -# End of 10.3 tests -# -# # Start of 10.4 tests # # @@ -1455,6 +1452,13 @@ SELECT JSON_LENGTH('{"a":"b"}','$','$', 'foo'); ERROR 42000: Incorrect parameter count in the call to native function 'json_length' SELECT JSON_LENGTH(); ERROR 42000: Incorrect parameter count in the call to native function 'JSON_LENGTH' +# MDEV-23187: Assorted assertion failures in json_find_path with certain collations +SET @old_collation_connection= @@COLLATION_CONNECTION; +SET COLLATION_CONNECTION= ucs2_unicode_ci; +SELECT JSON_VALUE('["foo"]', '$**[0]') AS f; +f +foo +SET @@COLLATION_CONNECTION= @old_collation_connection; # # End of 10.4 tests # diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test index 257d3ee375e..64d650aa032 100644 --- a/mysql-test/main/func_json.test +++ b/mysql-test/main/func_json.test @@ -665,11 +665,6 @@ SELECT 1 + JSON_VALUE('{"nulltest": null}', '$.nulltest'); SELECT NULL; SELECT JSON_EXTRACT('{"a":null, "b":10, "c":"null"}', '$.a'); - ---echo # ---echo # End of 10.3 tests ---echo # - --echo # --echo # Start of 10.4 tests --echo # @@ -926,6 +921,16 @@ SELECT JSON_LENGTH('{"a":"b"}','$','$', 'foo'); --error ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT SELECT JSON_LENGTH(); +--echo # MDEV-23187: Assorted assertion failures in json_find_path with certain collations + + +SET @old_collation_connection= @@COLLATION_CONNECTION; + +SET COLLATION_CONNECTION= ucs2_unicode_ci; +SELECT JSON_VALUE('["foo"]', '$**[0]') AS f; + +SET @@COLLATION_CONNECTION= @old_collation_connection; + --echo # --echo # End of 10.4 tests --echo # diff --git a/mysql-test/main/func_math.result b/mysql-test/main/func_math.result index f618ffd89a3..cd24edfb74e 100644 --- a/mysql-test/main/func_math.result +++ b/mysql-test/main/func_math.result @@ -972,7 +972,8 @@ SELECT 9223372036854775808 DIV 1; SELECT 9223372036854775808 DIV -1; ERROR 22003: BIGINT UNSIGNED value is out of range in '9223372036854775808 DIV -1' SELECT -9223372036854775808 DIV 1; -ERROR 22003: BIGINT value is out of range in '-9223372036854775808 DIV 1' +-9223372036854775808 DIV 1 +-9223372036854775808 SELECT -9223372036854775808 DIV -1; ERROR 22003: BIGINT value is out of range in '-9223372036854775808 DIV -1' SELECT 9223372036854775808 MOD 1; @@ -3546,6 +3547,32 @@ t2 CREATE TABLE `t2` ( ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci DROP TABLE t1,t2; # +# MDEV-30932 UBSAN: negation of -X cannot be represented in type 'long long int'; cast to an unsigned type to negate this value to itself in Item_func_mul::int_op and Item_func_round::int_op +# +SELECT (1 DIV(-1/POW(807,14))*1); +ERROR 22003: BIGINT value is out of range in '1 DIV (-1 / pow(807,14))' +DO((-9223372036854775808)*(1)); +SELECT (-9223372036854775808)*(1); +(-9223372036854775808)*(1) +-9223372036854775808 +SELECT (GET_FORMAT(TIME,'JIS'))DIV(POW(-40,65)DIV(1)*2); +ERROR 22003: BIGINT value is out of range in 'pow(-40,65) DIV 1' +SELECT -9223372036854775808 MOD 9223372036854775810; +-9223372036854775808 MOD 9223372036854775810 +-9223372036854775808 +CREATE TABLE t1 (c INT); +INSERT INTO t1 VALUES(TRUNCATE(0,-1.e+30)); +DROP TABLE t1; +SELECT TRUNCATE(0, -9223372036854775808); +TRUNCATE(0, -9223372036854775808) +0 +SELECT GET_FORMAT(TIME,'JIS') DIV ATAN (TRUNCATE (0,'2000000000000000' DIV SIN(1500)*NOW(5))); +GET_FORMAT(TIME,'JIS') DIV ATAN (TRUNCATE (0,'2000000000000000' DIV SIN(1500)*NOW(5))) +NULL +SELECT (GET_FORMAT(TIME,'JIS') DIV ATAN (TRUNCATE (0,'2000000000000000' DIV SIN(1500)*NOW(5))/ROUND(-1)))DIV(-1-LOG2(1))-(-1*POWER(-1,0)); +(GET_FORMAT(TIME,'JIS') DIV ATAN (TRUNCATE (0,'2000000000000000' DIV SIN(1500)*NOW(5))/ROUND(-1)))DIV(-1-LOG2(1))-(-1*POWER(-1,0)) +NULL +# # End of 10.4 tests # # diff --git a/mysql-test/main/func_math.test b/mysql-test/main/func_math.test index c865aa88660..5f87435dc7c 100644 --- a/mysql-test/main/func_math.test +++ b/mysql-test/main/func_math.test @@ -710,7 +710,6 @@ DROP TABLE t1; SELECT 9223372036854775808 DIV 1; --error ER_DATA_OUT_OF_RANGE SELECT 9223372036854775808 DIV -1; ---error ER_DATA_OUT_OF_RANGE SELECT -9223372036854775808 DIV 1; --error ER_DATA_OUT_OF_RANGE SELECT -9223372036854775808 DIV -1; @@ -1867,6 +1866,32 @@ SELECT * FROM t2; SHOW CREATE TABLE t2; DROP TABLE t1,t2; +--echo # +--echo # MDEV-30932 UBSAN: negation of -X cannot be represented in type 'long long int'; cast to an unsigned type to negate this value to itself in Item_func_mul::int_op and Item_func_round::int_op +--echo # + +--error ER_DATA_OUT_OF_RANGE +SELECT (1 DIV(-1/POW(807,14))*1); + +DO((-9223372036854775808)*(1)); + +SELECT (-9223372036854775808)*(1); + +--error ER_DATA_OUT_OF_RANGE +SELECT (GET_FORMAT(TIME,'JIS'))DIV(POW(-40,65)DIV(1)*2); + +SELECT -9223372036854775808 MOD 9223372036854775810; + +CREATE TABLE t1 (c INT); +INSERT INTO t1 VALUES(TRUNCATE(0,-1.e+30)); +DROP TABLE t1; +SELECT TRUNCATE(0, -9223372036854775808); + +--disable_warnings +SELECT GET_FORMAT(TIME,'JIS') DIV ATAN (TRUNCATE (0,'2000000000000000' DIV SIN(1500)*NOW(5))); +SELECT (GET_FORMAT(TIME,'JIS') DIV ATAN (TRUNCATE (0,'2000000000000000' DIV SIN(1500)*NOW(5))/ROUND(-1)))DIV(-1-LOG2(1))-(-1*POWER(-1,0)); +--enable_warnings + --echo # --echo # End of 10.4 tests --echo # diff --git a/mysql-test/main/group_min_max.result b/mysql-test/main/group_min_max.result index 712466c8afb..405cbc27f54 100644 --- a/mysql-test/main/group_min_max.result +++ b/mysql-test/main/group_min_max.result @@ -4028,6 +4028,119 @@ drop table t1; # End of 10.1 tests # # +# MDEV-6768 Wrong result with agregate with join with no resultset +# +create table t1 +( +PARENT_ID int(10) unsigned NOT NULL AUTO_INCREMENT, +PARENT_FIELD VARCHAR(10), +PRIMARY KEY (PARENT_ID) +) engine=innodb; +create table t2 +( +CHILD_ID INT NOT NULL AUTO_INCREMENT, +PARENT_ID INT NOT NULL, +CHILD_FIELD varchar(10), +PRIMARY KEY (CHILD_ID) +)engine=innodb; +INSERT INTO t1 (PARENT_FIELD) +SELECT 'AAAA'; +INSERT INTO t2 (PARENT_ID, CHILD_FIELD) +SELECT 1, 'BBBB'; +explain select +t1.PARENT_ID, +min(CHILD_FIELD) +from t1 straight_join t2 +where t1.PARENT_ID = 1 +and t1.PARENT_ID = t2.PARENT_ID +and t2.CHILD_FIELD = "ZZZZ"; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1 Using index +1 SIMPLE t2 ALL NULL NULL NULL NULL 1 Using where +select +t1.PARENT_ID, +min(CHILD_FIELD) +from t1 straight_join t2 +where t1.PARENT_ID = 1 +and t1.PARENT_ID = t2.PARENT_ID +and t2.CHILD_FIELD = "ZZZZ"; +PARENT_ID min(CHILD_FIELD) +NULL NULL +select +1, +min(CHILD_FIELD) +from t1 straight_join t2 +where t1.PARENT_ID = 1 +and t1.PARENT_ID = t2.PARENT_ID +and t2.CHILD_FIELD = "ZZZZ"; +1 min(CHILD_FIELD) +1 NULL +select +IFNULL(t1.PARENT_ID,1), +min(CHILD_FIELD) +from t1 straight_join t2 +where t1.PARENT_ID = 1 +and t1.PARENT_ID = t2.PARENT_ID +and t2.CHILD_FIELD = "ZZZZ"; +IFNULL(t1.PARENT_ID,1) min(CHILD_FIELD) +1 NULL +# Check that things works with MyISAM (which has different explain) +alter table t1 engine=myisam; +alter table t2 engine=myisam; +explain select +t1.PARENT_ID, +min(CHILD_FIELD) +from t1 straight_join t2 +where t1.PARENT_ID = 1 +and t1.PARENT_ID = t2.PARENT_ID +and t2.CHILD_FIELD = "ZZZZ"; +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 +t1.PARENT_ID, +min(CHILD_FIELD) +from t1 straight_join t2 +where t1.PARENT_ID = 1 +and t1.PARENT_ID = t2.PARENT_ID +and t2.CHILD_FIELD = "ZZZZ"; +PARENT_ID min(CHILD_FIELD) +NULL NULL +drop table t1,t2; +# Check that things works if sub queries are re-executed +create table t1 (a int primary key, b int); +create table t2 (a int primary key, b int); +create table t3 (a int primary key, b int); +insert into t1 values (1,1),(2,2),(3,3); +insert into t2 values (1,1),(2,2),(3,3); +insert into t3 values (1,1),(3,3); +explain +select *, +(select +CONCAT('t2:', IFNULL(t2.a, 't2a-null'), ';', +'min_t3_b:', IFNULL(min(t3.b), 't3b-null')) +from t2,t3 +where t2.a=1 and t1.b = t3.a) as s1 +from t1; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL 3 +2 DEPENDENT SUBQUERY t2 const PRIMARY PRIMARY 4 const 1 Using index +2 DEPENDENT SUBQUERY t3 eq_ref PRIMARY PRIMARY 4 test.t1.b 1 +select *, +(select +CONCAT('t2:', IFNULL(t2.a, 't2a-null'), ';', +'min_t3_b:', IFNULL(min(t3.b), 't3b-null')) +from t2,t3 +where t2.a=1 and t1.b = t3.a) as s1 +from t1; +a b s1 +1 1 t2:1;min_t3_b:1 +2 2 t2:t2a-null;min_t3_b:t3b-null +3 3 t2:1;min_t3_b:3 +drop table t1,t2,t3; +# +# End of 10.4 tests +# +# # MDEV-27442 Wrong result upon query with DISTINCT and EXISTS subquery # CREATE TABLE t1 (a int, b int, KEY b (b,a)) ENGINE=MyISAM; diff --git a/mysql-test/main/group_min_max.test b/mysql-test/main/group_min_max.test index 726b3e013e0..edbea74c866 100644 --- a/mysql-test/main/group_min_max.test +++ b/mysql-test/main/group_min_max.test @@ -1692,6 +1692,120 @@ drop table t1; --echo # End of 10.1 tests --echo # +--echo # +--echo # MDEV-6768 Wrong result with agregate with join with no resultset +--echo # + +create table t1 +( + PARENT_ID int(10) unsigned NOT NULL AUTO_INCREMENT, + PARENT_FIELD VARCHAR(10), + PRIMARY KEY (PARENT_ID) +) engine=innodb; + +create table t2 +( + CHILD_ID INT NOT NULL AUTO_INCREMENT, + PARENT_ID INT NOT NULL, + CHILD_FIELD varchar(10), + PRIMARY KEY (CHILD_ID) +)engine=innodb; + +INSERT INTO t1 (PARENT_FIELD) +SELECT 'AAAA'; + +INSERT INTO t2 (PARENT_ID, CHILD_FIELD) +SELECT 1, 'BBBB'; + +explain select + t1.PARENT_ID, + min(CHILD_FIELD) + from t1 straight_join t2 + where t1.PARENT_ID = 1 + and t1.PARENT_ID = t2.PARENT_ID + and t2.CHILD_FIELD = "ZZZZ"; + +select + t1.PARENT_ID, + min(CHILD_FIELD) + from t1 straight_join t2 + where t1.PARENT_ID = 1 + and t1.PARENT_ID = t2.PARENT_ID + and t2.CHILD_FIELD = "ZZZZ"; + +select + 1, + min(CHILD_FIELD) + from t1 straight_join t2 + where t1.PARENT_ID = 1 + and t1.PARENT_ID = t2.PARENT_ID + and t2.CHILD_FIELD = "ZZZZ"; + +select + IFNULL(t1.PARENT_ID,1), + min(CHILD_FIELD) + from t1 straight_join t2 + where t1.PARENT_ID = 1 + and t1.PARENT_ID = t2.PARENT_ID + and t2.CHILD_FIELD = "ZZZZ"; + + +--echo # Check that things works with MyISAM (which has different explain) + +alter table t1 engine=myisam; +alter table t2 engine=myisam; + +explain select + t1.PARENT_ID, + min(CHILD_FIELD) + from t1 straight_join t2 + where t1.PARENT_ID = 1 + and t1.PARENT_ID = t2.PARENT_ID + and t2.CHILD_FIELD = "ZZZZ"; + +select + t1.PARENT_ID, + min(CHILD_FIELD) + from t1 straight_join t2 + where t1.PARENT_ID = 1 + and t1.PARENT_ID = t2.PARENT_ID + and t2.CHILD_FIELD = "ZZZZ"; + +drop table t1,t2; + +--echo # Check that things works if sub queries are re-executed + +create table t1 (a int primary key, b int); +create table t2 (a int primary key, b int); +create table t3 (a int primary key, b int); + +insert into t1 values (1,1),(2,2),(3,3); +insert into t2 values (1,1),(2,2),(3,3); +insert into t3 values (1,1),(3,3); + +explain +select *, + (select + CONCAT('t2:', IFNULL(t2.a, 't2a-null'), ';', + 'min_t3_b:', IFNULL(min(t3.b), 't3b-null')) + from t2,t3 + where t2.a=1 and t1.b = t3.a) as s1 +from t1; + +select *, + (select + CONCAT('t2:', IFNULL(t2.a, 't2a-null'), ';', + 'min_t3_b:', IFNULL(min(t3.b), 't3b-null')) + from t2,t3 + where t2.a=1 and t1.b = t3.a) as s1 +from t1; + +drop table t1,t2,t3; + +--echo # +--echo # End of 10.4 tests +--echo # + --echo # --echo # MDEV-27442 Wrong result upon query with DISTINCT and EXISTS subquery --echo # diff --git a/mysql-test/main/group_min_max_innodb.result b/mysql-test/main/group_min_max_innodb.result index 3586ad5237f..fed3d30b16a 100644 --- a/mysql-test/main/group_min_max_innodb.result +++ b/mysql-test/main/group_min_max_innodb.result @@ -308,6 +308,28 @@ NULL bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb NULL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa drop table t1,t2; +# +# MDEV-30143: Segfault on select query using index for group-by and filesort +# +CREATE TABLE t1 (a varchar(35), b varchar(4)) ENGINE=InnoDB; +INSERT INTO t1 VALUES +('Albania','AXA'),('Australia','AUS'),('American Samoa','AMSA'),('Bahamas','BS'); +CREATE TABLE t2 (a varchar(4), b varchar(50), PRIMARY KEY (b,a), KEY (a)) ENGINE=InnoDB; +INSERT INTO t2 VALUES +('BERM','African Methodist Episcopal'),('AUS','Anglican'),('BERM','Anglican'),('BS','Anglican'),('BS','Baptist'),('BS','Methodist'); +EXPLAIN SELECT t1.a +FROM (SELECT a FROM t2 GROUP BY a ORDER BY COUNT(DISTINCT b) LIMIT 1) dt +JOIN t1 ON dt.a=t1.b; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 ALL NULL NULL NULL NULL # Using where +1 PRIMARY ref key0 key0 6 test.t1.b # +2 DERIVED t2 range a a 58 NULL # Using index for group-by; Using temporary; Using filesort +SELECT t1.a +FROM (SELECT a FROM t2 GROUP BY a ORDER BY COUNT(DISTINCT b) LIMIT 1) dt +JOIN t1 ON dt.a=t1.b; +a +Australia +DROP TABLES t1, t2; set global innodb_stats_persistent= @innodb_stats_persistent_save; set global innodb_stats_persistent_sample_pages= @innodb_stats_persistent_sample_pages_save; diff --git a/mysql-test/main/group_min_max_innodb.test b/mysql-test/main/group_min_max_innodb.test index 87a6e320887..fcecbec41b3 100644 --- a/mysql-test/main/group_min_max_innodb.test +++ b/mysql-test/main/group_min_max_innodb.test @@ -251,7 +251,28 @@ insert into t2 values (1,repeat("a",1000)),(2,repeat("a",1000)),(3,repeat("b",10 SELECT GROUP_CONCAT(t1.language_id SEPARATOR ',') AS `translation_resources`, `d`.`serialized_c` FROM t2 AS `d` LEFT JOIN t1 ON `d`.`voter_id` = t1.`voter_id` GROUP BY `d`.`voter_id` ORDER BY 10-d.voter_id+RAND()*0; drop table t1,t2; + +--echo # +--echo # MDEV-30143: Segfault on select query using index for group-by and filesort +--echo # +CREATE TABLE t1 (a varchar(35), b varchar(4)) ENGINE=InnoDB; +INSERT INTO t1 VALUES +('Albania','AXA'),('Australia','AUS'),('American Samoa','AMSA'),('Bahamas','BS'); + +CREATE TABLE t2 (a varchar(4), b varchar(50), PRIMARY KEY (b,a), KEY (a)) ENGINE=InnoDB; +INSERT INTO t2 VALUES +('BERM','African Methodist Episcopal'),('AUS','Anglican'),('BERM','Anglican'),('BS','Anglican'),('BS','Baptist'),('BS','Methodist'); + +let query= +SELECT t1.a +FROM (SELECT a FROM t2 GROUP BY a ORDER BY COUNT(DISTINCT b) LIMIT 1) dt +JOIN t1 ON dt.a=t1.b; +--replace_column 9 # +eval EXPLAIN $query; +eval $query; + +DROP TABLES t1, t2; + set global innodb_stats_persistent= @innodb_stats_persistent_save; set global innodb_stats_persistent_sample_pages= @innodb_stats_persistent_sample_pages_save; - diff --git a/mysql-test/main/information_schema.result b/mysql-test/main/information_schema.result index 16081c2642c..6740e2a3644 100644 --- a/mysql-test/main/information_schema.result +++ b/mysql-test/main/information_schema.result @@ -2228,7 +2228,7 @@ SCHEMA_NAME SELECT * FROM INFORMATION_SCHEMA.`COLUMNS` LIMIT ROWS EXAMINED 10; TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE DATETIME_PRECISION CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT IS_GENERATED GENERATION_EXPRESSION Warnings: -Warning 1931 Query execution was interrupted. The query examined at least ### rows, which exceeds LIMIT ROWS EXAMINED (10). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 10. The query result may be incomplete # # MDEV-24179: AAssertion `m_status == DA_ERROR || m_status == DA_OK || # m_status == DA_OK_BULK' failed in Diagnostics_area::message() diff --git a/mysql-test/main/join_cache.result b/mysql-test/main/join_cache.result index f2893f27e8e..c7e237cb090 100644 --- a/mysql-test/main/join_cache.result +++ b/mysql-test/main/join_cache.result @@ -3781,9 +3781,9 @@ id1 num3 text1 id4 id3 dummy 228808822 6 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 228808822 18 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 228808822 1 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 -228808822 3 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 228808822 17 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 228808822 50 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 +228808822 3 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 228808822 4 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 826928662 935693782 0 228808822 89 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 2381969632 2482416112 0 228808822 19 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 2381969632 2482416112 0 @@ -5655,13 +5655,13 @@ EXPLAIN SELECT * FROM t1, t2 LEFT JOIN t3 ON t2.b=t3.b WHERE t1.a=t2.a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 2 -1 SIMPLE t2 ALL NULL NULL NULL NULL 12 Using where -1 SIMPLE t3 ALL NULL NULL NULL NULL 3 Using where +1 SIMPLE t2 ALL NULL NULL NULL NULL 12 Using where; Using join buffer (flat, BNL join) +1 SIMPLE t3 ALL NULL NULL NULL NULL 3 Using where; Using join buffer (incremental, BNL join) SELECT * FROM t1, t2 LEFT JOIN t3 ON t2.b=t3.b WHERE t1.a=t2.a; a a b b c +3 3 32 32 302 3 3 30 30 300 3 3 31 NULL NULL -3 3 32 32 302 set join_buffer_space_limit=@save_join_buffer_space_limit; set join_buffer_size=@save_join_buffer_size; set join_cache_level=@save_join_cache_level; @@ -6233,3 +6233,26 @@ set @@optimizer_switch=@save_optimizer_switch; set global innodb_stats_persistent= @innodb_stats_persistent_save; set global innodb_stats_persistent_sample_pages= @innodb_stats_persistent_sample_pages_save; +# +# MDEV-31226 Server crash or assertion failure with row size close to +# join_buffer_size +# +set @org_optimizer_switch=@@optimizer_switch; +set @org_join_buffer_size=@@join_buffer_size; +CREATE TABLE t (f VARCHAR(16384)) ENGINE=MyISAM CHARACTER SET utf8; +INSERT INTO t VALUES (REPEAT('a',16384)),(REPEAT('b',16384)); +SET OPTIMIZER_SWITCH = 'optimize_join_buffer_size=off'; +SET JOIN_BUFFER_SIZE = 16384; +explain SELECT length(concat(t1.f,t2.f)) FROM t t1, t t2; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 2 +1 SIMPLE t2 ALL NULL NULL NULL NULL 2 +SELECT length(concat(t1.f,t2.f)) FROM t t1, t t2; +length(concat(t1.f,t2.f)) +32768 +32768 +32768 +32768 +DROP TABLE t; +set @@optimizer_switch=@org_optimizer_switch; +set @@join_buffer_size=@org_join_buffer_size; diff --git a/mysql-test/main/join_cache.test b/mysql-test/main/join_cache.test index 07ac0b760cf..6a5ee8cb533 100644 --- a/mysql-test/main/join_cache.test +++ b/mysql-test/main/join_cache.test @@ -4207,3 +4207,20 @@ set @@optimizer_switch=@save_optimizer_switch; set global innodb_stats_persistent= @innodb_stats_persistent_save; set global innodb_stats_persistent_sample_pages= @innodb_stats_persistent_sample_pages_save; + +--echo # +--echo # MDEV-31226 Server crash or assertion failure with row size close to +--echo # join_buffer_size +--echo # + +set @org_optimizer_switch=@@optimizer_switch; +set @org_join_buffer_size=@@join_buffer_size; +CREATE TABLE t (f VARCHAR(16384)) ENGINE=MyISAM CHARACTER SET utf8; +INSERT INTO t VALUES (REPEAT('a',16384)),(REPEAT('b',16384)); +SET OPTIMIZER_SWITCH = 'optimize_join_buffer_size=off'; +SET JOIN_BUFFER_SIZE = 16384; +explain SELECT length(concat(t1.f,t2.f)) FROM t t1, t t2; +SELECT length(concat(t1.f,t2.f)) FROM t t1, t t2; +DROP TABLE t; +set @@optimizer_switch=@org_optimizer_switch; +set @@join_buffer_size=@org_join_buffer_size; diff --git a/mysql-test/main/join_cache_notasan.result b/mysql-test/main/join_cache_notasan.result new file mode 100644 index 00000000000..3cec949f5c6 --- /dev/null +++ b/mysql-test/main/join_cache_notasan.result @@ -0,0 +1,27 @@ +# +# MDEV-28217 Incorrect Join Execution When Controlling Join Buffer Size +# +CREATE TABLE t1 (i int PRIMARY KEY)engine=innodb; +INSERT INTO t1 VALUES (1332945389); +CREATE TABLE t2 (i int PRIMARY KEY)engine=innodb; +INSERT INTO t2 VALUES (1180244875), (1951338178); +SET SESSION join_buffer_size= X; +Warnings: +Warning X Truncated incorrect join_buffer_size value: 'X' +SET SESSION join_cache_level = 4; +SET optimizer_switch='optimize_join_buffer_size=on'; +SELECT t2.i FROM t2 LEFT JOIN t1 ON t1.i = t2.i WHERE t1.i; +i +SET optimizer_switch='optimize_join_buffer_size=off'; +SELECT t1.i,t2.i FROM t2 LEFT JOIN t1 ON t1.i = t2.i WHERE t1.i; +ERROR HYX: Could not create a join buffer. Please check and adjust the value of the variables 'JOIN_BUFFER_SIZE (X)' and 'JOIN_BUFFER_SPACE_LIMIT (X)' +SET SESSION join_buffer_size= 10000000; +SELECT t1.i,t2.i FROM t2 LEFT JOIN t1 ON t1.i = t2.i WHERE t1.i; +i i +SET SESSION optimizer_switch= default; +SET SESSION join_buffer_size= default; +SET SESSION join_cache_level= default; +drop table t1,t2; +# +# End of 10.4 tests +# diff --git a/mysql-test/main/join_cache_notasan.test b/mysql-test/main/join_cache_notasan.test new file mode 100644 index 00000000000..cfdfe4eff18 --- /dev/null +++ b/mysql-test/main/join_cache_notasan.test @@ -0,0 +1,36 @@ +# +# Tests that should be in join_cache but cannot be run with ASAN + +--source include/have_64bit.inc +--source include/not_asan.inc +--source include/have_innodb.inc + +--echo # +--echo # MDEV-28217 Incorrect Join Execution When Controlling Join Buffer Size +--echo # + +# This test tries to allocate a too big bufffer, for which ASAN gives an error + +CREATE TABLE t1 (i int PRIMARY KEY)engine=innodb; +INSERT INTO t1 VALUES (1332945389); +CREATE TABLE t2 (i int PRIMARY KEY)engine=innodb; +INSERT INTO t2 VALUES (1180244875), (1951338178); +--replace_regex /[0-9][0-9]+/X/ +SET SESSION join_buffer_size= 5250229460064350213; +SET SESSION join_cache_level = 4; +SET optimizer_switch='optimize_join_buffer_size=on'; +SELECT t2.i FROM t2 LEFT JOIN t1 ON t1.i = t2.i WHERE t1.i; +SET optimizer_switch='optimize_join_buffer_size=off'; +--replace_regex /[0-9][0-9]+/X/ +--error ER_OUTOFMEMORY +SELECT t1.i,t2.i FROM t2 LEFT JOIN t1 ON t1.i = t2.i WHERE t1.i; +SET SESSION join_buffer_size= 10000000; +SELECT t1.i,t2.i FROM t2 LEFT JOIN t1 ON t1.i = t2.i WHERE t1.i; +SET SESSION optimizer_switch= default; +SET SESSION join_buffer_size= default; +SET SESSION join_cache_level= default; +drop table t1,t2; + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/main/join_optimizer.test b/mysql-test/main/join_optimizer.test index 3afe82113b9..e5f6181944d 100644 --- a/mysql-test/main/join_optimizer.test +++ b/mysql-test/main/join_optimizer.test @@ -2,6 +2,8 @@ drop table if exists t0,t1,t2,t3; --enable_warnings +--source include/have_innodb.inc + --echo # --echo # BUG#38049 incorrect rows estimations with references from preceding table --echo # diff --git a/mysql-test/main/limit_rows_examined.result b/mysql-test/main/limit_rows_examined.result index f0a22b8f3f2..50b542fa5fe 100644 --- a/mysql-test/main/limit_rows_examined.result +++ b/mysql-test/main/limit_rows_examined.result @@ -22,7 +22,7 @@ select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 2; c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 2. The query result may be incomplete explain select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 4; id select_type table type possible_keys key key_len ref rows Extra @@ -32,7 +32,7 @@ select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 4; c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 4. The query result may be incomplete Blocked nested loops join, empty result set because of blocking set @@join_cache_level=1; explain @@ -44,7 +44,7 @@ select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 6; c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete explain select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6; id select_type table type possible_keys key key_len ref rows Extra @@ -55,7 +55,7 @@ c1 c2 bb bb cc cc Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete set @@join_cache_level=6; explain select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 3; @@ -65,7 +65,7 @@ id select_type table type possible_keys key key_len ref rows Extra select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 3; c1 c2 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 4 rows, which exceeds LIMIT ROWS EXAMINED (3). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 3. The query result may be incomplete explain select * from t1i, t2i where c1 = c2 LIMIT ROWS EXAMINED 6; id select_type table type possible_keys key key_len ref rows Extra @@ -76,7 +76,7 @@ c1 c2 bb bb cc cc Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete Mix LIMIT ROWS EXAMINED with LIMIT set @@join_cache_level=0; explain @@ -125,7 +125,7 @@ id select_type table type possible_keys key key_len ref rows Extra select * from t0, t1 where c0 = 'bb' and c1 > c0 LIMIT ROWS EXAMINED 0; c0 c1 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 2 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 0. The query result may be incomplete set @@join_cache_level = @save_join_cache_level; drop table t0; ========================================================================= @@ -139,7 +139,7 @@ execute st1 using @l; c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 2. The query result may be incomplete deallocate prepare st1; User variable (not supported for LIMIT in MariaDB 5.3/MySQL 5.1) select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED @l; @@ -153,7 +153,7 @@ call test_limit_rows(3); c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 4 rows, which exceeds LIMIT ROWS EXAMINED (3). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 3. The query result may be incomplete drop procedure test_limit_rows; set @@join_cache_level = @save_join_cache_level; ========================================================================= @@ -165,14 +165,14 @@ UNION c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete (select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0) UNION (select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 6); c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0 UNION select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 6; @@ -185,7 +185,7 @@ LIMIT ROWS EXAMINED 6; c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete (select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0) UNION (select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0) @@ -193,7 +193,7 @@ LIMIT 1 ROWS EXAMINED 6; c1 c2 bb bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete (select * from t1, t2 where c1 = c2 LIMIT ROWS EXAMINED 0) UNION (select * from t1, t2 where c1 < c2 LIMIT ROWS EXAMINED 0) @@ -202,7 +202,7 @@ c1 c2 bb bb cc cc Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (10). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 10. The query result may be incomplete ========================================================================= Subqueries (with several LIMIT ROWS EXAMINED clauses) ========================================================================= @@ -219,7 +219,7 @@ where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 11); c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 11. The query result may be incomplete explain select * from t1 where c1 IN (select * from t2 where c2 > ' ') @@ -234,7 +234,7 @@ LIMIT ROWS EXAMINED 11; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 11. The query result may be incomplete explain select * from t1 where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0) @@ -249,7 +249,7 @@ LIMIT ROWS EXAMINED 11; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 11. The query result may be incomplete explain select * from t1i where c1 IN (select * from t2i where c2 > ' ') @@ -264,7 +264,7 @@ c1 bb cc Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete Subqueries with IN-TO-EXISTS set @@optimizer_switch='semijoin=off,in_to_exists=on,materialization=off'; explain @@ -278,7 +278,7 @@ where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 4); c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 4. The query result may be incomplete explain select * from t1 where c1 IN (select * from t2 where c2 > ' ') @@ -292,7 +292,7 @@ LIMIT ROWS EXAMINED 4; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 4. The query result may be incomplete explain select * from t1 where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0) @@ -306,7 +306,7 @@ LIMIT ROWS EXAMINED 4; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 5 rows, which exceeds LIMIT ROWS EXAMINED (4). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 4. The query result may be incomplete explain select * from t1i where c1 IN (select * from t2i where c2 > ' ') @@ -320,7 +320,7 @@ LIMIT ROWS EXAMINED 9; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (9). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 9. The query result may be incomplete Same as above, without subquery cache set @@optimizer_switch='subquery_cache=off'; select * from t1 @@ -328,28 +328,28 @@ where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 2); c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 2. The query result may be incomplete select * from t1 where c1 IN (select * from t2 where c2 > ' ') LIMIT ROWS EXAMINED 2; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 2. The query result may be incomplete select * from t1 where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0) LIMIT ROWS EXAMINED 2; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 2. The query result may be incomplete select * from t1i where c1 IN (select * from t2i where c2 > ' ') LIMIT ROWS EXAMINED 5; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 7 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 5. The query result may be incomplete Subqueries with materialization set @@optimizer_switch='semijoin=off,in_to_exists=off,materialization=on,subquery_cache=on'; explain @@ -363,7 +363,7 @@ where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 13); c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 14 rows, which exceeds LIMIT ROWS EXAMINED (13). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 13. The query result may be incomplete explain select * from t1 where c1 IN (select * from t2 where c2 > ' ') LIMIT ROWS EXAMINED 13; @@ -375,7 +375,7 @@ where c1 IN (select * from t2 where c2 > ' ') LIMIT ROWS EXAMINED 13; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 14 rows, which exceeds LIMIT ROWS EXAMINED (13). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 13. The query result may be incomplete explain select * from t1 where c1 IN (select * from t2 where c2 > ' ' LIMIT ROWS EXAMINED 0) @@ -389,7 +389,7 @@ LIMIT ROWS EXAMINED 13; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 14 rows, which exceeds LIMIT ROWS EXAMINED (13). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 13. The query result may be incomplete explain select * from t1i where c1 IN (select * from t2i where c2 > ' ') LIMIT ROWS EXAMINED 17; @@ -401,7 +401,7 @@ where c1 IN (select * from t2i where c2 > ' ') LIMIT ROWS EXAMINED 17; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 18 rows, which exceeds LIMIT ROWS EXAMINED (17). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 17. The query result may be incomplete set @@optimizer_switch='default'; ========================================================================= Views and derived tables @@ -422,18 +422,18 @@ bb cc dd Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 18 rows, which exceeds LIMIT ROWS EXAMINED (17). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 17. The query result may be incomplete select * from v1 LIMIT ROWS EXAMINED 16; c1 bb cc Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 17 rows, which exceeds LIMIT ROWS EXAMINED (16). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 16. The query result may be incomplete select * from v1 LIMIT ROWS EXAMINED 11; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 11. The query result may be incomplete drop view v1; explain select * @@ -451,7 +451,7 @@ LIMIT ROWS EXAMINED 11; c1 bb Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (11). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 11. The query result may be incomplete ========================================================================= Aggregation ========================================================================= @@ -474,16 +474,16 @@ id select_type table type possible_keys key key_len ref rows Extra select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 0; c1 sum(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 0. The query result may be incomplete select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 1; c1 sum(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (1). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 1. The query result may be incomplete select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 20; c1 sum(c2) aa 3 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 21 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 20. The query result may be incomplete select c1, sum(c2) from t3 group by c1 LIMIT ROWS EXAMINED 21; c1 sum(c2) aa 3 @@ -501,16 +501,16 @@ id select_type table type possible_keys key key_len ref rows Extra select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 0; c1 sum(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 0. The query result may be incomplete select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 1; c1 sum(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (1). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 1. The query result may be incomplete select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 20; c1 sum(c2) aa 3 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 21 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 20. The query result may be incomplete select c1, sum(c2) from t3i group by c1 LIMIT ROWS EXAMINED 21; c1 sum(c2) aa 3 @@ -523,14 +523,14 @@ id select_type table type possible_keys key key_len ref rows Extra select min(c2) from t3 LIMIT ROWS EXAMINED 5; min(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 5. The query result may be incomplete select max(c2) from t3 LIMIT ROWS EXAMINED 6; max(c2) 5 select max(c2) from t3 LIMIT ROWS EXAMINED 0; max(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 0. The query result may be incomplete explain select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5; id select_type table type possible_keys key key_len ref rows Extra @@ -538,14 +538,14 @@ id select_type table type possible_keys key key_len ref rows Extra select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5; max(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 5. The query result may be incomplete select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 6; max(c2) NULL select max(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 0; max(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 0. The query result may be incomplete explain select count(c2) from t3 LIMIT ROWS EXAMINED 5; id select_type table type possible_keys key key_len ref rows Extra @@ -553,14 +553,14 @@ id select_type table type possible_keys key key_len ref rows Extra select count(c2) from t3 LIMIT ROWS EXAMINED 5; count(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 5. The query result may be incomplete select count(c2) from t3 LIMIT ROWS EXAMINED 6; count(c2) 5 select count(c2) from t3 LIMIT ROWS EXAMINED 0; count(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 0. The query result may be incomplete explain select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5; id select_type table type possible_keys key key_len ref rows Extra @@ -568,7 +568,7 @@ id select_type table type possible_keys key key_len ref rows Extra select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 5; count(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 5. The query result may be incomplete select count(c2) from t3 where c2 > 10 LIMIT ROWS EXAMINED 6; count(c2) 0 @@ -579,7 +579,7 @@ id select_type table type possible_keys key key_len ref rows Extra select sum(c2) from t3 LIMIT ROWS EXAMINED 5; sum(c2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 6 rows, which exceeds LIMIT ROWS EXAMINED (5). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 5. The query result may be incomplete select sum(c2) from t3 LIMIT ROWS EXAMINED 6; sum(c2) 15 @@ -618,7 +618,7 @@ c1 c2 aa 1 aa 2 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 2. The query result may be incomplete explain select c1, c2 from t3i order by c2, c1 desc LIMIT ROWS EXAMINED 2; id select_type table type possible_keys key key_len ref rows Extra @@ -634,14 +634,14 @@ CREATE TABLE t4 (a int); INSERT INTO t4 values (1), (2); INSERT IGNORE INTO t4 SELECT a + 2 FROM t4 LIMIT ROWS EXAMINED 0; Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 1 rows, which exceeds LIMIT ROWS EXAMINED (0). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 0. The query result may be incomplete select * from t4; a 1 2 INSERT INTO t4 SELECT a + 2 FROM t4 LIMIT ROWS EXAMINED 6; Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 8 rows, which exceeds LIMIT ROWS EXAMINED (6). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 6. The query result may be incomplete select * from t4; a 1 @@ -692,7 +692,7 @@ WHERE EXISTS (SELECT c FROM t3 LEFT JOIN t2 ON b = d) HAVING field1 > 'aaa' LIMIT ROWS EXAMINED 20; field1 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 21 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 20. The query result may be incomplete EXPLAIN SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 14; id select_type table type possible_keys key key_len ref rows Extra @@ -702,13 +702,13 @@ SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 14; a USA Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 15 rows, which exceeds LIMIT ROWS EXAMINED (14). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 14. The query result may be incomplete SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 15; a USA CAN Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 16 rows, which exceeds LIMIT ROWS EXAMINED (15). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 15. The query result may be incomplete SELECT DISTINCT a FROM t1, t2 HAVING a > ' ' LIMIT ROWS EXAMINED 16; a USA @@ -753,7 +753,7 @@ GROUP BY field1, field2, field3, field4, field5 LIMIT ROWS EXAMINED 120; field1 field2 field3 field4 field5 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 121 rows, which exceeds LIMIT ROWS EXAMINED (120). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 120. The query result may be incomplete SHOW STATUS LIKE 'Handler_read%'; Variable_name Value Handler_read_first 1 @@ -778,8 +778,8 @@ GROUP BY field1, field2, field3, field4, field5 LIMIT ROWS EXAMINED 124; field1 field2 field3 field4 field5 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 125 rows, which exceeds LIMIT ROWS EXAMINED (124). The query result may be incomplete -Warning 1931 Query execution was interrupted. The query examined at least 127 rows, which exceeds LIMIT ROWS EXAMINED (124). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 124. The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 124. The query result may be incomplete SHOW STATUS LIKE 'Handler_read%'; Variable_name Value Handler_read_first 1 @@ -822,7 +822,7 @@ WHERE b <= alias1.b OR e != alias2.c ) LIMIT ROWS EXAMINED 20; a b c Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 25 rows, which exceeds LIMIT ROWS EXAMINED (20). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 20. The query result may be incomplete drop table t1, t2, t3; MDEV-174: LIMIT ROWS EXAMINED: Assertion `0' failed in net_end_statement(THD*) @@ -839,7 +839,7 @@ WHERE c = (SELECT MAX(b) FROM t2) LIMIT ROWS EXAMINED 3; (SELECT MAX(c) FROM t1, t2) Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 12 rows, which exceeds LIMIT ROWS EXAMINED (3). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 3. The query result may be incomplete drop table t1, t2; MDEV-178: LIMIT ROWS EXAMINED: Assertion `0' failed in net_end_statement(THD*) on the @@ -856,12 +856,12 @@ EXECUTE ps; a 3 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 22 rows, which exceeds LIMIT ROWS EXAMINED (21). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 21. The query result may be incomplete EXECUTE ps; a 3 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 22 rows, which exceeds LIMIT ROWS EXAMINED (21). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 21. The query result may be incomplete drop view v; drop table t1, t2; # @@ -876,7 +876,7 @@ INSERT INTO t1 (k,c) VALUES(0,'0'), (0,'0'),(0,'0'),(0,'0'),(0,'0'),(0,'0'),(0,' SET @@sql_mode='STRICT_TRANS_TABLES'; INSERT INTO t1 (c) SELECT k FROM t1 LIMIT ROWS EXAMINED 2; Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3 rows, which exceeds LIMIT ROWS EXAMINED (2). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 2. The query result may be incomplete SET @@sql_mode=@old_mode; DROP TABLE t1; # diff --git a/mysql-test/main/lowercase_table2.opt b/mysql-test/main/lowercase_table2.opt new file mode 100644 index 00000000000..ac4d3211e89 --- /dev/null +++ b/mysql-test/main/lowercase_table2.opt @@ -0,0 +1 @@ +--lower-case-table-names=2 diff --git a/mysql-test/main/lowercase_table2.result b/mysql-test/main/lowercase_table2.result index 9194638a4d2..fe06fb671a2 100644 --- a/mysql-test/main/lowercase_table2.result +++ b/mysql-test/main/lowercase_table2.result @@ -14,7 +14,7 @@ SHOW CREATE TABLE T1; Table Create Table T1 CREATE TABLE `T1` ( `a` int(11) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci RENAME TABLE T1 TO T2; SHOW TABLES LIKE "T2"; Tables_in_test (T2) @@ -70,7 +70,7 @@ SHOW CREATE TABLE T1; Table Create Table T1 CREATE TABLE `T1` ( `a` int(11) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=latin1 +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci RENAME TABLE T1 TO T2; SHOW TABLES LIKE "T2"; Tables_in_test (T2) @@ -319,18 +319,42 @@ Database (mysql_t%) mysql_TEST show create database mysql_test; Database Create Database -mysql_test CREATE DATABASE `mysql_test` /*!40100 DEFAULT CHARACTER SET latin1 */ +mysql_test CREATE DATABASE `mysql_test` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci */ show create database mysql_TEST; Database Create Database -mysql_TEST CREATE DATABASE `mysql_TEST` /*!40100 DEFAULT CHARACTER SET latin1 */ +mysql_TEST CREATE DATABASE `mysql_TEST` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci */ show create table mysql_TEST.T1; Table Create Table T1 CREATE TABLE `T1` ( `a` int(11) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci show create table mysql_test.t1; Table Create Table t1 CREATE TABLE `t1` ( `a` int(11) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1 +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci drop database mysql_TEST; +# MDEV-30765 SHOW TABLES not working properly with +# lower_case_table_names=2 +# +create database db1; +use db1; +# lowercase table name +create table `a` (a int); +# uppercase table name +create table `B` (a int); +create user 'mysqltest_1'@'localhost' identified by 'password'; +grant select, show view on db1.`a` to 'mysqltest_1'@'localhost'; +grant select, show view on db1.`B` to 'mysqltest_1'@'localhost'; +connect conn1, localhost, mysqltest_1, password, test; +connection conn1; +use db1; +show tables; +Tables_in_db1 +B +a +connection default; +disconnect conn1; +drop user 'mysqltest_1'@'localhost'; +drop tables a, B; +drop database db1; diff --git a/mysql-test/main/lowercase_table2.test b/mysql-test/main/lowercase_table2.test index 601089ca760..82c07bf9345 100644 --- a/mysql-test/main/lowercase_table2.test +++ b/mysql-test/main/lowercase_table2.test @@ -288,3 +288,29 @@ show create database mysql_TEST; show create table mysql_TEST.T1; show create table mysql_test.t1; drop database mysql_TEST; + +--echo # MDEV-30765 SHOW TABLES not working properly with +--echo # lower_case_table_names=2 +--echo # +create database db1; +use db1; +--echo # lowercase table name +create table `a` (a int); +--echo # uppercase table name +create table `B` (a int); + +create user 'mysqltest_1'@'localhost' identified by 'password'; + +grant select, show view on db1.`a` to 'mysqltest_1'@'localhost'; +grant select, show view on db1.`B` to 'mysqltest_1'@'localhost'; + +connect (conn1, localhost, mysqltest_1, password, test); +connection conn1; +use db1; +show tables; + +connection default; +disconnect conn1; +drop user 'mysqltest_1'@'localhost'; +drop tables a, B; +drop database db1; \ No newline at end of file diff --git a/mysql-test/main/opt_trace.result b/mysql-test/main/opt_trace.result index e5d49c6923a..ab0cd5d2429 100644 --- a/mysql-test/main/opt_trace.result +++ b/mysql-test/main/opt_trace.result @@ -8479,6 +8479,55 @@ SELECT a FROM t1 WHERE (a,b) in (SELECT @c,@d); a DROP TABLE t1; # +# MDEV-30964: MAX_SEL_ARG memory exhaustion is not visible in the optimizer trace +# +create table t1 ( +c1 int, +c2 int, +c3 int, +c4 int, +c5 int, +c6 int, +c7 int, +c8 int, +key(c1,c2,c3,c4,c5,c6,c7,c8) +); +insert into t1 () values (),(),(); +explain select * +from t1 +where +(c1 in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) and c2=1) and +c3 in (1,2,3,4,5,6,7,8,9,10) and +c4 in (1,2,3,4,5,6,7,8,9,10) and +c5 in (1,2,3,4,5,6,7,8,9,10) and +c6 in (1,2,3,4); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index c1 c1 40 NULL 3 Using where; Using index +select +json_detailed(json_extract(trace, '$**.setup_range_conditions')) +from +information_schema.optimizer_trace; +json_detailed(json_extract(trace, '$**.setup_range_conditions')) +[ + [ + { + "enforce_sel_arg_weight_limit": + { + "index": "c1", + "old_weight": 74806, + "new_weight": 1776 + } + }, + { + "sel_arg_alloc_limit_hit": + { + "alloced_sel_args": 16001 + } + } + ] +] +drop table t1; +# # MDEV-31085: multi-update using view with optimizer trace enabled # SET SESSION optimizer_trace = 'enabled=on'; diff --git a/mysql-test/main/opt_trace.test b/mysql-test/main/opt_trace.test index 90f8ef38ead..45dd3e9c6a6 100644 --- a/mysql-test/main/opt_trace.test +++ b/mysql-test/main/opt_trace.test @@ -677,6 +677,39 @@ INSERT INTO t1 VALUES (0,0); SELECT a FROM t1 WHERE (a,b) in (SELECT @c,@d); DROP TABLE t1; + +--echo # +--echo # MDEV-30964: MAX_SEL_ARG memory exhaustion is not visible in the optimizer trace +--echo # +create table t1 ( + c1 int, + c2 int, + c3 int, + c4 int, + c5 int, + c6 int, + c7 int, + c8 int, + key(c1,c2,c3,c4,c5,c6,c7,c8) +); +insert into t1 () values (),(),(); + +explain select * +from t1 +where + (c1 in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) and c2=1) and + c3 in (1,2,3,4,5,6,7,8,9,10) and + c4 in (1,2,3,4,5,6,7,8,9,10) and + c5 in (1,2,3,4,5,6,7,8,9,10) and + c6 in (1,2,3,4); + +select + json_detailed(json_extract(trace, '$**.setup_range_conditions')) +from + information_schema.optimizer_trace; + +drop table t1; + --echo # --echo # MDEV-31085: multi-update using view with optimizer trace enabled --echo # @@ -751,6 +784,11 @@ select * from from t10 left join t11 on t11.col1=t10.col1 group by grp_id) T on T.grp_id=t1.b; +# Not sure how MDEV-27871 is related but this test uses this reason +# all over the place: +#enable after fix MDEV-27871 +--disable_view_protocol + select json_detailed(json_extract(trace, '$**.check_split_materialized')) as JS from information_schema.optimizer_trace; @@ -763,6 +801,7 @@ select ) as JS from information_schema.optimizer_trace; +--enable_view_protocol drop table t1,t2,t3,t10,t11; set optimizer_trace=DEFAULT; diff --git a/mysql-test/main/sp-anchor-row-type-table.result b/mysql-test/main/sp-anchor-row-type-table.result index c28d26304db..5e3b655a75b 100644 --- a/mysql-test/main/sp-anchor-row-type-table.result +++ b/mysql-test/main/sp-anchor-row-type-table.result @@ -814,3 +814,47 @@ t2 CREATE TABLE `t2` ( `text0` text DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci DROP TABLE t1; +# +# End of 10.3 tests +# +# +# Start of 10.4 tests +# +# +# MDEV-31250 ROW variables do not get assigned from subselects +# +CREATE TABLE t1 (a INT, b TEXT); +INSERT INTO t1 VALUES (1,'b1'); +BEGIN NOT ATOMIC +DECLARE r ROW TYPE OF t1; +SELECT * INTO r FROM t1 WHERE a=1; +SELECT r.a, r.b; +END; +$$ +r.a r.b +1 b1 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b TEXT); +INSERT INTO t1 VALUES (1,'b1'); +BEGIN NOT ATOMIC +DECLARE r ROW TYPE OF t1; +SET r=(SELECT * FROM t1 WHERE a=1); +SELECT r.a, r.b; +END; +$$ +r.a r.b +1 b1 +DROP TABLE t1; +CREATE TABLE t1 (a INT, b TEXT); +INSERT INTO t1 VALUES (1,'b1'); +BEGIN NOT ATOMIC +DECLARE r ROW TYPE OF t1 DEFAULT (SELECT * FROM t1 WHERE a=1); +SELECT r.a, r.b; +END; +$$ +r.a r.b +1 b1 +DROP TABLE t1; +# +# End of 10.4 tests +# diff --git a/mysql-test/main/sp-anchor-row-type-table.test b/mysql-test/main/sp-anchor-row-type-table.test index 3f04dc68586..213460ed38f 100644 --- a/mysql-test/main/sp-anchor-row-type-table.test +++ b/mysql-test/main/sp-anchor-row-type-table.test @@ -881,3 +881,58 @@ END; $$ DELIMITER ;$$ DROP TABLE t1; + +--echo # +--echo # End of 10.3 tests +--echo # + + +--echo # +--echo # Start of 10.4 tests +--echo # + +--echo # +--echo # MDEV-31250 ROW variables do not get assigned from subselects +--echo # + +CREATE TABLE t1 (a INT, b TEXT); +INSERT INTO t1 VALUES (1,'b1'); +DELIMITER $$; +BEGIN NOT ATOMIC + DECLARE r ROW TYPE OF t1; + SELECT * INTO r FROM t1 WHERE a=1; + SELECT r.a, r.b; +END; +$$ +DELIMITER ;$$ +DROP TABLE t1; + + +CREATE TABLE t1 (a INT, b TEXT); +INSERT INTO t1 VALUES (1,'b1'); +DELIMITER $$; +BEGIN NOT ATOMIC + DECLARE r ROW TYPE OF t1; + SET r=(SELECT * FROM t1 WHERE a=1); + SELECT r.a, r.b; +END; +$$ +DELIMITER ;$$ +DROP TABLE t1; + + +CREATE TABLE t1 (a INT, b TEXT); +INSERT INTO t1 VALUES (1,'b1'); +DELIMITER $$; +BEGIN NOT ATOMIC + DECLARE r ROW TYPE OF t1 DEFAULT (SELECT * FROM t1 WHERE a=1); + SELECT r.a, r.b; +END; +$$ +DELIMITER ;$$ +DROP TABLE t1; + + +--echo # +--echo # End of 10.4 tests +--echo # diff --git a/mysql-test/main/subselect4.result b/mysql-test/main/subselect4.result index d90a2d645b8..919a79e8b6c 100644 --- a/mysql-test/main/subselect4.result +++ b/mysql-test/main/subselect4.result @@ -2760,7 +2760,7 @@ from t2 join t1 on ('i','w') not in (select t1.v1,t4.v2 from t4,t1,t3 where t3.v2 = t1.v1) LIMIT ROWS EXAMINED 500; 1 Warnings: -Warning 1931 Query execution was interrupted. The query examined at least 3020 rows, which exceeds LIMIT ROWS EXAMINED (500). The query result may be incomplete +Warning 1931 Query execution was interrupted. The query exceeded LIMIT ROWS EXAMINED 500. The query result may be incomplete SET join_cache_level= @save_join_cache_level; DROP TABLE t1,t2,t3,t4; # diff --git a/mysql-test/main/user_var.result b/mysql-test/main/user_var.result index 36c518d00e9..ab9436af02a 100644 --- a/mysql-test/main/user_var.result +++ b/mysql-test/main/user_var.result @@ -567,7 +567,7 @@ End of 5.5 tests # # Check that used memory extends if we set a variable # -set @var= repeat('a',20000); +set @var= repeat('a',30000); 1 explain select @a:=max(seq) from seq_1_to_1000000; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/main/user_var.test b/mysql-test/main/user_var.test index dad50c439b6..42c7c5940d1 100644 --- a/mysql-test/main/user_var.test +++ b/mysql-test/main/user_var.test @@ -493,7 +493,7 @@ DROP TABLE t1; --disable_service_connection # Execute twice so number stablizes a bit let $tmp= `select memory_used from information_schema.processlist`; -set @var= repeat('a',20000); +set @var= repeat('a',30000); let $tmp2= `select memory_used from information_schema.processlist`; --disable_query_log --disable_column_names diff --git a/mysql-test/std_data/wsrep_notify_ssl.sh b/mysql-test/std_data/wsrep_notify_ssl.sh index ce5e3f8c695..12dc939e689 100755 --- a/mysql-test/std_data/wsrep_notify_ssl.sh +++ b/mysql-test/std_data/wsrep_notify_ssl.sh @@ -12,7 +12,7 @@ PSWD='' # If these parameters are not set, then the values # passed by the server are taken: # -HOST="127.0.0.1" +HOST="::1" PORT=$NODE_MYPORT_1 # # Edit parameters below to specify SSL parameters: diff --git a/mysql-test/suite/galera/disabled.def b/mysql-test/suite/galera/disabled.def index 0c98133ab5f..f56e5421fd2 100644 --- a/mysql-test/suite/galera/disabled.def +++ b/mysql-test/suite/galera/disabled.def @@ -13,14 +13,11 @@ galera_as_slave_ctas : MDEV-28378 timeout galera_pc_recovery : MDEV-25199 cluster fails to start up galera_sst_encrypted : MDEV-29876 Galera test failure on galera_sst_encrypted -MW-284 : MDEV-29861 Galera test case hangs galera_binlog_checksum : MDEV-29861 Galera test case hangs -galera_var_notify_ssl_ipv6 : MDEV-29861 Galera test case hangs -galera_var_notify_cmd: MDEV-29861 Galera test case hangs galera_var_node_address : MDEV-20485 Galera test failure MDEV-26575 : MDEV-29878 Galera test failure on MDEV-26575 galera_bf_abort_shutdown : MDEV-29918 Assertion failure on galera_bf_abort_shutdown -galera_wan : [ERROR] WSREP: /home/buildbot/buildbot/build/gcs/src/gcs_state_msg.cpp:gcs_state_msg_get_quorum():947: Failed to establish quorum. galera_var_ignore_apply_errors : 28: "Server did not transition to READY state" +versioning_trx_id : MDEV-18590: galera.versioning_trx_id: Test failure: mysqltest: Result content mismatch MDEV-27713 : test is using get_lock(), which is now rejected in cluster galera_bf_abort_group_commit : MDEV-30855 PR to remove the test exists diff --git a/mysql-test/suite/galera/r/GAL-419.result b/mysql-test/suite/galera/r/GAL-419.result index 74508a1e75e..c70c9ee3263 100644 --- a/mysql-test/suite/galera/r/GAL-419.result +++ b/mysql-test/suite/galera/r/GAL-419.result @@ -2,6 +2,9 @@ connection node_2; connection node_1; call mtr.add_suppression("WSREP: It may not be safe to bootstrap the cluster from this node.*"); call mtr.add_suppression("Aborting"); +call mtr.add_suppression("Plugin \'wsrep\' init function returned error."); +call mtr.add_suppression("Plugin \'wsrep\' registration as a STORAGE ENGINE failed."); +call mtr.add_suppression("Failed to initialize plugins."); connection node_2; SET SESSION wsrep_sync_wait = 0; Killing server ... diff --git a/mysql-test/suite/galera/r/MDEV-18832.result b/mysql-test/suite/galera/r/MDEV-18832.result index 2e0872b9f2e..676ee4bf337 100644 --- a/mysql-test/suite/galera/r/MDEV-18832.result +++ b/mysql-test/suite/galera/r/MDEV-18832.result @@ -1,17 +1,14 @@ connection node_2; connection node_1; -CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1; +CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1 NOCACHE; CREATE TABLE t1 (Id int(11) NOT NULL, PRIMARY KEY (Id)); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); DROP SEQUENCE Seq1_1; -CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1; +CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1 NOCACHE; INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); ERROR 23000: Duplicate entry '1' for key 'PRIMARY' DROP SEQUENCE Seq1_1; DROP TABLE t1; -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); -connection node_2; -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); diff --git a/mysql-test/suite/galera/r/MDEV-21479.result b/mysql-test/suite/galera/r/MDEV-21479.result new file mode 100644 index 00000000000..7d1220a038b --- /dev/null +++ b/mysql-test/suite/galera/r/MDEV-21479.result @@ -0,0 +1,95 @@ +connection node_2; +connection node_1; +# Lets first see that we can access wsrep schema tables +# Node1 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +EXPECT_0 +0 +SELECT COUNT(*) AS EXPECT_1 from mysql.wsrep_cluster; +EXPECT_1 +1 +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; +EXPECT_2 +2 +connection node_2; +# Node2 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +EXPECT_0 +0 +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +EXPECT_1 +1 +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; +EXPECT_2 +2 +connection node_1; +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; +SET GLOBAL wsrep_provider_options = 'pc.weight=2'; +connection node_2; +# Desync and disconnect node_2 +SET @@global.wsrep_desync = 1; +SET SESSION wsrep_dirty_reads=1; +SET SESSION wsrep_sync_wait=0; +SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; +SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +VARIABLE_VALUE +non-Primary +connection node_1; +# Waiting until node_2 is not part of cluster anymore +# Verify that we can access wsrep schema tables +# Node1 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +EXPECT_0 +0 +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +EXPECT_1 +1 +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster_members; +EXPECT_1 +1 +connection node_2; +# Node2 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +EXPECT_0 +0 +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +EXPECT_1 +1 +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; +EXPECT_2 +2 +connection node_2; +# Reconnect node_2 back to cluster +SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0'; +SET wsrep_dirty_reads=0; +SHOW STATUS LIKE 'wsrep_desync_count'; +Variable_name Value +wsrep_desync_count 0 +SET @@global.wsrep_desync = 0; +CALL mtr.add_suppression("WSREP: Protocol violation. JOIN message sender (.*) is not in state transfer \\(SYNCED\\). Message ignored."); +connection node_1; +# Wait until both nodes are back to cluster +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=false'; +SET GLOBAL wsrep_provider_options = 'pc.weight=1'; +# Verify that we can access wsrep schema tables +# Node1 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +EXPECT_0 +0 +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +EXPECT_1 +1 +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; +EXPECT_2 +2 +connection node_2; +# Node2 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +EXPECT_0 +0 +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +EXPECT_1 +1 +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; +EXPECT_2 +2 diff --git a/mysql-test/suite/galera/r/MDEV-27713.result b/mysql-test/suite/galera/r/MDEV-27713.result deleted file mode 100644 index 14575cb484d..00000000000 --- a/mysql-test/suite/galera/r/MDEV-27713.result +++ /dev/null @@ -1,46 +0,0 @@ -connection node_2; -connection node_1; -CREATE TABLE t1 ( -f1 INT, -f2 VARCHAR(255) PRIMARY KEY -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -INSERT INTO t1 VALUES(1, 'abc'); -connection node_1; -SET AUTOCOMMIT=OFF; -START TRANSACTION; -INSERT INTO t1 VALUES (2,'def'); -connection node_2; -SET GLOBAL event_scheduler=ON; -CREATE PROCEDURE update_table() -BEGIN -SET AUTOCOMMIT=OFF; -DO GET_LOCK('local_lock', 0); -SET DEBUG_SYNC = 'innodb_row_update_for_mysql_begin SIGNAL blocked WAIT_FOR continue'; -UPDATE t1 SET f2 = 'jkl' WHERE f1 != 2; -DO RELEASE_LOCK('local_lock'); -END| -CREATE DEFINER=current_user -EVENT event -ON SCHEDULE AT CURRENT_TIMESTAMP -ON COMPLETION PRESERVE -ENABLE -DO CALL update_table(); -connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2; -SET DEBUG_SYNC = 'now WAIT_FOR blocked'; -connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2; -SET GLOBAL debug_dbug = "+d,sync.wsrep_apply_cb"; -connection node_1; -COMMIT; -connection node_2b; -SET DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached"; -SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; -connection node_2a; -SET DEBUG_SYNC = 'now SIGNAL continue'; -connection node_2; -SET GLOBAL event_scheduler=default; -DROP PROCEDURE update_table; -DROP EVENT event; -SET DEBUG_SYNC='reset'; -SET GLOBAL debug_dbug = DEFAULT; -connection node_1; -DROP TABLE t1; diff --git a/mysql-test/suite/galera/r/MDEV-27862.result b/mysql-test/suite/galera/r/MDEV-27862.result index 25b7bc6cfd2..d1aa9e2ca91 100644 --- a/mysql-test/suite/galera/r/MDEV-27862.result +++ b/mysql-test/suite/galera/r/MDEV-27862.result @@ -1,10 +1,5 @@ connection node_2; connection node_1; -CREATE SEQUENCE seq_nocache ENGINE=InnoDB; -DROP SEQUENCE seq_nocache; -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); -connection node_2; -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); connection node_1; CREATE SEQUENCE seq NOCACHE ENGINE=InnoDB; SELECT NEXTVAL(seq) = 1; diff --git a/mysql-test/suite/galera/r/MW-284.result b/mysql-test/suite/galera/r/MW-284.result index 3df126de728..6ca1f16db6b 100644 --- a/mysql-test/suite/galera/r/MW-284.result +++ b/mysql-test/suite/galera/r/MW-284.result @@ -13,6 +13,7 @@ connection node_3; SELECT @@wsrep_on; @@wsrep_on 0 +call mtr.add_suppression("Error reading packet from server: WSREP has not yet prepared node for application use (server_errno=1047)"); START SLAVE; include/wait_for_slave_param.inc [Slave_IO_Running] connection node_1; diff --git a/mysql-test/suite/galera/r/galera_gcache_recover_manytrx.result b/mysql-test/suite/galera/r/galera_gcache_recover_manytrx.result index 9b1e8105c1c..c853d5b79f6 100644 --- a/mysql-test/suite/galera/r/galera_gcache_recover_manytrx.result +++ b/mysql-test/suite/galera/r/galera_gcache_recover_manytrx.result @@ -94,7 +94,7 @@ CALL insert_1m ();; connection node_1_insert_10m; CALL insert_10m ();; connection node_2; -call mtr.add_suppression("Error in Log_event::read_log_event():.*"); +call mtr.add_suppression("Error in Log_event::read_log_event\(\):.*"); SET SESSION wsrep_sync_wait = 0; Killing server ... connection node_1; @@ -131,6 +131,9 @@ DROP PROCEDURE update_simple; DROP PROCEDURE insert_1k; DROP PROCEDURE insert_1m; connection node_1; -call mtr.add_suppression("Error in Log_event::read_log_event():.*"); +call mtr.add_suppression("Error in Log_event::read_log_event\(\):.*"); CALL mtr.add_suppression("conflict state 7 after post commit"); CALL mtr.add_suppression("Skipped GCache ring buffer recovery"); +connection node_2; +call mtr.add_suppression("Error in Log_event::read_log_event\(\):.*"); +CALL mtr.add_suppression("Skipped GCache ring buffer recovery"); diff --git a/mysql-test/suite/galera/r/galera_log_bin.result b/mysql-test/suite/galera/r/galera_log_bin.result index df7ace9d95a..31f953bfd36 100644 --- a/mysql-test/suite/galera/r/galera_log_bin.result +++ b/mysql-test/suite/galera/r/galera_log_bin.result @@ -1,10 +1,10 @@ connection node_2; connection node_1; -connection node_1; +connection node_2; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; -connection node_2; +connection node_1; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; diff --git a/mysql-test/suite/galera/r/galera_log_bin_ext.result b/mysql-test/suite/galera/r/galera_log_bin_ext.result index b110cb4dba3..9d7ea473241 100644 --- a/mysql-test/suite/galera/r/galera_log_bin_ext.result +++ b/mysql-test/suite/galera/r/galera_log_bin_ext.result @@ -2,11 +2,11 @@ connection node_2; connection node_1; connection node_1; connection node_2; -connection node_1; +connection node_2; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; -connection node_2; +connection node_1; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; diff --git a/mysql-test/suite/galera/r/galera_log_bin_ext_mariabackup.result b/mysql-test/suite/galera/r/galera_log_bin_ext_mariabackup.result index b110cb4dba3..9d7ea473241 100644 --- a/mysql-test/suite/galera/r/galera_log_bin_ext_mariabackup.result +++ b/mysql-test/suite/galera/r/galera_log_bin_ext_mariabackup.result @@ -2,11 +2,11 @@ connection node_2; connection node_1; connection node_1; connection node_2; -connection node_1; +connection node_2; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; -connection node_2; +connection node_1; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; diff --git a/mysql-test/suite/galera/r/galera_log_bin_opt.result b/mysql-test/suite/galera/r/galera_log_bin_opt.result index df7ace9d95a..31f953bfd36 100644 --- a/mysql-test/suite/galera/r/galera_log_bin_opt.result +++ b/mysql-test/suite/galera/r/galera_log_bin_opt.result @@ -1,10 +1,10 @@ connection node_2; connection node_1; -connection node_1; +connection node_2; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; -connection node_2; +connection node_1; set global wsrep_on=OFF; reset master; set global wsrep_on=ON; diff --git a/mysql-test/suite/galera/r/galera_sequences.result b/mysql-test/suite/galera/r/galera_sequences.result index da669e6774e..e696a707cdf 100644 --- a/mysql-test/suite/galera/r/galera_sequences.result +++ b/mysql-test/suite/galera/r/galera_sequences.result @@ -1,11 +1,6 @@ connection node_2; connection node_1; connection node_1; -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); -CALL mtr.add_suppression("WSREP: CREATE TABLE isolation failure"); -connection node_2; -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); -connection node_1; CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 1000000 increment by 0 cache 1000 nocycle ENGINE=InnoDB; SHOW CREATE SEQUENCE seq; Table Create Table @@ -15,14 +10,14 @@ SHOW CREATE SEQUENCE seq; Table Create Table seq CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 1000000 increment by 0 cache 1000 nocycle ENGINE=InnoDB connection node_1; -ALTER SEQUENCE seq MAXVALUE = 10000; +ALTER SEQUENCE seq MAXVALUE = 10000 NOCACHE; SHOW CREATE SEQUENCE seq; Table Create Table -seq CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 10000 increment by 0 cache 1000 nocycle ENGINE=InnoDB +seq CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 10000 increment by 0 nocache nocycle ENGINE=InnoDB connection node_2; SHOW CREATE SEQUENCE seq; Table Create Table -seq CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 10000 increment by 0 cache 1000 nocycle ENGINE=InnoDB +seq CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 10000 increment by 0 nocache nocycle ENGINE=InnoDB connection node_1; DROP SEQUENCE seq; SHOW CREATE SEQUENCE seq; @@ -31,25 +26,26 @@ connection node_2; SHOW CREATE SEQUENCE seq; ERROR 42S02: Table 'test.seq' doesn't exist connection node_1; -CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1; +CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1 NOCACHE; select NEXT VALUE FOR Seq1_1; NEXT VALUE FOR Seq1_1 1 alter table Seq1_1 engine=myisam; +ERROR 42000: This version of MariaDB doesn't yet support 'Galera cluster does support only InnoDB sequences' select NEXT VALUE FOR Seq1_1; NEXT VALUE FOR Seq1_1 -1001 +2 alter table Seq1_1 engine=innodb; select NEXT VALUE FOR Seq1_1; NEXT VALUE FOR Seq1_1 -2001 +3 connection node_2; SHOW CREATE SEQUENCE Seq1_1; Table Create Table -Seq1_1 CREATE SEQUENCE `Seq1_1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB +Seq1_1 CREATE SEQUENCE `Seq1_1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 nocache nocycle ENGINE=InnoDB select NEXT VALUE FOR Seq1_1; NEXT VALUE FOR Seq1_1 -3001 +4 connection node_1; DROP SEQUENCE Seq1_1; connection node_1; @@ -83,27 +79,192 @@ SET SESSION autocommit=1; DROP SEQUENCE seq1; DROP SEQUENCE seq2; DROP TABLE t2; +connection node_2; SET SESSION AUTOCOMMIT=0; SET SESSION wsrep_OSU_method='RSU'; CREATE TABLE t1(c1 VARCHAR(10)); -INSERT INTO t1 (c1) VALUES(''); create temporary sequence sq1 NOCACHE engine=innodb; create sequence sq2 NOCACHE engine=innodb; COMMIT; +SET SESSION wsrep_OSU_method='TOI'; SHOW CREATE SEQUENCE sq1; Table Create Table sq1 CREATE SEQUENCE `sq1` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 nocache nocycle ENGINE=InnoDB SHOW CREATE SEQUENCE sq2; Table Create Table sq2 CREATE SEQUENCE `sq2` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 nocache nocycle ENGINE=InnoDB -connection node_2; +connection node_1; SHOW CREATE SEQUENCE sq1; ERROR 42S02: Table 'test.sq1' doesn't exist SHOW CREATE SEQUENCE sq2; ERROR 42S02: Table 'test.sq2' doesn't exist -connection node_1; +connection node_2; SET SESSION AUTOCOMMIT=1; DROP TABLE t1; DROP SEQUENCE sq1; DROP SEQUENCE sq2; -SET SESSION wsrep_OSU_method='TOI'; +connection node_1; +CREATE TABLE t (f INT) engine=innodb; +LOCK TABLE t WRITE; +CREATE OR REPLACE SEQUENCE t MAXVALUE=13 INCREMENT BY 1 NOCACHE engine=innodb; +Warnings: +Warning 138 Galera cluster does not support LOCK TABLE on SEQUENCES. Lock is released. +LOCK TABLE t WRITE; +ERROR 42000: This version of MariaDB doesn't yet support 'LOCK TABLE on SEQUENCES in Galera cluster' +INSERT INTO t VALUES (0,0,1,1,1,0,0,0); +SELECT * from t; +next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count +0 0 1 1 1 0 0 0 +SELECT NEXTVAL(t); +NEXTVAL(t) +0 +UNLOCK TABLES; +DROP TABLE t; +CREATE SEQUENCE t INCREMENT BY 0 NOCACHE ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), +b int) engine=innodb; +INSERT INTO t1(b) VALUES (1),(2),(3); +SELECT * FROM t1; +a b +1 1 +3 2 +5 3 +connection node_2; +SELECT * FROM t1; +a b +1 1 +3 2 +5 3 +INSERT INTO t1(b) VALUES (4),(5),(6); +SELECT * FROM t1; +a b +1 1 +3 2 +5 3 +8 4 +10 5 +12 6 +connection node_1; +SELECT * FROM t1; +a b +1 1 +3 2 +5 3 +8 4 +10 5 +12 6 +DROP TABLE t1; +DROP SEQUENCE t; +CREATE SEQUENCE t ENGINE=MYISAM; +ERROR 42000: This version of MariaDB doesn't yet support 'Galera cluster does support only InnoDB sequences' +CREATE SEQUENCE t INCREMENT BY 1 NOCACHE ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; +connection node_2; +# Wait DDL to replicate +connection node_1; +SELECT @@auto_increment_increment; +@@auto_increment_increment +2 +SELECT @@auto_increment_offset; +@@auto_increment_offset +1 +SET SESSION wsrep_sync_wait=0; +connection node_2; +SELECT @@auto_increment_increment; +@@auto_increment_increment +2 +SELECT @@auto_increment_offset; +@@auto_increment_offset +2 +SET SESSION wsrep_sync_wait=0; +connection node_1; +connection node_2; +connection node_1; +DROP SEQUENCE t; +DROP TABLE t1; +CREATE SEQUENCE t INCREMENT BY 0 NOCACHE ENGINE=INNODB; +DROP SEQUENCE t; +CREATE SEQUENCE t INCREMENT BY 1 CACHE=20 ENGINE=INNODB; +ERROR 42000: This version of MariaDB doesn't yet support 'In Galera if you use CACHE you should set INCREMENT BY 0 to behave correctly in a cluster' +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; +connection node_2; +# Wait DDL to replicate +connection node_1; +SET SESSION wsrep_sync_wait=0; +connection node_2; +SET SESSION wsrep_sync_wait=0; +connection node_1; +connection node_2; +connection node_1; +DROP SEQUENCE t; +DROP TABLE t1; +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +ALTER TABLE t ENGINE=MYISAM; +ERROR 42000: This version of MariaDB doesn't yet support 'Galera cluster does support only InnoDB sequences' +ALTER SEQUENCE t INCREMENT BY 1 CACHE=10; +ERROR 42000: This version of MariaDB doesn't yet support 'In Galera if you use CACHE you should set INCREMENT BY 0 to behave correctly in a cluster' +ALTER SEQUENCE t INCREMENT BY 1 NOCACHE; +ALTER SEQUENCE t INCREMENT BY 0 NOCACHE; +ALTER SEQUENCE t INCREMENT BY 0 CACHE=10; +DROP SEQUENCE t; +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; +BEGIN; +INSERT INTO t1(b) VALUES (1); +INSERT INTO t1(b) VALUES (2); +INSERT INTO t1(b) VALUES (3); +INSERT INTO t1(b) VALUES (4); +INSERT INTO t1(a,b) VALUES (2,2); +INSERT INTO t1(a,b) VALUES (3,2); +ERROR 23000: Duplicate entry '3' for key 'PRIMARY' +ROLLBACK; +SELECT * FROM t1; +a b +SELECT NEXTVAL(t); +NEXTVAL(t) +9 +connection node_2; +SELECT * FROM t1; +a b +SELECT NEXTVAL(t); +NEXTVAL(t) +2 +connection node_1; +DROP TABLE t1; +DROP SEQUENCE t; +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; +BEGIN; +INSERT INTO t1(b) VALUES (1); +INSERT INTO t1(b) VALUES (2); +INSERT INTO t1(b) VALUES (3); +INSERT INTO t1(b) VALUES (4); +INSERT INTO t1(a,b) VALUES (2,2); +INSERT INTO t1(a,b) VALUES (3,2); +ERROR 23000: Duplicate entry '3' for key 'PRIMARY' +COMMIT; +SELECT * FROM t1; +a b +1 1 +2 2 +3 2 +5 3 +7 4 +SELECT NEXTVAL(t); +NEXTVAL(t) +9 +connection node_2; +SELECT * FROM t1; +a b +1 1 +2 2 +3 2 +5 3 +7 4 +SELECT NEXTVAL(t); +NEXTVAL(t) +42 +connection node_1; +DROP TABLE t1; +DROP SEQUENCE t; diff --git a/mysql-test/suite/galera/r/galera_temporary_sequences.result b/mysql-test/suite/galera/r/galera_temporary_sequences.result new file mode 100644 index 00000000000..af80551c40b --- /dev/null +++ b/mysql-test/suite/galera/r/galera_temporary_sequences.result @@ -0,0 +1,46 @@ +connection node_2; +connection node_1; +connection node_2; +SET AUTOCOMMIT=0; +SET SESSION wsrep_OSU_method='RSU'; +CREATE TABLE t (i int primary key, j int); +CREATE TEMPORARY SEQUENCE seq2 NOCACHE ENGINE=InnoDB; +COMMIT; +SET SESSION wsrep_OSU_method='RSU'; +CREATE SEQUENCE seq1 NOCACHE ENGINE=InnoDB; +SET SESSION wsrep_OSU_method='TOI'; +DROP TABLE t; +DROP SEQUENCE seq2; +DROP SEQUENCE seq1; +connection node_1; +CREATE TABLE t (i int primary key, j int) ENGINE=InnoDB; +SET AUTOCOMMIT=0; +INSERT INTO t VALUES (3,0); +CREATE TEMPORARY SEQUENCE seq1 NOCACHE ENGINE=InnoDB; +COMMIT; +INSERT INTO t VALUES (4,0); +CREATE SEQUENCE seq2 NOCACHE ENGINE=InnoDB; +commit; +connection node_2; +SELECT * FROM t; +i j +3 0 +4 0 +SHOW CREATE TABLE seq1; +ERROR 42S02: Table 'test.seq1' doesn't exist +SHOW CREATE TABLE seq2; +Table Create Table +seq2 CREATE TABLE `seq2` ( + `next_not_cached_value` bigint(21) NOT NULL, + `minimum_value` bigint(21) NOT NULL, + `maximum_value` bigint(21) NOT NULL, + `start_value` bigint(21) NOT NULL COMMENT 'start value when sequences is created or value if RESTART is used', + `increment` bigint(21) NOT NULL COMMENT 'increment value', + `cache_size` bigint(21) unsigned NOT NULL, + `cycle_option` tinyint(1) unsigned NOT NULL COMMENT '0 if no cycles are allowed, 1 if the sequence should begin a new cycle when maximum_value is passed', + `cycle_count` bigint(21) NOT NULL COMMENT 'How many cycles have been done' +) ENGINE=InnoDB SEQUENCE=1 +connection node_1; +DROP TABLE t; +DROP SEQUENCE seq1; +DROP SEQUENCE seq2; diff --git a/mysql-test/suite/galera/r/galera_vote_rejoin_ddl.result b/mysql-test/suite/galera/r/galera_vote_rejoin_ddl.result index 6ad7ac75314..c6b3d8fa554 100644 --- a/mysql-test/suite/galera/r/galera_vote_rejoin_ddl.result +++ b/mysql-test/suite/galera/r/galera_vote_rejoin_ddl.result @@ -3,10 +3,14 @@ connection node_1; connection node_1; connection node_2; connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3; +connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4; +connection node_1; +connection node_2; +connection node_3; +connection node_4; connection node_3; SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1'; connection node_1; -connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4; connection node_4; SET SESSION wsrep_on=OFF; CREATE TABLE t1 (f1 INTEGER); diff --git a/mysql-test/suite/galera/r/mdev-28433.result b/mysql-test/suite/galera/r/mdev-28433.result new file mode 100644 index 00000000000..c2dde6481f4 --- /dev/null +++ b/mysql-test/suite/galera/r/mdev-28433.result @@ -0,0 +1,25 @@ +connection node_2; +connection node_1; +connection node_1; +connection node_2; +connection node_2; +SET @@global.wsrep_sst_donor = NULL; +ERROR 42000: Variable 'wsrep_sst_donor' can't be set to the value of 'NULL' +SET @@global.wsrep_cluster_address='NULL'; +SET SESSION wsrep_sync_wait=0; +SELECT @@wsrep_sst_donor; +@@wsrep_sst_donor + +SELECT @@wsrep_cluster_address; +@@wsrep_cluster_address +NULL +SHOW STATUS LIKE 'wsrep_ready'; +Variable_name Value +wsrep_ready OFF +SHOW STATUS LIKE 'wsrep_cluster_status'; +Variable_name Value +wsrep_cluster_status Disconnected +call mtr.add_suppression("WSREP: .*Invalid backend URI.*"); +call mtr.add_suppression("WSREP: gcs connect failed: Invalid argument"); +disconnect node_2; +disconnect node_1; diff --git a/mysql-test/suite/galera/r/mdev-30013.result b/mysql-test/suite/galera/r/mdev-30013.result new file mode 100644 index 00000000000..86016b09ca6 --- /dev/null +++ b/mysql-test/suite/galera/r/mdev-30013.result @@ -0,0 +1,17 @@ +connection node_2; +connection node_1; +INSTALL PLUGIN ARCHIVE SONAME 'ha_archive.so'; +CREATE TABLE t (a CHAR(1)) ENGINE=ARCHIVE; +SHOW CREATE TABLE t; +Table Create Table +t CREATE TABLE `t` ( + `a` char(1) DEFAULT NULL +) ENGINE=ARCHIVE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +INSERT INTO t VALUES ('A'); +UNINSTALL SONAME 'ha_archive'; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown +ALTER TABLE t CHANGE COLUMN a a CHAR(2); +INSERT INTO t (a) VALUES ('AB'); +ERROR 42000: Unknown storage engine 'ARCHIVE' +DROP TABLE t; diff --git a/mysql-test/suite/galera/t/GAL-419.test b/mysql-test/suite/galera/t/GAL-419.test index d304b01ed5e..60c34f209eb 100644 --- a/mysql-test/suite/galera/t/GAL-419.test +++ b/mysql-test/suite/galera/t/GAL-419.test @@ -7,6 +7,9 @@ call mtr.add_suppression("WSREP: It may not be safe to bootstrap the cluster from this node.*"); call mtr.add_suppression("Aborting"); +call mtr.add_suppression("Plugin \'wsrep\' init function returned error."); +call mtr.add_suppression("Plugin \'wsrep\' registration as a STORAGE ENGINE failed."); +call mtr.add_suppression("Failed to initialize plugins."); --connection node_2 SET SESSION wsrep_sync_wait = 0; diff --git a/mysql-test/suite/galera/t/MDEV-18832.test b/mysql-test/suite/galera/t/MDEV-18832.test index ba93761435a..d60be151142 100644 --- a/mysql-test/suite/galera/t/MDEV-18832.test +++ b/mysql-test/suite/galera/t/MDEV-18832.test @@ -1,23 +1,15 @@ --source include/galera_cluster.inc --source include/have_innodb.inc -CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1; +CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1 NOCACHE; CREATE TABLE t1 (Id int(11) NOT NULL, PRIMARY KEY (Id)); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); DROP SEQUENCE Seq1_1; -CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1; +CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1 NOCACHE; --error ER_DUP_ENTRY INSERT INTO t1 VALUES (NEXT VALUE FOR Seq1_1); DROP SEQUENCE Seq1_1; DROP TABLE t1; - -# Supress warning for SEQUENCES that are declared without `NOCACHE` introduced with MDEV-27862 - -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); - ---connection node_2 - -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); diff --git a/mysql-test/suite/galera/t/MDEV-21479.test b/mysql-test/suite/galera/t/MDEV-21479.test new file mode 100644 index 00000000000..86de97ea77c --- /dev/null +++ b/mysql-test/suite/galera/t/MDEV-21479.test @@ -0,0 +1,99 @@ +# +# MDEV-21479 : Galera 4 unable to query cluster state if not primary component +# +--source include/galera_cluster.inc +--source include/have_innodb.inc + + +--echo # Lets first see that we can access wsrep schema tables +--echo # Node1 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +SELECT COUNT(*) AS EXPECT_1 from mysql.wsrep_cluster; +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; + +--connection node_2 +--echo # Node2 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; + +--connection node_1 +# Make node 1 tolerate split-brain +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=true'; +SET GLOBAL wsrep_provider_options = 'pc.weight=2'; + +# Desync and disconnect node 2 from the PC: +--connection node_2 +--echo # Desync and disconnect node_2 +SET @@global.wsrep_desync = 1; +SET SESSION wsrep_dirty_reads=1; +SET SESSION wsrep_sync_wait=0; +SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; +--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc +SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; + +# Wait until node 2 disappears from the PC: +--connection node_1 +--echo # Waiting until node_2 is not part of cluster anymore +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc + +--echo # Verify that we can access wsrep schema tables +--echo # Node1 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster_members; + +--connection node_2 +# +# Here node2 remembers old configuration even when we are non-Primary +# +--echo # Node2 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; + +# Reconnect node 2 to the PC: +--connection node_2 +--echo # Reconnect node_2 back to cluster +SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0'; +SET wsrep_dirty_reads=0; +--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 'ON' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_ready'; +--source include/wait_condition.inc + +# Must return 0: +SHOW STATUS LIKE 'wsrep_desync_count'; + +# Resync node_2, should pass: +SET @@global.wsrep_desync = 0; + +--let $wait_condition = SELECT VARIABLE_VALUE = 'Synced' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_comment'; +--source include/wait_condition.inc + +CALL mtr.add_suppression("WSREP: Protocol violation. JOIN message sender (.*) is not in state transfer \\(SYNCED\\). Message ignored."); + +--connection node_1 +--echo # Wait until both nodes are back to cluster +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'; +--source include/wait_condition.inc +SET GLOBAL wsrep_provider_options = 'pc.ignore_sb=false'; +SET GLOBAL wsrep_provider_options = 'pc.weight=1'; + +--echo # Verify that we can access wsrep schema tables +--echo # Node1 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; + +--connection node_2 +--echo # Node2 +SELECT COUNT(*) AS EXPECT_0 FROM mysql.wsrep_streaming_log; +SELECT COUNT(*) AS EXPECT_1 FROM mysql.wsrep_cluster; +SELECT COUNT(*) AS EXPECT_2 FROM mysql.wsrep_cluster_members; diff --git a/mysql-test/suite/galera/t/MDEV-27713.test b/mysql-test/suite/galera/t/MDEV-27713.test deleted file mode 100644 index 4bfcd7e3d50..00000000000 --- a/mysql-test/suite/galera/t/MDEV-27713.test +++ /dev/null @@ -1,67 +0,0 @@ ---source include/galera_cluster.inc ---source include/have_innodb.inc ---source include/have_debug.inc ---source include/have_debug_sync.inc ---source include/big_test.inc - -CREATE TABLE t1 ( - f1 INT, - f2 VARCHAR(255) PRIMARY KEY -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO t1 VALUES(1, 'abc'); - ---connection node_1 -SET AUTOCOMMIT=OFF; -START TRANSACTION; -INSERT INTO t1 VALUES (2,'def'); - ---connection node_2 - -SET GLOBAL event_scheduler=ON; - -DELIMITER |; -CREATE PROCEDURE update_table() -BEGIN - SET AUTOCOMMIT=OFF; - DO GET_LOCK('local_lock', 0); - SET DEBUG_SYNC = 'innodb_row_update_for_mysql_begin SIGNAL blocked WAIT_FOR continue'; - UPDATE t1 SET f2 = 'jkl' WHERE f1 != 2; - DO RELEASE_LOCK('local_lock'); -END| -DELIMITER ;| - -CREATE DEFINER=current_user - EVENT event - ON SCHEDULE AT CURRENT_TIMESTAMP - ON COMPLETION PRESERVE - ENABLE - DO CALL update_table(); - ---connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2 -SET DEBUG_SYNC = 'now WAIT_FOR blocked'; - -# Applier control thread ---connect node_2b, 127.0.0.1, root, , test, $NODE_MYPORT_2 -SET GLOBAL debug_dbug = "+d,sync.wsrep_apply_cb"; - ---connection node_1 -COMMIT; - -# Applier control thread ---connection node_2b -SET DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached"; -SET DEBUG_SYNC = "now SIGNAL signal.wsrep_apply_cb"; - ---connection node_2a -SET DEBUG_SYNC = 'now SIGNAL continue'; - ---connection node_2 -SET GLOBAL event_scheduler=default; -DROP PROCEDURE update_table; -DROP EVENT event; -SET DEBUG_SYNC='reset'; -SET GLOBAL debug_dbug = DEFAULT; - ---connection node_1 -DROP TABLE t1; diff --git a/mysql-test/suite/galera/t/MDEV-27862.test b/mysql-test/suite/galera/t/MDEV-27862.test index 89d3465b91f..d23ce95d47e 100644 --- a/mysql-test/suite/galera/t/MDEV-27862.test +++ b/mysql-test/suite/galera/t/MDEV-27862.test @@ -1,17 +1,6 @@ --source include/galera_cluster.inc --source include/have_innodb.inc -# Report WARNING when SEQUENCE is created without `NOCACHE` - -CREATE SEQUENCE seq_nocache ENGINE=InnoDB; -DROP SEQUENCE seq_nocache; - -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); - ---connection node_2 - -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); - # NEXTVAL --connection node_1 diff --git a/mysql-test/suite/galera/t/MW-284.test b/mysql-test/suite/galera/t/MW-284.test index 99fe305d859..d7da1dcd214 100644 --- a/mysql-test/suite/galera/t/MW-284.test +++ b/mysql-test/suite/galera/t/MW-284.test @@ -29,6 +29,7 @@ SET global wsrep_sync_wait=0; --connection node_3 SELECT @@wsrep_on; --sleep 1 +call mtr.add_suppression("Error reading packet from server: WSREP has not yet prepared node for application use (server_errno=1047)"); START SLAVE; --let $slave_param= Slave_IO_Running --let $slave_param_value= Connecting diff --git a/mysql-test/suite/galera/t/galera_bf_abort_group_commit.cnf b/mysql-test/suite/galera/t/galera_bf_abort_group_commit.cnf deleted file mode 100644 index 612418c17c0..00000000000 --- a/mysql-test/suite/galera/t/galera_bf_abort_group_commit.cnf +++ /dev/null @@ -1,15 +0,0 @@ -!include ../galera_2nodes.cnf - -# We set repl.commit_order=1 in order to disable provider commit -# ordering. - -[mysqld.1] -log-bin -log-slave-updates -wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.1.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;repl.commit_order=1' - -[mysqld.2] - -log-bin -log-slave-updates -wsrep_provider_options='repl.causal_read_timeout=PT90S;base_port=@mysqld.2.#galera_port;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;repl.commit_order=1' \ No newline at end of file diff --git a/mysql-test/suite/galera/t/galera_bf_abort_group_commit.test b/mysql-test/suite/galera/t/galera_bf_abort_group_commit.test deleted file mode 100644 index a828701cd0e..00000000000 --- a/mysql-test/suite/galera/t/galera_bf_abort_group_commit.test +++ /dev/null @@ -1,77 +0,0 @@ -# -# This test uses galera_sr_bf_abort.inc to probe various BF abort points -# for SR transactions with wsrep provider commit ordering disabled. -# - ---source include/galera_cluster.inc ---source include/have_innodb.inc ---source include/galera_have_debug_sync.inc - -# Control connection for manipulating sync points on node 1 ---connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 -SET SESSION wsrep_sync_wait = 0; - -# SR bf abort on fragment ---let $wsrep_trx_fragment_size = 1 ---echo galera_sr_bf_abort_at_commit = 0 ---let $galera_sr_bf_abort_at_commit = 0 - ---echo after_replicate_sync ---let $galera_sr_bf_abort_sync_point = after_replicate_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo local_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = local_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo apply_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = apply_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo commit_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = commit_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - -# SR bf abort on commit fragment ---let $wsrep_trx_fragment_size = 1 ---echo galera_sr_bf_abort_at_commit = 1 ---let $galera_sr_bf_abort_at_commit = 1 - ---echo after_replicate_sync ---let $galera_sr_bf_abort_sync_point = after_replicate_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo local_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = local_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo apply_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = apply_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo commit_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = commit_monitor_master_enter_sync ---source suite/galera/t/galera_sr_bf_abort.inc - -# Normal bf abort on commit ---let $wsrep_trx_fragment_size = 0 ---echo galera_sr_bf_abort_at_commit = 1 ---let $galera_sr_bf_abort_at_commit = 1 - ---echo after_replicate_sync ---let $galera_sr_bf_abort_sync_point = after_replicate_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo local_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = local_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo apply_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = apply_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - ---echo commit_monitor_master_enter_sync ---let $galera_sr_bf_abort_sync_point = commit_monitor_master_enter_sync ---source ../../suite/galera_sr/t/galera_sr_bf_abort.inc - -CALL mtr.add_suppression("WSREP: fragment replication failed: 1"); diff --git a/mysql-test/suite/galera/t/galera_bf_abort_ps_bind.cnf b/mysql-test/suite/galera/t/galera_bf_abort_ps_bind.cnf index 62cf1854032..7df8ed28a4d 100644 --- a/mysql-test/suite/galera/t/galera_bf_abort_ps_bind.cnf +++ b/mysql-test/suite/galera/t/galera_bf_abort_ps_bind.cnf @@ -2,6 +2,10 @@ [mysqld.1] wsrep-debug=1 +auto_increment_offset=1 +auto_increment_increment=2 [mysqld.2] wsrep-debug=1 +auto_increment_offset=2 +auto_increment_increment=2 diff --git a/mysql-test/suite/galera/t/galera_gcache_recover_manytrx.test b/mysql-test/suite/galera/t/galera_gcache_recover_manytrx.test index 214d5166781..e3921264f3d 100644 --- a/mysql-test/suite/galera/t/galera_gcache_recover_manytrx.test +++ b/mysql-test/suite/galera/t/galera_gcache_recover_manytrx.test @@ -126,7 +126,7 @@ DELIMITER ;| --send CALL insert_10m (); --connection node_2 -call mtr.add_suppression("Error in Log_event::read_log_event():.*"); +call mtr.add_suppression("Error in Log_event::read_log_event\(\):.*"); SET SESSION wsrep_sync_wait = 0; # Make sure that node_2 is not killed while TOIs are applied. @@ -200,8 +200,12 @@ DROP PROCEDURE insert_1k; DROP PROCEDURE insert_1m; --connection node_1 -call mtr.add_suppression("Error in Log_event::read_log_event():.*"); +call mtr.add_suppression("Error in Log_event::read_log_event\(\):.*"); CALL mtr.add_suppression("conflict state 7 after post commit"); # Warning happens when the cluster is started for the first time CALL mtr.add_suppression("Skipped GCache ring buffer recovery"); + +--connection node_2 +call mtr.add_suppression("Error in Log_event::read_log_event\(\):.*"); +CALL mtr.add_suppression("Skipped GCache ring buffer recovery"); diff --git a/mysql-test/suite/galera/t/galera_log_bin.inc b/mysql-test/suite/galera/t/galera_log_bin.inc index 4c245846752..3cac28047d4 100644 --- a/mysql-test/suite/galera/t/galera_log_bin.inc +++ b/mysql-test/suite/galera/t/galera_log_bin.inc @@ -1,11 +1,11 @@ --source include/galera_cluster.inc --source include/force_restart.inc ---connection node_1 +--connection node_2 set global wsrep_on=OFF; reset master; set global wsrep_on=ON; ---connection node_2 +--connection node_1 set global wsrep_on=OFF; reset master; set global wsrep_on=ON; diff --git a/mysql-test/suite/galera/t/galera_log_bin_sst.inc b/mysql-test/suite/galera/t/galera_log_bin_sst.inc index 3d20add6d9e..87420ad539f 100644 --- a/mysql-test/suite/galera/t/galera_log_bin_sst.inc +++ b/mysql-test/suite/galera/t/galera_log_bin_sst.inc @@ -6,11 +6,11 @@ --let $node_2=node_2 --source include/auto_increment_offset_save.inc ---connection node_1 +--connection node_2 set global wsrep_on=OFF; reset master; set global wsrep_on=ON; ---connection node_2 +--connection node_1 set global wsrep_on=OFF; reset master; set global wsrep_on=ON; diff --git a/mysql-test/suite/galera/t/galera_sequences.cnf b/mysql-test/suite/galera/t/galera_sequences.cnf index 98e724fb2d0..3a0543e3d34 100644 --- a/mysql-test/suite/galera/t/galera_sequences.cnf +++ b/mysql-test/suite/galera/t/galera_sequences.cnf @@ -3,7 +3,11 @@ [mysqld.1] log-bin log-slave-updates +auto-increment-increment=2 +auto-increment-offset=1 [mysqld.2] log-bin log-slave-updates +auto-increment-increment=2 +auto-increment-offset=2 diff --git a/mysql-test/suite/galera/t/galera_sequences.test b/mysql-test/suite/galera/t/galera_sequences.test index 613823d83e9..5c03ab973e0 100644 --- a/mysql-test/suite/galera/t/galera_sequences.test +++ b/mysql-test/suite/galera/t/galera_sequences.test @@ -5,13 +5,6 @@ # MDEV-19353 : Alter Sequence do not replicate to another nodes with in Galera Cluster # ---connection node_1 -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); -CALL mtr.add_suppression("WSREP: CREATE TABLE isolation failure"); ---connection node_2 - -CALL mtr.add_suppression("SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); - --connection node_1 CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 1000000 increment by 0 cache 1000 nocycle ENGINE=InnoDB; SHOW CREATE SEQUENCE seq; @@ -20,7 +13,7 @@ SHOW CREATE SEQUENCE seq; SHOW CREATE SEQUENCE seq; --connection node_1 -ALTER SEQUENCE seq MAXVALUE = 10000; +ALTER SEQUENCE seq MAXVALUE = 10000 NOCACHE; SHOW CREATE SEQUENCE seq; --connection node_2 @@ -39,8 +32,9 @@ SHOW CREATE SEQUENCE seq; # MDEV-18848 : Galera: 10.4 node crashed with Assertion `client_state.transaction().active()` after altering SEQUENCE table's engine to myisam and back to innodb # --connection node_1 -CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1; +CREATE SEQUENCE Seq1_1 START WITH 1 INCREMENT BY 1 NOCACHE; select NEXT VALUE FOR Seq1_1; +--error ER_NOT_SUPPORTED_YET alter table Seq1_1 engine=myisam; select NEXT VALUE FOR Seq1_1; alter table Seq1_1 engine=innodb; @@ -78,23 +72,247 @@ DROP TABLE t2; # # Case2 # +--connection node_2 SET SESSION AUTOCOMMIT=0; SET SESSION wsrep_OSU_method='RSU'; CREATE TABLE t1(c1 VARCHAR(10)); -INSERT INTO t1 (c1) VALUES(''); create temporary sequence sq1 NOCACHE engine=innodb; create sequence sq2 NOCACHE engine=innodb; COMMIT; +SET SESSION wsrep_OSU_method='TOI'; SHOW CREATE SEQUENCE sq1; SHOW CREATE SEQUENCE sq2; ---connection node_2 ---error ER_NO_SUCH_TABLE -SHOW CREATE SEQUENCE sq1; ---error ER_NO_SUCH_TABLE -SHOW CREATE SEQUENCE sq2; --connection node_1 +--error ER_NO_SUCH_TABLE +SHOW CREATE SEQUENCE sq1; +--error ER_NO_SUCH_TABLE +SHOW CREATE SEQUENCE sq2; +--connection node_2 SET SESSION AUTOCOMMIT=1; DROP TABLE t1; DROP SEQUENCE sq1; DROP SEQUENCE sq2; -SET SESSION wsrep_OSU_method='TOI'; + +# +# MDEV-30388 Assertion `!wsrep_has_changes(thd) || (thd->lex->sql_command == SQLCOM_CREATE_TABLE +# && !thd->is_current_stmt_binlog_format_row()) || +# thd->wsrep_cs().transaction().state() == wsrep::transaction::s_aborted' failed +# +--connection node_1 +CREATE TABLE t (f INT) engine=innodb; +LOCK TABLE t WRITE; +CREATE OR REPLACE SEQUENCE t MAXVALUE=13 INCREMENT BY 1 NOCACHE engine=innodb; +--error ER_NOT_SUPPORTED_YET +LOCK TABLE t WRITE; +INSERT INTO t VALUES (0,0,1,1,1,0,0,0); +SELECT * from t; +SELECT NEXTVAL(t); +UNLOCK TABLES; +DROP TABLE t; + +CREATE SEQUENCE t INCREMENT BY 0 NOCACHE ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), +b int) engine=innodb; +INSERT INTO t1(b) VALUES (1),(2),(3); +SELECT * FROM t1; + +--connection node_2 +SELECT * FROM t1; +INSERT INTO t1(b) VALUES (4),(5),(6); +SELECT * FROM t1; + +--connection node_1 +SELECT * FROM t1; +DROP TABLE t1; +DROP SEQUENCE t; + +# +# Test Galera SEQUENCE support +# +# +# No MyISAM SEQUENCES +# +--error ER_NOT_SUPPORTED_YET +CREATE SEQUENCE t ENGINE=MYISAM; +CREATE SEQUENCE t INCREMENT BY 1 NOCACHE ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; + +--connection node_2 +--echo # Wait DDL to replicate +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't' +--source include/wait_condition.inc +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1' +--source include/wait_condition.inc + +# +# Below we do not care order of INSERTs we care only that values are unique +# +--connection node_1 +SELECT @@auto_increment_increment; +SELECT @@auto_increment_offset; +--let $wsrep_sync_wait_orig_1 = `SELECT @@wsrep_sync_wait` +SET SESSION wsrep_sync_wait=0; + +--connection node_2 +SELECT @@auto_increment_increment; +SELECT @@auto_increment_offset; +--let $wsrep_sync_wait_orig_2 = `SELECT @@wsrep_sync_wait` +SET SESSION wsrep_sync_wait=0; + +--let $count = 20 +--disable_query_log +while ($count) +{ +--connection node_1 +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (1); +--connection node_2 +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (2); +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (2); +--connection node_1 +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (1); +--dec $count +} +--enable_query_log + +--connection node_1 +--disable_query_log +--eval SET SESSION wsrep_sync_wait = $wsrep_sync_wait_orig_1 +--enable_query_log + +--connection node_2 +--disable_query_log +--eval SET SESSION wsrep_sync_wait = $wsrep_sync_wait_orig_2 +--enable_query_log + +--connection node_1 +DROP SEQUENCE t; +DROP TABLE t1; +CREATE SEQUENCE t INCREMENT BY 0 NOCACHE ENGINE=INNODB; +DROP SEQUENCE t; +--error ER_NOT_SUPPORTED_YET +CREATE SEQUENCE t INCREMENT BY 1 CACHE=20 ENGINE=INNODB; + +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; + +--connection node_2 +--echo # Wait DDL to replicate +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't' +--source include/wait_condition.inc +--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1' +--source include/wait_condition.inc + +# +# Below we do not care order of INSERTs we care only that values are unique +# +--connection node_1 +--let $wsrep_sync_wait_orig_1 = `SELECT @@wsrep_sync_wait` +SET SESSION wsrep_sync_wait=0; + +--connection node_2 +--let $wsrep_sync_wait_orig_2 = `SELECT @@wsrep_sync_wait` +SET SESSION wsrep_sync_wait=0; + +--let $count = 5 +--disable_query_log +while ($count) +{ +--connection node_1 +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (1),(2),(3),(4),(5),(6),(7),(8),(9); +--connection node_2 +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (21),(22),(23),(24),(25),(26),(27),(28),(29); +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (21),(22),(23),(24),(25),(26),(27),(28),(29); +--connection node_1 +--error 0,ER_LOCK_WAIT_TIMEOUT +INSERT INTO t1(b) values (1),(2),(3),(4),(5),(6),(7),(8),(9); +--dec $count +} +--enable_query_log + +--connection node_1 +--disable_query_log +--eval SET SESSION wsrep_sync_wait = $wsrep_sync_wait_orig_1 +--enable_query_log + +--connection node_2 +--disable_query_log +--eval SET SESSION wsrep_sync_wait = $wsrep_sync_wait_orig_2 +--enable_query_log + +--connection node_1 +DROP SEQUENCE t; +DROP TABLE t1; + +# +# Test ALTER table to sequence and ALTER SEQUENCE +# +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +--error ER_NOT_SUPPORTED_YET +ALTER TABLE t ENGINE=MYISAM; +--error ER_NOT_SUPPORTED_YET +ALTER SEQUENCE t INCREMENT BY 1 CACHE=10; +ALTER SEQUENCE t INCREMENT BY 1 NOCACHE; +ALTER SEQUENCE t INCREMENT BY 0 NOCACHE; +ALTER SEQUENCE t INCREMENT BY 0 CACHE=10; +DROP SEQUENCE t; + +# +# Test transactions +# +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; +# +# ROLLBACK TRX +# +BEGIN; +INSERT INTO t1(b) VALUES (1); +INSERT INTO t1(b) VALUES (2); +INSERT INTO t1(b) VALUES (3); +INSERT INTO t1(b) VALUES (4); +INSERT INTO t1(a,b) VALUES (2,2); +--error ER_DUP_ENTRY +INSERT INTO t1(a,b) VALUES (3,2); +ROLLBACK; +SELECT * FROM t1; +SELECT NEXTVAL(t); + +--connection node_2 +SELECT * FROM t1; +SELECT NEXTVAL(t); + +--connection node_1 +DROP TABLE t1; +DROP SEQUENCE t; + +CREATE SEQUENCE t INCREMENT BY 0 CACHE=20 ENGINE=INNODB; +CREATE TABLE t1(a int not null primary key default nextval(t), b int) engine=innodb; +# +# COMMIT TRX +# +BEGIN; +INSERT INTO t1(b) VALUES (1); +INSERT INTO t1(b) VALUES (2); +INSERT INTO t1(b) VALUES (3); +INSERT INTO t1(b) VALUES (4); +INSERT INTO t1(a,b) VALUES (2,2); +--error ER_DUP_ENTRY +INSERT INTO t1(a,b) VALUES (3,2); +COMMIT; + +SELECT * FROM t1; +SELECT NEXTVAL(t); + +--connection node_2 +SELECT * FROM t1; +SELECT NEXTVAL(t); + +--connection node_1 +DROP TABLE t1; +DROP SEQUENCE t; diff --git a/mysql-test/suite/galera/t/galera_sst_mysqldump_with_key.cnf b/mysql-test/suite/galera/t/galera_sst_mysqldump_with_key.cnf index 0f38a85744e..52ec6af7e74 100644 --- a/mysql-test/suite/galera/t/galera_sst_mysqldump_with_key.cnf +++ b/mysql-test/suite/galera/t/galera_sst_mysqldump_with_key.cnf @@ -5,11 +5,9 @@ [mysqld.1] wsrep_provider_options='base_port=@mysqld.1.#galera_port;gcache.size=1;pc.ignore_sb=true' -wsrep_sync_wait=0 [mysqld.2] wsrep_provider_options='base_port=@mysqld.2.#galera_port;gcache.size=1;pc.ignore_sb=true' -wsrep_sync_wait=0 [client] ssl-ca=@ENV.MYSQL_TEST_DIR/std_data/cacert.pem diff --git a/mysql-test/suite/galera/t/galera_temporary_sequences.test b/mysql-test/suite/galera/t/galera_temporary_sequences.test new file mode 100644 index 00000000000..c46c4243514 --- /dev/null +++ b/mysql-test/suite/galera/t/galera_temporary_sequences.test @@ -0,0 +1,37 @@ +--source include/galera_cluster.inc +--source include/have_sequence.inc + +--connection node_2 +SET AUTOCOMMIT=0; +SET SESSION wsrep_OSU_method='RSU'; +CREATE TABLE t (i int primary key, j int); +CREATE TEMPORARY SEQUENCE seq2 NOCACHE ENGINE=InnoDB; +COMMIT; +SET SESSION wsrep_OSU_method='RSU'; +CREATE SEQUENCE seq1 NOCACHE ENGINE=InnoDB; +SET SESSION wsrep_OSU_method='TOI'; +DROP TABLE t; +DROP SEQUENCE seq2; +DROP SEQUENCE seq1; + +--connection node_1 +CREATE TABLE t (i int primary key, j int) ENGINE=InnoDB; +SET AUTOCOMMIT=0; +INSERT INTO t VALUES (3,0); +CREATE TEMPORARY SEQUENCE seq1 NOCACHE ENGINE=InnoDB; +COMMIT; +INSERT INTO t VALUES (4,0); +CREATE SEQUENCE seq2 NOCACHE ENGINE=InnoDB; +commit; + +--connection node_2 +SELECT * FROM t; +--error ER_NO_SUCH_TABLE +SHOW CREATE TABLE seq1; +SHOW CREATE TABLE seq2; + + +--connection node_1 +DROP TABLE t; +DROP SEQUENCE seq1; +DROP SEQUENCE seq2; diff --git a/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.cnf b/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.cnf index db6f36605b7..9b88a09d814 100644 --- a/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.cnf +++ b/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.cnf @@ -4,13 +4,13 @@ ssl-cert=@ENV.MYSQL_TEST_DIR/std_data/server-cert.pem ssl-key=@ENV.MYSQL_TEST_DIR/std_data/server-key.pem ssl-ca=@ENV.MYSQL_TEST_DIR/std_data/cacert.pem -bind-address=:: [mysqld.1] wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast.listen_addr=tcp://[::]:@mysqld.1.#galera_port;ist.recv_addr=[::1]:@mysqld.1.#ist_port;repl.causal_read_timeout=PT90S;evs.suspect_timeout=PT10S;evs.inactive_timeout=PT30S;evs.install_timeout=PT15S;gcache.size=10M' wsrep_node_incoming_address='[::1]:@mysqld.1.port' wsrep_node_address=[::1]:@mysqld.1.#galera_port wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' +bind-address=:: [mysqld.2] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -18,3 +18,4 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast. wsrep_node_incoming_address='[::1]:@mysqld.2.port' wsrep_node_address=[::1]:@mysqld.2.#galera_port wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' +bind-address=:: diff --git a/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.test b/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.test index 2c2b106c2ae..eaef34cce32 100644 --- a/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.test +++ b/mysql-test/suite/galera/t/galera_var_notify_ssl_ipv6.test @@ -3,6 +3,7 @@ # notifications into a table. # +--let galera_connection_address=::1 --source include/galera_cluster.inc --source include/have_ssl_communication.inc --source include/check_ipv6.inc diff --git a/mysql-test/suite/galera/t/galera_vote_rejoin_ddl.test b/mysql-test/suite/galera/t/galera_vote_rejoin_ddl.test index ca75d33b7d7..90a90052b7f 100644 --- a/mysql-test/suite/galera/t/galera_vote_rejoin_ddl.test +++ b/mysql-test/suite/galera/t/galera_vote_rejoin_ddl.test @@ -17,9 +17,17 @@ --let $node_4=node_4 --let $auto_increment_offset_node_4 = 4; -# Isolate node #3 --connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 +--connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4 + +--let $node_1=node_1 +--let $node_2=node_2 +--let $node_3=node_3 +--let $node_4=node_4 +--source suite/galera/include/auto_increment_offset_save.inc + --connection node_3 +# Isolate node #3 SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1'; # Wait for node #3 to leave cluster @@ -28,7 +36,6 @@ SET GLOBAL wsrep_provider_options = 'gmcast.isolate = 1'; --source include/wait_condition.inc # Introduce inconsistency on node #4 ---connect node_4, 127.0.0.1, root, , test, $NODE_MYPORT_4 --connection node_4 SET SESSION wsrep_on=OFF; CREATE TABLE t1 (f1 INTEGER); @@ -93,4 +100,4 @@ CALL mtr.add_suppression("WSREP: Vote 0 \\(success\\) on .* is inconsistent with DROP TABLE t2; ---source include/auto_increment_offset_restore.inc +--source suite/galera/include/auto_increment_offset_restore.inc diff --git a/mysql-test/suite/galera/t/mdev-28433.test b/mysql-test/suite/galera/t/mdev-28433.test new file mode 100644 index 00000000000..ddee3618fee --- /dev/null +++ b/mysql-test/suite/galera/t/mdev-28433.test @@ -0,0 +1,35 @@ +--source include/galera_cluster.inc + +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--source include/auto_increment_offset_save.inc + +--connection node_2 +--let $wsrep_cluster_address_saved = `SELECT @@global.wsrep_cluster_address` + +--error ER_WRONG_VALUE_FOR_VAR +SET @@global.wsrep_sst_donor = NULL; +--let $wsrep_cluster_address_orig = `SELECT @@wsrep_cluster_address` +SET @@global.wsrep_cluster_address='NULL'; +SET SESSION wsrep_sync_wait=0; +SELECT @@wsrep_sst_donor; +SELECT @@wsrep_cluster_address; +# Must return 'OFF' +SHOW STATUS LIKE 'wsrep_ready'; + +# Must return 'Disconnected' +SHOW STATUS LIKE 'wsrep_cluster_status'; + +--disable_query_log +--eval SET @@global.wsrep_cluster_address = '$wsrep_cluster_address_orig' +--enable_query_log +--source include/wait_until_connected_again.inc +--source include/galera_wait_ready.inc +call mtr.add_suppression("WSREP: .*Invalid backend URI.*"); +call mtr.add_suppression("WSREP: gcs connect failed: Invalid argument"); + +# Restore original auto_increment_offset values. +--source include/auto_increment_offset_restore.inc + +--source include/galera_end.inc diff --git a/mysql-test/suite/galera/t/mdev-30013.test b/mysql-test/suite/galera/t/mdev-30013.test new file mode 100644 index 00000000000..038b66600ce --- /dev/null +++ b/mysql-test/suite/galera/t/mdev-30013.test @@ -0,0 +1,15 @@ +--source include/galera_cluster.inc + +if (!$HA_ARCHIVE_SO) { + skip Needs Archive loadable plugin; +} + +INSTALL PLUGIN ARCHIVE SONAME 'ha_archive.so'; +CREATE TABLE t (a CHAR(1)) ENGINE=ARCHIVE; +SHOW CREATE TABLE t; +INSERT INTO t VALUES ('A'); +UNINSTALL SONAME 'ha_archive'; +ALTER TABLE t CHANGE COLUMN a a CHAR(2); +--error ER_UNKNOWN_STORAGE_ENGINE +INSERT INTO t (a) VALUES ('AB'); +DROP TABLE t; diff --git a/mysql-test/suite/galera_3nodes/disabled.def b/mysql-test/suite/galera_3nodes/disabled.def index 22ff54ed504..dc08e0981bd 100644 --- a/mysql-test/suite/galera_3nodes/disabled.def +++ b/mysql-test/suite/galera_3nodes/disabled.def @@ -14,9 +14,4 @@ galera_2_cluster : MDEV-29877 Galera test failure on galera_2_cluster galera_gtid_2_cluster : MDEV-29877 Galera test failure on galera_2_cluster galera_vote_rejoin_mysqldump : MDEV-24481: galera_3nodes.galera_vote_rejoin_mysqldump MTR failed: mysql_shutdown failed -galera_2_cluster : MDEV-29877 Galera test failure on galera_2_cluster -galera_gtid_2_cluster : MDEV-29877 Galera test failure on galera_2_cluster galera_ssl_reload : MDEV-30172 At line 50: mysql_shutdown failed -GCF-354 : mysqltest: At line 39: query 'DROP TABLE test.t1' failed: 1047: WSREP has not yet prepared node for application use -GCF-354 : mysqltest: At line 30: query 'INSERT INTO test.t1 values (1)' failed: 1180: Got error 6 "No such device or address" -galera_ipv6_mysqldump : mysql_shutdown failed diff --git a/mysql-test/suite/galera_3nodes/r/GCF-354.result b/mysql-test/suite/galera_3nodes/r/GCF-354.result index 958c1d06538..2b1399e6265 100644 --- a/mysql-test/suite/galera_3nodes/r/GCF-354.result +++ b/mysql-test/suite/galera_3nodes/r/GCF-354.result @@ -1,7 +1,5 @@ connection node_2; connection node_1; -connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3; -connection node_3; connection node_1; connection node_2; connection node_3; diff --git a/mysql-test/suite/galera_3nodes/r/GCF-363.result b/mysql-test/suite/galera_3nodes/r/GCF-363.result index d7078227ec3..a7b811f794a 100644 --- a/mysql-test/suite/galera_3nodes/r/GCF-363.result +++ b/mysql-test/suite/galera_3nodes/r/GCF-363.result @@ -1,8 +1,8 @@ connection node_2; connection node_1; connection node_1; -connection node_1; connection node_2; +connection node_3; connection node_1; CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) ENGINE=InnoDB; SET GLOBAL wsrep_on=OFF; @@ -12,7 +12,6 @@ connection node_2; SET GLOBAL wsrep_on=OFF; INSERT INTO t1 VALUES (1, 'a'); SET GLOBAL wsrep_on=ON; -connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3; connection node_3; INSERT INTO t1 VALUES (1, 'b'); SET SESSION wsrep_sync_wait = 0; diff --git a/mysql-test/suite/galera_3nodes/r/GCF-376.result b/mysql-test/suite/galera_3nodes/r/GCF-376.result index 71705d2c35e..7b535a01ed4 100644 --- a/mysql-test/suite/galera_3nodes/r/GCF-376.result +++ b/mysql-test/suite/galera_3nodes/r/GCF-376.result @@ -1,10 +1,9 @@ connection node_2; connection node_1; -connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3; -connection node_1; connection node_1; connection node_2; connection node_3; +connection node_1; CREATE TABLE test.t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) ENGINE=InnoDB; connection node_2; SET GLOBAL wsrep_on=OFF; @@ -16,6 +15,12 @@ INSERT INTO t1 VALUES (1, 'b'); SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; SET SESSION wsrep_sync_wait=0; connection node_3; +SHOW STATUS LIKE 'wsrep_cluster_size'; +Variable_name Value +wsrep_cluster_size 2 +SHOW STATUS LIKE 'wsrep_cluster_status'; +Variable_name Value +wsrep_cluster_status Primary connection node_2; UNLOCK TABLES; SET SESSION wsrep_on = ON; @@ -24,6 +29,9 @@ connection node_1; SHOW STATUS LIKE 'wsrep_cluster_status'; Variable_name Value wsrep_cluster_status non-Primary +SHOW STATUS LIKE 'wsrep_cluster_size'; +Variable_name Value +wsrep_cluster_size 1 connection node_2; SET SESSION wsrep_sync_wait=0; SHOW STATUS LIKE 'wsrep_cluster_status'; @@ -47,10 +55,21 @@ wsrep_cluster_size 1 SELECT * FROM t1; f1 f2 1 b +# reconnect node #1 connection node_1; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0'; +# reconnect node #2 connection node_2; # restart +SHOW STATUS LIKE 'wsrep_cluster_status'; +Variable_name Value +wsrep_cluster_status Primary +SHOW STATUS LIKE 'wsrep_cluster_size'; +Variable_name Value +wsrep_cluster_size 3 +SELECT * FROM t1; +f1 f2 +1 b connection node_1; SELECT * FROM t1; f1 f2 diff --git a/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_B.result b/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_B.result index 7e75bc4b08a..732385a3966 100644 --- a/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_B.result +++ b/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_B.result @@ -1,6 +1,9 @@ connection node_2; connection node_1; connection node_1; +connection node_2; +connection node_3; +connection node_1; CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb; INSERT INTO t1 VALUES (1, 1); connection node_2; diff --git a/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_C.result b/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_C.result index ea10edfc62c..d85f121b0f7 100644 --- a/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_C.result +++ b/mysql-test/suite/galera_3nodes/r/galera_join_with_cc_C.result @@ -1,6 +1,9 @@ connection node_2; connection node_1; connection node_1; +connection node_2; +connection node_3; +connection node_1; CREATE TABLE t1 (pk INT PRIMARY KEY, node INT) ENGINE=innodb; INSERT INTO t1 VALUES (1, 1); connection node_2; diff --git a/mysql-test/suite/galera_3nodes/r/galera_pc_bootstrap.result b/mysql-test/suite/galera_3nodes/r/galera_pc_bootstrap.result index 3f29c7419eb..8cdd62db959 100644 --- a/mysql-test/suite/galera_3nodes/r/galera_pc_bootstrap.result +++ b/mysql-test/suite/galera_3nodes/r/galera_pc_bootstrap.result @@ -1,17 +1,19 @@ connection node_2; connection node_1; call mtr.add_suppression("WSREP: gcs/src/gcs_core.cpp:core_handle_uuid_msg\\(\\).*"); -CREATE TABLE t1 (f1 INTEGER); connection node_1; +connection node_2; +connection node_3; +connection node_1; +CREATE TABLE t1 (f1 INTEGER); +SET SESSION wsrep_sync_wait=0; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; connection node_2; SET SESSION wsrep_sync_wait=0; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; -connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3; connection node_3; SET SESSION wsrep_sync_wait=0; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; -SET SESSION wsrep_sync_wait = 0; connection node_2; SET GLOBAL wsrep_provider_options = 'pc.bootstrap=1'; SHOW STATUS LIKE 'wsrep_cluster_size'; diff --git a/mysql-test/suite/galera_3nodes/t/GAL-501.cnf b/mysql-test/suite/galera_3nodes/t/GAL-501.cnf index 3b18a86093c..cd99c90bc16 100644 --- a/mysql-test/suite/galera_3nodes/t/GAL-501.cnf +++ b/mysql-test/suite/galera_3nodes/t/GAL-501.cnf @@ -3,7 +3,6 @@ [mysqld] wsrep_sst_method=rsync - [mysqld.1] wsrep-cluster-address=gcomm:// wsrep_node_address=[::1] diff --git a/mysql-test/suite/galera_3nodes/t/GAL-501.test b/mysql-test/suite/galera_3nodes/t/GAL-501.test index af5b83ae261..ecf1c7660d1 100644 --- a/mysql-test/suite/galera_3nodes/t/GAL-501.test +++ b/mysql-test/suite/galera_3nodes/t/GAL-501.test @@ -4,6 +4,7 @@ # wsrep_node_address=[::1] # ist.recv_addr=[::1] +--let galera_connection_address=::1 --source include/galera_cluster.inc --source include/check_ipv6.inc --source include/force_restart.inc diff --git a/mysql-test/suite/galera_3nodes/t/GCF-354.cnf b/mysql-test/suite/galera_3nodes/t/GCF-354.cnf index 252b4b613c7..4c5e4854606 100644 --- a/mysql-test/suite/galera_3nodes/t/GCF-354.cnf +++ b/mysql-test/suite/galera_3nodes/t/GCF-354.cnf @@ -2,4 +2,4 @@ [mysqld] wsrep-ignore-apply-errors=0 -wsrep_sync_wait=0 \ No newline at end of file +wsrep_sync_wait=0 diff --git a/mysql-test/suite/galera_3nodes/t/GCF-354.test b/mysql-test/suite/galera_3nodes/t/GCF-354.test index ce0fd445f23..e1459734cf3 100644 --- a/mysql-test/suite/galera_3nodes/t/GCF-354.test +++ b/mysql-test/suite/galera_3nodes/t/GCF-354.test @@ -1,8 +1,10 @@ --source include/galera_cluster.inc +--source include/have_innodb.inc --source include/force_restart.inc ---connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 ---connection node_3 +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc # Save original auto_increment_offset values. --let $node_1=node_1 @@ -101,4 +103,3 @@ CALL mtr.add_suppression("WSREP: Inconsistency detected: Inconsistent by consens CALL mtr.add_suppression("Plugin 'InnoDB' will be forced to shutdown"); --source ../galera/include/auto_increment_offset_restore.inc - diff --git a/mysql-test/suite/galera_3nodes/t/GCF-363.test b/mysql-test/suite/galera_3nodes/t/GCF-363.test index 5867247e6ee..00af02126af 100644 --- a/mysql-test/suite/galera_3nodes/t/GCF-363.test +++ b/mysql-test/suite/galera_3nodes/t/GCF-363.test @@ -5,10 +5,14 @@ --source include/galera_cluster.inc --source include/have_innodb.inc ---connection node_1 +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc + # Save original auto_increment_offset values. --let $node_1=node_1 --let $node_2=node_2 +--let $node_3=node_3 --source ../galera/include/auto_increment_offset_save.inc --connection node_1 @@ -26,7 +30,6 @@ SET GLOBAL wsrep_on=OFF; INSERT INTO t1 VALUES (1, 'a'); SET GLOBAL wsrep_on=ON; ---connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 --connection node_3 INSERT INTO t1 VALUES (1, 'b'); SET SESSION wsrep_sync_wait = 0; @@ -72,4 +75,3 @@ CALL mtr.add_suppression("Plugin 'InnoDB' will be forced to shutdown"); --connection node_1 # Restore original auto_increment_offset values. --source ../galera/include/auto_increment_offset_restore.inc - diff --git a/mysql-test/suite/galera_3nodes/t/GCF-376.test b/mysql-test/suite/galera_3nodes/t/GCF-376.test index ff5bfbfb209..20b9703f835 100644 --- a/mysql-test/suite/galera_3nodes/t/GCF-376.test +++ b/mysql-test/suite/galera_3nodes/t/GCF-376.test @@ -5,8 +5,9 @@ --source include/galera_cluster.inc --source include/have_innodb.inc ---connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 ---connection node_1 +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc # Save original auto_increment_offset values. --let $node_1=node_1 @@ -14,6 +15,7 @@ --let $node_3=node_3 --source ../galera/include/auto_increment_offset_save.inc +--connection node_1 CREATE TABLE test.t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(1)) ENGINE=InnoDB; --connection node_2 @@ -36,6 +38,8 @@ SET SESSION wsrep_sync_wait=0; --connection node_3 --let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' --source include/wait_condition.inc +SHOW STATUS LIKE 'wsrep_cluster_size'; +SHOW STATUS LIKE 'wsrep_cluster_status'; --connection node_2 UNLOCK TABLES; @@ -44,10 +48,17 @@ UNLOCK TABLES; --source include/wsrep_wait_disconnect.inc --connection node_1 +--let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc SHOW STATUS LIKE 'wsrep_cluster_status'; +SHOW STATUS LIKE 'wsrep_cluster_size'; --connection node_2 SET SESSION wsrep_sync_wait=0; +--let $wait_condition = SELECT VARIABLE_VALUE = 'Disconnected' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc SHOW STATUS LIKE 'wsrep_cluster_status'; SHOW STATUS LIKE 'wsrep_cluster_size'; SET GLOBAL wsrep_on=OFF; @@ -61,14 +72,23 @@ SHOW STATUS LIKE 'wsrep_cluster_status'; SHOW STATUS LIKE 'wsrep_cluster_size'; SELECT * FROM t1; -# reconnect node #1 +--echo # reconnect node #1 --connection node_1 SET GLOBAL wsrep_provider_options = 'gmcast.isolate=0'; +--let $wait_condition = SELECT VARIABLE_VALUE = 'Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_status'; +--source include/wait_condition.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc -# reconnect node #2 +--echo # reconnect node #2 --connection node_2 --source include/restart_mysqld.inc --source include/wait_until_connected_again.inc +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc +SHOW STATUS LIKE 'wsrep_cluster_status'; +SHOW STATUS LIKE 'wsrep_cluster_size'; +SELECT * FROM t1; --connection node_1 --let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' @@ -95,4 +115,4 @@ CALL mtr.add_suppression("Slave SQL: Could not execute Write_rows event on table CALL mtr.add_suppression("WSREP: Event (.*) Write_rows_v1 apply failed: 121, seqno "); CALL mtr.add_suppression("WSREP: Inconsistency detected: Inconsistent by consensus on (.*)"); CALL mtr.add_suppression("Plugin 'InnoDB' will be forced to shutdown"); -CALL mtr.add_suppression("WSREP: Failed to apply write set: "); \ No newline at end of file +CALL mtr.add_suppression("WSREP: Failed to apply write set: "); diff --git a/mysql-test/suite/galera_3nodes/t/galera_2_cluster.cnf b/mysql-test/suite/galera_3nodes/t/galera_2_cluster.cnf index 3889a4f4fdd..41c1c7c0519 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_2_cluster.cnf +++ b/mysql-test/suite/galera_3nodes/t/galera_2_cluster.cnf @@ -22,4 +22,4 @@ server-id=22 [mysqld.6] wsrep_gtid_domain_id=2 -server-id=23 \ No newline at end of file +server-id=23 diff --git a/mysql-test/suite/galera_3nodes/t/galera_evs_suspect_timeout.test b/mysql-test/suite/galera_3nodes/t/galera_evs_suspect_timeout.test index ee75aa085e6..8848e698c25 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_evs_suspect_timeout.test +++ b/mysql-test/suite/galera_3nodes/t/galera_evs_suspect_timeout.test @@ -10,7 +10,6 @@ --let $galera_connection_name = node_3 --let $galera_server_number = 3 --source include/galera_connect.inc ---let $wsrep_cluster_address_node3 = `SELECT @@wsrep_cluster_address` # Save original auto_increment_offset values. --let $node_1=node_1 diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.cnf b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.cnf index 415a8f33257..ed0e6204d3e 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.cnf +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.cnf @@ -3,7 +3,6 @@ [mysqld] wsrep_sst_method=mariabackup wsrep_sst_auth="root:" -bind-address=:: [mysqld.1] wsrep-cluster-address=gcomm:// @@ -12,6 +11,7 @@ wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.1.port' wsrep_node_name=node_1 +bind-address=:: [mysqld.2] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -21,6 +21,7 @@ wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.2.port' wsrep_node_name=node_2 wsrep_sst_donor=node_1 +bind-address=:: [mysqld.3] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -30,6 +31,7 @@ wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.3.port' wsrep_node_name=node_3 wsrep_sst_donor=node_1 +bind-address=:: [SST] transferfmt=@ENV.MTR_GALERA_TFMT diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.test b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.test index 6e02350b12b..f563392434c 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.test +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup.test @@ -1,3 +1,4 @@ +--let galera_connection_address=::1 --source include/big_test.inc --source include/galera_cluster.inc --source include/check_ipv6.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.cnf b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.cnf index 21f229ffcce..aaad88ebcbd 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.cnf +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.cnf @@ -3,11 +3,9 @@ # decoy value - should not be read by mysqld or sst scripts [mysqld] innodb-data-home-dir=/tmp -bind-address=:: innodb-data-home-dir= wsrep_sst_method=mariabackup wsrep_sst_auth="root:" -bind-address=:: [mysqld.1] wsrep-cluster-address=gcomm:// @@ -16,6 +14,7 @@ wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.1.port' wsrep_node_name=node_1 +bind-address=:: [mysqld.2] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -25,6 +24,7 @@ wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.2.port' wsrep_node_name=node_2 wsrep_sst_donor=node_1 +bind-address=:: [mysqld.3] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -34,6 +34,7 @@ wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.3.port' wsrep_node_name=node_3 wsrep_sst_donor=node_1 +bind-address=:: [SST] transferfmt=@ENV.MTR_GALERA_TFMT diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.test b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.test index 453aa21988d..2ed69ea93dc 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.test +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mariabackup_section.test @@ -1,3 +1,4 @@ +--let galera_connection_address=::1 --source include/big_test.inc --source include/galera_cluster.inc --source include/check_ipv6.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf index afdfacfa3a5..0a54fb8e4e1 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.cnf @@ -2,7 +2,6 @@ [mysqld] wsrep_sst_method=rsync -bind-address=:: [mysqld.1] wsrep-cluster-address=gcomm:// @@ -10,6 +9,7 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.1.port' +bind-address=:: [mysqld.2] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -17,6 +17,7 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.2.port' +bind-address=:: [mysqld.3] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -24,3 +25,4 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.3.port' +bind-address=:: diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test index 2f8bf07b5b5..27e71da29fa 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_mysqldump.test @@ -1,3 +1,4 @@ +--let galera_connection_address=::1 --source include/galera_cluster.inc --source include/check_ipv6.inc --source include/force_restart.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf index afdfacfa3a5..0a54fb8e4e1 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.cnf @@ -2,7 +2,6 @@ [mysqld] wsrep_sst_method=rsync -bind-address=:: [mysqld.1] wsrep-cluster-address=gcomm:// @@ -10,6 +9,7 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.1.port' +bind-address=:: [mysqld.2] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -17,6 +17,7 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.2.port' +bind-address=:: [mysqld.3] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -24,3 +25,4 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.3.port' +bind-address=:: diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test index 448611e34e0..04a88675752 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync.test @@ -1,3 +1,4 @@ +--let galera_connection_address=::1 --source include/galera_cluster.inc --source include/check_ipv6.inc --source include/force_restart.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.cnf b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.cnf index c34144d9a69..35196700044 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.cnf +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.cnf @@ -7,7 +7,6 @@ innodb-data-home-dir=/tmp [mysqld] innodb-data-home-dir= wsrep_sst_method=rsync -bind-address=:: [mysqld.1] wsrep-cluster-address=gcomm:// @@ -15,6 +14,7 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.1.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.1.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.1.port' +bind-address=:: [mysqld.2] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -22,6 +22,7 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.2.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.2.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.2.port' +bind-address=:: [mysqld.3] wsrep_cluster_address='gcomm://[::1]:@mysqld.1.#galera_port' @@ -29,3 +30,4 @@ wsrep_provider_options='base_host=[::1];base_port=@mysqld.3.#galera_port;gmcast. wsrep_sst_receive_address='[::1]:@mysqld.3.#sst_port' wsrep_node_address=::1 wsrep_node_incoming_address='[::1]:@mysqld.3.port' +bind-address=:: diff --git a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.test b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.test index 448611e34e0..04a88675752 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.test +++ b/mysql-test/suite/galera_3nodes/t/galera_ipv6_rsync_section.test @@ -1,3 +1,4 @@ +--let galera_connection_address=::1 --source include/galera_cluster.inc --source include/check_ipv6.inc --source include/force_restart.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test index aa264eb8047..db8bf90cb5c 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test +++ b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_A.test @@ -15,6 +15,7 @@ --let $galera_server_number = 3 --source include/galera_connect.inc +# Save original auto_increment_offset values. --let $node_1=node_1 --let $node_2=node_2 --let $node_3=node_3 diff --git a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_B.test b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_B.test index 2fb0e78c759..55d6b458849 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_B.test +++ b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_B.test @@ -15,6 +15,12 @@ --let $galera_server_number = 3 --source include/galera_connect.inc +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--let $node_3=node_3 +--source ../galera/include/auto_increment_offset_save.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 @@ -271,3 +277,5 @@ call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State T --connection node_3 call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required."); + +--source ../galera/include/auto_increment_offset_restore.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_C.test b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_C.test index 133903d7cbf..d1111e9fd4a 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_C.test +++ b/mysql-test/suite/galera_3nodes/t/galera_join_with_cc_C.test @@ -14,6 +14,12 @@ --let $galera_server_number = 3 --source include/galera_connect.inc +# Save original auto_increment_offset values. +--let $node_1=node_1 +--let $node_2=node_2 +--let $node_3=node_3 +--source ../galera/include/auto_increment_offset_save.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 @@ -297,3 +303,5 @@ call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State T --connection node_3 call mtr.add_suppression("WSREP: Rejecting JOIN message from \(.*\): new State Transfer required."); + +--source ../galera/include/auto_increment_offset_restore.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_pc_bootstrap.test b/mysql-test/suite/galera_3nodes/t/galera_pc_bootstrap.test index ef5bc7dd923..58a67c7b32b 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_pc_bootstrap.test +++ b/mysql-test/suite/galera_3nodes/t/galera_pc_bootstrap.test @@ -1,17 +1,35 @@ # # Test the operation of pc.bootstrap # - --source include/big_test.inc --source include/galera_cluster.inc --source include/have_innodb.inc call mtr.add_suppression("WSREP: gcs/src/gcs_core.cpp:core_handle_uuid_msg\\(\\).*"); +# +# Create connection node_3 and save auto increment variables. +# +--let $galera_connection_name = node_3 +--let $galera_server_number = 3 +--source include/galera_connect.inc + +--let $node_1 = node_1 +--let $node_2 = node_2 +--let $node_3 = node_3 + +--source ../galera/include/auto_increment_offset_save.inc + +--connection node_1 + CREATE TABLE t1 (f1 INTEGER); +SET SESSION wsrep_sync_wait=0; +--let $wait_condition = SELECT VARIABLE_VALUE = 3 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' +--source include/wait_condition.inc + # Force all nodes to become non-primary ---connection node_1 + SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; --connection node_2 @@ -21,7 +39,6 @@ SET SESSION wsrep_sync_wait=0; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; ---connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3 --connection node_3 SET SESSION wsrep_sync_wait=0; --let $wait_condition = SELECT VARIABLE_VALUE = 1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size' @@ -29,13 +46,16 @@ SET SESSION wsrep_sync_wait=0; SET GLOBAL wsrep_provider_options = 'gmcast.isolate=1'; +# Node #3 should be non-primary +--let $wait_condition = SELECT variable_value = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name = 'wsrep_cluster_status'; +--source include/wait_condition.inc + +--connection node_2 # Node #2 should be non-primary -SET SESSION wsrep_sync_wait = 0; --let $wait_condition = SELECT variable_value = 'non-Primary' FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE variable_name = 'wsrep_cluster_status'; --source include/wait_condition.inc # Signal node #2 to bootstrap ---connection node_2 SET GLOBAL wsrep_provider_options = 'pc.bootstrap=1'; # Wait until node becomes available for queries again @@ -97,3 +117,8 @@ SELECT COUNT(*) FROM t1; # Test cleanup DROP TABLE t1; + +# +# Restore auto increment variables. +# +--source ../galera/include/auto_increment_offset_restore.inc diff --git a/mysql-test/suite/galera_3nodes/t/galera_pc_weight.cnf b/mysql-test/suite/galera_3nodes/t/galera_pc_weight.cnf index 1a61471d581..833c1437fe0 100644 --- a/mysql-test/suite/galera_3nodes/t/galera_pc_weight.cnf +++ b/mysql-test/suite/galera_3nodes/t/galera_pc_weight.cnf @@ -3,5 +3,3 @@ # interactions with following tests such as # galera_3nodes.galera_var_dirty_reads2 !include ../galera_3nodes.cnf - -!include ../galera_3nodes.cnf diff --git a/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test b/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test index 6ad19e01849..7a9c4e83f87 100644 --- a/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test +++ b/mysql-test/suite/galera_3nodes/t/inconsistency_shutdown.test @@ -76,6 +76,8 @@ SET GLOBAL wsrep_on=OFF; --source include/start_mysqld.inc --source include/galera_wait_ready.inc +--let $wait_condition = SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc DROP TABLE t1; # @@ -100,6 +102,8 @@ CREATE TABLE t2 (f1 INTEGER PRIMARY KEY, f2 INT); SET GLOBAL wsrep_provider_options='gcs.fc_limit=1K'; # Introduce inconsistency SET wsrep_on=OFF; +--let $wait_condition = SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't2'; +--source include/wait_condition.inc DROP TABLE t2; SET wsrep_on=ON; @@ -171,6 +175,9 @@ SET GLOBAL wsrep_on=OFF; --source include/start_mysqld.inc --source include/galera_wait_ready.inc +--let $wait_condition = SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 't1'; +--source include/wait_condition.inc + DROP TABLE t1; CALL mtr.add_suppression('Can\'t find record in \'t1\''); diff --git a/mysql-test/suite/innodb/r/data_types.result b/mysql-test/suite/innodb/r/data_types.result index 1394431b09d..146f9bb080f 100644 --- a/mysql-test/suite/innodb/r/data_types.result +++ b/mysql-test/suite/innodb/r/data_types.result @@ -174,3 +174,10 @@ DROP TABLE t1; CREATE TABLE t1 (c VARCHAR(0), KEY(c)) ENGINE=InnoDB; INSERT INTO t1 VALUES (''); DROP TABLE t1; +# +# MDEV-19216 Assertion ...SYS_FOREIGN failed in btr_node_ptr_max_size +# +CREATE TABLE t1 (b BINARY(0), v VARBINARY(0), KEY(b), KEY(v)) ENGINE=InnoDB; +INSERT INTO t1 SET b='',v=''; +DROP TABLE t1; +# End of 10.4 tests diff --git a/mysql-test/suite/innodb/r/fk_col_alter.result b/mysql-test/suite/innodb/r/fk_col_alter.result new file mode 100644 index 00000000000..edd90e05ecd --- /dev/null +++ b/mysql-test/suite/innodb/r/fk_col_alter.result @@ -0,0 +1,77 @@ +# +# MDEV-31086 MODIFY COLUMN can break FK constraints, and +# lead to unrestorable dumps +# +CREATE TABLE t1( +id SERIAL, +msg VARCHAR(100) CHARACTER SET utf8mb3, +KEY(msg))ENGINE=InnoDB; +CREATE TABLE t2( +id SERIAL, +msg varchar(100) CHARACTER SET utf8mb4, +CONSTRAINT fk_t1 FOREIGN KEY (msg) REFERENCES t1 (msg))ENGINE=InnoDB; +ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed") +CREATE TABLE t2( +id SERIAL, +msg varchar(100) CHARACTER SET utf8mb3, +msg_1 varchar(100) CHARACTER SET utf8mb3, +INDEX (msg_1), +INDEX (msg), +CONSTRAINT fk_t1 FOREIGN KEY (msg) REFERENCES t1 (msg) +ON DELETE CASCADE)ENGINE=InnoDB; +SET FOREIGN_KEY_CHECKS=1; +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=INPLACE; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'test/fk_t1' +SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(400) character set utf8mb3, ALGORITHM=INPLACE; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'test/fk_t1' +SET FOREIGN_KEY_CHECKS=1; +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Collation change on an indexed column. Try ALGORITHM=COPY +SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4,ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4,ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Collation change on an indexed column. Try ALGORITHM=COPY +SET FOREIGN_KEY_CHECKS=1; +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; +ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed") +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Adding foreign keys needs foreign_key_checks=OFF. Try ALGORITHM=COPY +SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; +ERROR HY000: Can't create table `test`.`t2` (errno: 150 "Foreign key constraint is incorrectly formed") +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Collation change on an indexed column. Try ALGORITHM=COPY +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(200) CHARACTER SET utf8mb3, ALGORITHM=INPLACE; +ERROR HY000: Cannot change column 'msg_1': used in a foreign key constraint 'test/t2_ibfk_0' +SET FOREIGN_KEY_CHECKS=1; +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' of table 'test.t2' +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=INPLACE; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'test/fk_t1' of table 'test/t2' +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' of table 'test.t2' +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Collation change on an indexed column. Try ALGORITHM=COPY +SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' of table 'test.t2' +ALTER TABLE t1 MODIFY msg VARCHAR(400) CHARSET utf8mb3, ALGORITHM=INPLACE; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'test/fk_t1' of table 'test/t2' +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +ERROR HY000: Cannot change column 'msg': used in a foreign key constraint 'fk_t1' of table 'test.t2' +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=INPLACE; +ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Collation change on an indexed column. Try ALGORITHM=COPY +SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE t2 DROP FOREIGN KEY fk_t1, MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY (msg) REFERENCES t1(msg), aLGORITHM=INPLACE; +SET FOREIGN_KEY_CHECKS=1; +DROP TABLE t2, t1; diff --git a/mysql-test/suite/innodb/r/foreign_key.result b/mysql-test/suite/innodb/r/foreign_key.result index 851deb69fa5..60012f985b2 100644 --- a/mysql-test/suite/innodb/r/foreign_key.result +++ b/mysql-test/suite/innodb/r/foreign_key.result @@ -246,8 +246,11 @@ CREATE TABLE t1 (a INT, UNIQUE(a), KEY(a)) ENGINE=InnoDB; ALTER TABLE t1 ADD FOREIGN KEY (a) REFERENCES t1 (a); SET SESSION FOREIGN_KEY_CHECKS = OFF; ALTER TABLE t1 CHANGE COLUMN a a TIME NOT NULL; +ERROR HY000: Cannot change column 'a': used in a foreign key constraint 't1_ibfk_1' of table 'test.t1' ALTER TABLE t1 ADD pk INT NOT NULL AUTO_INCREMENT PRIMARY KEY; ALTER TABLE t1 CHANGE COLUMN a b TIME; +ERROR 0A000: ALGORITHM=COPY is not supported. Reason: Columns participating in a foreign key are renamed. Try ALGORITHM=INPLACE +ALTER TABLE t1 CHANGE COLUMN a b TIME, DROP FOREIGN KEY t1_ibfk_1; SET SESSION FOREIGN_KEY_CHECKS = ON; DROP TABLE t1; # diff --git a/mysql-test/suite/innodb/r/innodb.result b/mysql-test/suite/innodb/r/innodb.result index 6f4ea1fa1b9..cf1ff753e77 100644 --- a/mysql-test/suite/innodb/r/innodb.result +++ b/mysql-test/suite/innodb/r/innodb.result @@ -2544,12 +2544,14 @@ set foreign_key_checks=0; create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb; create table t1(a varchar(10) primary key) engine = innodb; alter table t1 modify column a int; +ERROR HY000: Cannot change column 'a': used in a foreign key constraint 't2_ibfk_1' of table 'test.t2' set foreign_key_checks=1; drop table t2,t1; set foreign_key_checks=0; create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=latin1; create table t1(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=latin1; alter table t1 convert to character set utf8; +ERROR HY000: Cannot change column 'a': used in a foreign key constraint 't2_ibfk_1' of table 'test.t2' set foreign_key_checks=1; drop table t2,t1; call mtr.add_suppression("\\[Warning\\] InnoDB: In ALTER TABLE `test`.`t1` has or is referenced in foreign key constraints which are not compatible with the new table definition."); diff --git a/mysql-test/suite/innodb/r/innodb_max_recordsize_32k.result b/mysql-test/suite/innodb/r/innodb_max_recordsize_32k.result deleted file mode 100644 index fc41d0b1471..00000000000 --- a/mysql-test/suite/innodb/r/innodb_max_recordsize_32k.result +++ /dev/null @@ -1,338 +0,0 @@ -SELECT @@innodb_page_size; -@@innodb_page_size -32768 -SET innodb_strict_mode=ON; -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=FIXED; -ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -show warnings; -Level Code Message -Warning 1478 InnoDB: invalid ROW_FORMAT specifier. -Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; -ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -show warnings; -Level Code Message -Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. -Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB -SET @@innodb_strict_mode=OFF; -SELECT @@innodb_strict_mode; -@@innodb_strict_mode -0 -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPACT; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); -ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -SELECT * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPACT; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); -ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); -SELECT * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL -DROP TABLE tab5; -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=DYNAMIC; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=DYNAMIC; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); -ERROR 42000: Row size too large (> 16318). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); -SELECT * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL -DROP TABLE tab5; -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=REDUNDANT; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255)); -ERROR 42000: Row size too large (> 16315). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -SELECT * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=REDUNDANT; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',89),NULL); -ERROR 42000: Row size too large (> 16315). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',88),NULL); -SELECT * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; -Warnings: -Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=DYNAMIC. -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. -DROP TABLE tab5; -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; -SHOW WARNINGS; -Level Code Message -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -LENGTH(col) -16384 -32768 -65535 -FLUSH TABLE t; -ANALYZE TABLE t; -Table Op Msg_type Msg_text -test.t analyze status Engine-independent statistics collected -test.t analyze Warning Engine-independent statistics are not collected for column 'col' -test.t analyze status OK -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -clust_index_size -7 -DROP TABLE t; -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; -SHOW WARNINGS; -Level Code Message -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -LENGTH(col) -16384 -32768 -65535 -FLUSH TABLE t; -ANALYZE TABLE t; -Table Op Msg_type Msg_text -test.t analyze status Engine-independent statistics collected -test.t analyze Warning Engine-independent statistics are not collected for column 'col' -test.t analyze status OK -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -clust_index_size -5 -DROP TABLE t; -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; -SHOW WARNINGS; -Level Code Message -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -LENGTH(col) -16384 -32768 -65535 -FLUSH TABLE t; -ANALYZE TABLE t; -Table Op Msg_type Msg_text -test.t analyze status Engine-independent statistics collected -test.t analyze Warning Engine-independent statistics are not collected for column 'col' -test.t analyze status OK -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -clust_index_size -5 -DROP TABLE t; diff --git a/mysql-test/suite/innodb/r/innodb_max_recordsize_64k.result b/mysql-test/suite/innodb/r/innodb_max_recordsize_64k.result deleted file mode 100644 index a9683016925..00000000000 --- a/mysql-test/suite/innodb/r/innodb_max_recordsize_64k.result +++ /dev/null @@ -1,520 +0,0 @@ -SELECT @@innodb_page_size; -@@innodb_page_size -65536 -SET innodb_strict_mode=ON; -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=FIXED; -ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -show warnings; -Level Code Message -Warning 1478 InnoDB: invalid ROW_FORMAT specifier. -Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; -ERROR HY000: Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -show warnings; -Level Code Message -Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > 16k. -Error 1005 Can't create table `test`.`tab5` (errno: 140 "Wrong create options") -Warning 1030 Got error 140 "Wrong create options" from storage engine InnoDB -SET @@innodb_strict_mode=OFF; -SELECT @@innodb_strict_mode; -@@innodb_strict_mode -0 -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), -ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), -ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), -ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), -ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), -ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), -ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), -ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), -ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), -ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), -ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), -ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) -) -ENGINE = innodb ROW_FORMAT=COMPACT; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); -ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -SELECT * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), -ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), -ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), -ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), -ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), -ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), -ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), -ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), -ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), -ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), -ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), -ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) -) -ENGINE = innodb ROW_FORMAT=COMPACT; -Warnings: -Warning 139 Row size too large (> 32702). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL -); -ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,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 * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL -DROP TABLE tab5; -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), -ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), -ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), -ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), -ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), -ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), -ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), -ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), -ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), -ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), -ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), -ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) -) -ENGINE = innodb ROW_FORMAT=DYNAMIC; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), -ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), -ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), -ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), -ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), -ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), -ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), -ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), -ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), -ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), -ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), -ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) -) -ENGINE = innodb ROW_FORMAT=DYNAMIC; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL -); -ERROR 42000: Row size too large (> 16383). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,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 * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL -DROP TABLE tab5; -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), -ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), -ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), -ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), -ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), -ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), -ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), -ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), -ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), -ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), -ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), -ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) -) -ENGINE = innodb ROW_FORMAT=REDUNDANT; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL -); -ERROR 42000: Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -SELECT * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), -ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), -ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), -ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), -ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), -ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), -ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), -ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), -ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), -ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), -ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), -ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) -) -ENGINE = innodb ROW_FORMAT=REDUNDANT; -Warnings: -Warning 139 Row size too large (> NNNN). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',27),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL -); -ERROR 42000: Row size too large (> 16382). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',26),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,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 * FROM tab5; -col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29 col30 col31 col32 col33 col34 col35 col36 col37 col38 col39 col40 col41 col42 col43 col44 col45 col46 col47 col48 col49 col50 col51 col52 col53 col54 col55 col56 col57 col58 col59 col60 col61 col62 col63 col64 col65 ccol1 ccol2 ccol3 ccol4 ccol5 ccol6 ccol7 ccol8 ccol9 ccol10 ccol11 ccol12 ccol13 ccol14 ccol15 ccol16 ccol17 ccol18 ccol19 ccol20 ccol21 ccol22 ccol23 ccol24 ccol25 ccol26 ccol27 ccol28 ccol29 ccol30 ccol31 ccol32 ccol33 ccol34 ccol35 ccol36 ccol37 ccol38 ccol39 ccol40 ccol41 ccol42 ccol43 ccol44 ccol45 ccol46 ccol47 ccol48 ccol49 ccol50 ccol51 ccol52 ccol53 ccol54 ccol55 ccol56 ccol57 ccol58 ccol59 ccol60 ccol61 ccol62 ccol63 ccol64 ccol65 -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaa NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL -DROP TABLE tab5; -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; -Warnings: -Warning 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=DYNAMIC. -DROP TABLE tab5; -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; -SHOW WARNINGS; -Level Code Message -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -LENGTH(col) -16384 -32768 -65535 -FLUSH TABLE t; -ANALYZE TABLE t; -Table Op Msg_type Msg_text -test.t analyze status Engine-independent statistics collected -test.t analyze Warning Engine-independent statistics are not collected for column 'col' -test.t analyze status OK -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -clust_index_size -5 -DROP TABLE t; -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; -SHOW WARNINGS; -Level Code Message -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -LENGTH(col) -16384 -32768 -65535 -FLUSH TABLE t; -ANALYZE TABLE t; -Table Op Msg_type Msg_text -test.t analyze status Engine-independent statistics collected -test.t analyze Warning Engine-independent statistics are not collected for column 'col' -test.t analyze status OK -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -clust_index_size -4 -DROP TABLE t; -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; -SHOW WARNINGS; -Level Code Message -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -LENGTH(col) -16384 -32768 -65535 -FLUSH TABLE t; -ANALYZE TABLE t; -Table Op Msg_type Msg_text -test.t analyze status Engine-independent statistics collected -test.t analyze Warning Engine-independent statistics are not collected for column 'col' -test.t analyze status OK -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -clust_index_size -4 -DROP TABLE t; diff --git a/mysql-test/suite/innodb/r/trx_sys_t_find_lf_hash_error.result b/mysql-test/suite/innodb/r/trx_sys_t_find_lf_hash_error.result new file mode 100644 index 00000000000..11d3fb4a7a3 --- /dev/null +++ b/mysql-test/suite/innodb/r/trx_sys_t_find_lf_hash_error.result @@ -0,0 +1,25 @@ +create table t1 (a int) engine=innodb STATS_PERSISTENT=0; +create table t2 (a int) engine=innodb STATS_PERSISTENT=0; +BEGIN; +insert into t1 values(1); +connect con_1, localhost, root,,; +SET DEBUG_SYNC="before_trx_hash_find_element_mutex_enter SIGNAL before_mutex_enter WAIT_FOR cont1"; +SET DEBUG_SYNC="after_trx_hash_find_element_mutex_enter SIGNAL after_mutex_enter WAIT_FOR cont2"; +SELECT * FROM t1 WHERE a = 1 FOR UPDATE; +connection default; +SET DEBUG_SYNC="now WAIT_FOR before_mutex_enter"; +COMMIT; +SET DEBUG_SYNC="now SIGNAL cont1"; +SET DEBUG_SYNC="now WAIT_FOR after_mutex_enter"; +insert into t2 values(1); +BEGIN; +INSERT INTO t2 VALUES(2); +SET DEBUG_SYNC="now SIGNAL cont2"; +connection con_1; +a +1 +disconnect con_1; +connection default; +DROP TABLE t1; +DROP TABLE t2; +SET DEBUG_SYNC="reset"; diff --git a/mysql-test/suite/innodb/t/data_types.test b/mysql-test/suite/innodb/t/data_types.test index cfdd5201af2..eda6579ba4a 100644 --- a/mysql-test/suite/innodb/t/data_types.test +++ b/mysql-test/suite/innodb/t/data_types.test @@ -136,3 +136,13 @@ DROP TABLE t1; CREATE TABLE t1 (c VARCHAR(0), KEY(c)) ENGINE=InnoDB; INSERT INTO t1 VALUES (''); DROP TABLE t1; + +--echo # +--echo # MDEV-19216 Assertion ...SYS_FOREIGN failed in btr_node_ptr_max_size +--echo # + +CREATE TABLE t1 (b BINARY(0), v VARBINARY(0), KEY(b), KEY(v)) ENGINE=InnoDB; +INSERT INTO t1 SET b='',v=''; +DROP TABLE t1; + +--echo # End of 10.4 tests diff --git a/mysql-test/suite/innodb/t/fk_col_alter.test b/mysql-test/suite/innodb/t/fk_col_alter.test new file mode 100644 index 00000000000..d8b9afc92ad --- /dev/null +++ b/mysql-test/suite/innodb/t/fk_col_alter.test @@ -0,0 +1,106 @@ +--source include/have_innodb.inc +--echo # +--echo # MDEV-31086 MODIFY COLUMN can break FK constraints, and +--echo # lead to unrestorable dumps +--echo # +CREATE TABLE t1( + id SERIAL, + msg VARCHAR(100) CHARACTER SET utf8mb3, + KEY(msg))ENGINE=InnoDB; + +--error ER_CANT_CREATE_TABLE +CREATE TABLE t2( +id SERIAL, +msg varchar(100) CHARACTER SET utf8mb4, +CONSTRAINT fk_t1 FOREIGN KEY (msg) REFERENCES t1 (msg))ENGINE=InnoDB; + +CREATE TABLE t2( +id SERIAL, +msg varchar(100) CHARACTER SET utf8mb3, +msg_1 varchar(100) CHARACTER SET utf8mb3, +INDEX (msg_1), +INDEX (msg), +CONSTRAINT fk_t1 FOREIGN KEY (msg) REFERENCES t1 (msg) +ON DELETE CASCADE)ENGINE=InnoDB; + +# Changing column used in FK constraint +SET FOREIGN_KEY_CHECKS=1; +--error ER_FK_COLUMN_CANNOT_CHANGE +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=COPY; +--error ER_FK_COLUMN_CANNOT_CHANGE +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=INPLACE; + +SET FOREIGN_KEY_CHECKS=0; +--error ER_FK_COLUMN_CANNOT_CHANGE +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(200) character set utf8mb3, ALGORITHM=COPY; +--error ER_FK_COLUMN_CANNOT_CHANGE +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(400) character set utf8mb3, ALGORITHM=INPLACE; + +# Changing column charset used in FK constraint +SET FOREIGN_KEY_CHECKS=1; +--error ER_FK_COLUMN_CANNOT_CHANGE +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; + +SET FOREIGN_KEY_CHECKS=0; +--error ER_FK_COLUMN_CANNOT_CHANGE +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4,ALGORITHM=COPY; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t2 MODIFY COLUMN msg VARCHAR(100) CHARACTER SET utf8mb4,ALGORITHM=INPLACE; + +# Modify the column in the newly added foreign constraint +SET FOREIGN_KEY_CHECKS=1; +--error ER_CANT_CREATE_TABLE +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; + + +SET FOREIGN_KEY_CHECKS=0; +--error ER_CANT_CREATE_TABLE +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=COPY; + +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(100) CHARACTER SET utf8mb4, ALGORITHM=INPLACE; + +--error ER_FK_COLUMN_CANNOT_CHANGE +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY(msg_1) REFERENCES t1(msg),MODIFY COLUMN msg_1 VARCHAR(200) CHARACTER SET utf8mb3, ALGORITHM=INPLACE; + +# Change referenced table column +SET FOREIGN_KEY_CHECKS=1; +# Change referenced column length +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=COPY; +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=INPLACE; +# Change referenced column character set +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=INPLACE; + +SET FOREIGN_KEY_CHECKS=0; +# Change referenced column length +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb3, ALGORITHM=COPY; +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD +ALTER TABLE t1 MODIFY msg VARCHAR(400) CHARSET utf8mb3, ALGORITHM=INPLACE; + +# Change referenced column character set +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=INPLACE; + +# Correct way to change character set in foreign key constraint +SET FOREIGN_KEY_CHECKS=0; +ALTER TABLE t2 DROP FOREIGN KEY fk_t1, MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +ALTER TABLE t1 MODIFY msg VARCHAR(200) CHARSET utf8mb4, ALGORITHM=COPY; +ALTER TABLE t2 ADD CONSTRAINT FOREIGN KEY (msg) REFERENCES t1(msg), aLGORITHM=INPLACE; +SET FOREIGN_KEY_CHECKS=1; + +DROP TABLE t2, t1; diff --git a/mysql-test/suite/innodb/t/foreign_key.test b/mysql-test/suite/innodb/t/foreign_key.test index 135f8d7b024..8b751b97f0c 100644 --- a/mysql-test/suite/innodb/t/foreign_key.test +++ b/mysql-test/suite/innodb/t/foreign_key.test @@ -239,9 +239,12 @@ DROP TABLE t3,t1; CREATE TABLE t1 (a INT, UNIQUE(a), KEY(a)) ENGINE=InnoDB; ALTER TABLE t1 ADD FOREIGN KEY (a) REFERENCES t1 (a); SET SESSION FOREIGN_KEY_CHECKS = OFF; +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD ALTER TABLE t1 CHANGE COLUMN a a TIME NOT NULL; ALTER TABLE t1 ADD pk INT NOT NULL AUTO_INCREMENT PRIMARY KEY; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ALTER TABLE t1 CHANGE COLUMN a b TIME; +ALTER TABLE t1 CHANGE COLUMN a b TIME, DROP FOREIGN KEY t1_ibfk_1; SET SESSION FOREIGN_KEY_CHECKS = ON; DROP TABLE t1; diff --git a/mysql-test/suite/innodb/t/innodb.test b/mysql-test/suite/innodb/t/innodb.test index 090c9b2b034..ec217715aef 100644 --- a/mysql-test/suite/innodb/t/innodb.test +++ b/mysql-test/suite/innodb/t/innodb.test @@ -1622,6 +1622,7 @@ drop table t1; set foreign_key_checks=0; create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb; create table t1(a varchar(10) primary key) engine = innodb; +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD alter table t1 modify column a int; set foreign_key_checks=1; drop table t2,t1; @@ -1631,6 +1632,7 @@ drop table t2,t1; set foreign_key_checks=0; create table t2 (a varchar(10), foreign key (a) references t1(a)) engine = innodb DEFAULT CHARSET=latin1; create table t1(a varchar(10) primary key) engine = innodb DEFAULT CHARSET=latin1; +--error ER_FK_COLUMN_CANNOT_CHANGE_CHILD alter table t1 convert to character set utf8; set foreign_key_checks=1; drop table t2,t1; diff --git a/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.opt b/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.opt deleted file mode 100644 index 587a2d7e6c1..00000000000 --- a/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.opt +++ /dev/null @@ -1,4 +0,0 @@ ---innodb-page-size=32K ---innodb_buffer_pool_size=32M ---skip-innodb-stats-persistent ---innodb-sys-tablestats diff --git a/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.test b/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.test deleted file mode 100644 index 89bace5d9b1..00000000000 --- a/mysql-test/suite/innodb/t/innodb_max_recordsize_32k.test +++ /dev/null @@ -1,327 +0,0 @@ ---source include/have_innodb.inc ---source include/have_innodb_32k.inc - -# Check page size 32k -SELECT @@innodb_page_size; - -SET innodb_strict_mode=ON; - -# FIXED not supported --- error 1005 -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=FIXED; -show warnings; - --- error 1005 -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; -show warnings; - ---disable_warnings -SET @@innodb_strict_mode=OFF; -SELECT @@innodb_strict_mode; ---enable_warnings - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPACT; - -# row size 16353 > 16K ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); - -SELECT * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPACT; - -# row size 16318 : expected to fail ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); - -# row size 16317 -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); - -SELECT * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=DYNAMIC; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=DYNAMIC; - -# row size 16318 : expected to fail ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',156),NULL); - -# row size 16317 -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',155),NULL); - -SELECT * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=REDUNDANT; - -# 65 * 255 = 16575 ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255)); - -SELECT * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=REDUNDANT; - -# row size 16315 : expected to fail ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',89),NULL); - -# row size 16314 -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',88),NULL); - -SELECT * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=COMPACT ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; - -DROP TABLE tab5; - -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; -SHOW WARNINGS; -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -FLUSH TABLE t; -ANALYZE TABLE t; -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -DROP TABLE t; - -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; -SHOW WARNINGS; -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -FLUSH TABLE t; -ANALYZE TABLE t; -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -DROP TABLE t; - -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; -SHOW WARNINGS; -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -FLUSH TABLE t; -ANALYZE TABLE t; -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -DROP TABLE t; diff --git a/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.opt b/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.opt deleted file mode 100644 index 1a8442b841f..00000000000 --- a/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.opt +++ /dev/null @@ -1,4 +0,0 @@ ---innodb-page-size=64K ---innodb_buffer_pool_size=32M ---skip-innodb-stats-persistent ---innodb-sys-tablestats diff --git a/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.test b/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.test deleted file mode 100644 index 4b4faf16f58..00000000000 --- a/mysql-test/suite/innodb/t/innodb_max_recordsize_64k.test +++ /dev/null @@ -1,508 +0,0 @@ ---source include/have_innodb.inc ---source include/have_innodb_64k.inc - -# Check page size 64k -SELECT @@innodb_page_size; - -SET innodb_strict_mode=ON; - -# FIXED not supported --- error 1005 -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=FIXED; -show warnings; - --- error 1005 -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; -show warnings; - ---disable_warnings -SET @@innodb_strict_mode=OFF; -SELECT @@innodb_strict_mode; ---enable_warnings - -# Check the Warning | 139 | Row size too large ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), -ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), -ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), -ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), -ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), -ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), -ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), -ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), -ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), -ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), -ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), -ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) -) -ENGINE = innodb ROW_FORMAT=COMPACT; - -# row size 32936 : should fail ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),'a',NULL); - -SELECT * FROM tab5; -DROP TABLE tab5; - -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), -ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), -ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), -ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), -ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), -ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), -ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), -ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), -ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), -ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), -ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), -ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) -) -ENGINE = innodb ROW_FORMAT=COMPACT; - -# row size 16384 >= 16K : expected to fail ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL -); - -# row size 16383 < 16K : expected to pass -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,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 * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), -ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), -ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), -ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), -ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), -ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), -ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), -ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), -ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), -ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), -ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), -ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) -) -ENGINE = innodb ROW_FORMAT=DYNAMIC; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large (> 16318) ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), -ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), -ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), -ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), -ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), -ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), -ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), -ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), -ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), -ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), -ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), -ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) -) -ENGINE = innodb ROW_FORMAT=DYNAMIC; - -# row size 16384 >= 16K : expected to fail ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',214),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL -); - -# row size 16383 < 16K : expected to pass -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',213),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,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 * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 CHAR (255), col2 CHAR (255), col3 CHAR(255),col4 CHAR(255), col5 CHAR(255), -col6 CHAR(255), col7 CHAR(255), col8 CHAR(255), col9 CHAR(255),col10 CHAR(255), col11 CHAR(255), -col12 CHAR(255), col13 CHAR(255),col14 CHAR(255),col15 CHAR(255),col16 CHAR(255), col17 CHAR(255), -col18 CHAR(255),col19 CHAR(255),col20 CHAR(255),col21 CHAR(255),col22 CHAR(255), col23 CHAR(255), -col24 CHAR(255),col25 CHAR(255),col26 CHAR(255),col27 CHAR(255),col28 CHAR(255), col29 CHAR(255), -col30 CHAR(255),col31 CHAR(255),col32 CHAR(255),col33 CHAR(255),col34 CHAR(255), col35 CHAR(255), -col36 CHAR(255),col37 CHAR(255),col38 CHAR(255),col39 CHAR(255),col40 CHAR(255), col41 CHAR(255), -col42 CHAR(255),col43 CHAR(255),col44 CHAR(255),col45 CHAR(255),col46 CHAR(255), col47 CHAR(255), -col48 CHAR(255),col49 CHAR(255),col50 CHAR(255),col51 CHAR(255),col52 CHAR(255), col53 CHAR(255), -col54 CHAR(255),col55 CHAR(255),col56 CHAR(255),col57 CHAR(255),col58 CHAR(255), col59 CHAR(255), -col60 CHAR(255),col61 CHAR(255),col62 CHAR(255),col63 CHAR(255),col64 CHAR(255), col65 CHAR(255), -ccol1 CHAR(255),ccol2 CHAR(255),ccol3 CHAR(255),ccol4 CHAR(255),ccol5 CHAR(255), -ccol6 CHAR(255),ccol7 CHAR(255),ccol8 CHAR(255),ccol9 CHAR(255),ccol10 CHAR(255), ccol11 CHAR(255), -ccol12 CHAR(255),ccol13 CHAR(255),ccol14 CHAR(255),ccol15 CHAR(255),ccol16 CHAR(255), ccol17 CHAR(255), -ccol18 CHAR(255),ccol19 CHAR(255),ccol20 CHAR(255),ccol21 CHAR(255),ccol22 CHAR(255), ccol23 CHAR(255), -ccol24 CHAR(255),ccol25 CHAR(255),ccol26 CHAR(255),ccol27 CHAR(255),ccol28 CHAR(255), ccol29 CHAR(255), -ccol30 CHAR(255),ccol31 CHAR(255),ccol32 CHAR(255),ccol33 CHAR(255),ccol34 CHAR(255), ccol35 CHAR(255), -ccol36 CHAR(255),ccol37 CHAR(255),ccol38 CHAR(255),ccol39 CHAR(255),ccol40 CHAR(255), ccol41 CHAR(255), -ccol42 CHAR(255),ccol43 CHAR(255),ccol44 CHAR(255),ccol45 CHAR(255),ccol46 CHAR(255), ccol47 CHAR(255), -ccol48 CHAR(255),ccol49 CHAR(255),ccol50 CHAR(255),ccol51 CHAR(255),ccol52 CHAR(255), ccol53 CHAR(255), -ccol54 CHAR(255),ccol55 CHAR(255),ccol56 CHAR(255),ccol57 CHAR(255),ccol58 CHAR(255), ccol59 CHAR(255), -ccol60 CHAR(255),ccol61 CHAR(255),ccol62 CHAR(255),ccol63 CHAR(255),ccol64 CHAR(255), ccol65 CHAR(255) -) -ENGINE = innodb ROW_FORMAT=REDUNDANT; - -# 65 * 255 = 16575 ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,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 * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 139 | Row size too large ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255), -ccol1 VARCHAR(255),ccol2 VARCHAR(255),ccol3 VARCHAR(255),ccol4 VARCHAR(255),ccol5 VARCHAR(255), -ccol6 VARCHAR(255),ccol7 VARCHAR(255),ccol8 VARCHAR(255),ccol9 VARCHAR(255),ccol10 VARCHAR(255), ccol11 VARCHAR(255), -ccol12 VARCHAR(255),ccol13 VARCHAR(255),ccol14 VARCHAR(255),ccol15 VARCHAR(255),ccol16 VARCHAR(255), ccol17 VARCHAR(255), -ccol18 VARCHAR(255),ccol19 VARCHAR(255),ccol20 VARCHAR(255),ccol21 VARCHAR(255),ccol22 VARCHAR(255), ccol23 VARCHAR(255), -ccol24 VARCHAR(255),ccol25 VARCHAR(255),ccol26 VARCHAR(255),ccol27 VARCHAR(255),ccol28 VARCHAR(255), ccol29 VARCHAR(255), -ccol30 VARCHAR(255),ccol31 VARCHAR(255),ccol32 VARCHAR(255),ccol33 VARCHAR(255),ccol34 VARCHAR(255), ccol35 VARCHAR(255), -ccol36 VARCHAR(255),ccol37 VARCHAR(255),ccol38 VARCHAR(255),ccol39 VARCHAR(255),ccol40 VARCHAR(255), ccol41 VARCHAR(255), -ccol42 VARCHAR(255),ccol43 VARCHAR(255),ccol44 VARCHAR(255),ccol45 VARCHAR(255),ccol46 VARCHAR(255), ccol47 VARCHAR(255), -ccol48 VARCHAR(255),ccol49 VARCHAR(255),ccol50 VARCHAR(255),ccol51 VARCHAR(255),ccol52 VARCHAR(255), ccol53 VARCHAR(255), -ccol54 VARCHAR(255),ccol55 VARCHAR(255),ccol56 VARCHAR(255),ccol57 VARCHAR(255),ccol58 VARCHAR(255), ccol59 VARCHAR(255), -ccol60 VARCHAR(255),ccol61 VARCHAR(255),ccol62 VARCHAR(255),ccol63 VARCHAR(255),ccol64 VARCHAR(255), ccol65 VARCHAR(255) -) -ENGINE = innodb ROW_FORMAT=REDUNDANT; - -# row size 16383 >= 16K-1 : expected to fail ---error ER_TOO_BIG_ROWSIZE -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',27),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL -); - -# row size 16382 < 16K-1 : expected to pass -INSERT INTO tab5 values(repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',255), -repeat('a',255),repeat('a',255),repeat('a',255),repeat('a',26),NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,NULL,NULL,NULL,NULL, -NULL,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 * FROM tab5; -DROP TABLE tab5; - -# Check the Warning | 1478 InnoDB: Cannot create a COMPRESSED table when innodb_page_size > NNNNk. Assuming ROW_FORMAT=COMPACT ---replace_regex /> [0-9]+/> NNNN/ -CREATE TABLE tab5(col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR(255),col4 VARCHAR(255), col5 VARCHAR(255), -col6 VARCHAR(255), col7 VARCHAR(255), col8 VARCHAR(255), col9 VARCHAR(255),col10 VARCHAR(255), col11 VARCHAR(255), -col12 VARCHAR(255), col13 VARCHAR(255),col14 VARCHAR(255),col15 VARCHAR(255),col16 VARCHAR(255), col17 VARCHAR(255), -col18 VARCHAR(255),col19 VARCHAR(255),col20 VARCHAR(255),col21 VARCHAR(255),col22 VARCHAR(255), col23 VARCHAR(255), -col24 VARCHAR(255),col25 VARCHAR(255),col26 VARCHAR(255),col27 VARCHAR(255),col28 VARCHAR(255), col29 VARCHAR(255), -col30 VARCHAR(255),col31 VARCHAR(255),col32 VARCHAR(255),col33 VARCHAR(255),col34 VARCHAR(255), col35 VARCHAR(255), -col36 VARCHAR(255),col37 VARCHAR(255),col38 VARCHAR(255),col39 VARCHAR(255),col40 VARCHAR(255), col41 VARCHAR(255), -col42 VARCHAR(255),col43 VARCHAR(255),col44 VARCHAR(255),col45 VARCHAR(255),col46 VARCHAR(255), col47 VARCHAR(255), -col48 VARCHAR(255),col49 VARCHAR(255),col50 VARCHAR(255),col51 VARCHAR(255),col52 VARCHAR(255), col53 VARCHAR(255), -col54 VARCHAR(255),col55 VARCHAR(255),col56 VARCHAR(255),col57 VARCHAR(255),col58 VARCHAR(255), col59 VARCHAR(255), -col60 VARCHAR(255),col61 VARCHAR(255),col62 VARCHAR(255),col63 VARCHAR(255),col64 VARCHAR(255), col65 VARCHAR(255)) -ENGINE = innodb ROW_FORMAT=COMPRESSED; - -DROP TABLE tab5; - -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; -SHOW WARNINGS; -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -FLUSH TABLE t; -ANALYZE TABLE t; -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -DROP TABLE t; - -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; -SHOW WARNINGS; -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -FLUSH TABLE t; -ANALYZE TABLE t; -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -DROP TABLE t; - -CREATE TABLE t(col BLOB) ENGINE=InnoDB ROW_FORMAT=COMPACT; -SHOW WARNINGS; -INSERT INTO t VALUES (REPEAT('a',16384)); -INSERT INTO t VALUES (REPEAT('a',32768)); -INSERT INTO t VALUES (REPEAT('a',65535)); -SELECT LENGTH(col) FROM t; -FLUSH TABLE t; -ANALYZE TABLE t; -SELECT clust_index_size FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS -WHERE name = 'test/t'; -DROP TABLE t; diff --git a/mysql-test/suite/innodb/t/trx_sys_t_find_lf_hash_error.test b/mysql-test/suite/innodb/t/trx_sys_t_find_lf_hash_error.test new file mode 100644 index 00000000000..833919f9ad6 --- /dev/null +++ b/mysql-test/suite/innodb/t/trx_sys_t_find_lf_hash_error.test @@ -0,0 +1,87 @@ +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/count_sessions.inc + +create table t1 (a int) engine=innodb STATS_PERSISTENT=0; +create table t2 (a int) engine=innodb STATS_PERSISTENT=0; + +BEGIN; # trx1 +# register rw-transaction in trx_sys.rw_trx_hash +insert into t1 values(1); + +--connect (con_1, localhost, root,,) +SET DEBUG_SYNC="before_trx_hash_find_element_mutex_enter SIGNAL before_mutex_enter WAIT_FOR cont1"; +SET DEBUG_SYNC="after_trx_hash_find_element_mutex_enter SIGNAL after_mutex_enter WAIT_FOR cont2"; + +# trx2 is converting implicit lock of trx1 to explicit one, it's invoking +# ▾ l_search +# ▾ lf_hash_search_using_hash_value +# ▾ lf_hash_search +# ▾ rw_trx_hash_t::find +# ▾ trx_sys_t::find +# ▾ lock_rec_convert_impl_to_expl +# rw_trx_hash_t::find returns lf_hash element, pin 2 is pinned, +# but element->mutex has not been acquired yet, what allows trx1 element to be +# removed from trx_sys.rw_trx_hash at one hand, and at the other hand, the +# content of the element is still valid as it's pinned. +# +# trx2 +--send SELECT * FROM t1 WHERE a = 1 FOR UPDATE +--connection default +SET DEBUG_SYNC="now WAIT_FOR before_mutex_enter"; +--disable_query_log +SET @saved_dbug = @@debug_dbug; + +# Usually pinbox purgatory is purged either when the number of elements in +# purgatory is greater then some limit(see lf_pinbox_free()), or when thread +# invokes rw_trx_hash_t::put_pins() explicitly. For this test the first +# variant was choosen. The following option makes lf_pinbox_free() to purge +# pinbox purgatory on each call, ignoring pins->purgatory_count. +SET DEBUG_DBUG='+d,unconditional_pinbox_free'; +--enable_query_log + +# trx1 is committed and removed from trx_sys.rw_trx_hash. It can be done as +# trx2 has not been acquired element->mutex yet. +COMMIT; +--disable_query_log +SET DEBUG_DBUG = @saved_dbug; +--enable_query_log + +# Let trx2 to acquire element->mutex and unpin pin 2 +SET DEBUG_SYNC="now SIGNAL cont1"; +SET DEBUG_SYNC="now WAIT_FOR after_mutex_enter"; + +--disable_query_log +SET @saved_dbug = @@debug_dbug; +SET DEBUG_DBUG='+d,unconditional_pinbox_free'; +--enable_query_log +# trx3 commits and invokes lf_pinbox_free(), which purges pin 2 of trx2 and +# places its pointer on trx_sys.rw_trx_hash.hash.alloc.top. +insert into t2 values(1); +--disable_query_log +SET DEBUG_DBUG = @saved_dbug; +--enable_query_log + +BEGIN; # trx4 +# trx_sys.rw_trx_hash.hash.alloc.top points to "freed" trx2 lf_hash element, +# lf_alloc_new() gets the pointer from trx_sys.rw_trx_hash.hash.alloc.top, +# so the memory for lf_hash element will be reused for trx4 if MDEV-31185 is +# not fixed +INSERT INTO t2 VALUES(2); + +# let trx2 to invoke DBUG_ASSERT(trx_id == trx->id) and crash if MDEV-31185 +# is not fixed +SET DEBUG_SYNC="now SIGNAL cont2"; + +--connection con_1 +# trx 2 assertion failure if MDEV-31185 is not fixed +--reap +--disconnect con_1 +--connection default +DROP TABLE t1; +DROP TABLE t2; + +SET DEBUG_SYNC="reset"; + +--source include/wait_until_count_sessions.inc diff --git a/mysql-test/suite/maria/encrypt-no-key.result b/mysql-test/suite/maria/encrypt-no-key.result index 6745670dfac..32a280d8cbc 100644 --- a/mysql-test/suite/maria/encrypt-no-key.result +++ b/mysql-test/suite/maria/encrypt-no-key.result @@ -1,15 +1,27 @@ -call mtr.add_suppression('Unknown key id 1. Can''t continue'); +call mtr.add_suppression("Initialization of encryption failed.*"); set global aria_encrypt_tables= 1; create table t1 (pk int primary key, a int, key(a)) engine=aria transactional=1; -alter table t1 disable keys; -insert into t1 values (1,1); -alter table t1 enable keys; -ERROR HY000: Unknown key id 1. Can't continue! -repair table t1 use_frm; -Table Op Msg_type Msg_text -test.t1 repair warning Number of rows changed from 0 to 1 -test.t1 repair Error Unknown key id 1. Can't continue! -test.t1 repair Error Unknown key id 1. Can't continue! -test.t1 repair status OK -drop table t1; +ERROR HY000: Initialization of encryption failed for ./test/t1 set global aria_encrypt_tables= default; +# +# MDEV-26258 Various crashes/asserts/corruptions when Aria encryption is +# enabled/used, but the encryption plugin is not loaded +# +SET GLOBAL aria_encrypt_tables=ON; +CREATE TABLE t1 (a INT KEY,b INT,KEY(b)) ENGINE=Aria; +ERROR HY000: Initialization of encryption failed for ./test/t1 +# Restart with encryption enabled +CREATE TABLE t1 (a INT KEY,b INT,KEY(b)) ENGINE=Aria; +INSERT INTO t1 VALUES (4,0); +LOAD INDEX INTO CACHE t1 IGNORE LEAVES; +Table Op Msg_type Msg_text +test.t1 preload_keys status OK +LOAD INDEX INTO CACHE t1; +Table Op Msg_type Msg_text +test.t1 preload_keys status OK +SELECT * FROM t1; +ERROR HY000: Initialization of encryption failed for ./test/t1.MAD +DROP TABLE t1; +Warnings: +Warning 199 Initialization of encryption failed for ./test/t1.MAD +Cleanup diff --git a/mysql-test/suite/maria/encrypt-no-key.test b/mysql-test/suite/maria/encrypt-no-key.test index 2d586c50695..89c50d79a54 100644 --- a/mysql-test/suite/maria/encrypt-no-key.test +++ b/mysql-test/suite/maria/encrypt-no-key.test @@ -1,14 +1,56 @@ +--source include/not_embedded.inc # # MDEV-18496 Crash when Aria encryption is enabled but plugin not available # -call mtr.add_suppression('Unknown key id 1. Can''t continue'); +call mtr.add_suppression("Initialization of encryption failed.*"); set global aria_encrypt_tables= 1; +--error HA_ERR_NO_ENCRYPTION create table t1 (pk int primary key, a int, key(a)) engine=aria transactional=1; -alter table t1 disable keys; -insert into t1 values (1,1); -error 192; -alter table t1 enable keys; -repair table t1 use_frm; -drop table t1; set global aria_encrypt_tables= default; + +--echo # +--echo # MDEV-26258 Various crashes/asserts/corruptions when Aria encryption is +--echo # enabled/used, but the encryption plugin is not loaded +--echo # + +SET GLOBAL aria_encrypt_tables=ON; + +--write_file $MYSQLTEST_VARDIR/keys1.txt +1;770A8A65DA156D24EE2A093277530142 +EOF + +--replace_result \\ / +--error HA_ERR_NO_ENCRYPTION +CREATE TABLE t1 (a INT KEY,b INT,KEY(b)) ENGINE=Aria; + +--echo # Restart with encryption enabled + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc +--exec echo "restart:--aria-encrypt-tables=1 --plugin-load-add=file_key_management --file-key-management --file-key-management-filename=$MYSQLTEST_VARDIR/keys1.txt" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +CREATE TABLE t1 (a INT KEY,b INT,KEY(b)) ENGINE=Aria; +INSERT INTO t1 VALUES (4,0); +LOAD INDEX INTO CACHE t1 IGNORE LEAVES; +LOAD INDEX INTO CACHE t1; + +# Restart without encryption. Above table should be unreadable + +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--shutdown_server +--source include/wait_until_disconnected.inc +--exec echo "restart:--aria-encrypt-tables=0" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +--enable_reconnect +--source include/wait_until_connected_again.inc + +--replace_result \\ / +--error HA_ERR_NO_ENCRYPTION +SELECT * FROM t1; +DROP TABLE t1; + +--echo Cleanup +--remove_file $MYSQLTEST_VARDIR/keys1.txt diff --git a/mysql-test/suite/maria/encrypt-wrong-key.result b/mysql-test/suite/maria/encrypt-wrong-key.result index bc22481296d..4ff057957da 100644 --- a/mysql-test/suite/maria/encrypt-wrong-key.result +++ b/mysql-test/suite/maria/encrypt-wrong-key.result @@ -1,16 +1,16 @@ call mtr.add_suppression("file_key_management"); call mtr.add_suppression("System key id 1 is missing"); call mtr.add_suppression("Unknown key id 1"); -call mtr.add_suppression("Failed to decrypt"); +call mtr.add_suppression("Initialization of encryption failed.*"); CREATE TABLE t1 (i INT, KEY(i)) ENGINE=Aria; INSERT INTO t1 VALUES (1); repair table t1; Table Op Msg_type Msg_text -test.t1 repair info Wrong CRC on datapage at 1 -test.t1 repair warning Number of rows changed from 1 to 0 -test.t1 repair status OK +test.t1 repair Error Initialization of encryption failed for ./test/t1.MAD +test.t1 repair error Corrupt INSERT INTO t1 VALUES (2); +ERROR HY000: Initialization of encryption failed for ./test/t1.MAD select * from t1; -ERROR HY000: failed to decrypt './test/t1' rc: -1 dstlen: 0 size: 8172 - +i +1 drop table t1; diff --git a/mysql-test/suite/maria/encrypt-wrong-key.test b/mysql-test/suite/maria/encrypt-wrong-key.test index ca65e1018d0..ac060c4e9dd 100644 --- a/mysql-test/suite/maria/encrypt-wrong-key.test +++ b/mysql-test/suite/maria/encrypt-wrong-key.test @@ -7,7 +7,7 @@ call mtr.add_suppression("file_key_management"); call mtr.add_suppression("System key id 1 is missing"); call mtr.add_suppression("Unknown key id 1"); -call mtr.add_suppression("Failed to decrypt"); +call mtr.add_suppression("Initialization of encryption failed.*"); --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --shutdown_server @@ -36,8 +36,11 @@ EOF --enable_reconnect --source include/wait_until_connected_again.inc +--replace_result \\ / repair table t1; +--replace_result \\ / +--error HA_ERR_NO_ENCRYPTION INSERT INTO t1 VALUES (2); --exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect @@ -48,8 +51,6 @@ INSERT INTO t1 VALUES (2); --enable_reconnect --source include/wait_until_connected_again.inc ---replace_result \\ / ---error 192 select * from t1; drop table t1; --remove_file $MYSQLTEST_VARDIR/keys1.txt diff --git a/mysql-test/suite/maria/maria-64bit.result b/mysql-test/suite/maria/maria-64bit.result new file mode 100644 index 00000000000..77ba9727888 --- /dev/null +++ b/mysql-test/suite/maria/maria-64bit.result @@ -0,0 +1,57 @@ +set session storage_engine=aria; +Warnings: +Warning 1287 '@@storage_engine' is deprecated and will be removed in a future release. Please use '@@default_storage_engine' instead +# +# BUG#47444 - --myisam_repair_threads > 1 can result in all index +# cardinalities=1 +# +SET aria_repair_threads=2; +SET aria_sort_buffer_size=16384; +CREATE TABLE t1(a CHAR(255), KEY(a), KEY(a), KEY(a)); +Warnings: +Note 1831 Duplicate index `a_2`. This is deprecated and will be disallowed in a future release +Note 1831 Duplicate index `a_3`. This is deprecated and will be disallowed in a future release +INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(0),(1),(2),(3); +REPAIR TABLE t1; +Table Op Msg_type Msg_text +test.t1 repair status OK +SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'; +CARDINALITY +14 +14 +14 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +DROP TABLE t1; +SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; +SET aria_repair_threads=@@global.aria_repair_threads; +# +# BUG#47073 - valgrind errs, corruption,failed repair of partition, +# low myisam_sort_buffer_size +# +CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b)); +INSERT INTO t1 select seq,'0' from seq_1_to_65536; +SET aria_sort_buffer_size=16384; +REPAIR TABLE t1; +Table Op Msg_type Msg_text +test.t1 repair error aria_sort_buffer_size is too small. X +test.t1 repair error Create index by sort failed +test.t1 repair info Retrying repair with keycache +test.t1 repair status OK +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SET aria_repair_threads=2; +REPAIR TABLE t1; +Table Op Msg_type Msg_text +test.t1 repair error aria_sort_buffer_size is too small. X +test.t1 repair error Create index by sort failed +test.t1 repair info Retrying repair with keycache +test.t1 repair status OK +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check status OK +SET aria_repair_threads=@@global.aria_repair_threads; +SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; +DROP TABLE t1; diff --git a/mysql-test/suite/maria/maria-64bit.test b/mysql-test/suite/maria/maria-64bit.test new file mode 100644 index 00000000000..117ace42f7c --- /dev/null +++ b/mysql-test/suite/maria/maria-64bit.test @@ -0,0 +1,41 @@ +--source include/have_maria.inc +--source include/have_sequence.inc +--source include/have_64bit.inc + +set session storage_engine=aria; + +--echo # +--echo # BUG#47444 - --myisam_repair_threads > 1 can result in all index +--echo # cardinalities=1 +--echo # + +SET aria_repair_threads=2; +SET aria_sort_buffer_size=16384; +CREATE TABLE t1(a CHAR(255), KEY(a), KEY(a), KEY(a)); +INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(0),(1),(2),(3); +--replace_regex /Current aria_sort_buffer_size.*/X/ +REPAIR TABLE t1; +SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'; +CHECK TABLE t1; +DROP TABLE t1; +SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; +SET aria_repair_threads=@@global.aria_repair_threads; + +--echo # +--echo # BUG#47073 - valgrind errs, corruption,failed repair of partition, +--echo # low myisam_sort_buffer_size +--echo # +CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b)); +INSERT INTO t1 select seq,'0' from seq_1_to_65536; +SET aria_sort_buffer_size=16384; +--replace_regex /Current aria_sort_buffer_size.*/X/ +REPAIR TABLE t1; +CHECK TABLE t1; +SET aria_repair_threads=2; +# May report different values depending on threads activity. +--replace_regex /Current aria_sort_buffer_size.*/X/ +REPAIR TABLE t1; +CHECK TABLE t1; +SET aria_repair_threads=@@global.aria_repair_threads; +SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; +DROP TABLE t1; diff --git a/mysql-test/suite/maria/maria.result b/mysql-test/suite/maria/maria.result index f4ee7670b9b..c86e98d5261 100644 --- a/mysql-test/suite/maria/maria.result +++ b/mysql-test/suite/maria/maria.result @@ -2809,71 +2809,6 @@ DROP TABLE t1; # # End of 5.5 tests # -# -# BUG#47444 - --myisam_repair_threads > 1 can result in all index -# cardinalities=1 -# -SET aria_repair_threads=2; -SET aria_sort_buffer_size=8192; -CREATE TABLE t1(a CHAR(255), KEY(a), KEY(a), KEY(a)); -Warnings: -Note 1831 Duplicate index `a_2`. This is deprecated and will be disallowed in a future release -Note 1831 Duplicate index `a_3`. This is deprecated and will be disallowed in a future release -INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(0),(1),(2),(3); -REPAIR TABLE t1; -Table Op Msg_type Msg_text -test.t1 repair status OK -SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'; -CARDINALITY -14 -14 -14 -CHECK TABLE t1; -Table Op Msg_type Msg_text -test.t1 check status OK -DROP TABLE t1; -SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; -SET aria_repair_threads=@@global.aria_repair_threads; -# -# BUG#47073 - valgrind errs, corruption,failed repair of partition, -# low myisam_sort_buffer_size -# -CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b)); -INSERT INTO t1 VALUES(1,'0'),(2,'0'),(3,'0'),(4,'0'),(5,'0'), -(6,'0'),(7,'0'); -INSERT INTO t1 SELECT a+10,b FROM t1; -INSERT INTO t1 SELECT a+20,b FROM t1; -INSERT INTO t1 SELECT a+40,b FROM t1; -INSERT INTO t1 SELECT a+80,b FROM t1; -INSERT INTO t1 SELECT a+160,b FROM t1; -INSERT INTO t1 SELECT a+320,b FROM t1; -INSERT INTO t1 SELECT a+640,b FROM t1; -INSERT INTO t1 SELECT a+1280,b FROM t1; -INSERT INTO t1 SELECT a+2560,b FROM t1; -INSERT INTO t1 SELECT a+5120,b FROM t1; -SET aria_sort_buffer_size=4096; -REPAIR TABLE t1; -Table Op Msg_type Msg_text -test.t1 repair error aria_sort_buffer_size is too small. X -test.t1 repair error Create index by sort failed -test.t1 repair info Retrying repair with keycache -test.t1 repair status OK -CHECK TABLE t1; -Table Op Msg_type Msg_text -test.t1 check status OK -SET aria_repair_threads=2; -REPAIR TABLE t1; -Table Op Msg_type Msg_text -test.t1 repair error aria_sort_buffer_size is too small. X -test.t1 repair error Create index by sort failed -test.t1 repair info Retrying repair with keycache -test.t1 repair status OK -CHECK TABLE t1; -Table Op Msg_type Msg_text -test.t1 check status OK -SET aria_repair_threads=@@global.aria_repair_threads; -SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; -DROP TABLE t1; CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b)); INSERT INTO t1 VALUES(1,'0'),(2,'0'),(3,'0'),(4,'0'),(5,'0'), (6,'0'),(7,'0'); diff --git a/mysql-test/suite/maria/maria.test b/mysql-test/suite/maria/maria.test index 1761a96d3d2..6c4b44d33ba 100644 --- a/mysql-test/suite/maria/maria.test +++ b/mysql-test/suite/maria/maria.test @@ -5,6 +5,7 @@ -- source include/have_maria.inc -- source include/have_partition.inc +-- source include/have_sequence.inc call mtr.add_suppression("Can't find record in '.*'"); @@ -2029,52 +2030,6 @@ DROP TABLE t1; --echo # End of 5.5 tests --echo # ---echo # ---echo # BUG#47444 - --myisam_repair_threads > 1 can result in all index ---echo # cardinalities=1 ---echo # -SET aria_repair_threads=2; -SET aria_sort_buffer_size=8192; -CREATE TABLE t1(a CHAR(255), KEY(a), KEY(a), KEY(a)); -INSERT INTO t1 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(0),(1),(2),(3); ---replace_regex /Current aria_sort_buffer_size.*/X/ -REPAIR TABLE t1; -SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'; -CHECK TABLE t1; -DROP TABLE t1; -SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; -SET aria_repair_threads=@@global.aria_repair_threads; - ---echo # ---echo # BUG#47073 - valgrind errs, corruption,failed repair of partition, ---echo # low myisam_sort_buffer_size ---echo # -CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b)); -INSERT INTO t1 VALUES(1,'0'),(2,'0'),(3,'0'),(4,'0'),(5,'0'), - (6,'0'),(7,'0'); -INSERT INTO t1 SELECT a+10,b FROM t1; -INSERT INTO t1 SELECT a+20,b FROM t1; -INSERT INTO t1 SELECT a+40,b FROM t1; -INSERT INTO t1 SELECT a+80,b FROM t1; -INSERT INTO t1 SELECT a+160,b FROM t1; -INSERT INTO t1 SELECT a+320,b FROM t1; -INSERT INTO t1 SELECT a+640,b FROM t1; -INSERT INTO t1 SELECT a+1280,b FROM t1; -INSERT INTO t1 SELECT a+2560,b FROM t1; -INSERT INTO t1 SELECT a+5120,b FROM t1; -SET aria_sort_buffer_size=4096; ---replace_regex /Current aria_sort_buffer_size.*/X/ -REPAIR TABLE t1; -CHECK TABLE t1; -SET aria_repair_threads=2; -# May report different values depending on threads activity. ---replace_regex /Current aria_sort_buffer_size.*/X/ -REPAIR TABLE t1; -CHECK TABLE t1; -SET aria_repair_threads=@@global.aria_repair_threads; -SET aria_sort_buffer_size=@@global.aria_sort_buffer_size; -DROP TABLE t1; - # # Check FLUSH FOR EXPORT # diff --git a/mysql-test/suite/maria/repair-big-sort.result b/mysql-test/suite/maria/repair-big-sort.result new file mode 100644 index 00000000000..a650a3872d3 --- /dev/null +++ b/mysql-test/suite/maria/repair-big-sort.result @@ -0,0 +1,79 @@ +SET sql_mode=''; +CREATE TEMPORARY TABLE t1 (a tinyINT,b CHAR(1)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; +INSERT INTO t1 VALUES (1,1),(3,3),(2,2); +SET SESSION tmp_table_size=True; +CREATE TABLE t2 (c INT, d DATE) ENGINE=InnoDB PARTITION BY RANGE (YEAR (d)) SUBPARTITION BY HASH (TO_DAYS (d)) (PARTITION p0 VALUES LESS THAN (1990) (SUBPARTITION s0, SUBPARTITION s1), PARTITION p1 VALUES LESS THAN MAXVALUE (SUBPARTITION s4, SUBPARTITION s5)); +SET SESSION aria_sort_buffer_size=CAST(-1 AS UNSIGNED INT); +Warnings: +Note 1105 Cast to unsigned converted negative integer to it's positive complement +Note 1105 Cast to unsigned converted negative integer to it's positive complement +Warning 1292 Truncated incorrect aria_sort_buffer_size value: '18446744073709551615' +INSERT INTO t1 SELECT '', SEQ FROM seq_1_to_258; +Warnings: +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 1 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 2 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 3 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 4 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 5 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 6 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 7 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 8 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 9 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 10 +Warning 1265 Data truncated for column 'b' at row 10 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 11 +Warning 1265 Data truncated for column 'b' at row 11 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 12 +Warning 1265 Data truncated for column 'b' at row 12 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 13 +Warning 1265 Data truncated for column 'b' at row 13 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 14 +Warning 1265 Data truncated for column 'b' at row 14 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 15 +Warning 1265 Data truncated for column 'b' at row 15 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 16 +Warning 1265 Data truncated for column 'b' at row 16 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 17 +Warning 1265 Data truncated for column 'b' at row 17 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 18 +Warning 1265 Data truncated for column 'b' at row 18 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 19 +Warning 1265 Data truncated for column 'b' at row 19 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 20 +Warning 1265 Data truncated for column 'b' at row 20 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 21 +Warning 1265 Data truncated for column 'b' at row 21 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 22 +Warning 1265 Data truncated for column 'b' at row 22 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 23 +Warning 1265 Data truncated for column 'b' at row 23 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 24 +Warning 1265 Data truncated for column 'b' at row 24 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 25 +Warning 1265 Data truncated for column 'b' at row 25 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 26 +Warning 1265 Data truncated for column 'b' at row 26 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 27 +Warning 1265 Data truncated for column 'b' at row 27 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 28 +Warning 1265 Data truncated for column 'b' at row 28 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 29 +Warning 1265 Data truncated for column 'b' at row 29 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 30 +Warning 1265 Data truncated for column 'b' at row 30 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 31 +Warning 1265 Data truncated for column 'b' at row 31 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 32 +Warning 1265 Data truncated for column 'b' at row 32 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 33 +Warning 1265 Data truncated for column 'b' at row 33 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 34 +Warning 1265 Data truncated for column 'b' at row 34 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 35 +Warning 1265 Data truncated for column 'b' at row 35 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 36 +Warning 1265 Data truncated for column 'b' at row 36 +Warning 1366 Incorrect integer value: '' for column `test`.`t1`.`a` at row 37 +SET SESSION aria_repair_threads=4; +UPDATE t1 SET a=( (SELECT MAX(a) FROM t1)); +drop table t1,t2; diff --git a/mysql-test/suite/maria/repair-big-sort.test b/mysql-test/suite/maria/repair-big-sort.test new file mode 100644 index 00000000000..f2f4f84c29b --- /dev/null +++ b/mysql-test/suite/maria/repair-big-sort.test @@ -0,0 +1,15 @@ + +--source include/have_innodb.inc +--source include/have_partition.inc +--source include/have_sequence.inc + +SET sql_mode=''; +CREATE TEMPORARY TABLE t1 (a tinyINT,b CHAR(1)) ENGINE=InnoDB ROW_FORMAT=REDUNDANT; +INSERT INTO t1 VALUES (1,1),(3,3),(2,2); +SET SESSION tmp_table_size=True; +CREATE TABLE t2 (c INT, d DATE) ENGINE=InnoDB PARTITION BY RANGE (YEAR (d)) SUBPARTITION BY HASH (TO_DAYS (d)) (PARTITION p0 VALUES LESS THAN (1990) (SUBPARTITION s0, SUBPARTITION s1), PARTITION p1 VALUES LESS THAN MAXVALUE (SUBPARTITION s4, SUBPARTITION s5)); +SET SESSION aria_sort_buffer_size=CAST(-1 AS UNSIGNED INT); +INSERT INTO t1 SELECT '', SEQ FROM seq_1_to_258; +SET SESSION aria_repair_threads=4; +UPDATE t1 SET a=( (SELECT MAX(a) FROM t1)); +drop table t1,t2; diff --git a/mysql-test/suite/rpl/r/rpl_gtid_crash.result b/mysql-test/suite/rpl/r/rpl_gtid_crash.result index 153081d9ca5..4e74a3b25ac 100644 --- a/mysql-test/suite/rpl/r/rpl_gtid_crash.result +++ b/mysql-test/suite/rpl/r/rpl_gtid_crash.result @@ -168,7 +168,7 @@ SELECT * from t1 WHERE a > 10 ORDER BY a; a gtid_check Binlog pos ok -# Wait 30 seconds for SQL thread to catch up with IO thread +# Wait 60 seconds for SQL thread to catch up with IO thread connection server_2; SELECT * from t1 WHERE a > 10 ORDER BY a; a @@ -224,7 +224,7 @@ gtid_check Binlog pos ok gtid_check Current pos ok -# Wait 30 seconds for SQL thread to catch up with IO thread +# Wait 60 seconds for SQL thread to catch up with IO thread connection server_2; SELECT * from t1 WHERE a > 10 ORDER BY a; a @@ -275,7 +275,7 @@ COMMIT; Got one of the listed errors connection server_1; connection server_2; -# Wait 30 seconds for IO thread to connect and SQL thread to catch up +# Wait 60 seconds for IO thread to connect and SQL thread to catch up # with IO thread. include/stop_slave.inc connection server_1; 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..15ecb55b016 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 @@ -8,7 +8,7 @@ FLUSH LOGS; call mtr.add_suppression('Got fatal error 1236 from master when reading data from binary log: .*could not find next log'); connection 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: 'could not find next log; the first event 'master-bin.000001' at XXX, the last event read from 'master-bin.000002' at XXX, the last byte read from 'master-bin.000002' at XXX.'' +Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'could not find next log; the first event 'FILE' at XXX, the last event read from 'master-bin.000002' at XXX, the last byte read from 'master-bin.000002' at XXX.'' connection master; CREATE TABLE t2(c1 INT); FLUSH LOGS; diff --git a/mysql-test/suite/rpl/t/rpl_gtid_crash.test b/mysql-test/suite/rpl/t/rpl_gtid_crash.test index d0af69a65ed..f2167911101 100644 --- a/mysql-test/suite/rpl/t/rpl_gtid_crash.test +++ b/mysql-test/suite/rpl/t/rpl_gtid_crash.test @@ -345,9 +345,9 @@ SELECT * from t1 WHERE a > 10 ORDER BY a; eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT("Unexpected binlog pos: ", @@gtid_binlog_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check; --enable_query_log ---echo # Wait 30 seconds for SQL thread to catch up with IO thread +--echo # Wait 60 seconds for SQL thread to catch up with IO thread --connection server_2 ---let $wait_timeout= 300 +--let $wait_timeout= 600 while ($wait_timeout != 0) { --let $read_log_pos= query_get_value('SHOW SLAVE STATUS', Read_Master_Log_Pos, 1) @@ -442,9 +442,9 @@ eval SELECT IF(INSTR(@@gtid_binlog_pos, '$saved_gtid'), "Binlog pos ok", CONCAT( eval SELECT IF(INSTR(@@gtid_current_pos, '$saved_gtid'), "Current pos ok", CONCAT("Unexpected current pos: ", @@gtid_current_pos, "; does not contain the GTID $saved_gtid.")) AS gtid_check; --enable_query_log ---echo # Wait 30 seconds for SQL thread to catch up with IO thread +--echo # Wait 60 seconds for SQL thread to catch up with IO thread --connection server_2 ---let $wait_timeout= 300 +--let $wait_timeout= 600 while ($wait_timeout != 0) { --let $read_log_pos= query_get_value('SHOW SLAVE STATUS', Read_Master_Log_Pos, 1) @@ -533,9 +533,9 @@ EOF --source include/wait_until_connected_again.inc --connection server_2 ---echo # Wait 30 seconds for IO thread to connect and SQL thread to catch up +--echo # Wait 60 seconds for IO thread to connect and SQL thread to catch up --echo # with IO thread. ---let $wait_timeout= 300 +--let $wait_timeout= 600 while ($wait_timeout != 0) { --let $connected=`SELECT COUNT(*) > 0 FROM information_schema.processlist WHERE State = 'Waiting for master to send event'` 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..2b69ef2e82a 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 @@ -62,7 +62,7 @@ connection slave; --let $slave_io_errno= 1236 --let $show_slave_io_error= 1 # Mask line numbers ---let $slave_io_error_replace= / at [0-9]*/ at XXX/ +--let $slave_io_error_replace= / at [0-9]*/ at XXX/ /the first event '(\.|master-bin.000001)'/the first event 'FILE'/ --source include/wait_for_slave_io_error.inc connection master; diff --git a/mysql-test/suite/sys_vars/r/aria_sort_buffer_size_basic.result b/mysql-test/suite/sys_vars/r/aria_sort_buffer_size_basic.result index b2a87db3f8c..6da4c9bfe97 100644 --- a/mysql-test/suite/sys_vars/r/aria_sort_buffer_size_basic.result +++ b/mysql-test/suite/sys_vars/r/aria_sort_buffer_size_basic.result @@ -22,13 +22,13 @@ Warnings: Warning 1292 Truncated incorrect aria_sort_buffer_size value: '10' select @@global.aria_sort_buffer_size; @@global.aria_sort_buffer_size -4096 +16376 set session aria_sort_buffer_size=10; Warnings: Warning 1292 Truncated incorrect aria_sort_buffer_size value: '10' select @@session.aria_sort_buffer_size; @@session.aria_sort_buffer_size -4096 +16376 set global aria_sort_buffer_size=1.1; ERROR 42000: Incorrect argument type to variable 'aria_sort_buffer_size' set session aria_sort_buffer_size=1e1; @@ -40,9 +40,9 @@ Warnings: Warning 1292 Truncated incorrect aria_sort_buffer_size value: '0' select @@global.aria_sort_buffer_size; @@global.aria_sort_buffer_size -4096 +16376 set session aria_sort_buffer_size=cast(-1 as unsigned int); select @@session.aria_sort_buffer_size; @@session.aria_sort_buffer_size -9223372036854775807 +1152921504606846975 SET @@global.aria_sort_buffer_size = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic.result b/mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic.result index 6fbbdac5a45..0acb7878a75 100644 --- a/mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic.result +++ b/mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic.result @@ -26,10 +26,10 @@ Warning 1292 Truncated incorrect myisam_sort_buffer_size value: '4' SELECT @@global.myisam_sort_buffer_size ; @@global.myisam_sort_buffer_size 4096 -SET @@global.myisam_sort_buffer_size = 4294967295; +SET @@global.myisam_sort_buffer_size = 268435455; SELECT @@global.myisam_sort_buffer_size ; @@global.myisam_sort_buffer_size -4294967295 +268435455 SET @@global.myisam_sort_buffer_size = 655354; SELECT @@global.myisam_sort_buffer_size ; @@global.myisam_sort_buffer_size @@ -41,10 +41,10 @@ Warning 1292 Truncated incorrect myisam_sort_buffer_size value: '4' SELECT @@session.myisam_sort_buffer_size ; @@session.myisam_sort_buffer_size 4096 -SET @@session.myisam_sort_buffer_size = 4294967295; +SET @@session.myisam_sort_buffer_size = 268435455; SELECT @@session.myisam_sort_buffer_size ; @@session.myisam_sort_buffer_size -4294967295 +268435455 SET @@session.myisam_sort_buffer_size = 655345; SELECT @@session.myisam_sort_buffer_size ; @@session.myisam_sort_buffer_size diff --git a/mysql-test/suite/sys_vars/r/sysvars_aria,32bit.rdiff b/mysql-test/suite/sys_vars/r/sysvars_aria,32bit.rdiff index f0cbbd874ee..6569d266695 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_aria,32bit.rdiff +++ b/mysql-test/suite/sys_vars/r/sysvars_aria,32bit.rdiff @@ -97,9 +97,9 @@ @@ -212,7 +212,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 --NUMERIC_MAX_VALUE 9223372036854775807 -+NUMERIC_MAX_VALUE 2147483647 + NUMERIC_MIN_VALUE 16376 +-NUMERIC_MAX_VALUE 1152921504606846975 ++NUMERIC_MAX_VALUE 268435455 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO diff --git a/mysql-test/suite/sys_vars/r/sysvars_aria.result b/mysql-test/suite/sys_vars/r/sysvars_aria.result index 181c0de74df..427eb83c949 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_aria.result +++ b/mysql-test/suite/sys_vars/r/sysvars_aria.result @@ -223,8 +223,8 @@ DEFAULT_VALUE 268434432 VARIABLE_SCOPE SESSION 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 -NUMERIC_MAX_VALUE 9223372036854775807 +NUMERIC_MIN_VALUE 16376 +NUMERIC_MAX_VALUE 1152921504606846975 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO 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 c740a387e2b..528ed646a97 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 @@ -95,9 +95,9 @@ @@ -207,7 +207,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 --NUMERIC_MAX_VALUE 9223372036854775807 -+NUMERIC_MAX_VALUE 2147483647 + NUMERIC_MIN_VALUE 16376 +-NUMERIC_MAX_VALUE 1152921504606846975 ++NUMERIC_MAX_VALUE 268435455 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO @@ -652,8 +652,8 @@ 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 --NUMERIC_MAX_VALUE 18446744073709551615 -+NUMERIC_MAX_VALUE 4294967295 +-NUMERIC_MAX_VALUE 1152921504606846975 ++NUMERIC_MAX_VALUE 268435455 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO 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 2b158bd4fa5..a51ed8f62b4 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_embedded.result @@ -216,8 +216,8 @@ VARIABLE_NAME ARIA_SORT_BUFFER_SIZE VARIABLE_SCOPE SESSION 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 -NUMERIC_MAX_VALUE 9223372036854775807 +NUMERIC_MIN_VALUE 16376 +NUMERIC_MAX_VALUE 1152921504606846975 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO @@ -2117,7 +2117,7 @@ VARIABLE_SCOPE SESSION 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 -NUMERIC_MAX_VALUE 18446744073709551615 +NUMERIC_MAX_VALUE 1152921504606846975 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO 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 3ce1ed7b082..d5869e3606c 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,6 @@ ---- sysvars_server_notembedded.result 2020-04-29 11:35:30.046243428 +0300 -+++ sysvars_server_notembedded,32bit.reject 2020-04-30 11:45:50.488748076 +0300 -@@ -35,7 +35,7 @@ +--- sysvars_server_notembedded.result 2023-07-19 12:51:27.097785858 +0200 ++++ sysvars_server_notembedded_32diff.result 2023-07-20 07:59:30.901981090 +0200 +@@ -34,7 +34,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_BLOCK_SIZE VARIABLE_SCOPE GLOBAL @@ -9,7 +9,7 @@ VARIABLE_COMMENT Block size to be used for Aria index pages. NUMERIC_MIN_VALUE 4096 NUMERIC_MAX_VALUE 32768 -@@ -45,7 +45,7 @@ +@@ -44,7 +44,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_CHECKPOINT_INTERVAL VARIABLE_SCOPE GLOBAL @@ -18,7 +18,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 -@@ -55,7 +55,7 @@ +@@ -54,7 +54,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_CHECKPOINT_LOG_ACTIVITY VARIABLE_SCOPE GLOBAL @@ -27,7 +27,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 -@@ -75,7 +75,7 @@ +@@ -74,7 +74,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME ARIA_FORCE_START_AFTER_RECOVERY_FAILURES VARIABLE_SCOPE GLOBAL @@ -36,7 +36,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 -@@ -95,7 +95,7 @@ +@@ -94,7 +94,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_GROUP_COMMIT_INTERVAL VARIABLE_SCOPE GLOBAL @@ -45,7 +45,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 -@@ -105,7 +105,7 @@ +@@ -114,7 +114,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_LOG_FILE_SIZE VARIABLE_SCOPE GLOBAL @@ -54,7 +54,7 @@ VARIABLE_COMMENT Limit for transaction log size NUMERIC_MIN_VALUE 8388608 NUMERIC_MAX_VALUE 4294967295 -@@ -135,10 +135,10 @@ +@@ -144,10 +144,10 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_PAGECACHE_AGE_THRESHOLD VARIABLE_SCOPE GLOBAL @@ -67,7 +67,7 @@ NUMERIC_BLOCK_SIZE 100 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -155,7 +155,7 @@ +@@ -164,7 +164,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_PAGECACHE_DIVISION_LIMIT VARIABLE_SCOPE GLOBAL @@ -76,7 +76,7 @@ VARIABLE_COMMENT The minimum percentage of warm blocks in key cache NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 100 -@@ -165,7 +165,7 @@ +@@ -174,7 +174,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME ARIA_PAGECACHE_FILE_HASH_SIZE VARIABLE_SCOPE GLOBAL @@ -85,7 +85,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 -@@ -195,7 +195,7 @@ +@@ -204,7 +204,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME ARIA_REPAIR_THREADS VARIABLE_SCOPE SESSION @@ -94,16 +94,16 @@ 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 -@@ -208,7 +208,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 --NUMERIC_MAX_VALUE 9223372036854775807 -+NUMERIC_MAX_VALUE 2147483647 + NUMERIC_MIN_VALUE 16376 +-NUMERIC_MAX_VALUE 1152921504606846975 ++NUMERIC_MAX_VALUE 268435455 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -265,7 +265,7 @@ +@@ -274,7 +274,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME AUTO_INCREMENT_INCREMENT VARIABLE_SCOPE SESSION @@ -112,7 +112,7 @@ VARIABLE_COMMENT Auto-increment columns are incremented by this NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 65535 -@@ -275,7 +275,7 @@ +@@ -284,7 +284,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME AUTO_INCREMENT_OFFSET VARIABLE_SCOPE SESSION @@ -121,7 +121,7 @@ VARIABLE_COMMENT Offset added to Auto-increment columns. Used when auto-increment-increment != 1 NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 65535 -@@ -285,7 +285,7 @@ +@@ -294,7 +294,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME BACK_LOG VARIABLE_SCOPE GLOBAL @@ -130,7 +130,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 -@@ -338,7 +338,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 @@ -139,7 +139,7 @@ NUMERIC_BLOCK_SIZE 4096 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -355,20 +355,20 @@ +@@ -364,20 +364,20 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME BINLOG_COMMIT_WAIT_COUNT VARIABLE_SCOPE GLOBAL @@ -164,7 +164,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -388,7 +388,7 @@ +@@ -397,7 +397,7 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT The size of file cache for the binary log NUMERIC_MIN_VALUE 8192 @@ -173,7 +173,7 @@ NUMERIC_BLOCK_SIZE 4096 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -438,7 +438,7 @@ +@@ -447,7 +447,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 @@ -182,7 +182,7 @@ NUMERIC_BLOCK_SIZE 4096 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -448,7 +448,7 @@ +@@ -457,7 +457,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 @@ -191,7 +191,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -635,7 +635,7 @@ +@@ -644,7 +644,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME CONNECT_TIMEOUT VARIABLE_SCOPE GLOBAL @@ -200,7 +200,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 -@@ -685,7 +685,7 @@ +@@ -694,7 +694,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_LONG VARIABLE_SCOPE SESSION @@ -209,7 +209,7 @@ VARIABLE_COMMENT Long search depth for the two-step deadlock detection NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 33 -@@ -695,7 +695,7 @@ +@@ -704,7 +704,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DEADLOCK_SEARCH_DEPTH_SHORT VARIABLE_SCOPE SESSION @@ -218,7 +218,7 @@ VARIABLE_COMMENT Short search depth for the two-step deadlock detection NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 32 -@@ -705,7 +705,7 @@ +@@ -714,7 +714,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DEADLOCK_TIMEOUT_LONG VARIABLE_SCOPE SESSION @@ -227,7 +227,7 @@ VARIABLE_COMMENT Long timeout for the two-step deadlock detection (in microseconds) NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -715,7 +715,7 @@ +@@ -724,7 +724,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DEADLOCK_TIMEOUT_SHORT VARIABLE_SCOPE SESSION @@ -236,7 +236,7 @@ VARIABLE_COMMENT Short timeout for the two-step deadlock detection (in microseconds) NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -775,7 +775,7 @@ +@@ -784,7 +784,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME DEFAULT_WEEK_FORMAT VARIABLE_SCOPE SESSION @@ -245,7 +245,7 @@ VARIABLE_COMMENT The default week format used by WEEK() functions NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 7 -@@ -785,7 +785,7 @@ +@@ -794,7 +794,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DELAYED_INSERT_LIMIT VARIABLE_SCOPE GLOBAL @@ -254,7 +254,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 -@@ -795,7 +795,7 @@ +@@ -804,7 +804,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DELAYED_INSERT_TIMEOUT VARIABLE_SCOPE GLOBAL @@ -263,7 +263,7 @@ VARIABLE_COMMENT How long a INSERT DELAYED thread should wait for INSERT statements before terminating NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 31536000 -@@ -805,7 +805,7 @@ +@@ -814,7 +814,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DELAYED_QUEUE_SIZE VARIABLE_SCOPE GLOBAL @@ -272,7 +272,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 -@@ -835,7 +835,7 @@ +@@ -844,7 +844,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME DIV_PRECISION_INCREMENT VARIABLE_SCOPE SESSION @@ -281,7 +281,7 @@ VARIABLE_COMMENT Precision of the result of '/' operator will be increased on that value NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 38 -@@ -925,7 +925,7 @@ +@@ -934,7 +934,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME EXPIRE_LOGS_DAYS VARIABLE_SCOPE GLOBAL @@ -290,7 +290,7 @@ VARIABLE_COMMENT If non-zero, binary logs will be purged after expire_logs_days days; possible purges happen at startup and at binary log rotation NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 99 -@@ -955,7 +955,7 @@ +@@ -964,7 +964,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME EXTRA_MAX_CONNECTIONS VARIABLE_SCOPE GLOBAL @@ -299,7 +299,7 @@ VARIABLE_COMMENT The number of connections on extra-port NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 100000 -@@ -985,7 +985,7 @@ +@@ -994,7 +994,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME FLUSH_TIME VARIABLE_SCOPE GLOBAL @@ -308,7 +308,7 @@ VARIABLE_COMMENT A dedicated thread is created to flush all tables at the given interval NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 31536000 -@@ -1015,7 +1015,7 @@ +@@ -1024,7 +1024,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME FT_MAX_WORD_LEN VARIABLE_SCOPE GLOBAL @@ -317,7 +317,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 -@@ -1025,7 +1025,7 @@ +@@ -1034,7 +1034,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME FT_MIN_WORD_LEN VARIABLE_SCOPE GLOBAL @@ -326,7 +326,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 -@@ -1035,7 +1035,7 @@ +@@ -1044,7 +1044,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME FT_QUERY_EXPANSION_LIMIT VARIABLE_SCOPE GLOBAL @@ -335,16 +335,7 @@ VARIABLE_COMMENT Number of best matches to use for query expansion NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1000 -@@ -1078,7 +1078,7 @@ - VARIABLE_TYPE BIGINT UNSIGNED - VARIABLE_COMMENT The maximum length of the result of function GROUP_CONCAT() - NUMERIC_MIN_VALUE 4 --NUMERIC_MAX_VALUE 18446744073709551615 -+NUMERIC_MAX_VALUE 4294967295 - NUMERIC_BLOCK_SIZE 1 - ENUM_VALUE_LIST NULL - READ_ONLY NO -@@ -1285,7 +1285,7 @@ +@@ -1294,7 +1294,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME HISTOGRAM_SIZE VARIABLE_SCOPE SESSION @@ -353,7 +344,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 -@@ -1315,7 +1315,7 @@ +@@ -1324,7 +1324,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME HOST_CACHE_SIZE VARIABLE_SCOPE GLOBAL @@ -362,7 +353,7 @@ VARIABLE_COMMENT How many host names should be cached to avoid resolving. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 65536 -@@ -1425,7 +1425,7 @@ +@@ -1434,7 +1434,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME INTERACTIVE_TIMEOUT VARIABLE_SCOPE SESSION @@ -371,7 +362,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 -@@ -1458,7 +1458,7 @@ +@@ -1467,7 +1467,7 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT The size of the buffer that is used for joins NUMERIC_MIN_VALUE 128 @@ -380,7 +371,7 @@ NUMERIC_BLOCK_SIZE 128 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1475,7 +1475,7 @@ +@@ -1484,7 +1484,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME JOIN_CACHE_LEVEL VARIABLE_SCOPE SESSION @@ -389,7 +380,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 -@@ -1498,7 +1498,7 @@ +@@ -1507,7 +1507,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 @@ -398,7 +389,7 @@ NUMERIC_BLOCK_SIZE 4096 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -1665,7 +1665,7 @@ +@@ -1674,7 +1674,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME LOCK_WAIT_TIMEOUT VARIABLE_SCOPE SESSION @@ -407,7 +398,7 @@ VARIABLE_COMMENT Timeout in seconds to wait for a lock before returning an error. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 31536000 -@@ -1815,7 +1815,7 @@ +@@ -1824,7 +1824,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME LOG_SLOW_RATE_LIMIT VARIABLE_SCOPE SESSION @@ -416,7 +407,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 -@@ -1845,7 +1845,7 @@ +@@ -1854,7 +1854,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME LOG_WARNINGS VARIABLE_SCOPE SESSION @@ -425,7 +416,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 -@@ -1905,7 +1905,7 @@ +@@ -1914,7 +1914,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME MAX_ALLOWED_PACKET VARIABLE_SCOPE SESSION @@ -434,7 +425,7 @@ VARIABLE_COMMENT Max packet length to send to or receive from the server NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 1073741824 -@@ -1918,14 +1918,14 @@ +@@ -1927,14 +1927,14 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT Sets the total size of the transactional cache NUMERIC_MIN_VALUE 4096 @@ -451,7 +442,7 @@ VARIABLE_COMMENT Binary log will be rotated automatically when the size exceeds this value. NUMERIC_MIN_VALUE 4096 NUMERIC_MAX_VALUE 1073741824 -@@ -1938,14 +1938,14 @@ +@@ -1947,14 +1947,14 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT Sets the total size of the statement cache NUMERIC_MIN_VALUE 4096 @@ -468,7 +459,7 @@ VARIABLE_COMMENT The number of simultaneous clients allowed NUMERIC_MIN_VALUE 10 NUMERIC_MAX_VALUE 100000 -@@ -1955,7 +1955,7 @@ +@@ -1964,7 +1964,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_CONNECT_ERRORS VARIABLE_SCOPE GLOBAL @@ -477,7 +468,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 -@@ -1965,7 +1965,7 @@ +@@ -1974,7 +1974,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_DELAYED_THREADS VARIABLE_SCOPE SESSION @@ -486,7 +477,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 -@@ -1985,7 +1985,7 @@ +@@ -1994,7 +1994,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_ERROR_COUNT VARIABLE_SCOPE SESSION @@ -495,7 +486,7 @@ VARIABLE_COMMENT Max number of errors/warnings to store for a statement NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 65535 -@@ -1998,14 +1998,14 @@ +@@ -2007,14 +2007,14 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT Don't allow creation of heap tables bigger than this NUMERIC_MIN_VALUE 16384 @@ -512,7 +503,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 -@@ -2025,7 +2025,7 @@ +@@ -2034,7 +2034,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_LENGTH_FOR_SORT_DATA VARIABLE_SCOPE SESSION @@ -521,7 +512,7 @@ VARIABLE_COMMENT Max number of bytes in sorted records NUMERIC_MIN_VALUE 4 NUMERIC_MAX_VALUE 8388608 -@@ -2055,7 +2055,7 @@ +@@ -2064,7 +2064,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_RECURSIVE_ITERATIONS VARIABLE_SCOPE SESSION @@ -530,7 +521,7 @@ VARIABLE_COMMENT Maximum number of iterations when executing recursive queries NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -2078,14 +2078,14 @@ +@@ -2087,14 +2087,14 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT The maximum size of the container of a rowid filter NUMERIC_MIN_VALUE 1024 @@ -547,16 +538,16 @@ VARIABLE_COMMENT Limit assumed max number of seeks when looking up rows based on a key NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -2105,7 +2105,7 @@ +@@ -2114,7 +2114,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_SORT_LENGTH VARIABLE_SCOPE SESSION -VARIABLE_TYPE BIGINT UNSIGNED +VARIABLE_TYPE INT UNSIGNED 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 4 + NUMERIC_MIN_VALUE 64 NUMERIC_MAX_VALUE 8388608 -@@ -2115,7 +2115,7 @@ +@@ -2124,7 +2124,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_SP_RECURSION_DEPTH VARIABLE_SCOPE SESSION @@ -565,7 +556,7 @@ VARIABLE_COMMENT Maximum stored procedure recursion depth NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 255 -@@ -2135,7 +2135,7 @@ +@@ -2144,7 +2144,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_TMP_TABLES VARIABLE_SCOPE SESSION @@ -574,7 +565,7 @@ VARIABLE_COMMENT Unused, will be removed. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -2155,7 +2155,7 @@ +@@ -2164,7 +2164,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MAX_WRITE_LOCK_COUNT VARIABLE_SCOPE GLOBAL @@ -583,7 +574,7 @@ VARIABLE_COMMENT After this many write locks, allow some read locks to run in between NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -2165,7 +2165,7 @@ +@@ -2174,7 +2174,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME METADATA_LOCKS_CACHE_SIZE VARIABLE_SCOPE GLOBAL @@ -592,7 +583,7 @@ VARIABLE_COMMENT Unused NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1048576 -@@ -2175,7 +2175,7 @@ +@@ -2184,7 +2184,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME METADATA_LOCKS_HASH_INSTANCES VARIABLE_SCOPE GLOBAL @@ -601,7 +592,7 @@ VARIABLE_COMMENT Unused NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 1024 -@@ -2185,7 +2185,7 @@ +@@ -2194,7 +2194,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MIN_EXAMINED_ROW_LIMIT VARIABLE_SCOPE SESSION @@ -610,7 +601,7 @@ VARIABLE_COMMENT Don't write queries to slow log that examine fewer rows than that NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -2195,7 +2195,7 @@ +@@ -2204,7 +2204,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MRR_BUFFER_SIZE VARIABLE_SCOPE SESSION @@ -619,7 +610,7 @@ VARIABLE_COMMENT Size of buffer to use when using MRR with range access NUMERIC_MIN_VALUE 8192 NUMERIC_MAX_VALUE 2147483647 -@@ -2205,7 +2205,7 @@ +@@ -2214,7 +2214,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MYISAM_BLOCK_SIZE VARIABLE_SCOPE GLOBAL @@ -628,7 +619,7 @@ VARIABLE_COMMENT Block size to be used for MyISAM index pages NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 16384 -@@ -2215,7 +2215,7 @@ +@@ -2224,7 +2224,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME MYISAM_DATA_POINTER_SIZE VARIABLE_SCOPE GLOBAL @@ -637,7 +628,7 @@ VARIABLE_COMMENT Default pointer size to be used for MyISAM tables NUMERIC_MIN_VALUE 2 NUMERIC_MAX_VALUE 7 -@@ -2238,7 +2238,7 @@ +@@ -2247,7 +2247,7 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT Restricts the total memory used for memory mapping of MySQL tables NUMERIC_MIN_VALUE 7 @@ -646,7 +637,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY YES -@@ -2255,10 +2255,10 @@ +@@ -2264,10 +2264,10 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME MYISAM_REPAIR_THREADS VARIABLE_SCOPE SESSION @@ -659,16 +650,16 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -2268,7 +2268,7 @@ +@@ -2277,7 +2277,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 --NUMERIC_MAX_VALUE 18446744073709551615 -+NUMERIC_MAX_VALUE 4294967295 +-NUMERIC_MAX_VALUE 1152921504606846975 ++NUMERIC_MAX_VALUE 268435455 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -2305,7 +2305,7 @@ +@@ -2314,7 +2314,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME NET_BUFFER_LENGTH VARIABLE_SCOPE SESSION @@ -677,7 +668,7 @@ VARIABLE_COMMENT Buffer length for TCP/IP and socket communication NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 1048576 -@@ -2315,7 +2315,7 @@ +@@ -2324,7 +2324,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME NET_READ_TIMEOUT VARIABLE_SCOPE SESSION @@ -686,7 +677,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 -@@ -2325,7 +2325,7 @@ +@@ -2334,7 +2334,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME NET_RETRY_COUNT VARIABLE_SCOPE SESSION @@ -695,7 +686,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 -@@ -2335,7 +2335,7 @@ +@@ -2344,7 +2344,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME NET_WRITE_TIMEOUT VARIABLE_SCOPE SESSION @@ -704,7 +695,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 -@@ -2385,7 +2385,7 @@ +@@ -2394,7 +2394,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME OPEN_FILES_LIMIT VARIABLE_SCOPE GLOBAL @@ -713,7 +704,7 @@ 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 -@@ -2395,10 +2395,10 @@ +@@ -2404,17 +2404,17 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_MAX_SEL_ARG_WEIGHT VARIABLE_SCOPE SESSION @@ -726,7 +717,6 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -2405,7 +2405,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_PRUNE_LEVEL VARIABLE_SCOPE SESSION @@ -735,7 +725,7 @@ 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 NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1 -@@ -2415,7 +2415,7 @@ +@@ -2424,7 +2424,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_SEARCH_DEPTH VARIABLE_SCOPE SESSION @@ -744,7 +734,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 -@@ -2425,7 +2425,7 @@ +@@ -2434,7 +2434,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_SELECTIVITY_SAMPLING_LIMIT VARIABLE_SCOPE SESSION @@ -753,7 +743,7 @@ VARIABLE_COMMENT Controls number of record samples to check condition selectivity NUMERIC_MIN_VALUE 10 NUMERIC_MAX_VALUE 4294967295 -@@ -2455,17 +2455,17 @@ +@@ -2464,17 +2464,17 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME OPTIMIZER_TRACE_MAX_MEM_SIZE VARIABLE_SCOPE SESSION @@ -774,7 +764,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 -@@ -2485,7 +2485,7 @@ +@@ -2494,7 +2494,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME PERFORMANCE_SCHEMA_ACCOUNTS_SIZE VARIABLE_SCOPE GLOBAL @@ -783,7 +773,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 -@@ -2495,7 +2495,7 @@ +@@ -2504,7 +2504,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_DIGESTS_SIZE VARIABLE_SCOPE GLOBAL @@ -791,8 +781,8 @@ +VARIABLE_TYPE INT VARIABLE_COMMENT Size of the statement digest. Use 0 to disable, -1 for automated sizing. NUMERIC_MIN_VALUE -1 - NUMERIC_MAX_VALUE 200 -@@ -2505,7 +2505,7 @@ + NUMERIC_MAX_VALUE 1048576 +@@ -2514,7 +2514,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE VARIABLE_SCOPE GLOBAL @@ -801,7 +791,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 -@@ -2515,7 +2515,7 @@ +@@ -2524,7 +2524,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE VARIABLE_SCOPE GLOBAL @@ -810,7 +800,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 -@@ -2525,7 +2525,7 @@ +@@ -2534,7 +2534,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE VARIABLE_SCOPE GLOBAL @@ -819,7 +809,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 -@@ -2535,7 +2535,7 @@ +@@ -2544,7 +2544,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE VARIABLE_SCOPE GLOBAL @@ -828,7 +818,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 -@@ -2545,7 +2545,7 @@ +@@ -2554,7 +2554,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE VARIABLE_SCOPE GLOBAL @@ -837,7 +827,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 -@@ -2555,7 +2555,7 @@ +@@ -2564,7 +2564,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE VARIABLE_SCOPE GLOBAL @@ -846,7 +836,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 -@@ -2565,7 +2565,7 @@ +@@ -2574,7 +2574,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE VARIABLE_SCOPE GLOBAL @@ -855,7 +845,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 -@@ -2575,7 +2575,7 @@ +@@ -2584,7 +2584,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE VARIABLE_SCOPE GLOBAL @@ -864,7 +854,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 -@@ -2585,7 +2585,7 @@ +@@ -2594,7 +2594,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_HOSTS_SIZE VARIABLE_SCOPE GLOBAL @@ -873,7 +863,7 @@ VARIABLE_COMMENT Maximum number of instrumented hosts. Use 0 to disable, -1 for automated sizing. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1048576 -@@ -2595,7 +2595,7 @@ +@@ -2604,7 +2604,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_CLASSES VARIABLE_SCOPE GLOBAL @@ -882,7 +872,7 @@ VARIABLE_COMMENT Maximum number of condition instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2605,7 +2605,7 @@ +@@ -2614,7 +2614,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_COND_INSTANCES VARIABLE_SCOPE GLOBAL @@ -891,7 +881,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 -@@ -2615,7 +2615,7 @@ +@@ -2624,7 +2624,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH VARIABLE_SCOPE GLOBAL @@ -900,7 +890,7 @@ VARIABLE_COMMENT Maximum length considered for digest text, when stored in performance_schema tables. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1048576 -@@ -2625,7 +2625,7 @@ +@@ -2634,7 +2634,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_CLASSES VARIABLE_SCOPE GLOBAL @@ -909,7 +899,7 @@ VARIABLE_COMMENT Maximum number of file instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2635,7 +2635,7 @@ +@@ -2644,7 +2644,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_HANDLES VARIABLE_SCOPE GLOBAL @@ -918,7 +908,7 @@ VARIABLE_COMMENT Maximum number of opened instrumented files. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1048576 -@@ -2645,7 +2645,7 @@ +@@ -2654,7 +2654,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES VARIABLE_SCOPE GLOBAL @@ -927,7 +917,7 @@ VARIABLE_COMMENT Maximum number of instrumented files. Use 0 to disable, -1 for automated sizing. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1048576 -@@ -2655,7 +2655,7 @@ +@@ -2664,7 +2664,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_INDEX_STAT VARIABLE_SCOPE GLOBAL @@ -936,7 +926,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 -@@ -2665,7 +2665,7 @@ +@@ -2674,7 +2674,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES VARIABLE_SCOPE GLOBAL @@ -945,7 +935,7 @@ VARIABLE_COMMENT Maximum number of memory pool instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1024 -@@ -2675,7 +2675,7 @@ +@@ -2684,7 +2684,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS VARIABLE_SCOPE GLOBAL @@ -954,7 +944,7 @@ VARIABLE_COMMENT Maximum number of metadata locks. Use 0 to disable, -1 for automated scaling. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 104857600 -@@ -2685,7 +2685,7 @@ +@@ -2694,7 +2694,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES VARIABLE_SCOPE GLOBAL @@ -963,7 +953,7 @@ VARIABLE_COMMENT Maximum number of mutex instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2695,7 +2695,7 @@ +@@ -2704,7 +2704,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES VARIABLE_SCOPE GLOBAL @@ -972,7 +962,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 -@@ -2705,7 +2705,7 @@ +@@ -2714,7 +2714,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES VARIABLE_SCOPE GLOBAL @@ -981,7 +971,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 -@@ -2715,7 +2715,7 @@ +@@ -2724,7 +2724,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES VARIABLE_SCOPE GLOBAL @@ -990,7 +980,7 @@ VARIABLE_COMMENT Maximum number of instrumented programs. Use 0 to disable, -1 for automated scaling. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1048576 -@@ -2725,7 +2725,7 @@ +@@ -2734,7 +2734,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES VARIABLE_SCOPE GLOBAL @@ -999,7 +989,7 @@ VARIABLE_COMMENT Maximum number of rwlock instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2735,7 +2735,7 @@ +@@ -2744,7 +2744,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES VARIABLE_SCOPE GLOBAL @@ -1008,7 +998,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 -@@ -2745,7 +2745,7 @@ +@@ -2754,7 +2754,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES VARIABLE_SCOPE GLOBAL @@ -1017,7 +1007,7 @@ VARIABLE_COMMENT Maximum number of socket instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2755,7 +2755,7 @@ +@@ -2764,7 +2764,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES VARIABLE_SCOPE GLOBAL @@ -1026,7 +1016,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 -@@ -2765,7 +2765,7 @@ +@@ -2774,7 +2774,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH VARIABLE_SCOPE GLOBAL @@ -1035,7 +1025,7 @@ VARIABLE_COMMENT Maximum length of displayed sql text. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 1048576 -@@ -2775,7 +2775,7 @@ +@@ -2784,7 +2784,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES VARIABLE_SCOPE GLOBAL @@ -1044,7 +1034,7 @@ VARIABLE_COMMENT Maximum number of stage instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2785,7 +2785,7 @@ +@@ -2794,7 +2794,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES VARIABLE_SCOPE GLOBAL @@ -1053,7 +1043,7 @@ VARIABLE_COMMENT Maximum number of statement instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2795,7 +2795,7 @@ +@@ -2804,7 +2804,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK VARIABLE_SCOPE GLOBAL @@ -1062,7 +1052,7 @@ VARIABLE_COMMENT Number of rows per thread in EVENTS_STATEMENTS_CURRENT. NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 256 -@@ -2805,7 +2805,7 @@ +@@ -2814,7 +2814,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES VARIABLE_SCOPE GLOBAL @@ -1071,7 +1061,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 -@@ -2815,7 +2815,7 @@ +@@ -2824,7 +2824,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES VARIABLE_SCOPE GLOBAL @@ -1080,7 +1070,7 @@ VARIABLE_COMMENT Maximum number of instrumented tables. Use 0 to disable, -1 for automated sizing. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1048576 -@@ -2825,7 +2825,7 @@ +@@ -2834,7 +2834,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT VARIABLE_SCOPE GLOBAL @@ -1089,7 +1079,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 -@@ -2835,7 +2835,7 @@ +@@ -2844,7 +2844,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES VARIABLE_SCOPE GLOBAL @@ -1098,7 +1088,7 @@ VARIABLE_COMMENT Maximum number of thread instruments. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 256 -@@ -2845,7 +2845,7 @@ +@@ -2854,7 +2854,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES VARIABLE_SCOPE GLOBAL @@ -1107,7 +1097,7 @@ VARIABLE_COMMENT Maximum number of instrumented threads. Use 0 to disable, -1 for automated sizing. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1048576 -@@ -2855,7 +2855,7 @@ +@@ -2864,7 +2864,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE VARIABLE_SCOPE GLOBAL @@ -1116,7 +1106,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 -@@ -2865,7 +2865,7 @@ +@@ -2874,7 +2874,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE VARIABLE_SCOPE GLOBAL @@ -1125,7 +1115,7 @@ VARIABLE_COMMENT Maximum number of rows in SETUP_ACTORS. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1024 -@@ -2875,7 +2875,7 @@ +@@ -2884,7 +2884,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE VARIABLE_SCOPE GLOBAL @@ -1134,7 +1124,7 @@ VARIABLE_COMMENT Maximum number of rows in SETUP_OBJECTS. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1048576 -@@ -2885,7 +2885,7 @@ +@@ -2894,7 +2894,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PERFORMANCE_SCHEMA_USERS_SIZE VARIABLE_SCOPE GLOBAL @@ -1143,7 +1133,7 @@ VARIABLE_COMMENT Maximum number of instrumented users. Use 0 to disable, -1 for automated sizing. NUMERIC_MIN_VALUE -1 NUMERIC_MAX_VALUE 1048576 -@@ -2935,7 +2935,7 @@ +@@ -2944,7 +2944,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PRELOAD_BUFFER_SIZE VARIABLE_SCOPE SESSION @@ -1152,7 +1142,7 @@ VARIABLE_COMMENT The size of the buffer that is allocated when preloading indexes NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 1073741824 -@@ -2955,7 +2955,7 @@ +@@ -2964,7 +2964,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME PROFILING_HISTORY_SIZE VARIABLE_SCOPE SESSION @@ -1161,7 +1151,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 -@@ -2965,7 +2965,7 @@ +@@ -2974,7 +2974,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME PROGRESS_REPORT_TIME VARIABLE_SCOPE SESSION @@ -1170,7 +1160,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 -@@ -3025,7 +3025,7 @@ +@@ -3034,7 +3034,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME QUERY_ALLOC_BLOCK_SIZE VARIABLE_SCOPE SESSION @@ -1179,7 +1169,7 @@ VARIABLE_COMMENT Allocation block size for query parsing and execution NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 4294967295 -@@ -3035,7 +3035,7 @@ +@@ -3044,7 +3044,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME QUERY_CACHE_LIMIT VARIABLE_SCOPE GLOBAL @@ -1188,7 +1178,7 @@ VARIABLE_COMMENT Don't cache results that are bigger than this NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -3045,7 +3045,7 @@ +@@ -3054,7 +3054,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME QUERY_CACHE_MIN_RES_UNIT VARIABLE_SCOPE GLOBAL @@ -1197,7 +1187,7 @@ VARIABLE_COMMENT The minimum size for blocks allocated by the query cache NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 4294967295 -@@ -3058,7 +3058,7 @@ +@@ -3067,7 +3067,7 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT The memory allocated to store results from old queries NUMERIC_MIN_VALUE 0 @@ -1206,7 +1196,7 @@ NUMERIC_BLOCK_SIZE 1024 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -3095,7 +3095,7 @@ +@@ -3104,7 +3104,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME QUERY_PREALLOC_SIZE VARIABLE_SCOPE SESSION @@ -1215,7 +1205,7 @@ VARIABLE_COMMENT Persistent buffer for query parsing and execution NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 4294967295 -@@ -3108,7 +3108,7 @@ +@@ -3117,7 +3117,7 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes NUMERIC_MIN_VALUE 0 @@ -1224,7 +1214,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -3118,14 +3118,14 @@ +@@ -3127,14 +3127,14 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT Sets the internal state of the RAND() generator for replication purposes NUMERIC_MIN_VALUE 0 @@ -1241,7 +1231,7 @@ VARIABLE_COMMENT Allocation block size for storing ranges during optimization NUMERIC_MIN_VALUE 4096 NUMERIC_MAX_VALUE 4294967295 -@@ -3138,14 +3138,14 @@ +@@ -3147,14 +3147,14 @@ VARIABLE_TYPE BIGINT UNSIGNED VARIABLE_COMMENT Maximum speed(KB/s) to read binlog from master (0 = no limit) NUMERIC_MIN_VALUE 0 @@ -1258,7 +1248,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 -@@ -3165,7 +3165,7 @@ +@@ -3174,7 +3174,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME READ_RND_BUFFER_SIZE VARIABLE_SCOPE SESSION @@ -1267,7 +1257,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 -@@ -3375,10 +3375,10 @@ +@@ -3384,10 +3384,10 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME ROWID_MERGE_BUFF_SIZE VARIABLE_SCOPE SESSION @@ -1280,7 +1270,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -3395,20 +3395,20 @@ +@@ -3404,20 +3404,20 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME RPL_SEMI_SYNC_MASTER_TIMEOUT VARIABLE_SCOPE GLOBAL @@ -1305,7 +1295,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -3465,10 +3465,10 @@ +@@ -3474,10 +3474,10 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME RPL_SEMI_SYNC_SLAVE_TRACE_LEVEL VARIABLE_SCOPE GLOBAL @@ -1318,7 +1308,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -3505,7 +3505,7 @@ +@@ -3514,7 +3514,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SERVER_ID VARIABLE_SCOPE SESSION @@ -1327,7 +1317,7 @@ VARIABLE_COMMENT Uniquely identifies the server instance in the community of replication partners NUMERIC_MIN_VALUE 1 NUMERIC_MAX_VALUE 4294967295 -@@ -3645,7 +3645,7 @@ +@@ -3644,7 +3644,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SLAVE_DOMAIN_PARALLEL_THREADS VARIABLE_SCOPE GLOBAL @@ -1336,7 +1326,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 -@@ -3675,7 +3675,7 @@ +@@ -3674,7 +3674,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SLAVE_MAX_ALLOWED_PACKET VARIABLE_SCOPE GLOBAL @@ -1345,7 +1335,7 @@ VARIABLE_COMMENT The maximum packet length to sent successfully from the master to slave. NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 1073741824 -@@ -3695,7 +3695,7 @@ +@@ -3694,7 +3694,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SLAVE_PARALLEL_MAX_QUEUED VARIABLE_SCOPE GLOBAL @@ -1354,7 +1344,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 -@@ -3715,7 +3715,7 @@ +@@ -3714,7 +3714,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME SLAVE_PARALLEL_THREADS VARIABLE_SCOPE GLOBAL @@ -1363,7 +1353,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 -@@ -3725,7 +3725,7 @@ +@@ -3724,7 +3724,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SLAVE_PARALLEL_WORKERS VARIABLE_SCOPE GLOBAL @@ -1372,7 +1362,7 @@ VARIABLE_COMMENT Alias for slave_parallel_threads NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 16383 -@@ -3765,7 +3765,7 @@ +@@ -3764,7 +3764,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME SLAVE_TRANSACTION_RETRIES VARIABLE_SCOPE GLOBAL @@ -1381,7 +1371,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 -@@ -3785,7 +3785,7 @@ +@@ -3784,7 +3784,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SLAVE_TRANSACTION_RETRY_INTERVAL VARIABLE_SCOPE GLOBAL @@ -1390,7 +1380,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 -@@ -3805,7 +3805,7 @@ +@@ -3804,7 +3804,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME SLOW_LAUNCH_TIME VARIABLE_SCOPE GLOBAL @@ -1399,7 +1389,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 -@@ -3848,7 +3848,7 @@ +@@ -3847,7 +3847,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 @@ -1408,7 +1398,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -4075,7 +4075,7 @@ +@@ -4074,7 +4074,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME STORED_PROGRAM_CACHE VARIABLE_SCOPE GLOBAL @@ -1417,7 +1407,7 @@ VARIABLE_COMMENT The soft upper limit for number of cached stored routines for one connection. NUMERIC_MIN_VALUE 0 NUMERIC_MAX_VALUE 524288 -@@ -4175,7 +4175,7 @@ +@@ -4174,7 +4174,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME TABLE_DEFINITION_CACHE VARIABLE_SCOPE GLOBAL @@ -1426,7 +1416,7 @@ VARIABLE_COMMENT The number of cached table definitions NUMERIC_MIN_VALUE 400 NUMERIC_MAX_VALUE 2097152 -@@ -4185,7 +4185,7 @@ +@@ -4184,7 +4184,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME TABLE_OPEN_CACHE VARIABLE_SCOPE GLOBAL @@ -1435,7 +1425,7 @@ VARIABLE_COMMENT The number of cached open tables NUMERIC_MIN_VALUE 10 NUMERIC_MAX_VALUE 1048576 -@@ -4245,7 +4245,7 @@ +@@ -4244,7 +4244,7 @@ COMMAND_LINE_ARGUMENT OPTIONAL VARIABLE_NAME THREAD_CACHE_SIZE VARIABLE_SCOPE GLOBAL @@ -1444,7 +1434,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 -@@ -4418,7 +4418,7 @@ +@@ -4417,7 +4417,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 @@ -1453,7 +1443,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -4428,7 +4428,7 @@ +@@ -4427,7 +4427,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 @@ -1462,7 +1452,7 @@ NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO -@@ -4438,14 +4438,14 @@ +@@ -4437,14 +4437,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 @@ -1479,7 +1469,7 @@ VARIABLE_COMMENT Allocation block size for transactions to be stored in binary log NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 134217728 -@@ -4455,7 +4455,7 @@ +@@ -4454,7 +4454,7 @@ COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME TRANSACTION_PREALLOC_SIZE VARIABLE_SCOPE SESSION @@ -1488,7 +1478,7 @@ VARIABLE_COMMENT Persistent buffer for transactions to be stored in binary log NUMERIC_MIN_VALUE 1024 NUMERIC_MAX_VALUE 134217728 -@@ -4595,7 +4595,7 @@ +@@ -4594,7 +4594,7 @@ COMMAND_LINE_ARGUMENT NULL VARIABLE_NAME WAIT_TIMEOUT VARIABLE_SCOPE SESSION @@ -1497,7 +1487,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 -@@ -4622,7 +4622,7 @@ +@@ -4621,7 +4621,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 91ce5d8ebc1..318417cc418 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result @@ -216,8 +216,8 @@ VARIABLE_NAME ARIA_SORT_BUFFER_SIZE VARIABLE_SCOPE SESSION 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 -NUMERIC_MAX_VALUE 9223372036854775807 +NUMERIC_MIN_VALUE 16376 +NUMERIC_MAX_VALUE 1152921504606846975 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO @@ -2277,7 +2277,7 @@ VARIABLE_SCOPE SESSION 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 -NUMERIC_MAX_VALUE 18446744073709551615 +NUMERIC_MAX_VALUE 1152921504606846975 NUMERIC_BLOCK_SIZE 1 ENUM_VALUE_LIST NULL READ_ONLY NO diff --git a/mysql-test/suite/sys_vars/r/wsrep_sst_donor_basic.result b/mysql-test/suite/sys_vars/r/wsrep_sst_donor_basic.result index 3d4fc24df7f..dbe4cc23bf9 100644 --- a/mysql-test/suite/sys_vars/r/wsrep_sst_donor_basic.result +++ b/mysql-test/suite/sys_vars/r/wsrep_sst_donor_basic.result @@ -33,17 +33,22 @@ SET @@global.wsrep_sst_donor=default; SELECT @@global.wsrep_sst_donor; @@global.wsrep_sst_donor -SET @@global.wsrep_sst_donor=NULL; +SET @@global.wsrep_sst_donor=''; SELECT @@global.wsrep_sst_donor; @@global.wsrep_sst_donor -NULL + # invalid values SET @@global.wsrep_sst_donor=1; ERROR 42000: Incorrect argument type to variable 'wsrep_sst_donor' SELECT @@global.wsrep_sst_donor; @@global.wsrep_sst_donor -NULL + +SET @@global.wsrep_sst_donor=NULL; +ERROR 42000: Variable 'wsrep_sst_donor' can't be set to the value of 'NULL' +SELECT @@global.wsrep_sst_donor; +@@global.wsrep_sst_donor + # restore the initial value SET @@global.wsrep_sst_donor = @wsrep_sst_donor_global_saved; diff --git a/mysql-test/suite/sys_vars/t/aria_sort_buffer_size_basic.test b/mysql-test/suite/sys_vars/t/aria_sort_buffer_size_basic.test index aa748778402..bf4106864ae 100644 --- a/mysql-test/suite/sys_vars/t/aria_sort_buffer_size_basic.test +++ b/mysql-test/suite/sys_vars/t/aria_sort_buffer_size_basic.test @@ -40,8 +40,7 @@ select @@global.aria_sort_buffer_size; --disable_warnings set session aria_sort_buffer_size=cast(-1 as unsigned int); --enable_warnings ---replace_result 4294967295 18446744073709551615 +--replace_result 4294967295 18446744073709551615 268435455 1152921504606846975 select @@session.aria_sort_buffer_size; SET @@global.aria_sort_buffer_size = @start_global_value; - diff --git a/mysql-test/suite/sys_vars/t/myisam_sort_buffer_size_basic.test b/mysql-test/suite/sys_vars/t/myisam_sort_buffer_size_basic.test index 81ff81ae935..ac1e9d615af 100644 --- a/mysql-test/suite/sys_vars/t/myisam_sort_buffer_size_basic.test +++ b/mysql-test/suite/sys_vars/t/myisam_sort_buffer_size_basic.test @@ -61,7 +61,7 @@ SELECT @@session.myisam_sort_buffer_size = @default_myisam_sort_buffer_size; SET @@global.myisam_sort_buffer_size = 4; SELECT @@global.myisam_sort_buffer_size ; -SET @@global.myisam_sort_buffer_size = 4294967295; +SET @@global.myisam_sort_buffer_size = 268435455; SELECT @@global.myisam_sort_buffer_size ; SET @@global.myisam_sort_buffer_size = 655354; @@ -76,7 +76,7 @@ SELECT @@global.myisam_sort_buffer_size ; SET @@session.myisam_sort_buffer_size = 4; SELECT @@session.myisam_sort_buffer_size ; -SET @@session.myisam_sort_buffer_size = 4294967295; +SET @@session.myisam_sort_buffer_size = 268435455; SELECT @@session.myisam_sort_buffer_size ; SET @@session.myisam_sort_buffer_size = 655345; @@ -96,33 +96,32 @@ SELECT @@global.myisam_sort_buffer_size ; --disable_warnings SET @@global.myisam_sort_buffer_size = 429496729533; --enable_warnings ---replace_result 429496729533 4294967295 +--replace_result 429496729533 4294967295 268435455 4294967295 SELECT @@global.myisam_sort_buffer_size ; - --Error ER_WRONG_TYPE_FOR_VAR SET @@global.myisam_sort_buffer_size = 65530.34; ---replace_result 429496729533 4294967295 +--replace_result 429496729533 4294967295 268435455 4294967295 SELECT @@global.myisam_sort_buffer_size ; --Error ER_WRONG_TYPE_FOR_VAR SET @@global.myisam_sort_buffer_size = test; ---replace_result 429496729533 4294967295 +--replace_result 429496729533 4294967295 268435455 4294967295 SELECT @@global.myisam_sort_buffer_size ; --Error ER_WRONG_TYPE_FOR_VAR SET @@global.myisam_sort_buffer_size = "test"; ---replace_result 429496729533 4294967295 +--replace_result 429496729533 4294967295 268435455 4294967295 SELECT @@global.myisam_sort_buffer_size ; --Error ER_WRONG_TYPE_FOR_VAR SET @@global.myisam_sort_buffer_size = 'test'; ---replace_result 429496729533 4294967295 +--replace_result 429496729533 4294967295 268435455 4294967295 SELECT @@global.myisam_sort_buffer_size ; --Error ER_WRONG_TYPE_FOR_VAR SET @@global.myisam_sort_buffer_size = ON; ---replace_result 429496729533 4294967295 +--replace_result 429496729533 4294967295 268435455 4294967295 SELECT @@global.myisam_sort_buffer_size ; diff --git a/mysql-test/suite/sys_vars/t/wsrep_sst_donor_basic.test b/mysql-test/suite/sys_vars/t/wsrep_sst_donor_basic.test index 7d3d6598557..c4b32bb8af6 100644 --- a/mysql-test/suite/sys_vars/t/wsrep_sst_donor_basic.test +++ b/mysql-test/suite/sys_vars/t/wsrep_sst_donor_basic.test @@ -27,7 +27,7 @@ SET @@global.wsrep_sst_donor='hyphenated-donor-name'; SELECT @@global.wsrep_sst_donor; SET @@global.wsrep_sst_donor=default; SELECT @@global.wsrep_sst_donor; -SET @@global.wsrep_sst_donor=NULL; +SET @@global.wsrep_sst_donor=''; SELECT @@global.wsrep_sst_donor; --echo @@ -35,6 +35,9 @@ SELECT @@global.wsrep_sst_donor; --error ER_WRONG_TYPE_FOR_VAR SET @@global.wsrep_sst_donor=1; SELECT @@global.wsrep_sst_donor; +--error ER_WRONG_VALUE_FOR_VAR +SET @@global.wsrep_sst_donor=NULL; +SELECT @@global.wsrep_sst_donor; --echo --echo # restore the initial value diff --git a/mysys/get_password.c b/mysys/get_password.c index 2a5ddc9a4d7..17dbf13dd3d 100644 --- a/mysys/get_password.c +++ b/mysys/get_password.c @@ -60,11 +60,11 @@ /* were just going to fake it here and get input from the keyboard */ -char *get_tty_password(const char *opt_message) +char *my_get_tty_password(const char *opt_message) { char to[80]; char *pos=to,*end=to+sizeof(to)-1; - DBUG_ENTER("get_tty_password"); + DBUG_ENTER("my_get_tty_password"); _cputs(opt_message ? opt_message : "Enter password: "); for (;;) { @@ -145,7 +145,7 @@ static void get_password(char *to,uint length,int fd, my_bool echo) #endif /* ! HAVE_GETPASS */ -char *get_tty_password(const char *opt_message) +char *my_get_tty_password(const char *opt_message) { #ifdef HAVE_GETPASS char *passbuff; @@ -154,7 +154,7 @@ char *get_tty_password(const char *opt_message) #endif /* HAVE_GETPASS */ char buff[80]; - DBUG_ENTER("get_tty_password"); + DBUG_ENTER("my_get_tty_password"); #ifdef HAVE_GETPASS passbuff = getpass(opt_message ? opt_message : "Enter password: "); diff --git a/mysys/lf_alloc-pin.c b/mysys/lf_alloc-pin.c index 33480289d94..fc3f320a623 100644 --- a/mysys/lf_alloc-pin.c +++ b/mysys/lf_alloc-pin.c @@ -269,6 +269,9 @@ void lf_pinbox_free(LF_PINS *pins, void *addr) add_to_purgatory(pins, addr); if (pins->purgatory_count % LF_PURGATORY_SIZE == 0) lf_pinbox_real_free(pins); + DBUG_EXECUTE_IF("unconditional_pinbox_free", + if (pins->purgatory_count % LF_PURGATORY_SIZE) + lf_pinbox_real_free(pins);); } struct st_harvester { diff --git a/mysys/my_win_popen.cc b/mysys/my_win_popen.cc index f41f54100f1..cceb77e9019 100644 --- a/mysys/my_win_popen.cc +++ b/mysys/my_win_popen.cc @@ -92,7 +92,7 @@ extern "C" FILE *my_win_popen(const char *cmd, const char *mode) goto error; break; default: - /* Unknown mode, éxpected "r", "rt", "w", "wt" */ + /* Unknown mode, expected "r", "rt", "w", "wt" */ abort(); } if (!SetHandleInformation(parent_pipe_end, HANDLE_FLAG_INHERIT, 0)) diff --git a/mysys_ssl/openssl.c b/mysys_ssl/openssl.c index b38d4ba309c..340ba34ba78 100644 --- a/mysys_ssl/openssl.c +++ b/mysys_ssl/openssl.c @@ -15,6 +15,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include +#include /* The check is only done for OpenSSL 1.1.x. @@ -24,17 +25,15 @@ */ #ifndef HAVE_OPENSSL11 -#include int check_openssl_compatibility() { return 0; } #else #include -#include static uint testing; -size_t alloc_size, alloc_count; +static size_t alloc_size, alloc_count; static void *coc_malloc(size_t size, const char *f __attribute__((unused)), int l __attribute__((unused))) diff --git a/plugin/cracklib_password_check/CMakeLists.txt b/plugin/cracklib_password_check/CMakeLists.txt index 620234ccd3f..5d5466fb84e 100644 --- a/plugin/cracklib_password_check/CMakeLists.txt +++ b/plugin/cracklib_password_check/CMakeLists.txt @@ -1,9 +1,9 @@ INCLUDE (CheckIncludeFiles) INCLUDE (CheckLibraryExists) -SET(CPACK_RPM_cracklib-password-check_PACKAGE_SUMMARY "CrackLib Password Validation Plugin for MariaDB" PARENT_SCOPE) +SET(CPACK_RPM_cracklib-password-check_PACKAGE_SUMMARY "CrackLib Password Validation Plugin for MariaDB server" PARENT_SCOPE) SET(CPACK_RPM_cracklib-password-check_PACKAGE_DESCRIPTION "This password validation plugin uses cracklib to allow only -sufficiently secure (as defined by cracklib) user passwords in MariaDB." PARENT_SCOPE) +sufficiently secure (as defined by cracklib) user passwords in MariaDB server." PARENT_SCOPE) CHECK_LIBRARY_EXISTS(crack FascistCheckUser "" HAVE_LIBCRACK) diff --git a/plugin/versioning/versioning.cc b/plugin/versioning/versioning.cc index c970a9d6561..38ebf76256b 100644 --- a/plugin/versioning/versioning.cc +++ b/plugin/versioning/versioning.cc @@ -141,7 +141,7 @@ Create_func_trt_trx_sees Create_func_trt_trx_sees::s_singleton; #define BUILDER(F) & F::s_singleton -static Native_func_registry func_array[] = +static const Native_func_registry func_array_vers[] = { { { C_STRING_WITH_LEN("TRT_BEGIN_TS") }, BUILDER(Create_func_trt)}, { { C_STRING_WITH_LEN("TRT_COMMIT_ID") }, BUILDER(Create_func_trt)}, @@ -165,7 +165,8 @@ static int versioning_plugin_init(void *p __attribute__ ((unused))) { DBUG_ENTER("versioning_plugin_init"); // No need in locking since we so far single-threaded - int res= item_create_append(func_array); + int res= native_functions_hash.append(func_array_vers, + array_elements(func_array_vers)); if (res) { my_message(ER_PLUGIN_IS_NOT_LOADED, "Can't append function array" , MYF(0)); @@ -178,7 +179,8 @@ static int versioning_plugin_init(void *p __attribute__ ((unused))) static int versioning_plugin_deinit(void *p __attribute__ ((unused))) { DBUG_ENTER("versioning_plugin_deinit"); - (void) item_create_remove(func_array); + (void) native_functions_hash.remove(func_array_vers, + array_elements(func_array_vers)); DBUG_RETURN(0); } diff --git a/sql/field.cc b/sql/field.cc index 83fc694c3af..6b4466db87e 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2655,6 +2655,8 @@ bool Field_row::sp_prepare_and_store_item(THD *thd, Item **value) fixed underlying Item_field pointing to Field_row. - In case if we're assigning from a ROW() value, src and value[0] will point to the same Item_row. + - In case if we're assigning from a subselect, src and value[0] also + point to the same Item_singlerow_subselect. */ Item *src; if (!(src= thd->sp_fix_func_item(value)) || @@ -2666,6 +2668,7 @@ bool Field_row::sp_prepare_and_store_item(THD *thd, Item **value) DBUG_RETURN(true); } + src->bring_value(); DBUG_RETURN(m_table->sp_set_all_fields_from_item(thd, src)); } diff --git a/sql/handler.cc b/sql/handler.cc index 49e9b0bcbea..12e000abe3c 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -355,9 +355,6 @@ handlerton *ha_checktype(THD *thd, handlerton *hton, bool no_substitute) if (no_substitute) return NULL; -#ifdef WITH_WSREP - (void)wsrep_after_rollback(thd, false); -#endif /* WITH_WSREP */ return ha_default_handlerton(thd); } /* ha_checktype */ diff --git a/sql/item_create.cc b/sql/item_create.cc index 572b5d52fbb..19b2f775bdd 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -48,20 +48,6 @@ get_native_fct_hash_key(const uchar *buff, size_t *length, } -bool Native_func_registry_array::append_to_hash(HASH *hash) const -{ - DBUG_ENTER("Native_func_registry_array::append_to_hash"); - for (size_t i= 0; i < count(); i++) - { - const Native_func_registry &func= element(i); - DBUG_ASSERT(func.builder != NULL); - if (my_hash_insert(hash, (uchar*) &func)) - DBUG_RETURN(true); - } - DBUG_RETURN(false); -} - - #ifdef HAVE_SPATIAL extern Native_func_registry_array native_func_registry_array_geom; #endif @@ -5463,7 +5449,7 @@ Create_func_year_week::create_native(THD *thd, const LEX_CSTRING *name, - keep 1 line per entry, it makes grep | sort easier */ -Native_func_registry func_array[] = +const Native_func_registry func_array[] = { { { STRING_WITH_LEN("ABS") }, BUILDER(Create_func_abs)}, { { STRING_WITH_LEN("ACOS") }, BUILDER(Create_func_acos)}, @@ -5662,7 +5648,9 @@ Native_func_registry func_array[] = Native_func_registry_array native_func_registry_array(func_array, array_elements(func_array)); -static HASH native_functions_hash; +const size_t func_array_length= sizeof(func_array) / sizeof(Native_func_registry) - 1; + +Native_functions_hash native_functions_hash; /* Load the hash table for native functions. @@ -5670,74 +5658,57 @@ static HASH native_functions_hash; startup only (before going multi-threaded) */ -int item_create_init() +bool Native_functions_hash::init(size_t count) { - DBUG_ENTER("item_create_init"); - size_t count= native_func_registry_array.count(); -#ifdef HAVE_SPATIAL - count+= native_func_registry_array_geom.count(); -#endif - if (my_hash_init(key_memory_native_functions, & native_functions_hash, + DBUG_ENTER("Native_functions_hash::init"); + + if (my_hash_init(key_memory_native_functions, this, system_charset_info, (ulong) count, 0, 0, (my_hash_get_key) get_native_fct_hash_key, NULL, MYF(0))) - DBUG_RETURN(1); + DBUG_RETURN(true); - if (native_func_registry_array.append_to_hash(&native_functions_hash)) - DBUG_RETURN(1); + DBUG_RETURN(false); +} -#ifdef HAVE_SPATIAL - if (native_func_registry_array_geom.append_to_hash(&native_functions_hash)) - DBUG_RETURN(1); -#endif -#ifdef DBUG_TRACE - for (uint i=0 ; i < native_functions_hash.records ; i++) +bool Native_functions_hash::append(const Native_func_registry array[], + size_t count) +{ + DBUG_ENTER("Native_functions_hash::append"); + + for (size_t i= 0; i < count; i++) { - Native_func_registry *func; - func= (Native_func_registry*) my_hash_element(& native_functions_hash, i); + if (my_hash_insert(this, (uchar*) &array[i])) + DBUG_RETURN(true); + } + +#if ! defined (DBUG_OFF) && defined (DBUG_TRACE) + for (uint i=0 ; i < records ; i++) + { + const Native_func_registry *func= + (Native_func_registry*) my_hash_element(this, i); DBUG_PRINT("info", ("native function: %s length: %u", func->name.str, (uint) func->name.length)); } #endif - - DBUG_RETURN(0); + DBUG_RETURN(false); } -/* - This function is used (dangerously) by plugin/versioning/versioning.cc - TODO: MDEV-20842 Wrap SQL functions defined in - plugin/versioning/versioning.cc into MariaDB_FUNCTION_PLUGIN -*/ -int item_create_append(Native_func_registry array[]) +bool Native_functions_hash::remove(const Native_func_registry array[], + size_t count) { - Native_func_registry *func; + DBUG_ENTER("Native_functions_hash::remove"); - DBUG_ENTER("item_create_append"); - - for (func= array; func->builder != NULL; func++) + for (size_t i= 0; i < count; i++) { - if (my_hash_insert(& native_functions_hash, (uchar*) func)) - DBUG_RETURN(1); + if (my_hash_delete(this, (uchar*) &array[i])) + DBUG_RETURN(true); } - DBUG_RETURN(0); + DBUG_RETURN(false); } -int item_create_remove(Native_func_registry array[]) -{ - Native_func_registry *func; - - DBUG_ENTER("item_create_remove"); - - for (func= array; func->builder != NULL; func++) - { - if (my_hash_delete(& native_functions_hash, (uchar*) func)) - DBUG_RETURN(1); - } - - DBUG_RETURN(0); -} /* Empty the hash table for native functions. @@ -5745,10 +5716,10 @@ int item_create_remove(Native_func_registry array[]) shutdown only (after thread requests have been executed). */ -void item_create_cleanup() +void Native_functions_hash::cleanup() { - DBUG_ENTER("item_create_cleanup"); - my_hash_free(& native_functions_hash); + DBUG_ENTER("Native_functions_hash::cleanup"); + my_hash_free(this); DBUG_VOID_RETURN; } @@ -5771,25 +5742,53 @@ function_plugin_find_native_function_builder(THD *thd, const LEX_CSTRING &name) Create_func * -find_native_function_builder(THD *thd, const LEX_CSTRING *name) +Native_functions_hash::find(THD *thd, const LEX_CSTRING &name) const { Native_func_registry *func; Create_func *builder= NULL; /* Thread safe */ - func= (Native_func_registry*) my_hash_search(&native_functions_hash, - (uchar*) name->str, - name->length); + func= (Native_func_registry*) my_hash_search(this, + (uchar*) name.str, + name.length); if (func && (builder= func->builder)) return builder; - if ((builder= function_plugin_find_native_function_builder(thd, *name))) + if ((builder= function_plugin_find_native_function_builder(thd, name))) return builder; return NULL; } + +int item_create_init() +{ + size_t count= native_func_registry_array.count(); +#ifdef HAVE_SPATIAL + count+= native_func_registry_array_geom.count(); +#endif + + if (native_functions_hash.init(count) || + native_functions_hash.append(native_func_registry_array.elements(), + native_func_registry_array.count())) + return true; + +#ifdef HAVE_SPATIAL + if (native_functions_hash.append(native_func_registry_array_geom.elements(), + native_func_registry_array_geom.count())) + return true; +#endif + return false; +} + + +void item_create_cleanup() +{ + native_functions_hash.cleanup(); +} + + Create_qfunc * find_qualified_function_builder(THD *thd) { diff --git a/sql/item_create.h b/sql/item_create.h index 90546ddc5b7..74a052c79fd 100644 --- a/sql/item_create.h +++ b/sql/item_create.h @@ -252,16 +252,6 @@ protected: }; -/** - Find the native function builder associated with a given function name. - @param thd The current thread - @param name The native function name - @return The native function builder associated with the name, or NULL -*/ -extern Create_func *find_native_function_builder(THD *thd, - const LEX_CSTRING *name); - - /** Find the function builder for qualified functions. @param thd The current thread @@ -308,9 +298,48 @@ struct Native_func_registry Create_func *builder; }; + +class Native_functions_hash: public HASH +{ +public: + Native_functions_hash() + { + bzero(this, sizeof(*this)); + } + ~Native_functions_hash() + { + /* + No automatic free because objects of this type + are expected to be declared statically. + The code in cleanup() calls my_hash_free() which may not work correctly + at the very end of mariadbd shutdown. + The the upper level code should call cleanup() explicitly. + + Unfortunatelly, it's not possible to use DBUG_ASSERT(!records) here, + because the server terminates using exit() in some cases, + e.g. in the test main.named_pipe with the "Create named pipe failed" + error. + */ + } + bool init(size_t count); + bool append(const Native_func_registry array[], size_t count); + bool remove(const Native_func_registry array[], size_t count); + void cleanup(); + /** + Find the native function builder associated with a given function name. + @param thd The current thread + @param name The native function name + @return The native function builder associated with the name, or NULL + */ + Create_func *find(THD *thd, const LEX_CSTRING &name) const; +}; + +extern MYSQL_PLUGIN_IMPORT Native_functions_hash native_functions_hash; + +extern const Native_func_registry func_array[]; +extern const size_t func_array_length; + int item_create_init(); -int item_create_append(Native_func_registry array[]); -int item_create_remove(Native_func_registry array[]); void item_create_cleanup(); Item *create_func_dyncol_create(THD *thd, List &list); @@ -342,8 +371,8 @@ public: DBUG_ASSERT(i < m_count); return m_elements[i]; } + const Native_func_registry *elements() const { return m_elements; } size_t count() const { return m_count; } - bool append_to_hash(HASH *hash) const; }; diff --git a/sql/item_func.cc b/sql/item_func.cc index 178acb5a822..dd12e1a7576 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -78,7 +78,7 @@ bool check_reserved_words(const LEX_CSTRING *name) */ static inline bool test_if_sum_overflows_ull(ulonglong arg1, ulonglong arg2) { - return ULONGLONG_MAX - arg1 < arg2; + return ULonglong::test_if_sum_overflows_ull(arg1, arg2); } @@ -1378,79 +1378,23 @@ double Item_func_mul::real_op() longlong Item_func_mul::int_op() { DBUG_ASSERT(fixed == 1); - longlong a= args[0]->val_int(); - longlong b= args[1]->val_int(); - longlong res; - ulonglong res0, res1; - ulong a0, a1, b0, b1; - bool res_unsigned= FALSE; - bool a_negative= FALSE, b_negative= FALSE; - - if ((null_value= args[0]->null_value || args[1]->null_value)) - return 0; - /* - First check whether the result can be represented as a - (bool unsigned_flag, longlong value) pair, then check if it is compatible - with this Item's unsigned_flag by calling check_integer_overflow(). - - Let a = a1 * 2^32 + a0 and b = b1 * 2^32 + b0. Then - a * b = (a1 * 2^32 + a0) * (b1 * 2^32 + b0) = a1 * b1 * 2^64 + - + (a1 * b0 + a0 * b1) * 2^32 + a0 * b0; - We can determine if the above sum overflows the ulonglong range by - sequentially checking the following conditions: - 1. If both a1 and b1 are non-zero. - 2. Otherwise, if (a1 * b0 + a0 * b1) is greater than ULONG_MAX. - 3. Otherwise, if (a1 * b0 + a0 * b1) * 2^32 + a0 * b0 is greater than - ULONGLONG_MAX. - Since we also have to take the unsigned_flag for a and b into account, it is easier to first work with absolute values and set the correct sign later. */ - if (!args[0]->unsigned_flag && a < 0) - { - a_negative= TRUE; - a= -a; - } - if (!args[1]->unsigned_flag && b < 0) - { - b_negative= TRUE; - b= -b; - } + Longlong_hybrid_null ha= args[0]->to_longlong_hybrid_null(); + Longlong_hybrid_null hb= args[1]->to_longlong_hybrid_null(); - a0= 0xFFFFFFFFUL & a; - a1= ((ulonglong) a) >> 32; - b0= 0xFFFFFFFFUL & b; - b1= ((ulonglong) b) >> 32; + if ((null_value= ha.is_null() || hb.is_null())) + return 0; - if (a1 && b1) - goto err; + ULonglong_null ures= ULonglong_null::ullmul(ha.abs(), hb.abs()); + if (ures.is_null()) + return raise_integer_overflow(); - res1= (ulonglong) a1 * b0 + (ulonglong) a0 * b1; - if (res1 > 0xFFFFFFFFUL) - goto err; - - res1= res1 << 32; - res0= (ulonglong) a0 * b0; - - if (test_if_sum_overflows_ull(res1, res0)) - goto err; - res= res1 + res0; - - if (a_negative != b_negative) - { - if ((ulonglong) res > (ulonglong) LONGLONG_MIN + 1) - goto err; - res= -res; - } - else - res_unsigned= TRUE; - - return check_integer_overflow(res, res_unsigned); - -err: - return raise_integer_overflow(); + return check_integer_overflow(ULonglong_hybrid(ures.value(), + ha.neg() != hb.neg())); } @@ -1648,15 +1592,8 @@ longlong Item_func_int_div::val_int() return 0; } - bool res_negative= val0.neg() != val1.neg(); - ulonglong res= val0.abs() / val1.abs(); - if (res_negative) - { - if (res > (ulonglong) LONGLONG_MAX) - return raise_integer_overflow(); - res= (ulonglong) (-(longlong) res); - } - return check_integer_overflow(res, !res_negative); + return check_integer_overflow(ULonglong_hybrid(val0.abs() / val1.abs(), + val0.neg() != val1.neg())); } @@ -1690,9 +1627,8 @@ longlong Item_func_mod::int_op() LONGLONG_MIN by -1 generates SIGFPE, we calculate using unsigned values and then adjust the sign appropriately. */ - ulonglong res= val0.abs() % val1.abs(); - return check_integer_overflow(val0.neg() ? -(longlong) res : res, - !val0.neg()); + return check_integer_overflow(ULonglong_hybrid(val0.abs() % val1.abs(), + val0.neg())); } double Item_func_mod::real_op() @@ -2723,7 +2659,7 @@ longlong Item_func_round::int_op() if ((dec >= 0) || args[1]->unsigned_flag) return value; // integer have not digits after point - abs_dec= -dec; + abs_dec= Longlong(dec).abs(); // Avoid undefined behavior longlong tmp; if(abs_dec >= array_elements(log_10_int)) diff --git a/sql/item_func.h b/sql/item_func.h index 1a10b6e1d29..bc7cf653e2d 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -251,12 +251,23 @@ public: */ inline longlong check_integer_overflow(longlong value, bool val_unsigned) { - if ((unsigned_flag && !val_unsigned && value < 0) || - (!unsigned_flag && val_unsigned && - (ulonglong) value > (ulonglong) LONGLONG_MAX)) - return raise_integer_overflow(); - return value; + return check_integer_overflow(Longlong_hybrid(value, val_unsigned)); } + + // Check if the value is compatible with Item::unsigned_flag. + inline longlong check_integer_overflow(const Longlong_hybrid &sval) + { + Longlong_null res= sval.val_int(unsigned_flag); + return res.is_null() ? raise_integer_overflow() : res.value(); + } + + // Check if the value is compatible with Item::unsigned_flag. + longlong check_integer_overflow(const ULonglong_hybrid &uval) + { + Longlong_null res= uval.val_int(unsigned_flag); + return res.is_null() ? raise_integer_overflow() : res.value(); + } + /** Throw an error if the error code of a DECIMAL operation is E_DEC_OVERFLOW. */ diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 8d44f9481b8..d244c4e87f5 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -4573,16 +4573,11 @@ void subselect_union_engine::print(String *str, enum_query_type query_type) void subselect_uniquesubquery_engine::print(String *str, enum_query_type query_type) { + TABLE *table= tab->tab_list ? tab->tab_list->table : tab->table; str->append(STRING_WITH_LEN("(")); tab->ref.items[0]->print(str, query_type); - if (!tab->table) - { - // table is not opened so unknown - str->append(')'); - return; - } str->append(STRING_WITH_LEN(" in ")); - if (tab->table->s->table_category == TABLE_CATEGORY_TEMPORARY) + if (table->s->table_category == TABLE_CATEGORY_TEMPORARY) { /* Temporary tables' names change across runs, so they can't be used for @@ -4591,8 +4586,8 @@ void subselect_uniquesubquery_engine::print(String *str, str->append(STRING_WITH_LEN("")); } else - str->append(&tab->table->s->table_name); - KEY *key_info= tab->table->key_info+ tab->ref.key; + str->append(&table->s->table_name); + KEY *key_info= table->key_info+ tab->ref.key; str->append(STRING_WITH_LEN(" on ")); str->append(&key_info->name); if (cond) @@ -4610,12 +4605,13 @@ all other tests pass. void subselect_uniquesubquery_engine::print(String *str) { - KEY *key_info= tab->table->key_info + tab->ref.key; + TABLE *table= tab->tab_list ? tab->tab_list->table : tab->table; + KEY *key_info= table->key_info + tab->ref.key; str->append(STRING_WITH_LEN("(")); for (uint i= 0; i < key_info->user_defined_key_parts; i++) tab->ref.items[i]->print(str); str->append(STRING_WITH_LEN(" in ")); - str->append(&tab->table->s->table_name); + str->append(&table->s->table_name); str->append(STRING_WITH_LEN(" on ")); str->append(&key_info->name); if (cond) @@ -4630,11 +4626,12 @@ void subselect_uniquesubquery_engine::print(String *str) void subselect_indexsubquery_engine::print(String *str, enum_query_type query_type) { + TABLE *table= tab->tab_list ? tab->tab_list->table : tab->table; str->append(STRING_WITH_LEN("(")); tab->ref.items[0]->print(str, query_type); str->append(STRING_WITH_LEN(" in ")); - str->append(tab->table->s->table_name.str, tab->table->s->table_name.length); - KEY *key_info= tab->table->key_info+ tab->ref.key; + str->append(&table->s->table_name); + KEY *key_info= table->key_info+ tab->ref.key; str->append(STRING_WITH_LEN(" on ")); str->append(&key_info->name); if (check_null) @@ -5318,6 +5315,7 @@ subselect_hash_sj_engine::make_unique_engine() DBUG_RETURN(NULL); tab->table= tmp_table; + tab->tab_list= 0; tab->preread_init_done= FALSE; tab->ref.tmp_table_index_lookup_init(thd, tmp_key, it, FALSE); diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc index 6e863b1ffef..f6acb7695db 100644 --- a/sql/item_xmlfunc.cc +++ b/sql/item_xmlfunc.cc @@ -2591,19 +2591,21 @@ static int my_xpath_parse_VariableReference(MY_XPATH *xpath) { LEX_CSTRING name; - int user_var; - const char *dollar_pos; THD *thd= xpath->thd; - if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_DOLLAR) || - (!(dollar_pos= xpath->prevtok.beg)) || - (!((user_var= my_xpath_parse_term(xpath, MY_XPATH_LEX_AT) && + if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_DOLLAR)) + return 0; + const char *dollar_pos= xpath->prevtok.beg; + if (!dollar_pos) + return 0; + int user_var= my_xpath_parse_term(xpath, MY_XPATH_LEX_AT); + if (!((user_var && my_xpath_parse_term(xpath, MY_XPATH_LEX_IDENT))) && - !my_xpath_parse_term(xpath, MY_XPATH_LEX_IDENT))) + !my_xpath_parse_term(xpath, MY_XPATH_LEX_IDENT)) return 0; name.length= xpath->prevtok.end - xpath->prevtok.beg; name.str= (char*) xpath->prevtok.beg; - + if (user_var) xpath->item= new (thd->mem_root) Item_func_get_user_var(thd, &name); else diff --git a/sql/log.cc b/sql/log.cc index 608d47547b1..7d65e60be47 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -11084,7 +11084,7 @@ get_gtid_list_event(IO_CACHE *cache, Gtid_list_log_event **out_gtid_list) if (fdle->start_decryption((Start_encryption_log_event*) ev)) { errormsg= "Could not set up decryption for binlog."; - break; + typ= UNKNOWN_EVENT; // to cleanup and abort below } } delete ev; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 64c9954d19d..52561e35f45 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -2885,6 +2885,13 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use, tree= cond->get_mm_tree(¶m, &cond); if (notnull_cond_tree) tree= tree_and(¶m, tree, notnull_cond_tree); + if (thd->trace_started() && + param.alloced_sel_args >= SEL_ARG::MAX_SEL_ARGS) + { + Json_writer_object wrapper(thd); + Json_writer_object obj(thd, "sel_arg_alloc_limit_hit"); + obj.add("alloced_sel_args", param.alloced_sel_args); + } } if (tree) { diff --git a/sql/opt_split.cc b/sql/opt_split.cc index fa4c26407b5..8c107640184 100644 --- a/sql/opt_split.cc +++ b/sql/opt_split.cc @@ -962,7 +962,7 @@ SplM_plan_info * JOIN_TAB::choose_best_splitting(uint idx, SplM_plan_info *spl_plan= 0; uint best_key= 0; uint best_key_parts= 0; - table_map best_param_tables; + table_map best_param_tables= 0L; Json_writer_object trace_obj(thd, "choose_best_splitting"); Json_writer_array trace_arr(thd, "considered_keys"); /* diff --git a/sql/opt_subselect.cc b/sql/opt_subselect.cc index 3cc4d621f07..d21cde1574a 100644 --- a/sql/opt_subselect.cc +++ b/sql/opt_subselect.cc @@ -4194,6 +4194,7 @@ bool setup_sj_materialization_part1(JOIN_TAB *sjm_tab) sjm->materialized= FALSE; sjm_tab->table= sjm->table; + sjm_tab->tab_list= emb_sj_nest; sjm->table->pos_in_table_list= emb_sj_nest; DBUG_RETURN(FALSE); diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc index e4514e28e64..907838cef37 100644 --- a/sql/rpl_gtid.cc +++ b/sql/rpl_gtid.cc @@ -45,9 +45,7 @@ rpl_slave_state::update_state_hash(uint64 sub_id, rpl_gtid *gtid, void *hton, there will not be an attempt to delete the corresponding table row before it is even committed. */ - mysql_mutex_lock(&LOCK_slave_state); err= update(gtid->domain_id, gtid->server_id, sub_id, gtid->seq_no, hton, rgi); - mysql_mutex_unlock(&LOCK_slave_state); if (err) { sql_print_warning("Slave: Out of memory during slave state maintenance. " @@ -291,11 +289,24 @@ rpl_slave_state::truncate_hash() int rpl_slave_state::update(uint32 domain_id, uint32 server_id, uint64 sub_id, uint64 seq_no, void *hton, rpl_group_info *rgi) +{ + int res; + mysql_mutex_lock(&LOCK_slave_state); + res= update_nolock(domain_id, server_id, sub_id, seq_no, hton, rgi); + mysql_mutex_unlock(&LOCK_slave_state); + return res; +} + + +int +rpl_slave_state::update_nolock(uint32 domain_id, uint32 server_id, uint64 sub_id, + uint64 seq_no, void *hton, rpl_group_info *rgi) { element *elem= NULL; list_element *list_elem= NULL; DBUG_ASSERT(hton || !loaded); + mysql_mutex_assert_owner(&LOCK_slave_state); if (!(elem= get_element(domain_id))) return 1; @@ -309,7 +320,6 @@ rpl_slave_state::update(uint32 domain_id, uint32 server_id, uint64 sub_id, of all pending MASTER_GTID_WAIT(), so we do not slow down the replication SQL thread. */ - mysql_mutex_assert_owner(&LOCK_slave_state); elem->gtid_waiter= NULL; mysql_cond_broadcast(&elem->COND_wait_gtid); } @@ -1360,6 +1370,7 @@ rpl_slave_state::load(THD *thd, const char *state_from_master, size_t len, { const char *end= state_from_master + len; + mysql_mutex_assert_not_owner(&LOCK_slave_state); if (reset) { if (truncate_state_table(thd)) diff --git a/sql/rpl_gtid.h b/sql/rpl_gtid.h index 531d746763b..46ab4c4bd18 100644 --- a/sql/rpl_gtid.h +++ b/sql/rpl_gtid.h @@ -233,6 +233,8 @@ struct rpl_slave_state ulong count() const { return hash.records; } int update(uint32 domain_id, uint32 server_id, uint64 sub_id, uint64 seq_no, void *hton, rpl_group_info *rgi); + int update_nolock(uint32 domain_id, uint32 server_id, uint64 sub_id, + uint64 seq_no, void *hton, rpl_group_info *rgi); int truncate_state_table(THD *thd); void select_gtid_pos_table(THD *thd, LEX_CSTRING *out_tablename); int record_gtid(THD *thd, const rpl_gtid *gtid, uint64 sub_id, diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index fc3d6f35ee5..fc433064cfa 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -2330,9 +2330,7 @@ rpl_parallel::find(uint32 domain_id) mysql_cond_init(key_COND_parallel_entry, &e->COND_parallel_entry, NULL); if (my_hash_insert(&domain_hash, (uchar *)e)) { - mysql_cond_destroy(&e->COND_parallel_entry); - mysql_mutex_destroy(&e->LOCK_parallel_entry); - my_free(e); + free_rpl_parallel_entry(e); return NULL; } } diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index de5fcb83a7d..137892787e5 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -1930,7 +1930,7 @@ rpl_load_gtid_slave_state(THD *thd) for (i= 0; i < array.elements; ++i) { get_dynamic(&array, (uchar *)&tmp_entry, i); - if ((err= rpl_global_gtid_slave_state->update(tmp_entry.gtid.domain_id, + if ((err= rpl_global_gtid_slave_state->update_nolock(tmp_entry.gtid.domain_id, tmp_entry.gtid.server_id, tmp_entry.sub_id, tmp_entry.gtid.seq_no, diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 14fbfdc1b9e..1d9a88c51fc 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -2476,7 +2476,6 @@ ER_TABLE_NOT_LOCKED swe "Tabell '%-.192s' är inte lĂĽst med LOCK TABLES" ukr "Таблицю '%-.192s' но йуНО йНОкОванО С LOCK TABLES" ER_UNUSED_17 - chi "你永远不应该看到它" eng "You should never see it" ER_WRONG_DB_NAME 42000 chi "数据库名称不正确'%-.100T'" @@ -4270,7 +4269,6 @@ ER_NEW_ABORTING_CONNECTION 08S01 swe "AvbrĂśt länken fĂśr trĂĽd %lld till db '%-.192s', användare '%-.48s', host '%-.64s' (%-.64s)" ukr "Перервано С'єднання %lld Đ´Đž йаСи данних: '%-.192s' користувач: '%-.48s' хост: '%-.64s' (%-.64s)" ER_UNUSED_10 - chi "你应当永远看不到这个" eng "You should never see it" ER_FLUSH_MASTER_BINLOG_CLOSED chi "Binlog 已关闭, 不能 RESET MASTER" @@ -6598,10 +6596,8 @@ ER_EVENT_NEITHER_M_EXPR_NOR_M_AT eng "No datetime expression provided" ger "Kein DATETIME-Ausdruck angegeben" ER_UNUSED_2 - chi "你永远不应该看到它" eng "You should never see it" ER_UNUSED_3 - chi "你永远不应该看到它" eng "You should never see it" ER_EVENT_CANNOT_DELETE chi "无法从mysql.event删除该事件" @@ -6639,7 +6635,6 @@ ER_CANT_LOCK_LOG_TABLE eng "You can't use locks with log tables" ger "Log-Tabellen kĂśnnen nicht gesperrt werden" ER_UNUSED_4 - chi "你永远不应该看到它" eng "You should never see it" ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE chi "mysql的列计数。%s是错误的。预期%d,找到%d。使用MariaDB%d创建,现在运行%d。请使用mariadb-upgrade来修复此错误" @@ -6654,7 +6649,6 @@ ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT eng "Cannot change the binary logging format inside a stored function or trigger" ger "Das Binärlog-Format kann innerhalb einer gespeicherten Funktion oder eines Triggers nicht geändert werden" ER_UNUSED_13 - chi "你永远不应该看到它" eng "You should never see it" ER_PARTITION_NO_TEMPORARY chi "无法使用分区创建临时表" @@ -6875,7 +6869,6 @@ ER_CANT_CREATE_SROUTINE eng "Cannot create stored routine %`s. Check warnings" ger "Kann gespeicherte Routine %`s nicht erzeugen. Beachten Sie die Warnungen" ER_UNUSED_11 - chi "你永远不应该看到它" eng "You should never see it" ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT chi "类型%s的Binlog语句未在格式描述binlog语句之前" @@ -6939,7 +6932,6 @@ ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE chi "心跳周期的请求值是负的或超过允许的最大值(%u秒)" eng "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%u seconds)" ER_UNUSED_14 - chi "你永远不应该看到它" eng "You should never see it" ER_CONFLICT_FN_PARSE_ERROR chi "解析冲突功能时出错。消息:%-.64s" @@ -7328,11 +7320,9 @@ ER_BINLOG_UNSAFE_UPDATE_IGNORE eng "UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave" ER_UNUSED_15 - chi "你永远不应该看到它" eng "You should never see it" ER_UNUSED_16 - chi "你永远不应该看到它" eng "You should never see it" ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT @@ -7443,7 +7433,6 @@ ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET swe "Hittade en rad som inte passar i nĂĽgon given partition" ER_UNUSED_5 - chi "你永远不应该看到它" eng "You should never see it" ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE @@ -7679,7 +7668,6 @@ ER_SLAVE_SILENT_RETRY_TRANSACTION eng "Slave must silently retry current transaction" ER_UNUSED_22 - chi "你永远不应该看到它" eng "You should never see it" ER_TABLE_SCHEMA_MISMATCH @@ -8015,12 +8003,12 @@ ER_LAST_MYSQL_ERROR_MESSAGE start-error-number 1900 ER_UNUSED_18 - eng "" + eng "You should never see it" ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED chi "函数或表达式'%s'不能用于%s的%`s" eng "Function or expression '%s' cannot be used in the %s clause of %`s" ER_UNUSED_19 - eng "" + eng "You should never see it" ER_PRIMARY_KEY_BASED_ON_GENERATED_COLUMN chi "主键无法在生成的列上定义" eng "Primary key cannot be defined upon a generated column" @@ -8037,9 +8025,9 @@ ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN chi "生成的列尚未支持这一点" eng "This is not yet supported for generated columns" ER_UNUSED_20 - eng "" + eng "You should never see it" ER_UNUSED_21 - eng "" + eng "You should never see it" ER_UNSUPPORTED_ENGINE_FOR_GENERATED_COLUMNS chi "%s存储引擎不支持生成的列" eng "%s storage engine does not support generated columns" @@ -8053,13 +8041,10 @@ ER_BAD_OPTION_VALUE eng "Incorrect value '%-.64T' for option '%-.64s'" hindi "गलत ऎञन '%-.64T' विकल्प '%-.64s' के लिए" ER_UNUSED_6 - chi "你永远不应该看到它" eng "You should never see it" ER_UNUSED_7 - chi "你永远不应该看到它" eng "You should never see it" ER_UNUSED_8 - chi "你永远不应该看到它" eng "You should never see it" ER_DATA_OVERFLOW 22003 chi "转换'%-.128s'到%-.32s时溢出。值截断" @@ -8101,7 +8086,6 @@ ER_CONNECTION_KILLED 70100 eng "Connection was killed" hindi "कनेक्शन को समाप्त कर ऌियञ गया च༈" ER_UNUSED_12 - chi "你永远不应该看到它" eng "You should never see it" ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SKIP_REPLICATION chi "无法修改事务中的@@session.skip_replication" @@ -8109,9 +8093,8 @@ ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SKIP_REPLICATION ER_STORED_FUNCTION_PREVENTS_SWITCH_SKIP_REPLICATION chi "无法修改存储函数或触发器内的@@session.skip_replication" eng "Cannot modify @@session.skip_replication inside a stored function or trigger" -ER_QUERY_EXCEEDED_ROWS_EXAMINED_LIMIT - chi "查询执行被中断。查询检查至少%llu行,超过限制行(%llu)。查询结果可能是不完整的" - eng "Query execution was interrupted. The query examined at least %llu rows, which exceeds LIMIT ROWS EXAMINED (%llu). The query result may be incomplete" +ER_QUERY_RESULT_INCOMPLETE + eng "Query execution was interrupted. The query exceeded %s %llu. The query result may be incomplete" ER_NO_SUCH_TABLE_IN_ENGINE 42S02 chi "襨'%-.192s.%-.192s'在引擎中不存在" eng "Table '%-.192s.%-.192s' doesn't exist in engine" @@ -8251,7 +8234,6 @@ ER_SET_STATEMENT_NOT_SUPPORTED 42000 chi "系统变量%.200s无法在set语句中设置。“" eng "The system variable %.200s cannot be set in SET STATEMENT." ER_UNUSED_9 - chi "你永远不应该看到它" eng "You should never see it" ER_USER_CREATE_EXISTS chi "无法创建用户'%-.64s'@'%-.64s';它已经存在" @@ -8399,9 +8381,8 @@ ER_WARN_ONLY_MASTER_LOG_FILE_NO_POS chi "使用CHANGE MASTER TO master_log_file子句更改master,但没有master_log_pos子句可能不安全。旧位置值可能对新的二进制日志文件无效。" eng "CHANGE MASTER TO with a MASTER_LOG_FILE clause but no MASTER_LOG_POS clause may not be safe. The old position value may not be valid for the new binary log file." -ER_QUERY_TIMEOUT - chi "查询执行中断,超过了最大语句执行时间" - eng "Query execution was interrupted, maximum statement execution time exceeded" +ER_UNUSED_1 + eng "You should never see it" ER_NON_RO_SELECT_DISABLE_TIMER chi "SELECT不是只读语句,禁用计时器" @@ -8930,7 +8911,6 @@ ER_VERS_ENGINE_UNSUPPORTED eng "Transaction-precise system versioning for %`s is not supported" ER_UNUSED_23 - chi "你永远不应该看到它" eng "You should never see it" ER_PARTITION_WRONG_TYPE @@ -8950,7 +8930,6 @@ ER_VERS_DROP_PARTITION_INTERVAL eng "Can only drop oldest partitions when rotating by INTERVAL" ER_UNUSED_25 - chi "你永远不应该看到它" eng "You should never see it" WARN_VERS_PART_NON_HISTORICAL chi "分区%`s包含非历史数据" @@ -9025,7 +9004,6 @@ ER_VERS_ALREADY_VERSIONED eng "Table %`s is already system-versioned" ER_UNUSED_24 - chi "你永远不应该看到它" eng "You should never see it" ER_VERS_NOT_SUPPORTED diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 3cfb68b69b4..2777d4049d9 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -5605,7 +5605,7 @@ table_hash_search(const char *host, const char *ip, const char *db, const char *user, const char *tname, bool exact) { return (GRANT_TABLE*) name_hash_search(&column_priv_hash, host, ip, db, - user, tname, exact, FALSE); + user, tname, exact, (lower_case_table_names > 0)); } static bool column_priv_insert(GRANT_TABLE *grant) diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index cd6b43da21d..e5a5b27840b 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -1142,7 +1142,14 @@ bool TABLE_LIST::fill_recursive(THD *thd) while (!rc && !with->all_are_stabilized()) { if (with->level > thd->variables.max_recursive_iterations) + { + push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_QUERY_RESULT_INCOMPLETE, + ER_THD(thd, ER_QUERY_RESULT_INCOMPLETE), + "max_recursive_iterations =", + (ulonglong)thd->variables.max_recursive_iterations); break; + } with->prepare_for_next_iteration(); rc= unit->exec_recursive(); } diff --git a/sql/sql_join_cache.cc b/sql/sql_join_cache.cc index c7b6a0bf6e4..a51a6da9d04 100644 --- a/sql/sql_join_cache.cc +++ b/sql/sql_join_cache.cc @@ -634,7 +634,7 @@ void JOIN_CACHE::create_remaining_fields() /* - Calculate and set all cache constants + Calculate and set all cache constants SYNOPSIS set_constants() @@ -694,16 +694,22 @@ void JOIN_CACHE::set_constants() (prev_cache ? prev_cache->get_size_of_rec_offset() : 0) + length + fields*sizeof(uint); pack_length_with_blob_ptrs= pack_length + blobs*sizeof(uchar *); - min_buff_size= 0; min_records= 1; + min_buff_size= get_min_join_buffer_size(); buff_size= (size_t)MY_MAX(join->thd->variables.join_buff_size, - get_min_join_buffer_size()); + min_buff_size); size_of_rec_ofs= offset_size(buff_size); size_of_rec_len= blobs ? size_of_rec_ofs : offset_size(len); size_of_fld_ofs= size_of_rec_len; base_prefix_length= (with_length ? size_of_rec_len : 0) + (prev_cache ? prev_cache->get_size_of_rec_offset() : 0); - /* + /* + Call ge_min_join_buffer_size() again as the size may have got smaller + if size_of_rec_ofs or some other variable changed since last call. + */ + min_buff_size= 0; + min_buff_size= get_min_join_buffer_size(); + /* The size of the offsets for referenced fields will be added later. The values of 'pack_length' and 'pack_length_with_blob_ptrs' are adjusted every time when the first reference to the referenced field is registered. @@ -767,30 +773,29 @@ uint JOIN_CACHE::get_record_max_affix_length() size_t JOIN_CACHE::get_min_join_buffer_size() { - if (!min_buff_size) + if (min_buff_size) + return min_buff_size; // use cached value + + size_t len= 0, len_last= 0, len_addon, min_sz, add_sz= 0; + + for (JOIN_TAB *tab= start_tab; tab != join_tab; + tab= next_linear_tab(join, tab, WITHOUT_BUSH_ROOTS)) { - size_t len= 0; - size_t len_last= 0; - for (JOIN_TAB *tab= start_tab; tab != join_tab; - tab= next_linear_tab(join, tab, WITHOUT_BUSH_ROOTS)) - { - len+= tab->get_max_used_fieldlength(); - len_last+= tab->get_used_fieldlength(); - } - size_t len_addon= get_record_max_affix_length() + - get_max_key_addon_space_per_record(); - len+= len_addon; - len_last+= len_addon; - size_t min_sz= len*(min_records-1) + len_last; - min_sz+= pack_length_with_blob_ptrs; - size_t add_sz= 0; - for (uint i=0; i < min_records; i++) - add_sz+= join_tab_scan->aux_buffer_incr(i+1); - avg_aux_buffer_incr= add_sz/min_records; - min_sz+= add_sz; - set_if_bigger(min_sz, 1); - min_buff_size= min_sz; + len+= tab->get_max_used_fieldlength(); + len_last+= tab->get_used_fieldlength(); } + len_addon= (get_record_max_affix_length() + + get_max_key_addon_space_per_record()); + len+= len_addon; + len_last+= len_addon; + min_sz= len*(min_records-1) + len_last; + min_sz+= pack_length_with_blob_ptrs; + for (uint i=0; i < min_records; i++) + add_sz+= join_tab_scan->aux_buffer_incr(i+1); + avg_aux_buffer_incr= add_sz/min_records; + min_sz+= add_sz; + set_if_bigger(min_sz, 1); + min_buff_size= min_sz; return min_buff_size; } @@ -805,61 +810,67 @@ size_t JOIN_CACHE::get_min_join_buffer_size() the estimated number of records in the partial join DESCRIPTION - At the first its invocation for the cache the function calculates the - maximum possible size of join buffer for the cache. If the parameter - optimize_buff_size true then this value does not exceed the size of the - space needed for the estimated number of records 'max_records' in the - partial join that joins tables from the first one through join_tab. This - value is also capped off by the value of join_tab->join_buffer_size_limit, - if it has been set a to non-zero value, and by the value of the system - parameter join_buffer_size - otherwise. After the calculation of the - interesting size the function saves the value in the field 'max_buff_size' - in order to use it directly at the next invocations of the function. - NOTES - Currently the value of join_tab->join_buffer_size_limit is initialized - to 0 and is never reset. + At the first its invocation for the cache the function calculates + the maximum possible size of join buffer for the cache. If the + parameter optimize_buff_size true then this value does not exceed + the size of the space needed for the estimated number of records + 'max_records' in the partial join that joins tables from the first + one through join_tab. This value is also capped off by the value + of the system parameter join_buffer_size. After the calculation of + the interesting size the function saves the value in the field + 'max_buff_size' in order to use it directly at the next + invocations of the function. + RETURN VALUE The maximum possible size of the join buffer of this cache */ -size_t JOIN_CACHE::get_max_join_buffer_size(bool optimize_buff_size) +size_t JOIN_CACHE::get_max_join_buffer_size(bool optimize_buff_size, + size_t min_sz) { - if (!max_buff_size) + if (max_buff_size) + return max_buff_size; // use cached value + + size_t limit_sz= (size_t) join->thd->variables.join_buff_size; + + if (!optimize_buff_size) + return max_buff_size= limit_sz; + + size_t max_sz; + size_t len= 0; + double max_records, partial_join_cardinality= + (join_tab-1)->get_partial_join_cardinality(); + /* Expected join buffer space used for one record */ + size_t space_per_record; + + for (JOIN_TAB *tab= start_tab; tab != join_tab; + tab= next_linear_tab(join, tab, WITHOUT_BUSH_ROOTS)) { - size_t max_sz; - size_t min_sz= get_min_join_buffer_size(); - size_t len= 0; - for (JOIN_TAB *tab= start_tab; tab != join_tab; - tab= next_linear_tab(join, tab, WITHOUT_BUSH_ROOTS)) - { - len+= tab->get_used_fieldlength(); - } - len+= get_record_max_affix_length(); - avg_record_length= len; - len+= get_max_key_addon_space_per_record() + avg_aux_buffer_incr; - space_per_record= len; - - size_t limit_sz= (size_t)join->thd->variables.join_buff_size; - if (join_tab->join_buffer_size_limit) - set_if_smaller(limit_sz, join_tab->join_buffer_size_limit); - if (!optimize_buff_size) - max_sz= limit_sz; - else - { - if (limit_sz / max_records > space_per_record) - max_sz= space_per_record * max_records; - else - max_sz= limit_sz; - max_sz+= pack_length_with_blob_ptrs; - set_if_smaller(max_sz, limit_sz); - } - set_if_bigger(max_sz, min_sz); - max_buff_size= max_sz; + len+= tab->get_used_fieldlength(); } + len+= get_record_max_affix_length(); + avg_record_length= len; + len+= get_max_key_addon_space_per_record() + avg_aux_buffer_incr; + space_per_record= len; + + /* Note that space_per_record can be 0 if no table fields where used */ + max_records= (double) (limit_sz / MY_MAX(space_per_record, 1)); + set_if_smaller(max_records, partial_join_cardinality); + set_if_bigger(max_records, 10.0); + + if ((size_t) (limit_sz / max_records) > space_per_record) + max_sz= space_per_record * (size_t) max_records; + else + max_sz= limit_sz; + max_sz+= pack_length_with_blob_ptrs; + set_if_smaller(max_sz, limit_sz); + + set_if_bigger(max_sz, min_sz); + max_buff_size= max_sz; return max_buff_size; -} +} /* @@ -899,16 +910,8 @@ int JOIN_CACHE::alloc_buffer() join->thd->variables.join_buff_space_limit; bool optimize_buff_size= optimizer_flag(join->thd, OPTIMIZER_SWITCH_OPTIMIZE_JOIN_BUFFER_SIZE); - double partial_join_cardinality= (join_tab-1)->get_partial_join_cardinality(); buff= NULL; - min_buff_size= 0; - max_buff_size= 0; - min_records= 1; - max_records= (size_t) (partial_join_cardinality <= join_buff_space_limit ? - (ulonglong) partial_join_cardinality : join_buff_space_limit); - set_if_bigger(max_records, 10); - min_buff_size= get_min_join_buffer_size(); - buff_size= get_max_join_buffer_size(optimize_buff_size); + buff_size= get_max_join_buffer_size(optimize_buff_size, min_buff_size); for (tab= start_tab; tab!= join_tab; tab= next_linear_tab(join, tab, WITHOUT_BUSH_ROOTS)) @@ -923,11 +926,26 @@ int JOIN_CACHE::alloc_buffer() curr_min_buff_space_sz+= min_buff_size; curr_buff_space_sz+= buff_size; - if (curr_min_buff_space_sz > join_buff_space_limit || - (curr_buff_space_sz > join_buff_space_limit && - (!optimize_buff_size || + if (optimize_buff_size) + { + /* + optimize_join_buffer_size=on used. We should limit the join + buffer space to join_buff_space_limit if possible. + */ + if (curr_min_buff_space_sz > join_buff_space_limit) + { + /* + Increase buffer size to minimum needed, to be able to use the + join buffer. + */ + join_buff_space_limit= curr_min_buff_space_sz; + } + if (curr_buff_space_sz > join_buff_space_limit && join->shrink_join_buffers(join_tab, curr_buff_space_sz, - join_buff_space_limit)))) + join_buff_space_limit)) + goto fail; // Fatal error + } + else if (curr_min_buff_space_sz > buff_size) goto fail; if (for_explain_only) @@ -1080,18 +1098,19 @@ int JOIN_CACHE::init(bool for_explain) /* - Check the possibility to read the access keys directly from the join buffer + Check the possibility to read the access keys directly from the join buffer SYNOPSIS check_emb_key_usage() DESCRIPTION - The function checks some conditions at which the key values can be read - directly from the join buffer. This is possible when the key values can be - composed by concatenation of the record fields stored in the join buffer. - Sometimes when the access key is multi-component the function has to re-order - the fields written into the join buffer to make keys embedded. If key - values for the key access are detected as embedded then 'use_emb_key' - is set to TRUE. + The function checks some conditions at which the key values can be + read directly from the join buffer. This is possible when the key + values can be composed by concatenation of the record fields + stored in the join buffer. Sometimes when the access key is + multi-component the function has to re-order the fields written + into the join buffer to make keys embedded. If key values for the + key access are detected as embedded then 'use_emb_key' is set to + TRUE. EXAMPLE Let table t2 has an index defined on the columns a,b . Let's assume also @@ -1244,7 +1263,7 @@ bool JOIN_CACHE::check_emb_key_usage() trailing spaces - significant part of fixed length fields that can have trailing spaces with the prepanded length - - data of non-blob variable length fields with the prepanded data length + - data of non-blob variable length fields with the prepanded data length - blob data from blob fields with the prepanded data length (5) record offset values for the data fields that are referred to from other caches @@ -1315,7 +1334,7 @@ uint JOIN_CACHE::write_record_data(uchar * link, bool *is_full) Check whether we won't be able to add any new record into the cache after this one because the cache will be full. Set last_record to TRUE if it's so. The assume that the cache will be full after the record has been written - into it if either the remaining space of the cache is not big enough for the + into it if either the remaining space of the cache is not big enough for the record's blob values or if there is a chance that not all non-blob fields of the next record can be placed there. This function is called only in the case when there is enough space left in @@ -1337,7 +1356,7 @@ uint JOIN_CACHE::write_record_data(uchar * link, bool *is_full) /* Put a reference to the fields of the record that are stored in the previous - cache if there is any. This reference is passed by the 'link' parameter. + cache if there is any. This reference is passed by the 'link' parameter. */ if (prev_cache) { @@ -2772,7 +2791,6 @@ bool JOIN_CACHE_BKAH::save_explain_data(EXPLAIN_BKA_TYPE *explain) int JOIN_CACHE_HASHED::init(bool for_explain) { - int rc= 0; TABLE_REF *ref= &join_tab->ref; DBUG_ENTER("JOIN_CACHE_HASHED::init"); @@ -2782,8 +2800,21 @@ int JOIN_CACHE_HASHED::init(bool for_explain) key_length= ref->key_length; - if ((rc= JOIN_CACHE::init(for_explain)) || for_explain) - DBUG_RETURN (rc); + if (JOIN_CACHE::init(for_explain)) + { + THD *thd= join->thd; + const char *errmsg= + "Could not create a join buffer. Please check and " + "adjust the value of the variables 'JOIN_BUFFER_SIZE (%llu)' and " + "'JOIN_BUFFER_SPACE_LIMIT (%llu)'"; + my_printf_error(ER_OUTOFMEMORY, errmsg, MYF(0), + thd->variables.join_buff_size, + thd->variables.join_buff_space_limit); + DBUG_RETURN (1); + } + + if (for_explain) + DBUG_RETURN(0); if (!(key_buff= (uchar*) join->thd->alloc(key_length))) DBUG_RETURN(1); diff --git a/sql/sql_join_cache.h b/sql/sql_join_cache.h index f75e9fd380f..8bdce1bd592 100644 --- a/sql/sql_join_cache.h +++ b/sql/sql_join_cache.h @@ -248,9 +248,6 @@ protected: /* The expected size of the space per record in the auxiliary buffer */ size_t avg_aux_buffer_incr; - /* Expected join buffer space used for one record */ - size_t space_per_record; - /* Pointer to the beginning of the join buffer */ uchar *buff; /* @@ -272,11 +269,6 @@ protected: the minimal size equal to min_buff_size */ size_t min_records; - /* - The maximum expected number of records to be put in the join buffer - at one refill - */ - size_t max_records; /* Pointer to the current position in the join buffer. @@ -542,6 +534,7 @@ protected: join_tab= tab; prev_cache= next_cache= 0; buff= 0; + min_buff_size= max_buff_size= 0; // Caches } /* @@ -557,6 +550,7 @@ protected: next_cache= 0; prev_cache= prev; buff= 0; + min_buff_size= max_buff_size= 0; // Caches if (prev) prev->next_cache= this; } @@ -608,9 +602,10 @@ public: void set_join_buffer_size(size_t sz) { buff_size= sz; } /* Get the minimum possible size of the cache join buffer */ - virtual size_t get_min_join_buffer_size(); + size_t get_min_join_buffer_size(); /* Get the maximum possible size of the cache join buffer */ - virtual size_t get_max_join_buffer_size(bool optimize_buff_size); + size_t get_max_join_buffer_size(bool optimize_buff_size, + size_t min_buffer_size_arg); /* Shrink the size if the cache join buffer in a given ratio */ bool shrink_join_buffer_in_ratio(ulonglong n, ulonglong d); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index ad2d064b035..ed53a3021a2 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1481,7 +1481,7 @@ bool is_lex_native_function(const LEX_CSTRING *name) bool is_native_function(THD *thd, const LEX_CSTRING *name) { - if (find_native_function_builder(thd, name)) + if (native_functions_hash.find(thd, *name)) return true; if (is_lex_native_function(name)) @@ -9448,7 +9448,7 @@ Item *LEX::make_item_func_call_native_or_parse_error(THD *thd, Lex_ident_cli_st &name, List *args) { - Create_func *builder= find_native_function_builder(thd, &name); + Create_func *builder= native_functions_hash.find(thd, name); DBUG_EXECUTE_IF("make_item_func_call_native_simulate_not_found", builder= NULL;); if (builder) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 1e8ea5c5c80..a0a12ca659c 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2988,6 +2988,16 @@ retry: if (result) goto err; } + +#ifdef WITH_WSREP + if (WSREP(thd) && table->table->s->table_type == TABLE_TYPE_SEQUENCE) + { + my_error(ER_NOT_SUPPORTED_YET, MYF(0), + "LOCK TABLE on SEQUENCES in Galera cluster"); + goto err; + } +#endif + } /* Check privileges of view tables here, after views were opened. diff --git a/sql/sql_select.cc b/sql/sql_select.cc index afa5593bd7e..7a7f2c0b26b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -475,9 +475,9 @@ bool handle_select(THD *thd, LEX *lex, select_result *result, bool saved_abort_on_warning= thd->abort_on_warning; thd->abort_on_warning= false; push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, - ER_QUERY_EXCEEDED_ROWS_EXAMINED_LIMIT, - ER_THD(thd, ER_QUERY_EXCEEDED_ROWS_EXAMINED_LIMIT), - thd->accessed_rows_and_keys, + ER_QUERY_RESULT_INCOMPLETE, + ER_THD(thd, ER_QUERY_RESULT_INCOMPLETE), + "LIMIT ROWS EXAMINED", thd->lex->limit_rows_examined->val_uint()); thd->abort_on_warning= saved_abort_on_warning; thd->reset_killed(); @@ -8226,6 +8226,7 @@ best_access_path(JOIN *join, if ((records >= s->found_records || best > s->read_time) && // (1) !(best_key && best_key->key == MAX_KEY) && // (2) !(s->quick && best_key && s->quick->index == best_key->key && // (2) + s->table->opt_range_keys.is_set(best_key->key) && // (2) best_max_key_part >= s->table->opt_range[best_key->key].key_parts) &&// (2) !((s->table->file->ha_table_flags() & HA_TABLE_SCAN_ON_INDEX) && // (3) ! s->table->covering_keys.is_clear_all() && best_key && !s->quick) &&// (3) @@ -13903,7 +13904,7 @@ double JOIN_TAB::scan_time() ha_rows JOIN_TAB::get_examined_rows() { double examined_rows; - SQL_SELECT *sel= filesort? filesort->select : this->select; + const SQL_SELECT *sel= get_sql_select(); if (sel && sel->quick && use_quick != 2) examined_rows= (double)sel->quick->records; @@ -27166,13 +27167,12 @@ bool JOIN_TAB::save_explain_data(Explain_table_access *eta, eta->key.clear(); eta->quick_info= NULL; - SQL_SELECT *tab_select; /* We assume that if this table does pre-sorting, then it doesn't do filtering with SQL_SELECT. */ DBUG_ASSERT(!(select && filesort)); - tab_select= (filesort)? filesort->select : select; + const SQL_SELECT *tab_select= get_sql_select(); if (filesort) { diff --git a/sql/sql_select.h b/sql/sql_select.h index d4ceee23b94..aba29aea3c3 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -397,7 +397,6 @@ typedef struct st_join_table { /* TRUE <=> it is prohibited to join this table using join buffer */ bool no_forced_join_cache; uint used_join_cache_level; - ulong join_buffer_size_limit; JOIN_CACHE *cache; /* Index condition for BKA access join @@ -547,14 +546,19 @@ typedef struct st_join_table { void cleanup(); inline bool is_using_loose_index_scan() { - const SQL_SELECT *sel= filesort ? filesort->select : select; + const SQL_SELECT *sel= get_sql_select(); return (sel && sel->quick && (sel->quick->get_type() == QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX)); } bool is_using_agg_loose_index_scan () { + const SQL_SELECT *sel= get_sql_select(); return (is_using_loose_index_scan() && - ((QUICK_GROUP_MIN_MAX_SELECT *)select->quick)->is_agg_distinct()); + ((QUICK_GROUP_MIN_MAX_SELECT *)sel->quick)->is_agg_distinct()); + } + const SQL_SELECT *get_sql_select() + { + return filesort ? filesort->select : select; } bool is_inner_table_of_semi_join_with_first_match() { diff --git a/sql/sql_sequence.cc b/sql/sql_sequence.cc index fdb9c647727..4d65e047367 100644 --- a/sql/sql_sequence.cc +++ b/sql/sql_sequence.cc @@ -312,11 +312,6 @@ bool sequence_insert(THD *thd, LEX *lex, TABLE_LIST *org_table_list) DBUG_RETURN(TRUE); } -#ifdef WITH_WSREP - if (WSREP_ON && seq->cache != 0) - WSREP_WARN("CREATE SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); -#endif - /* If not temporary table */ if (!temporary_table) { @@ -922,21 +917,24 @@ bool Sql_cmd_alter_sequence::execute(THD *thd) 0, 0)) DBUG_RETURN(TRUE); /* purecov: inspected */ -#ifdef WITH_WSREP - if (WSREP_ON && new_seq->cache != 0) - WSREP_WARN("ALTER SEQUENCES declared without `NOCACHE` will not behave correctly in galera cluster."); -#endif - if (check_grant(thd, ALTER_ACL, first_table, FALSE, 1, FALSE)) DBUG_RETURN(TRUE); /* purecov: inspected */ #ifdef WITH_WSREP - if (WSREP_ON && WSREP(thd) && - wsrep_to_isolation_begin(thd, first_table->db.str, - first_table->table_name.str, - first_table)) - DBUG_RETURN(TRUE); + if (WSREP(thd) && wsrep_thd_is_local(thd)) + { + if (wsrep_check_sequence(thd, new_seq)) + DBUG_RETURN(TRUE); + + if (wsrep_to_isolation_begin(thd, first_table->db.str, + first_table->table_name.str, + first_table)) + { + DBUG_RETURN(TRUE); + } + } #endif /* WITH_WSREP */ + if (if_exists()) thd->push_internal_handler(&no_such_table_handler); error= open_and_lock_tables(thd, first_table, FALSE, 0); diff --git a/sql/sql_string.cc b/sql/sql_string.cc index ed48591db4e..03b7c0bc140 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -1137,22 +1137,28 @@ String_copier::well_formed_copy(CHARSET_INFO *to_cs, characters with backslashes as necessary. Does not add the enclosing quotes, this is left up to caller. */ -#define APPEND(X) if (append(X)) return 1; else break +#define APPEND(...) if (append(__VA_ARGS__)) return 1; bool String::append_for_single_quote(const char *st, size_t len) { const char *end= st+len; + int chlen; for (; st < end; st++) { - uchar c= *st; - switch (c) + switch (*st) { - case '\\': APPEND(STRING_WITH_LEN("\\\\")); - case '\0': APPEND(STRING_WITH_LEN("\\0")); - case '\'': APPEND(STRING_WITH_LEN("\\'")); - case '\n': APPEND(STRING_WITH_LEN("\\n")); - case '\r': APPEND(STRING_WITH_LEN("\\r")); - case '\032': APPEND(STRING_WITH_LEN("\\Z")); - default: APPEND(c); + case '\\': APPEND(STRING_WITH_LEN("\\\\")); break; + case '\0': APPEND(STRING_WITH_LEN("\\0")); break; + case '\'': APPEND(STRING_WITH_LEN("\\'")); break; + case '\n': APPEND(STRING_WITH_LEN("\\n")); break; + case '\r': APPEND(STRING_WITH_LEN("\\r")); break; + case '\032': APPEND(STRING_WITH_LEN("\\Z")); break; + default: if ((chlen=charset()->charlen(st, end)) > 0) + { + APPEND(st, chlen); + st+= chlen-1; + } + else + APPEND(*st); } } return 0; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index be46a7df732..5adf4dfd4c1 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -5546,6 +5546,51 @@ int mysql_create_table_no_lock(THD *thd, const LEX_CSTRING *db, return res; } +#ifdef WITH_WSREP +/** Additional sequence checks for Galera cluster. + +@param thd thread handle +@param seq sequence definition +@retval 0 failure +@retval 1 success +*/ +bool wsrep_check_sequence(THD* thd, const sequence_definition *seq) +{ + enum legacy_db_type db_type; + if (thd->lex->create_info.used_fields & HA_CREATE_USED_ENGINE) + { + db_type= thd->lex->create_info.db_type->db_type; + } + else + { + const handlerton *hton= ha_default_handlerton(thd); + db_type= hton->db_type; + } + + // In Galera cluster we support only InnoDB sequences + if (db_type != DB_TYPE_INNODB) + { + my_error(ER_NOT_SUPPORTED_YET, MYF(0), + "Galera cluster does support only InnoDB sequences"); + return(true); + } + + // In Galera cluster it is best to use INCREMENT BY 0 with CACHE + // or NOCACHE + if (seq && + seq->increment && + seq->cache) + { + my_error(ER_NOT_SUPPORTED_YET, MYF(0), + "In Galera if you use CACHE you should set INCREMENT BY 0" + " to behave correctly in a cluster"); + return(true); + } + + return (false); +} +#endif /* WITH_WSREP */ + /** Implementation of SQLCOM_CREATE_TABLE. @@ -5610,6 +5655,15 @@ bool mysql_create_table(THD *thd, TABLE_LIST *create_table, if (!(thd->variables.option_bits & OPTION_EXPLICIT_DEF_TIMESTAMP)) promote_first_timestamp_column(&alter_info->create_list); +#ifdef WITH_WSREP + if (thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE && + WSREP(thd) && wsrep_thd_is_local_toi(thd)) + { + if (wsrep_check_sequence(thd, create_info->seq_create_info)) + DBUG_RETURN(true); + } +#endif /* WITH_WSREP */ + /* We can abort create table for any table type */ thd->abort_on_warning= thd->is_strict_mode(); @@ -9472,17 +9526,12 @@ fk_check_column_changes(THD *thd, Alter_info *alter_info, ((new_field->flags & NOT_NULL_FLAG) && !(old_field->flags & NOT_NULL_FLAG))) { - if (!(thd->variables.option_bits & OPTION_NO_FOREIGN_KEY_CHECKS)) - { - /* - Column in a FK has changed significantly. Unless - foreign_key_checks are off we prohibit this since this - means values in this column might be changed by ALTER - and thus referential integrity might be broken, - */ - *bad_column_name= column->str; - return FK_COLUMN_DATA_CHANGE; - } + /* + Column in a FK has changed significantly and it + may break referential intergrity. + */ + *bad_column_name= column->str; + return FK_COLUMN_DATA_CHANGE; } } else @@ -10639,6 +10688,15 @@ do_continue:; } #endif +#ifdef WITH_WSREP + if (table->s->sequence && WSREP(thd) && + wsrep_thd_is_local_toi(thd)) + { + if (wsrep_check_sequence(thd, create_info->seq_create_info)) + DBUG_RETURN(TRUE); + } +#endif /* WITH_WSREP */ + /* Use copy algorithm if: - old_alter_table system variable is set without in-place requested using diff --git a/sql/sql_table.h b/sql/sql_table.h index f5c783f6f3d..9fecef51c17 100644 --- a/sql/sql_table.h +++ b/sql/sql_table.h @@ -293,4 +293,8 @@ extern mysql_mutex_t LOCK_gdl; bool check_engine(THD *, const char *, const char *, HA_CREATE_INFO *); +#ifdef WITH_WSREP +bool wsrep_check_sequence(THD* thd, const class sequence_definition *seq); +#endif + #endif /* SQL_TABLE_INCLUDED */ diff --git a/sql/sql_type_int.h b/sql/sql_type_int.h index fca00f25448..7916d927588 100644 --- a/sql/sql_type_int.h +++ b/sql/sql_type_int.h @@ -36,6 +36,12 @@ protected: public: longlong value() const { return m_value; } Longlong(longlong nr) :m_value(nr) { } + ulonglong abs() + { + if (m_value == LONGLONG_MIN) // avoid undefined behavior + return ((ulonglong) LONGLONG_MAX) + 1; + return m_value < 0 ? -m_value : m_value; + } }; @@ -104,6 +110,86 @@ public: }; +class ULonglong +{ +protected: + ulonglong m_value; +public: + ulonglong value() const { return m_value; } + explicit ULonglong(ulonglong nr) :m_value(nr) { } + + static bool test_if_sum_overflows_ull(ulonglong arg1, ulonglong arg2) + { + return ULONGLONG_MAX - arg1 < arg2; + } + + Longlong_null operator-() const + { + if (m_value > (ulonglong) LONGLONG_MAX) // Avoid undefined behaviour + { + return m_value == (ulonglong) LONGLONG_MAX + 1 ? + Longlong_null(LONGLONG_MIN, false) : + Longlong_null(0, true); + } + return Longlong_null(-(longlong) m_value, false); + } + + // Convert to Longlong_null with the range check + Longlong_null to_longlong_null() const + { + if (m_value > (ulonglong) LONGLONG_MAX) + return Longlong_null(0, true); + return Longlong_null((longlong) m_value, false); + } + +}; + + +class ULonglong_null: public ULonglong, public Null_flag +{ +public: + ULonglong_null(ulonglong nr, bool is_null) + :ULonglong(nr), Null_flag(is_null) + { } + + /* + Multiply two ulonglong values. + + Let a = a1 * 2^32 + a0 and b = b1 * 2^32 + b0. Then + a * b = (a1 * 2^32 + a0) * (b1 * 2^32 + b0) = a1 * b1 * 2^64 + + + (a1 * b0 + a0 * b1) * 2^32 + a0 * b0; + We can determine if the above sum overflows the ulonglong range by + sequentially checking the following conditions: + 1. If both a1 and b1 are non-zero. + 2. Otherwise, if (a1 * b0 + a0 * b1) is greater than ULONG_MAX. + 3. Otherwise, if (a1 * b0 + a0 * b1) * 2^32 + a0 * b0 is greater than + ULONGLONG_MAX. + */ + static ULonglong_null ullmul(ulonglong a, ulonglong b) + { + ulong a1= (ulong)(a >> 32); + ulong b1= (ulong)(b >> 32); + + if (a1 && b1) + return ULonglong_null(0, true); + + ulong a0= (ulong)(0xFFFFFFFFUL & a); + ulong b0= (ulong)(0xFFFFFFFFUL & b); + + ulonglong res1= (ulonglong) a1 * b0 + (ulonglong) a0 * b1; + if (res1 > 0xFFFFFFFFUL) + return ULonglong_null(0, true); + + res1= res1 << 32; + ulonglong res0= (ulonglong) a0 * b0; + + if (test_if_sum_overflows_ull(res1, res0)) + return ULonglong_null(0, true); + return ULonglong_null(res1 + res0, false); + } +}; + + // A longlong/ulonglong hybrid. Good to store results of val_int(). class Longlong_hybrid: public Longlong { @@ -132,9 +218,7 @@ public: { if (m_unsigned) return (ulonglong) m_value; - if (m_value == LONGLONG_MIN) // avoid undefined behavior - return ((ulonglong) LONGLONG_MAX) + 1; - return m_value < 0 ? -m_value : m_value; + return Longlong(m_value).abs(); } /* Convert to an unsigned number: @@ -152,6 +236,33 @@ public: { return (uint) to_ulonglong(upper_bound); } + + + Longlong_null val_int_signed() const + { + if (m_unsigned) + return ULonglong((ulonglong) m_value).to_longlong_null(); + return Longlong_null(m_value, false); + } + + Longlong_null val_int_unsigned() const + { + if (!m_unsigned && m_value < 0) + return Longlong_null(0, true); + return Longlong_null(m_value, false); + } + + /* + Return in Item compatible val_int() format: + - signed numbers as a straight longlong value + - unsigned numbers as a ulonglong value reinterpreted to longlong + */ + Longlong_null val_int(bool want_unsigned_value) const + { + return want_unsigned_value ? val_int_unsigned() : + val_int_signed(); + } + int cmp(const Longlong_hybrid& other) const { if (m_unsigned == other.m_unsigned) @@ -201,4 +312,50 @@ public: }; +/* + Stores the absolute value of a number, and the sign. + Value range: -ULONGLONG_MAX .. +ULONGLONG_MAX. + + Provides a wider range for negative numbers than Longlong_hybrid does. + Usefull to store intermediate results of an expression whose value + is further needed to be negated. For example, these methods: + - Item_func_mul::int_op() + - Item_func_int_div::val_int() + - Item_func_mod::int_op() + calculate the result of absolute values of the arguments, + then optionally negate the result. +*/ +class ULonglong_hybrid: public ULonglong +{ + bool m_neg; +public: + ULonglong_hybrid(ulonglong value, bool neg) + :ULonglong(value), m_neg(neg) + { + if (m_neg && !m_value) + m_neg= false; // convert -0 to +0 + } + Longlong_null val_int_unsigned() const + { + return m_neg ? Longlong_null(0, true) : + Longlong_null((longlong) m_value, false); + } + Longlong_null val_int_signed() const + { + return m_neg ? -ULonglong(m_value) : ULonglong::to_longlong_null(); + } + + /* + Return in Item compatible val_int() format: + - signed numbers as a straight longlong value + - unsigned numbers as a ulonglong value reinterpreted to longlong + */ + Longlong_null val_int(bool want_unsigned_value) const + { + return want_unsigned_value ? val_int_unsigned() : + val_int_signed(); + } +}; + + #endif // SQL_TYPE_INT_INCLUDED diff --git a/sql/sql_union.cc b/sql/sql_union.cc index f996b4b093a..c6350c4bd22 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -2305,9 +2305,9 @@ bool st_select_lex_unit::exec() the current result. */ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, - ER_QUERY_EXCEEDED_ROWS_EXAMINED_LIMIT, - ER_THD(thd, ER_QUERY_EXCEEDED_ROWS_EXAMINED_LIMIT), - thd->accessed_rows_and_keys, + ER_QUERY_RESULT_INCOMPLETE, + ER_THD(thd, ER_QUERY_RESULT_INCOMPLETE), + "LIMIT ROWS EXAMINED", thd->lex->limit_rows_examined->val_uint()); thd->reset_killed(); break; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3dc9ff8dc6e..b8026661d4f 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -10777,7 +10777,7 @@ function_call_generic: This will be revised with WL#2128 (SQL PATH) */ - if ((builder= find_native_function_builder(thd, &$1))) + if ((builder= native_functions_hash.find(thd, $1))) { item= builder->create_func(thd, &$1, $4); } diff --git a/sql/table.cc b/sql/table.cc index a25f279db08..9dadd208244 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -45,6 +45,9 @@ #include "ha_sequence.h" #include "sql_show.h" #include "opt_trace.h" +#ifdef WITH_WSREP +#include "wsrep_schema.h" +#endif /* For MySQL 5.7 virtual fields */ #define MYSQL57_GENERATED_FIELD 128 @@ -267,10 +270,14 @@ TABLE_CATEGORY get_table_category(const LEX_CSTRING *db, #ifdef WITH_WSREP if (db->str && - my_strcasecmp(system_charset_info, db->str, "mysql") == 0 && - my_strcasecmp(system_charset_info, name->str, "wsrep_streaming_log") == 0) + my_strcasecmp(system_charset_info, db->str, WSREP_SCHEMA) == 0) { - return TABLE_CATEGORY_INFORMATION; + if ((my_strcasecmp(system_charset_info, name->str, WSREP_STREAMING_TABLE) == 0 || + my_strcasecmp(system_charset_info, name->str, WSREP_CLUSTER_TABLE) == 0 || + my_strcasecmp(system_charset_info, name->str, WSREP_MEMBERS_TABLE) == 0)) + { + return TABLE_CATEGORY_INFORMATION; + } } #endif /* WITH_WSREP */ if (is_infoschema_db(db)) diff --git a/sql/table_cache.cc b/sql/table_cache.cc index 62ccfba7e7d..425e1e18393 100644 --- a/sql/table_cache.cc +++ b/sql/table_cache.cc @@ -818,6 +818,10 @@ retry: element= (TDC_element*) lf_hash_search_using_hash_value(&tdc_hash, thd->tdc_hash_pins, hash_value, (uchar*) key, key_length); + /* It's safe to unpin the pins here, because an empty element was inserted + above, "empty" means at least element->share = 0. Some other thread can't + delete it while element->share == 0. And element->share is also protected + with element->LOCK_table_share mutex. */ lf_hash_search_unpin(thd->tdc_hash_pins); DBUG_ASSERT(element); diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index bf28f7fd39a..5574252e4fb 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -2189,6 +2189,15 @@ bool wsrep_can_run_in_toi(THD *thd, const char *db, const char *table, return !(table || table_list); break; + case SQLCOM_CREATE_SEQUENCE: + /* No TOI for temporary sequences as they are + not replicated */ + if (thd->lex->tmp_table()) + { + return false; + } + return true; + } } @@ -2474,6 +2483,14 @@ static int wsrep_RSU_begin(THD *thd, const char *db_, const char *table_) { WSREP_DEBUG("RSU BEGIN: %lld, : %s", wsrep_thd_trx_seqno(thd), wsrep_thd_query(thd)); + + /* For CREATE TEMPORARY SEQUENCE we do not start RSU because + object is local only and actually CREATE TABLE + INSERT + */ + if (thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE && + thd->lex->tmp_table()) + return 1; + if (thd->wsrep_cs().begin_rsu(5000)) { WSREP_WARN("RSU begin failed"); @@ -2538,9 +2555,20 @@ int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_, return -1; } + /* If we are inside LOCK TABLE we release it and give warning. */ + if (thd->variables.option_bits & OPTION_TABLE_LOCK && + thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE) + { + thd->locked_tables_list.unlock_locked_tables(thd); + thd->variables.option_bits&= ~(OPTION_TABLE_LOCK); + push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + HA_ERR_UNSUPPORTED, + "Galera cluster does not support LOCK TABLE on " + "SEQUENCES. Lock is released."); + } if (wsrep_debug && thd->mdl_context.has_locks()) { - WSREP_DEBUG("thread holds MDL locks at TI begin: %s %llu", + WSREP_DEBUG("thread holds MDL locks at TO begin: %s %llu", wsrep_thd_query(thd), thd->thread_id); } diff --git a/sql/wsrep_schema.cc b/sql/wsrep_schema.cc index 07db2e73af1..a213396b833 100644 --- a/sql/wsrep_schema.cc +++ b/sql/wsrep_schema.cc @@ -35,11 +35,6 @@ #include #include -#define WSREP_SCHEMA "mysql" -#define WSREP_STREAMING_TABLE "wsrep_streaming_log" -#define WSREP_CLUSTER_TABLE "wsrep_cluster" -#define WSREP_MEMBERS_TABLE "wsrep_cluster_members" - const char* wsrep_sr_table_name_full= WSREP_SCHEMA "/" WSREP_STREAMING_TABLE; static const std::string wsrep_schema_str= WSREP_SCHEMA; @@ -55,7 +50,7 @@ static const std::string create_cluster_table_str= "view_seqno BIGINT NOT NULL," "protocol_version INT NOT NULL," "capabilities INT NOT NULL" - ") ENGINE=InnoDB STATS_PERSISTENT=0"; + ") ENGINE=InnoDB STATS_PERSISTENT=0 CHARSET=latin1"; static const std::string create_members_table_str= "CREATE TABLE IF NOT EXISTS " + wsrep_schema_str + "." + members_table_str + @@ -64,7 +59,7 @@ static const std::string create_members_table_str= "cluster_uuid CHAR(36) NOT NULL," "node_name CHAR(32) NOT NULL," "node_incoming_address VARCHAR(256) NOT NULL" - ") ENGINE=InnoDB STATS_PERSISTENT=0"; + ") ENGINE=InnoDB STATS_PERSISTENT=0 CHARSET=latin1"; #ifdef WSREP_SCHEMA_MEMBERS_HISTORY static const std::string cluster_member_history_table_str= "wsrep_cluster_member_history"; @@ -77,7 +72,7 @@ static const std::string create_members_history_table_str= "last_view_seqno BIGINT NOT NULL," "node_name CHAR(32) NOT NULL," "node_incoming_address VARCHAR(256) NOT NULL" - ") ENGINE=InnoDB STATS_PERSISTENT=0"; + ") ENGINE=InnoDB STATS_PERSISTENT=0 CHARSET=latin1"; #endif /* WSREP_SCHEMA_MEMBERS_HISTORY */ static const std::string create_frag_table_str= @@ -89,7 +84,7 @@ static const std::string create_frag_table_str= "flags INT NOT NULL, " "frag LONGBLOB NOT NULL, " "PRIMARY KEY (node_uuid, trx_id, seqno)" - ") ENGINE=InnoDB STATS_PERSISTENT=0"; + ") ENGINE=InnoDB STATS_PERSISTENT=0 CHARSET=latin1"; static const std::string delete_from_cluster_table= "DELETE FROM " + wsrep_schema_str + "." + cluster_table_str; @@ -101,21 +96,21 @@ static const std::string delete_from_members_table= persistent statistics to be collected from these tables. */ static const std::string alter_cluster_table= "ALTER TABLE " + wsrep_schema_str + "." + cluster_table_str + - " STATS_PERSISTENT=0"; + " STATS_PERSISTENT=0 CHARSET=latin1"; static const std::string alter_members_table= "ALTER TABLE " + wsrep_schema_str + "." + members_table_str + - " STATS_PERSISTENT=0"; + " STATS_PERSISTENT=0 CHARSET=latin1"; #ifdef WSREP_SCHEMA_MEMBERS_HISTORY static const std::string alter_members_history_table= "ALTER TABLE " + wsrep_schema_str + "." + members_history_table_str + - " STATS_PERSISTENT=0"; + " STATS_PERSISTENT=0 CHARSET=latin1"; #endif static const std::string alter_frag_table= "ALTER TABLE " + wsrep_schema_str + "." + sr_table_str + - " STATS_PERSISTENT=0"; + " STATS_PERSISTENT=0 CHARSET=latin1"; namespace Wsrep_schema_impl { diff --git a/sql/wsrep_schema.h b/sql/wsrep_schema.h index 36e23998d19..979b175481c 100644 --- a/sql/wsrep_schema.h +++ b/sql/wsrep_schema.h @@ -33,6 +33,11 @@ struct TABLE_LIST; struct st_mysql_lex_string; typedef struct st_mysql_lex_string LEX_STRING; +#define WSREP_SCHEMA "mysql" +#define WSREP_STREAMING_TABLE "wsrep_streaming_log" +#define WSREP_CLUSTER_TABLE "wsrep_cluster" +#define WSREP_MEMBERS_TABLE "wsrep_cluster_members" + /** Name of the table in `wsrep_schema_str` used for storing streaming replication data. In an InnoDB full format, e.g. "database/tablename". */ extern const char* wsrep_sr_table_name_full; diff --git a/sql/wsrep_sst.cc b/sql/wsrep_sst.cc index d4035fcf363..1e7eb3368a4 100644 --- a/sql/wsrep_sst.cc +++ b/sql/wsrep_sst.cc @@ -299,6 +299,15 @@ void wsrep_sst_auth_init () bool wsrep_sst_donor_check (sys_var *self, THD* thd, set_var* var) { + if ((! var->save_result.string_value.str) || + (var->save_result.string_value.length > (FN_REFLEN -1))) // safety + { + my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), var->var->name.str, + var->save_result.string_value.str ? + var->save_result.string_value.str : "NULL"); + return 1; + } + return 0; } diff --git a/sql/wsrep_trans_observer.h b/sql/wsrep_trans_observer.h index 40fbf80cfb3..4d260742dde 100644 --- a/sql/wsrep_trans_observer.h +++ b/sql/wsrep_trans_observer.h @@ -220,13 +220,18 @@ static inline bool wsrep_run_commit_hook(THD* thd, bool all) mysql_mutex_lock(&thd->LOCK_thd_data); /* Transaction creating sequence is TOI or RSU, - CREATE [TEMPORARY] SEQUENCE = CREATE + INSERT (initial value) + CREATE SEQUENCE = CREATE + INSERT (initial value) and replicated using statement based replication, thus - the commit hooks will be skipped */ + the commit hooks will be skipped. + + For TEMPORARY SEQUENCES commit hooks will be done as + CREATE + INSERT is not replicated and needs to be + committed locally. */ if (ret && (thd->wsrep_cs().mode() == wsrep::client_state::m_toi || thd->wsrep_cs().mode() == wsrep::client_state::m_rsu) && - thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE) + thd->lex->sql_command == SQLCOM_CREATE_SEQUENCE && + !thd->lex->tmp_table()) ret= false; mysql_mutex_unlock(&thd->LOCK_thd_data); diff --git a/sql/xa.cc b/sql/xa.cc index 35834165b5b..7935c06c2ad 100644 --- a/sql/xa.cc +++ b/sql/xa.cc @@ -251,9 +251,14 @@ static XID_cache_element *xid_cache_search(THD *thd, XID *xid) xid->key(), xid->key_length()); if (element) { + /* The element can be removed from lf_hash by other thread, but + element->acquire_recovered() will return false in this case. */ if (!element->acquire_recovered()) element= 0; lf_hash_search_unpin(thd->xid_hash_pins); + /* Once the element is acquired (i.e. got the ACQUIRED bit) by this thread, + only this thread can delete it. The deletion happens in xid_cache_delete(). + See also the XID_cache_element documentation. */ DEBUG_SYNC(thd, "xa_after_search"); } return element; diff --git a/storage/cassandra/CMakeLists.txt b/storage/cassandra/CMakeLists.txt index 6dfa1d40cb9..c6ab3dc505f 100644 --- a/storage/cassandra/CMakeLists.txt +++ b/storage/cassandra/CMakeLists.txt @@ -1,10 +1,10 @@ -SET(CPACK_RPM_cassandra-engine_PACKAGE_SUMMARY "Cassandra storage engine for MariaDB" PARENT_SCOPE) -SET(CPACK_RPM_cassandra-engine_PACKAGE_DESCRIPTION "The Cassandra Storage Engine allows access to data in a Cassandra cluster from -MariaDB, combining the best of SQL and no-SQL worlds. Cassandra SE (storage -engine) makes Cassandra's column family appear as a table in MariaDB that you +SET(CPACK_RPM_cassandra-engine_PACKAGE_SUMMARY "Cassandra storage engine for MariaDB server" PARENT_SCOPE) +SET(CPACK_RPM_cassandra-engine_PACKAGE_DESCRIPTION "The Cassandra storage engine allows access to data in a Cassandra cluster from +MariaDB server, combining the best of SQL and no-SQL worlds. Cassandra SE (storage +engine) makes Cassandra's column family appear as a table in MariaDB server that you can insert to, update, and select from. You can write joins against this table, -it is possible to join data that's stored in MariaDB with data that's stored in +it is possible to join data that's stored in MariaDB server with data that's stored in Cassandra." PARENT_SCOPE) # use the first path that has Thrift.h included, if found diff --git a/storage/connect/CMakeLists.txt b/storage/connect/CMakeLists.txt index 1c87305dc70..6dd6832dc7e 100644 --- a/storage/connect/CMakeLists.txt +++ b/storage/connect/CMakeLists.txt @@ -17,7 +17,7 @@ IF(WITHOUT_DYNAMIC_PLUGINS OR WITH_NONE OR ("${PLUGIN_CONNECT}" STREQUAL "NO")) RETURN() ENDIF() -SET(CPACK_RPM_connect-engine_PACKAGE_SUMMARY "Connect storage engine for MariaDB" PARENT_SCOPE) +SET(CPACK_RPM_connect-engine_PACKAGE_SUMMARY "Connect storage engine for MariaDB server" PARENT_SCOPE) SET(CPACK_RPM_connect-engine_PACKAGE_DESCRIPTION "Connect engine supports a number of file formats (dbf, xml, txt, bin, etc), connections to ODBC tables and remote MySQL tables, as well as a number of other interesting features." PARENT_SCOPE) @@ -271,9 +271,11 @@ OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine with JDBC support" ON) IF(CONNECT_WITH_JDBC) FIND_PACKAGE(Java 1.6) - SET_PACKAGE_PROPERTIES(Java PROPERTIES TYPE OPTIONAL) + SET_PACKAGE_PROPERTIES(Java PROPERTIES TYPE OPTIONAL + PURPOSE "Required for the CONNECT_JDBC feature") FIND_PACKAGE(JNI) - SET_PACKAGE_PROPERTIES(JNI PROPERTIES TYPE OPTIONAL) + SET_PACKAGE_PROPERTIES(JNI PROPERTIES TYPE OPTIONAL + PURPOSE "Required for the CONNECT_JDBC feature") IF (JAVA_FOUND AND JNI_FOUND) INCLUDE(UseJava) INCLUDE_DIRECTORIES(${JAVA_INCLUDE_PATH}) diff --git a/storage/connect/bson.cpp b/storage/connect/bson.cpp index 6bea4eb5d85..44d53ba17bd 100644 --- a/storage/connect/bson.cpp +++ b/storage/connect/bson.cpp @@ -215,7 +215,7 @@ OFFSET BDOC::ParseArray(size_t& i) switch (s[i]) { case ',': if (level < 2) { - sprintf(G->Message, "Unexpected ',' near %.*s", (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "Unexpected ',' near %.*s", (int) ARGS); throw 1; } else level = 1; @@ -223,7 +223,7 @@ OFFSET BDOC::ParseArray(size_t& i) break; case ']': if (level == 1) { - sprintf(G->Message, "Unexpected ',]' near %.*s", (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "Unexpected ',]' near %.*s", (int) ARGS); throw 1; } // endif level @@ -237,7 +237,7 @@ OFFSET BDOC::ParseArray(size_t& i) break; default: if (level == 2) { - sprintf(G->Message, "Unexpected value near %.*s", (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "Unexpected value near %.*s", (int) ARGS); throw 1; } else if (lastvlp) { vlp = ParseValue(i, NewVal()); @@ -284,7 +284,7 @@ OFFSET BDOC::ParseObject(size_t& i) level = 2; } else { - sprintf(G->Message, "misplaced string near %.*s", (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "misplaced string near %.*s", (int) ARGS); throw 2; } // endif level @@ -294,14 +294,14 @@ OFFSET BDOC::ParseObject(size_t& i) ParseValue(++i, GetVlp(lastbpp)); level = 3; } else { - sprintf(G->Message, "Unexpected ':' near %.*s", (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "Unexpected ':' near %.*s", (int) ARGS); throw 2; } // endif level break; case ',': if (level < 3) { - sprintf(G->Message, "Unexpected ',' near %.*s", (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "Unexpected ',' near %.*s", (int) ARGS); throw 2; } else level = 1; @@ -309,7 +309,7 @@ OFFSET BDOC::ParseObject(size_t& i) break; case '}': if (!(level == 0 || level == 3)) { - sprintf(G->Message, "Unexpected '}' near %.*s", (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "Unexpected '}' near %.*s", (int) ARGS); throw 2; } // endif level @@ -321,7 +321,7 @@ OFFSET BDOC::ParseObject(size_t& i) case '\t': break; default: - sprintf(G->Message, "Unexpected character '%c' near %.*s", + snprintf(G->Message, sizeof(G->Message), "Unexpected character '%c' near %.*s", s[i], (int) ARGS); throw 2; }; // endswitch s[i] @@ -399,7 +399,7 @@ suite: return bvp; err: - sprintf(G->Message, "Unexpected character '%c' near %.*s", s[i], (int) ARGS); + snprintf(G->Message, sizeof(G->Message), "Unexpected character '%c' near %.*s", s[i], (int) ARGS); throw 3; } // end of ParseValue @@ -758,16 +758,16 @@ bool BDOC::SerializeValue(PBVAL jvp, bool b) return jp->Escape(MZP(jvp->To_Val)); case TYPE_INTG: - sprintf(buf, "%d", jvp->N); + snprintf(buf, sizeof(buf), "%d", jvp->N); return jp->WriteStr(buf); case TYPE_BINT: - sprintf(buf, "%lld", *(longlong*)MakePtr(Base, jvp->To_Val)); + snprintf(buf, sizeof(buf), "%lld", *(longlong*)MakePtr(Base, jvp->To_Val)); return jp->WriteStr(buf); case TYPE_FLOAT: - sprintf(buf, "%.*f", jvp->Nd, jvp->F); + snprintf(buf, sizeof(buf), "%.*f", jvp->Nd, jvp->F); return jp->WriteStr(buf); case TYPE_DBL: - sprintf(buf, "%.*lf", jvp->Nd, *(double*)MakePtr(Base, jvp->To_Val)); + snprintf(buf, sizeof(buf), "%.*lf", jvp->Nd, *(double*)MakePtr(Base, jvp->To_Val)); return jp->WriteStr(buf); case TYPE_NULL: return jp->WriteStr("null"); @@ -797,7 +797,7 @@ void* BJSON::BsonSubAlloc(size_t size) memp, size, pph->To_Free, pph->FreeBlk); if (size > pph->FreeBlk) { /* Not enough memory left in pool */ - sprintf(G->Message, + snprintf(G->Message, sizeof(G->Message), "Not enough memory for request of %zd (used=%zd free=%zd)", size, pph->To_Free, pph->FreeBlk); xtrc(1, "BsonSubAlloc: %s\n", G->Message); @@ -1679,7 +1679,7 @@ PBVAL BJSON::SetValue(PBVAL vlp, PVAL valp) break; default: - sprintf(G->Message, "Unsupported typ %d\n", valp->GetType()); + snprintf(G->Message, sizeof(G->Message), "Unsupported typ %d\n", valp->GetType()); throw(777); } // endswitch Type diff --git a/storage/connect/bsonudf.cpp b/storage/connect/bsonudf.cpp index 439f5a16c70..9949394182c 100644 --- a/storage/connect/bsonudf.cpp +++ b/storage/connect/bsonudf.cpp @@ -68,7 +68,7 @@ static PBSON BbinAlloc(PGLOBAL g, ulong len, PBVAL jsp) PBSON bsp = (PBSON)PlgDBSubAlloc(g, NULL, sizeof(BSON)); if (bsp) { - strcpy(bsp->Msg, "Binary Json"); + snprintf(bsp->Msg, sizeof(bsp->Msg), "Binary Json"); bsp->Msg[BMX] = 0; bsp->Filename = NULL; bsp->G = g; @@ -271,7 +271,7 @@ my_bool BJNX::SetArrayOptions(PGLOBAL g, char* p, int i, PSZ nm) } // endif n } else { - strcpy(g->Message, "Wrong array specification"); + snprintf(g->Message, sizeof(g->Message), "Wrong array specification"); return true; } // endif's @@ -567,7 +567,7 @@ PBVAL BJNX::GetRowValue(PGLOBAL g, PBVAL row, int i) vlp = row; // DupVal(g, row) ??? } else { - strcpy(g->Message, "Unexpected object"); + snprintf(g->Message, sizeof(g->Message), "Unexpected object"); vlp = NULL; } //endif Op @@ -612,7 +612,7 @@ PBVAL BJNX::GetRowValue(PGLOBAL g, PBVAL row, int i) /*********************************************************************************/ PVAL BJNX::ExpandArray(PGLOBAL g, PBVAL arp, int n) { - strcpy(g->Message, "Expand cannot be done by this function"); + snprintf(g->Message, sizeof(g->Message), "Expand cannot be done by this function"); return NULL; } // end of ExpandArray @@ -793,7 +793,7 @@ PVAL BJNX::CalculateArray(PGLOBAL g, PBVAL bap, int n) xtrc(1, "Exception %d: %s\n", n, g->Message); PUSH_WARNING(g->Message); } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); } // end catch return vp; @@ -862,7 +862,7 @@ PBVAL BJNX::GetRow(PGLOBAL g) } else if (row->Type == TYPE_JAR) { AddArrayValue(row, MOF(nwr)); } else { - strcpy(g->Message, "Wrong type when writing new row"); + snprintf(g->Message, sizeof(g->Message), "Wrong type when writing new row"); nwr = NULL; } // endif's @@ -895,7 +895,7 @@ my_bool BJNX::WriteValue(PGLOBAL g, PBVAL jvalp) case TYPE_JAR: arp = row; break; case TYPE_JVAL: jvp = MVP(row->To_Val); break; default: - strcpy(g->Message, "Invalid target type"); + snprintf(g->Message, sizeof(g->Message), "Invalid target type"); return true; } // endswitch Type @@ -1069,7 +1069,7 @@ my_bool BJNX::CheckPath(PGLOBAL g, UDF_ARGS *args, PBVAL jsp, PBVAL& jvp, int n) return false; } else { - strcpy(g->Message, "Path argument is null"); + snprintf(g->Message, sizeof(g->Message), "Path argument is null"); return true; } // endif path @@ -1090,7 +1090,7 @@ PSZ BJNX::Locate(PGLOBAL g, PBVAL jsp, PBVAL jvp, int k) g->Message[0] = 0; if (!jsp) { - strcpy(g->Message, "Null json tree"); + snprintf(g->Message, sizeof(g->Message), "Null json tree"); return NULL; } // endif jsp @@ -1117,7 +1117,7 @@ PSZ BJNX::Locate(PGLOBAL g, PBVAL jsp, PBVAL jvp, int k) if (err) { if (!g->Message[0]) - strcpy(g->Message, "Invalid json tree"); + snprintf(g->Message, sizeof(g->Message), "Invalid json tree"); } else if (Found) { Jp->WriteChr('\0'); @@ -1129,7 +1129,7 @@ PSZ BJNX::Locate(PGLOBAL g, PBVAL jsp, PBVAL jvp, int k) xtrc(1, "Exception %d: %s\n", n, g->Message); PUSH_WARNING(g->Message); } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); } // end catch return str; @@ -1210,7 +1210,7 @@ PSZ BJNX::LocateAll(PGLOBAL g, PBVAL jsp, PBVAL bvp, int mx) PJPN jnp; if (!jsp) { - strcpy(g->Message, "Null json tree"); + snprintf(g->Message, sizeof(g->Message), "Null json tree"); return NULL; } // endif jsp @@ -1249,13 +1249,13 @@ PSZ BJNX::LocateAll(PGLOBAL g, PBVAL jsp, PBVAL bvp, int mx) PlugSubAlloc(g, NULL, Jp->N); str = Jp->Strp; } else if (!g->Message[0]) - strcpy(g->Message, "Invalid json tree"); + snprintf(g->Message, sizeof(g->Message), "Invalid json tree"); } catch (int n) { xtrc(1, "Exception %d: %s\n", n, g->Message); PUSH_WARNING(g->Message); } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); } // end catch return str; @@ -1746,7 +1746,7 @@ PBSON BJNX::MakeBinResult(UDF_ARGS *args, PBVAL top, ulong len, int n) if ((bnp = BbinAlloc(G, len, top))) { bnp->Filename = filename; bnp->Pretty = pretty; - strcpy(bnp->Msg, "Json Binary item"); + snprintf(bnp->Msg, sizeof(bnp->Msg), "Json Binary item"); } //endif bnp return bnp; @@ -3102,7 +3102,7 @@ char* bson_test(UDF_INIT* initid, UDF_ARGS* args, char* result, *error = 1; str = NULL; } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); *error = 1; str = NULL; @@ -3223,7 +3223,7 @@ char* bsonlocate(UDF_INIT* initid, UDF_ARGS* args, char* result, *error = 1; path = NULL; } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); *error = 1; path = NULL; @@ -3341,7 +3341,7 @@ char* bson_locate_all(UDF_INIT* initid, UDF_ARGS* args, char* result, *error = 1; path = NULL; } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); *error = 1; path = NULL; @@ -3708,7 +3708,7 @@ char *bson_get_item(UDF_INIT *initid, UDF_ARGS *args, char *result, jvp = bnx.GetRowValue(g, jvp, 0); if (!bnx.IsJson(jvp)) { - strcpy(g->Message, "Not a Json item"); + snprintf(g->Message, sizeof(g->Message), "Not a Json item"); } else str = bnx.Serialize(g, jvp, NULL, 0); @@ -3840,7 +3840,7 @@ char *bsonget_string(UDF_INIT *initid, UDF_ARGS *args, char *result, PUSH_WARNING(g->Message); str = NULL; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); str = NULL; } // end catch @@ -4299,7 +4299,7 @@ static char *bson_handle_item(UDF_INIT *initid, UDF_ARGS *args, char *result, PUSH_WARNING(g->Message); str = NULL; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); str = NULL; } // end catch @@ -4741,8 +4741,8 @@ char *bfile_bjson(UDF_INIT *initid, UDF_ARGS *args, char *result, PGLOBAL g = (PGLOBAL)initid->ptr; BDOC doc(g); - strcpy(fn, MakePSZ(g, args, 0)); - strcpy(ofn, MakePSZ(g, args, 1)); + snprintf(fn, sizeof(fn), "%s", MakePSZ(g, args, 0)); + snprintf(ofn, sizeof(ofn), "%s", MakePSZ(g, args, 1)); if (args->arg_count == 3) lrecl = (size_t)*(longlong*)args->args[2]; @@ -5868,7 +5868,7 @@ static char *bbin_handle_item(UDF_INIT *initid, UDF_ARGS *args, char *result, PUSH_WARNING(g->Message); } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); } // end catch @@ -6200,7 +6200,7 @@ char* bbin_locate_all(UDF_INIT* initid, UDF_ARGS* args, char* result, *error = 1; path = NULL; } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); *error = 1; path = NULL; diff --git a/storage/connect/cmgoconn.cpp b/storage/connect/cmgoconn.cpp index 3ecdb02a813..e61806d42eb 100644 --- a/storage/connect/cmgoconn.cpp +++ b/storage/connect/cmgoconn.cpp @@ -156,7 +156,7 @@ bool CMgoConn::Connect(PGLOBAL g) { if (!Pcg->Db_name || !Pcg->Coll_name) { // This would crash in mongoc_client_get_collection - strcpy(g->Message, "Missing DB or collection name"); + snprintf(g->Message, sizeof(g->Message), "Missing DB or collection name"); return true; } // endif name @@ -165,7 +165,7 @@ bool CMgoConn::Connect(PGLOBAL g) __try { mongo_init(true); } __except (EXCEPTION_EXECUTE_HANDLER) { - strcpy(g->Message, "Cannot load MongoDB C driver"); + snprintf(g->Message, sizeof(g->Message), "Cannot load MongoDB C driver"); return true; } // end try/except #else // !_WIN32 @@ -379,7 +379,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g) p = strrchr(options, ']'); if (!p) { - strcpy(g->Message, "Missing ] in pipeline"); + snprintf(g->Message, sizeof(g->Message), "Missing ] in pipeline"); return true; } else *(char*)p = 0; @@ -390,7 +390,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g) s->Append(",{\"$match\":"); if (MakeSelector(g, filp, s)) { - strcpy(g->Message, "Failed making selector"); + snprintf(g->Message, sizeof(g->Message), "Failed making selector"); return true; } else s->Append('}'); @@ -454,7 +454,7 @@ bool CMgoConn::MakeCursor(PGLOBAL g) s->Append(','); if (MakeSelector(g, filp, s)) { - strcpy(g->Message, "Failed making selector"); + snprintf(g->Message, sizeof(g->Message), "Failed making selector"); return true; } // endif Selector @@ -771,7 +771,7 @@ int CMgoConn::Write(PGLOBAL g) } // endif remove } else { - strcpy(g->Message, "Mongo update: cannot find _id"); + snprintf(g->Message, sizeof(g->Message), "Mongo update: cannot find _id"); rc = RC_FX; } // endif b @@ -1066,7 +1066,7 @@ bool CMgoConn::AddValue(PGLOBAL g, PCOL colp, bson_t *doc, char *key, bool upd) } // endswitch Buf_Type if (!rc) { - strcpy(g->Message, "Adding value failed"); + snprintf(g->Message, sizeof(g->Message), "Adding value failed"); return true; } else return false; diff --git a/storage/connect/domdoc.cpp b/storage/connect/domdoc.cpp index 7d5b87a2640..268ad771ef9 100644 --- a/storage/connect/domdoc.cpp +++ b/storage/connect/domdoc.cpp @@ -642,7 +642,6 @@ bool DOMNODELIST::DropItem(PGLOBAL g, int n) if (Listp == NULL || Listp->length < n) return true; -//Listp->item[n] = NULL; La propriété n'a pas de méthode 'set' return false; } // end of DeleteItem diff --git a/storage/connect/filamgz.cpp b/storage/connect/filamgz.cpp index 0eaf3571a80..5b965f63926 100644 --- a/storage/connect/filamgz.cpp +++ b/storage/connect/filamgz.cpp @@ -88,7 +88,7 @@ int GZFAM::Zerror(PGLOBAL g) { int errnum; - strcpy(g->Message, gzerror(Zfile, &errnum)); + snprintf(g->Message, sizeof(g->Message), "%s", gzerror(Zfile, &errnum)); if (errnum == Z_ERRNO) #if defined(_WIN32) @@ -142,7 +142,7 @@ bool GZFAM::OpenTableFile(PGLOBAL g) /*****************************************************************/ /* Updating GZ files not implemented yet. */ /*****************************************************************/ - strcpy(g->Message, MSG(UPD_ZIP_NOT_IMP)); + snprintf(g->Message, sizeof(g->Message), MSG(UPD_ZIP_NOT_IMP)); return true; case MODE_DELETE: if (!Tdbp->GetNext()) { @@ -379,7 +379,7 @@ int GZFAM::WriteBuffer(PGLOBAL g) /***********************************************************************/ int GZFAM::DeleteRecords(PGLOBAL g, int) { - strcpy(g->Message, MSG(NO_ZIP_DELETE)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_ZIP_DELETE)); return RC_FX; } // end of DeleteRecords @@ -926,7 +926,7 @@ bool ZLBFAM::AllocateBuffer(PGLOBAL g) #if 0 if (!Optimized && Tdbp->NeedIndexing(g)) { - strcpy(g->Message, MSG(NOP_ZLIB_INDEX)); + snprintf(g->Message, sizeof(g->Message), MSG(NOP_ZLIB_INDEX)); return TRUE; } // endif indexing #endif // 0 @@ -993,7 +993,7 @@ bool ZLBFAM::AllocateBuffer(PGLOBAL g) CurBlk = Block - 1; CurNum = Last; - strcpy(g->Message, MSG(NO_PAR_BLK_INS)); + snprintf(g->Message, sizeof(g->Message), "%s",MSG(NO_PAR_BLK_INS)); return TRUE; } // endif Last @@ -1068,7 +1068,7 @@ bool ZLBFAM::SetPos(PGLOBAL g, int pos __attribute__((unused))) return true; #if 0 // All this must be checked if (pos < 0) { - strcpy(g->Message, MSG(INV_REC_POS)); + snprintf(g->Message, sizeof(g->Message), MSG(INV_REC_POS)); return true; } // endif recpos @@ -1156,7 +1156,7 @@ int ZLBFAM::ReadBuffer(PGLOBAL g) rdbuf = Zlenp; } else { // !Optimized if (CurBlk != OldBlk + 1) { - strcpy(g->Message, MSG(INV_RAND_ACC)); + snprintf(g->Message, sizeof(g->Message), MSG(INV_RAND_ACC)); return RC_FX; } else Fpos = ftell(Stream); // Used when optimizing @@ -1276,7 +1276,7 @@ int ZLBFAM::WriteBuffer(PGLOBAL g) #if defined(_DEBUG) if (Tdbp->GetFtype() == RECFM_FIX && (signed)strlen(CurLine) != Lrecl + (signed)strlen(CrLf)) { - strcpy(g->Message, MSG(BAD_LINE_LEN)); + snprintf(g->Message, sizeof(g->Message), MSG(BAD_LINE_LEN)); Closing = TRUE; return RC_FX; } // endif Lrecl diff --git a/storage/connect/filamtxt.cpp b/storage/connect/filamtxt.cpp index f8168887e89..d449fc1d1c5 100644 --- a/storage/connect/filamtxt.cpp +++ b/storage/connect/filamtxt.cpp @@ -367,13 +367,13 @@ int TXTFAM::UpdateSortedRows(PGLOBAL g) // return RC_INFO; return RC_OK; // Nothing to do } else if (!(Sosar = MakeValueArray(g, To_Sos))) { - strcpy(g->Message, "Start position array is null"); + snprintf(g->Message, sizeof(g->Message), "Start position array is null"); goto err; } else if (!(Updar = MakeValueArray(g, To_Upd))) { - strcpy(g->Message, "Updated line array is null"); + snprintf(g->Message, sizeof(g->Message), "Updated line array is null"); goto err; } else if (!(ix = (int*)Posar->GetSortIndex(g))) { - strcpy(g->Message, "Error getting array sort index"); + snprintf(g->Message, sizeof(g->Message), "Error getting array sort index"); goto err; } // endif's @@ -419,10 +419,10 @@ int TXTFAM::DeleteSortedRows(PGLOBAL g) // return RC_INFO; return RC_OK; // Nothing to do } else if (!(Sosar = MakeValueArray(g, To_Sos))) { - strcpy(g->Message, "Start position array is null"); + snprintf(g->Message, sizeof(g->Message), "Start position array is null"); goto err; } else if (!(ix = (int*)Posar->GetSortIndex(g))) { - strcpy(g->Message, "Error getting array sort index"); + snprintf(g->Message, sizeof(g->Message), "Error getting array sort index"); goto err; } // endif's @@ -454,7 +454,7 @@ err: /***********************************************************************/ int TXTFAM::InitDelete(PGLOBAL g, int, int) { - strcpy(g->Message, "InitDelete should not be used by this table type"); + snprintf(g->Message, sizeof(g->Message), "InitDelete should not be used by this table type"); return RC_FX; } // end of InitDelete @@ -556,7 +556,7 @@ bool DOSFAM::OpenTableFile(PGLOBAL g) switch (mode) { case MODE_READ: - strcpy(opmode, "r"); + snprintf(opmode, sizeof(opmode), "r"); break; case MODE_DELETE: if (!Tdbp->Next) { @@ -570,7 +570,7 @@ bool DOSFAM::OpenTableFile(PGLOBAL g) } // endif blocked // This will erase the entire file - strcpy(opmode, "w"); + snprintf(opmode, sizeof(opmode), "w"); Tdbp->ResetSize(); break; } // endif @@ -580,14 +580,14 @@ bool DOSFAM::OpenTableFile(PGLOBAL g) /* fall through */ case MODE_UPDATE: if ((UseTemp = Tdbp->IsUsingTemp(g))) { - strcpy(opmode, "r"); + snprintf(opmode, sizeof(opmode), "r"); Bin = true; } else - strcpy(opmode, "r+"); + snprintf(opmode, sizeof(opmode), "r+"); break; case MODE_INSERT: - strcpy(opmode, "a+"); + snprintf(opmode, sizeof(opmode), "a+"); break; default: snprintf(g->Message, sizeof(g->Message), MSG(BAD_OPEN_MODE), mode); @@ -1364,7 +1364,7 @@ int BLKFAM::GetNextPos(void) /***********************************************************************/ bool BLKFAM::SetPos(PGLOBAL g, int) { - strcpy(g->Message, "Blocked variable tables cannot be used indexed"); + snprintf(g->Message, sizeof(g->Message), "Blocked variable tables cannot be used indexed"); return true; } // end of SetPos @@ -1708,10 +1708,10 @@ bool BINFAM::OpenTableFile(PGLOBAL g) { switch (mode) { case MODE_READ: - strcpy(opmode, "rb"); + snprintf(opmode, sizeof(opmode), "rb"); break; case MODE_WRITE: - strcpy(opmode, "wb"); + snprintf(opmode, sizeof(opmode), "wb"); break; default: snprintf(g->Message, sizeof(g->Message), MSG(BAD_OPEN_MODE), mode); @@ -1859,7 +1859,7 @@ int BINFAM::ReadBuffer(PGLOBAL g) // Read the prefix giving the row length if (!fread(&Recsize, sizeof(size_t), 1, Stream)) { if (!feof(Stream)) { - strcpy(g->Message, "Error reading line prefix\n"); + snprintf(g->Message, sizeof(g->Message), "Error reading line prefix\n"); return RC_FX; } else return RC_EF; diff --git a/storage/connect/filamvct.cpp b/storage/connect/filamvct.cpp index 184df646cb7..f2f70e591dd 100644 --- a/storage/connect/filamvct.cpp +++ b/storage/connect/filamvct.cpp @@ -429,7 +429,7 @@ bool VCTFAM::OpenTableFile(PGLOBAL g) /*********************************************************************/ switch (mode) { case MODE_READ: - strcpy(opmode, "rb"); + snprintf(opmode, sizeof(opmode), "rb"); break; case MODE_DELETE: if (!Tdbp->GetNext()) { @@ -437,7 +437,7 @@ bool VCTFAM::OpenTableFile(PGLOBAL g) DelRows = Cardinality(g); // This will delete the whole file - strcpy(opmode, "wb"); + snprintf(opmode, sizeof(opmode), "wb"); break; } // endif @@ -445,7 +445,7 @@ bool VCTFAM::OpenTableFile(PGLOBAL g) /* fall through */ case MODE_UPDATE: UseTemp = Tdbp->IsUsingTemp(g); - strcpy(opmode, (UseTemp) ? "rb" : "r+b"); + snprintf(opmode, sizeof(opmode), (UseTemp) ? "rb" : "r+b"); break; case MODE_INSERT: if (MaxBlk) { @@ -453,11 +453,11 @@ bool VCTFAM::OpenTableFile(PGLOBAL g) if (MakeEmptyFile(g, To_File)) return true; - strcpy(opmode, "r+b"); // Required to update empty blocks + snprintf(opmode, sizeof(opmode), "r+b"); // Required to update empty blocks } else if (!Block || Last == Nrec) - strcpy(opmode, "ab"); + snprintf(opmode, sizeof(opmode), "ab"); else - strcpy(opmode, "r+b"); // Required to update the last block + snprintf(opmode, sizeof(opmode), "r+b"); // Required to update the last block break; default: @@ -1911,7 +1911,7 @@ bool VECFAM::OpenTableFile(PGLOBAL g) /*********************************************************************/ switch (mode) { case MODE_READ: - strcpy(opmode, "rb"); + snprintf(opmode, sizeof(opmode), "rb"); break; case MODE_DELETE: if (!Tdbp->GetNext()) { @@ -1919,7 +1919,7 @@ bool VECFAM::OpenTableFile(PGLOBAL g) DelRows = Cardinality(g); // This will delete the whole file - strcpy(opmode, "wb"); + snprintf(opmode, sizeof(opmode), "wb"); // This will stop the process by causing GetProgMax to return 0. ResetTableSize(g, 0, Nrec); @@ -1930,10 +1930,10 @@ bool VECFAM::OpenTableFile(PGLOBAL g) /* fall through */ case MODE_UPDATE: UseTemp = Tdbp->IsUsingTemp(g); - strcpy(opmode, (UseTemp) ? "rb": "r+b"); + snprintf(opmode, sizeof(opmode), (UseTemp) ? "rb": "r+b"); break; case MODE_INSERT: - strcpy(opmode, "ab"); + snprintf(opmode, sizeof(opmode), "ab"); break; default: snprintf(g->Message, sizeof(g->Message), MSG(BAD_OPEN_MODE), mode); diff --git a/storage/connect/filamzip.cpp b/storage/connect/filamzip.cpp index 5a1e40cccb2..a7d8e162a54 100644 --- a/storage/connect/filamzip.cpp +++ b/storage/connect/filamzip.cpp @@ -152,7 +152,7 @@ static bool ZipFiles(PGLOBAL g, ZIPUTIL *zutp, PCSZ pat, char *buf) /*********************************************************************/ /* pat is a multiple file name with wildcard characters */ /*********************************************************************/ - strcpy(filename, pat); + snprintf(filename, sizeof(filename), "%s", pat); #if defined(_WIN32) int rc; @@ -174,7 +174,7 @@ static bool ZipFiles(PGLOBAL g, ZIPUTIL *zutp, PCSZ pat, char *buf) snprintf(g->Message, sizeof(g->Message), MSG(BAD_FILE_HANDLE), filename); return true; } else { - strcpy(g->Message, "Cannot find any file to load"); + snprintf(g->Message, sizeof(g->Message), "Cannot find any file to load"); return true; } // endif rc @@ -208,7 +208,7 @@ static bool ZipFiles(PGLOBAL g, ZIPUTIL *zutp, PCSZ pat, char *buf) // Close the search handle. if (!FindClose(hSearch)) { - strcpy(g->Message, MSG(SRCH_CLOSE_ERR)); + snprintf(g->Message, sizeof(g->Message), MSG(SRCH_CLOSE_ERR)); return true; } // endif FindClose @@ -402,7 +402,7 @@ bool ZIPUTIL::OpenTable(PGLOBAL g, MODE mode, PCSZ fn, bool append) return true; } else { - strcpy(g->Message, "Only INSERT mode supported for ZIPPING files"); + snprintf(g->Message, sizeof(g->Message), "Only INSERT mode supported for ZIPPING files"); return true; } // endif mode @@ -610,7 +610,7 @@ int UNZIPUTL::findEntry(PGLOBAL g, bool next) next = true; } while (true); - strcpy(g->Message, "FindNext logical error"); + snprintf(g->Message, sizeof(g->Message), "FindNext logical error"); return RC_FX; } // end of FindEntry @@ -703,7 +703,7 @@ bool UNZIPUTL::OpenTable(PGLOBAL g, MODE mode, PCSZ fn) return true; } else { - strcpy(g->Message, "Only READ mode supported for ZIPPED tables"); + snprintf(g->Message, sizeof(g->Message), "Only READ mode supported for ZIPPED tables"); return true; } // endif mode @@ -755,7 +755,7 @@ bool UNZIPUTL::openEntry(PGLOBAL g) try { memory = new char[size + 1]; } catch (...) { - strcpy(g->Message, "Out of memory"); + snprintf(g->Message, sizeof(g->Message), "Out of memory"); return true; } // end try/catch @@ -1130,16 +1130,16 @@ int UZDFAM::dbfhead(PGLOBAL g, void* buf) // Check first byte to be sure of .dbf type if ((hdrp->Version & 0x03) != DBFTYPE) { - strcpy(g->Message, MSG(NOT_A_DBF_FILE)); + snprintf(g->Message, sizeof(g->Message), MSG(NOT_A_DBF_FILE)); rc = RC_INFO; if ((hdrp->Version & 0x30) == 0x30) { - strcpy(g->Message, MSG(FOXPRO_FILE)); + snprintf(g->Message, sizeof(g->Message), MSG(FOXPRO_FILE)); dbc = 264; // FoxPro database container } // endif Version } else - strcpy(g->Message, MSG(DBASE_FILE)); + snprintf(g->Message, sizeof(g->Message), MSG(DBASE_FILE)); // Check last byte(s) of header endmark = (char*)hdrp + hdrp->Headlen() - dbc; @@ -1303,13 +1303,13 @@ bool ZIPFAM::OpenTableFile(PGLOBAL g) if (len < 0) return true; else if (!append && len > 0) { - strcpy(g->Message, "No insert into existing zip file"); + snprintf(g->Message, sizeof(g->Message), "No insert into existing zip file"); return true; } else if (append && len > 0) { UNZIPUTL *zutp = new(g) UNZIPUTL(target, NULL, false); if (!zutp->IsInsertOk(g, filename)) { - strcpy(g->Message, "No insert into existing entry"); + snprintf(g->Message, sizeof(g->Message), "No insert into existing entry"); return true; } // endif Ok @@ -1336,7 +1336,7 @@ bool ZIPFAM::OpenTableFile(PGLOBAL g) /***********************************************************************/ int ZIPFAM::ReadBuffer(PGLOBAL g) { - strcpy(g->Message, "ReadBuffer should not been called when zipping"); + snprintf(g->Message, sizeof(g->Message), "ReadBuffer should not been called when zipping"); return RC_FX; } // end of ReadBuffer @@ -1387,13 +1387,13 @@ bool ZPXFAM::OpenTableFile(PGLOBAL g) if (len < 0) return true; else if (!append && len > 0) { - strcpy(g->Message, "No insert into existing zip file"); + snprintf(g->Message, sizeof(g->Message), "No insert into existing zip file"); return true; } else if (append && len > 0) { UNZIPUTL *zutp = new(g) UNZIPUTL(target, NULL, false); if (!zutp->IsInsertOk(g, filename)) { - strcpy(g->Message, "No insert into existing entry"); + snprintf(g->Message, sizeof(g->Message), "No insert into existing entry"); return true; } // endif Ok diff --git a/storage/connect/filter.cpp b/storage/connect/filter.cpp index da418d38e31..cddb8b8c526 100644 --- a/storage/connect/filter.cpp +++ b/storage/connect/filter.cpp @@ -386,7 +386,7 @@ int FILTER::CheckColumn(PGLOBAL g, PSQL sqlp, PXOB &p, int &ag) } // endfor i if (*errmsg) { - strcpy(g->Message, errmsg); + snprintf(g->Message, sizeof(g->Message), errmsg); return -1; } else return n; @@ -993,7 +993,7 @@ bool FILTER::Convert(PGLOBAL g, bool having) break; case TYPE_ARRAY: if ((Opc != OP_IN && !Opm) || i == 0) { - strcpy(g->Message, MSG(BAD_ARRAY_OPER)); + snprintf(g->Message, sizeof(g->Message), MSG(BAD_ARRAY_OPER)); return TRUE; } // endif @@ -1007,7 +1007,7 @@ bool FILTER::Convert(PGLOBAL g, bool having) goto TEST; // Filter has only one argument } // endif i - strcpy(g->Message, MSG(VOID_FIRST_ARG)); + snprintf(g->Message, sizeof(g->Message), MSG(VOID_FIRST_ARG)); return TRUE; } // endswitch @@ -1052,7 +1052,7 @@ bool FILTER::Convert(PGLOBAL g, bool having) } // endif Opc if (comtype == TYPE_ERROR) { - strcpy(g->Message, MSG(ILL_FILTER_CONV)); + snprintf(g->Message, sizeof(g->Message), MSG(ILL_FILTER_CONV)); return TRUE; } // endif @@ -1101,7 +1101,7 @@ bool FILTER::Convert(PGLOBAL g, bool having) break; case TYPE_FILTER: - strcpy(g->Message, MSG(UNMATCH_FIL_ARG)); + snprintf(g->Message, sizeof(g->Message), MSG(UNMATCH_FIL_ARG)); return TRUE; default: // Conversion from Column, Select/Func, Expr, Scalfnc... @@ -1271,7 +1271,7 @@ bool FILTER::Eval(PGLOBAL g) ap = (PARRAY)Arg(1); break; default: - strcpy(g->Message, MSG(IN_WITHOUT_SUB)); + snprintf(g->Message, sizeof(g->Message), MSG(IN_WITHOUT_SUB)); goto FilterError; } // endswitch Type diff --git a/storage/connect/fmdlex.c b/storage/connect/fmdlex.c index 1bca2d4ec18..165913a9698 100644 --- a/storage/connect/fmdlex.c +++ b/storage/connect/fmdlex.c @@ -1480,7 +1480,7 @@ void MakeAMPM(int n) n, pp->Num, pp->InFmt, pp->OutFmt); #endif pp->Index[pp->Num++] = -n; - sprintf(buf, "%%%ds", m); + snprintf(buf, sizeof(buf), "%%%ds", m); MakeIn(buf); if (pp->OutFmt) { diff --git a/storage/connect/frcas.h b/storage/connect/frcas.h deleted file mode 100644 index e9401d475ae..00000000000 --- a/storage/connect/frcas.h +++ /dev/null @@ -1,320 +0,0 @@ - case MSG_ACCESS_VIOLATN: p = "Violation accčs mémoire"; break; - case MSG_ADD_BAD_TYPE: p = "Ajout d'une valeur de type %s non conforme dans un tableau %s"; break; - case MSG_ALLOC_ERROR: p = "Erreur d'allocation de %s"; break; - case MSG_ANSWER_TYPE: p = "Réponse de type"; break; - case MSG_API_CONF_ERROR: p = "Erreur SQL: API_CONFORMANCE"; break; - case MSG_APPL_NOT_INIT: p = "Application non initialisée"; break; - case MSG_ARRAY_BNDS_EXCD: p = "Hors limite de tableau"; break; - case MSG_BAD_ARRAY_OPER: p = "Les tableaux doivent utiliser l'opérateur IN"; break; - case MSG_BAD_ARRAY_TYPE: p = "Type=%d invalide pour un tableau"; break; - case MSG_BAD_ARRAY_VAL: p = "Les tableaux doivent avoir le męme nombre de valeurs"; break; - case MSG_BAD_BIN_FMT: p = "Format invalide %c pour la colonne BIN %s"; break; - case MSG_BAD_BLK_ESTIM: p = "Nombre de blocs supérieur ŕ l'estimation"; break; - case MSG_BAD_BLK_SIZE: p = "Taille du bloc %d non conforme"; break; - case MSG_BAD_BYTE_NUM: p = "Le nombre d'octets écrits est faux"; break; - case MSG_BAD_BYTE_READ: p = "Le nombre d'octets lus est faux"; break; - case MSG_BAD_COL_TYPE: p = "Type invalide %s pour la colonne %s"; break; - case MSG_BAD_COL_XPATH: p = "Xpath invalide colonne %s de la table HTML %s"; break; - case MSG_BAD_CONST_TYPE: p = "Type=%d invalide pour une constante"; break; - case MSG_BAD_CONV_TYPE: p = "Convertion de type invalide %d"; break; - case MSG_BAD_DATETIME: p = "Valeur date/temps invalide"; break; - case MSG_BAD_DBF_FILE: p = "Le fichier DBF %s est altéré"; break; - case MSG_BAD_DBF_REC: p = "Fichier DBF %s altéré enregistrement %d"; break; - case MSG_BAD_DBF_TYPE: p = "Type DBF %c non supporté colonne %s"; break; - case MSG_BAD_DIRECTORY: p = "Répertoire invalide %s: %s"; break; - case MSG_BAD_FIELD_RANK: p = "Rang %d invalide pour la colonne %s"; break; - case MSG_BAD_FIELD_TYPE: p = "Mauvais type de champ %s"; break; - case MSG_BAD_FILE_HANDLE: p = "Handle de fichier invalide: %s"; break; - case MSG_BAD_FILTER: p = "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d"; break; - case MSG_BAD_FILTER_CONV: p = "Conversion filtre incorrecte, B_T=%d,%d"; break; - case MSG_BAD_FILTER_OP: p = "Opérateur de filtre invalide %d"; break; - case MSG_BAD_FLD_FORMAT: p = "Format invalide pour le champs %d de %s"; break; - case MSG_BAD_FLD_LENGTH: p = "Champs %s trop long (%s --> %d) ligne %d de %s"; break; - case MSG_BAD_FREQ_SET: p = "Spécification erronnée de Freq pour la colonne %s"; break; - case MSG_BAD_FUNC_MODE: p = "%s: mode invalide %d"; break; - case MSG_BAD_HANDLE_VAL: p = "Valeur Handle invalide"; break; - case MSG_BAD_HEADER: p = "Fichier %s: bloc en-tęte altéré"; break; - case MSG_BAD_HEAD_END: p = "Lecture fin d'en-tęte impossible"; break; - case MSG_BAD_INDEX_FILE: p = "Fichier index %s corrompu"; break; - case MSG_BAD_LINEFLD_FMT: p = "Format invalide ligne %d champs %d de %s"; break; - case MSG_BAD_LINE_LEN: p = "Longueur ligne non égale ŕ Lrecl"; break; - case MSG_BAD_LRECL: p = "Disparité lrecl table/fichier (%d,%hd)"; break; - case MSG_BAD_NODE_TYPE: p = "Type noeud erroné pour la table"; break; - case MSG_BAD_OFFSET_VAL: p = "Nul offset invalide pour une table CSV"; break; - case MSG_BAD_OPEN_MODE: p = "Mode d'ouverture invalide %d"; break; - case MSG_BAD_PARAM_TYPE: p = "%.8s: Paramčtre de type=%d invalide"; break; - case MSG_BAD_PARM_COUNT: p = "Nombre de paramčtres incohérent"; break; - case MSG_BAD_QUOTE_FIELD: p = "Quote manquante dans %s champs %d ligne %d"; break; - case MSG_BAD_READ_NUMBER: p = "Mauvais nombre %d de valeurs lues dans %s"; break; - case MSG_BAD_RECFM: p = "Recfm type %d invalide pour DOSCOL"; break; - case MSG_BAD_RECFM_VAL: p = "Valeur invalide %d de Recfm"; break; - case MSG_BAD_SET_CASE: p = "La casse d'un tableau ne peut pas passer de non respect ŕ respecter"; break; - case MSG_BAD_SET_STRING: p = "SetValue: appel invalide pour STRING"; break; - case MSG_BAD_SPECIAL_COL: p = "Colonne spéciale invalide %s"; break; - case MSG_BAD_SPEC_COLUMN: p = "Colonne spéciale invalide pour ce type de table"; break; - case MSG_BAD_TABLE_TYPE: p = "Type invalide %s pour la table %s"; break; - case MSG_BAD_TYPE_LIKE: p = "Type(%d)= %d invalide pour LIKE"; break; - case MSG_BAD_VALBLK_INDX: p = "Valeur hors limites de l'index du bloc de valeurs"; break; - case MSG_BAD_VALBLK_TYPE: p = "Type=%d invalide pour un bloc de valeurs"; break; - case MSG_BAD_VALNODE: p = "Type %d invalide pour le noeud valeur colonne %s"; break; - case MSG_BAD_VALUE_TYPE: p = "Type de valeur invalide %d"; break; - case MSG_BAD_VAL_UPDATE: p = "Impossible de déterminer quelle valeur %s doit ętre mise ŕ jour"; break; - case MSG_BAS_NS_LIST: p = "Format invalide de la liste des espace-noms"; break; - case MSG_BIN_F_TOO_LONG: p = "Valeur trop longue pour le champ %s (%d --> %d)"; break; - case MSG_BIN_MODE_FAIL: p = "Echec mode binaire: %s"; break; - case MSG_BLKTYPLEN_MISM: p = "Disparité types/longueurs de bloc dans SetValue"; break; - case MSG_BLK_IS_NULL: p = "Blk est nul"; break; - case MSG_BREAKPOINT: p = "Point de contrôle"; break; - case MSG_BUILD_INDEX: p = "Construction index %s sur %s"; break; - case MSG_CANNOT_OPEN: p = "Ouverture impossible de %s"; break; - case MSG_CHSIZE_ERROR: p = "Erreur dans chsize: %s"; break; - case MSG_COL_ALLOC_ERR: p = "Allocation impossible du noeud colonne"; break; - case MSG_COL_ISNOT_TABLE: p = "La colonne %s n'est pas dans la table %s"; break; - case MSG_COL_NOT_SORTED: p = "La colonne %s de la table %s n'est pas triée"; break; - case MSG_COL_NUM_MISM: p = "Disparité du nombre de colonnes"; break; - case MSG_COM_ERROR: p = "Erreur Com"; break; - case MSG_CONCAT_SUBNODE: p = "Concaténation de sous-noeuds impossible"; break; - case MSG_CONNECT_CANCEL: p = "Connection interrompue par l'utilisateur"; break; - case MSG_CONTROL_C_EXIT: p = "Exit par Ctrl-C"; break; - case MSG_DATABASE_LOADED: p = "Base de données %s chargée"; break; - case MSG_DATA_MISALIGN: p = "Mauvais alignement pour ce type de données"; break; - case MSG_DBASE_FILE: p = "Fichier dBASE dbf: "; break; - case MSG_DEF_ALLOC_ERROR: p = "Erreur d'allocation de la classe DEF %s"; break; - case MSG_DEL_FILE_ERR: p = "Erreur ŕ l'effacement de %s"; break; - case MSG_DEL_READ_ERROR: p = "Delete: erreur en lecture req=%d len=%d"; break; - case MSG_DEL_WRITE_ERROR: p = "Delete: erreur en écriture: %s"; break; - case MSG_DEPREC_FLAG: p = "Option Flag périmée, utiliser Coltype"; break; - case MSG_DLL_LOAD_ERROR: p = "Erreur %d au chargement du module %s"; break; - case MSG_DOM_NOT_SUPP: p = "MS-DOM non supporté par cette version"; break; - case MSG_DVAL_NOTIN_LIST: p = "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s"; break; - case MSG_EMPTY_DOC: p = "Document vide"; break; - case MSG_EMPTY_FILE: p = "%s du fichier vide %s: "; break; - case MSG_EOF_AFTER_LINE: p = "Fin de fichier aprčs la ligne %d"; break; - case MSG_EOF_INDEX_FILE: p = "EOF lisant le fichier index"; break; - case MSG_ERROR_IN_LSK: p = "Erreur %d dans lseek64"; break; - case MSG_ERROR_IN_SFP: p = "Erreur %d dans SetFilePointer"; break; - case MSG_ERR_READING_REC: p = "Erreur lisant l'enregistrement %d de %s"; break; - case MSG_FAIL_ADD_NODE: p = "L'ajout du noeud %s dans la table a échoué"; break; - case MSG_FETCH_NO_RES: p = "Fetch: Pas de Résultats"; break; - case MSG_FIELD_TOO_LONG: p = "Valeur trop longue pour le champs %d ligne %d"; break; - case MSG_FILELEN_ERROR: p = "Erreur dans %s pour %s"; break; - case MSG_FILE_IS_EMPTY: p = "Le fichier %s est vide"; break; - case MSG_FILE_MAP_ERR: p = "Erreur de File mapping"; break; - case MSG_FILE_MAP_ERROR: p = "CreateFileMapping %s erreur rc=%d"; break; - case MSG_FILE_OPEN_YET: p = "Fichier %s déjŕ ouvert"; break; - case MSG_FILE_UNFOUND: p = "Fichier %s non trouvé"; break; - case MSG_FLD_TOO_LNG_FOR: p = "Champs %d trop long pour %s ligne %d de %s"; break; - case MSG_FLT_BAD_RESULT: p = "Virgule flottante: résultat inexacte"; break; - case MSG_FLT_DENORMAL_OP: p = "Opérande virgule flottante non normalisé"; break; - case MSG_FLT_INVALID_OP: p = "Opération virgule flottante invalide"; break; - case MSG_FLT_OVERFLOW: p = "Dépassement de capacité virgule flottante"; break; - case MSG_FLT_STACK_CHECK: p = "Virgule flottante: Erreur de la pile"; break; - case MSG_FLT_UNDERFLOW: p = "Sous-dépassement de capacité virgule flottante"; break; - case MSG_FLT_ZERO_DIVIDE: p = "Virgule flottante: division par zéro"; break; - case MSG_FMT_WRITE_NIY: p = "L'écriture des fichiers %s n'est pas encore implémentée"; break; - case MSG_FOXPRO_FILE: p = "Fichier FoxPro: "; break; - case MSG_FPUTS_ERROR: p = "Erreur dans fputs: %s"; break; - case MSG_FSEEK_ERROR: p = "Erreur dans fseek: %s"; break; - case MSG_FSETPOS_ERROR: p = "Erreur dans fseek pour i=%d"; break; - case MSG_FTELL_ERROR: p = "Erreur dans ftell enregistrement=%d: %s"; break; - case MSG_FUNCTION_ERROR: p = "Erreur dans %s: %d"; break; - case MSG_FUNC_ERRNO: p = "Erreur %d dans %s"; break; - case MSG_FUNC_ERROR: p = "Erreur dans %s"; break; - case MSG_FUNC_ERR_S: p = "Erreur dans %s: %s"; break; - case MSG_FWRITE_ERROR: p = "Erreur dans fwrite: %s"; break; - case MSG_GET_DIST_VALS: p = "Récupération des valeurs distinctes de "; break; - case MSG_GET_FUNC_ERR: p = "Erreur en recherche de la fonction %s: %s"; break; - case MSG_GLOBAL_ERROR: p = "Erreur d'allocation de Global (taille=%d)\n"; break; - case MSG_GUARD_PAGE: p = "Violation de page de garde"; break; - case MSG_GZOPEN_ERROR: p = "gzopen %s: erreur %d sur %s"; break; - case MSG_ILLEGAL_INSTR: p = "Instruction illégale"; break; - case MSG_ILL_FILTER_CONV: p = "Conversion implicite illégale dans un filtre"; break; - case MSG_INDEX_NOT_UNIQ: p = "L'index n'est pas Unique"; break; - case MSG_INDEX_YET_ON: p = "L'index %s existe déjŕ sur %s"; break; - case MSG_INDX_COL_NOTIN: p = "La colonne index %s n'existe pas dans la table %s"; break; - case MSG_INDX_EXIST_YET: p = "L'entrée index existe déjŕ"; break; - case MSG_INIT_FAILED: p = "L'initialisation de %s a échoué"; break; - case MSG_INT_COL_ERROR: p = "Erreur interne sur la colonne index %s"; break; - case MSG_INT_OVERFLOW: p = "Dépassement de capacité sur entier"; break; - case MSG_INT_ZERO_DIVIDE: p = "Division entičre par zéro"; break; - case MSG_INVALID_DISP: p = "Disposition invalide"; break; - case MSG_INVALID_FTYPE: p = "SBV: Ftype %d invalide"; break; - case MSG_INVALID_HANDLE: p = "Poignée invalide"; break; - case MSG_INVALID_OPER: p = "Opérateur invalide %d pour %s"; break; - case MSG_INV_COLUMN_TYPE: p = "Type %d Invalide pour la colonne %s"; break; - case MSG_INV_COL_TYPE: p = "Type de colonne %s invalide"; break; - case MSG_INV_DEF_READ: p = "Lecture différée invalide rc=%d"; break; - case MSG_INV_DIRCOL_OFST: p = "Offset invalide pour une colonne DIR"; break; - case MSG_INV_MAP_POS: p = "Position mémoire invalide"; break; - case MSG_INV_RAND_ACC: p = "L'accčs aléatoire d'une table non optimisée est impossible"; break; - case MSG_INV_REC_POS: p = "Position d'enregistrement invalide"; break; - case MSG_INV_RESULT_TYPE: p = "Type de résultat invalide %s"; break; - case MSG_INV_UPDT_TABLE: p = "Table %s invalide pour Update"; break; - case MSG_IN_WITHOUT_SUB: p = "IN ou EXISTS sans tableau ou subquery"; break; - case MSG_KEY_ALLOC_ERR: p = "Erreur d'allocation d'un bloc offset clé"; break; - case MSG_KEY_ALLOC_ERROR: p = "Erreur d'allocation mémoire, Klen=%d n=%d"; break; - case MSG_LINE_TOO_LONG: p = "La nouvelle ligne est trop longue"; break; - case MSG_LIST: p = "--Liste--"; break; - case MSG_LOADING_FAILED: p = "Le chargement de %s a échoué"; break; - case MSG_LRECL_TOO_SMALL: p = "Lrecl trop petit (longueur en-tęte = %d)"; break; - case MSG_MAKE_EMPTY_FILE: p = "Génération du fichier vide %s: %s"; break; - case MSG_MAKING: p = "Génération"; break; - case MSG_MALLOC_ERROR: p = "Allocation mémoire impossible par %s"; break; - case MSG_MAP_VIEW_ERROR: p = "MapViewOfFile %s erreur rc=%d"; break; - case MSG_MAXSIZE_ERROR: p = "Maxsize incalculable sur table ouverte"; break; - case MSG_MEM_ALLOC_ERR: p = "Erreur d'allocation mémoire, taille %s = %d"; break; - case MSG_MEM_ALLOC_ERROR: p = "Erreur d'allocation mémoire"; break; - case MSG_MISPLACED_QUOTE: p = "Appostrophe mal placée ligne %d"; break; - case MSG_MISSING_ARG: p = "Argument manquant pour l'opérateur %d"; break; - case MSG_MISSING_FIELD: p = "Champs %d manquant dans %s ligne %d"; break; - case MSG_MISSING_FNAME: p = "Nom du fichier manquant"; break; - case MSG_MISSING_NODE: p = "Noeud %s manquant dans %s"; break; - case MSG_MISSING_ROWNODE: p = "Impossible de trouver le noeud de la ligne %d"; break; - case MSG_MIS_TAG_LIST: p = "Liste des balises colonne manquante"; break; - case MSG_MUL_MAKECOL_ERR: p = "Erreur logique dans TABMUL::MakeCol"; break; - case MSG_NAME_CONV_ERR: p = "Erreur de convertion du nom de noeud"; break; - case MSG_NEW_DOC_FAILED: p = "Impossible de créer le nouveau document"; break; - case MSG_NEW_RETURN_NULL: p = "NULL renvoyé par New dans PlugEvalLike"; break; - case MSG_NEXT_FILE_ERROR: p = "Erreur en recherche du fichier suivant. rc=%s"; break; - case MSG_NONCONT_EXCEPT: p = "Exception non-continuable"; break; - case MSG_NOP_ZLIB_INDEX: p = "L'indexage d'une table zlib non optimisée est impossible"; break; - case MSG_NOT_A_DBF_FILE: p = "Le fichier n'a pas le format dBASE dbf "; break; - case MSG_NOT_FIXED_LEN: p = "Fichier %s non fixe, len=%d lrecl=%d"; break; - case MSG_NO_0DH_HEAD: p = "0DH manquant en fin d'en-tęte (dbc=%d)"; break; - case MSG_NO_ACTIVE_DB: p = "Pas de base de données active"; break; - case MSG_NO_CHAR_FROM: p = "Conversion de type %d en caractčres impossible"; break; - case MSG_NO_DATE_FMT: p = "Pas de format date pour le valblock de type %d"; break; - case MSG_NO_DEF_FNCCOL: p = "Colonne fonction par défaut introuvable"; break; - case MSG_NO_DEF_PIVOTCOL: p = "Colonne pivot par défaut introuvable"; break; - case MSG_NO_DIR_INDX_RD: p = "Pas d'accčs directe des tables %s"; break; - case MSG_NO_FEAT_SUPPORT: p = "%s non supporté dans cette version"; break; - case MSG_NO_FLD_FORMAT: p = "Format absent pour le champs %d de %s"; break; - case MSG_NO_FORMAT_COL: p = "Type COLUMN informattable"; break; - case MSG_NO_FORMAT_TYPE: p = "Le format ne peut pas ętre défini ŕ partir du type %d"; break; - case MSG_NO_INDEX_READ: p = "Pas d'accčs directe des tables multiples"; break; - case MSG_NO_KEY_COL: p = "Pas de colonne clé trouvée"; break; - case MSG_NO_KEY_UPDATE: p = "Le nom des clés ne peut pas ętre modifié"; break; - case MSG_NO_MAP_INSERT: p = "MAP incompatible avec Insert"; break; - case MSG_NO_MATCHING_COL: p = "Pas de colonne correspondant ŕ %s dans %s"; break; - case MSG_NO_MATCH_COL: p = "Colonne correspondante introuvable"; break; - case MSG_NO_MEMORY: p = "Mémoire pleine"; break; - case MSG_NO_MODE_PADDED: p = "Mode non supporté pour les fichiers 'padded'"; break; - case MSG_NO_MUL_VCT: p = "Les tables VCT ne peuvent pas ętre multiples"; break; - case MSG_NO_ODBC_DELETE: p = "Delete ne devrait pas ętre appelé pour les tables ODBC"; break; - case MSG_NO_ODBC_DIRECT: p = "Accčs directe des tables ODBC non encore implémenté"; break; - case MSG_NO_ODBC_MUL: p = "Multiple(2) non supporté pour les tables ODBC"; break; - case MSG_NO_ODBC_SPECOL: p = "Pas de colonne spéciale ODBC"; break; - case MSG_NO_PART_DEL: p = "Delete partiel des fichier %s impossible"; break; - case MSG_NO_PART_MAP: p = "Mapping partiel non implémenté pour cet OS"; break; - case MSG_NO_PAR_BLK_INS: p = "Insertion de bloc partiel impossible"; break; - case MSG_NO_PIV_DIR_ACC: p = "Pas d'accčs directe aux tables PIVOT"; break; - case MSG_NO_READ_32: p = "Lecture de 32 octets impossible"; break; - case MSG_NO_RECOV_SPACE: p = "Espace non recouvrable dans le fichier index"; break; - case MSG_NO_ROWID_FOR_AM: p = "Accčs direct impossible de ROWID pour les tables de type %s"; break; - case MSG_NO_ROW_NODE: p = "Le nom du Rownode n'est pas défini"; break; - case MSG_NO_SECTION_NAME: p = "Nom de section manquant"; break; - case MSG_NO_SEC_UPDATE: p = "Les noms de section ne peuvent pas ętre modifiés"; break; - case MSG_NO_SETPOS_YET: p = "SetPos pas encore implémenté pour les fichier %s"; break; - case MSG_NO_SPEC_COL: p = "Pas de colonne spéciales MYSQL"; break; - case MSG_NO_SUB_VAL: p = "Pas de sous-value d'un tableau de type %d"; break; - case MSG_NO_TABCOL_DATA: p = "Pas de données pour la table %s colonne %s"; break; - case MSG_NO_TABLE_DEL: p = "Delete non autorisé pour les tables %s "; break; - case MSG_NO_TAB_DATA: p = "Pas de données pour la table %s"; break; - case MSG_NO_VCT_DELETE: p = "Délétion Partielle non implémentée pour les fichiers VCT"; break; - case MSG_NO_ZIP_DELETE: p = "Delete sur fichier Zip non encore implementé"; break; - case MSG_OPENING: p = "Ouverture"; break; - case MSG_OPEN_EMPTY_FILE: p = "Ouverture du fichier vide %s: %s"; break; - case MSG_OPEN_ERROR: p = "Erreur d'ouverture %d en mode %d sur %s: "; break; - case MSG_OPEN_ERROR_IS: p = "Erreur ŕ l'ouverture de %s: %s"; break; - case MSG_OPEN_MODE_ERROR: p = "Erreur d'ouverture(%s) %d sur %s"; break; - case MSG_OPEN_STRERROR: p = "Erreur ŕ l'ouverture: %s"; break; - case MSG_OPTBLK_RD_ERR: p = "Erreur ŕ la lecture d'un bloc optimisation: %s"; break; - case MSG_OPTBLK_WR_ERR: p = "Erreur ŕ l'écriture d'un bloc optimisation: %s"; break; - case MSG_OPTIMIZING: p = "Optimisation de "; break; - case MSG_OPT_BMAP_RD_ERR: p = "Erreur en lecture des bitmaps d'optimisation: %s"; break; - case MSG_OPT_BMAP_WR_ERR: p = "Erreur en écriture des bitmaps d'optimisation: %s"; break; - case MSG_OPT_CANCELLED: p = "Optimisation interrompue par l'utilisateur"; break; - case MSG_OPT_DVAL_RD_ERR: p = "Erreur en lecture des valeurs distinctes: %s"; break; - case MSG_OPT_DVAL_WR_ERR: p = "Erreur en écriture des valeurs distinctes: %s"; break; - case MSG_OPT_HEAD_RD_ERR: p = "Erreur en lecture de l'entęte du fichier opt: %s"; break; - case MSG_OPT_HEAD_WR_ERR: p = "Erreur en écriture de l'entęte du fichier opt: %s"; break; - case MSG_OPT_LOGIC_ERR: p = "Erreur logique dans SetBitmap, i=%d"; break; - case MSG_OPT_MAX_RD_ERR: p = "Erreur en lecture des valeurs maxi: %s"; break; - case MSG_OPT_MAX_WR_ERR: p = "Erreur en écriture des valeurs maxi: %s"; break; - case MSG_OPT_MIN_RD_ERR: p = "Erreur en lecture des valeurs mini: %s"; break; - case MSG_OPT_MIN_WR_ERR: p = "Erreur en écriture des valeurs mini: %s"; break; - case MSG_OPT_NOT_MATCH: p = "Le fichier opt %s n'est pas ŕ jour"; break; - case MSG_PAGE_ERROR: p = "Erreur de pagination"; break; - case MSG_PARM_CNT_MISS: p = "Disparité du nombre de Paramčtres"; break; - case MSG_PREC_VBLP_NULL: p = "ARRAY SetPrecision: Vblp est NULL"; break; - case MSG_PRIV_INSTR: p = "Instruction privilégiée"; break; - case MSG_PROCADD_ERROR: p = "Erreur %d sur l'adresse de %s"; break; - case MSG_QUERY_CANCELLED: p = "Requęte interrompue par l'utilisateur"; break; - case MSG_RANGE_NO_JOIN: p = "Range non compatible avec les index de jointure"; break; - case MSG_RC_READING: p = "rc=%d en lecture de la table %s"; break; - case MSG_READY: p = "Pręt"; break; - case MSG_READ_ERROR: p = "Erreur en lecture sur %s: %s"; break; - case MSG_READ_ONLY: p = "Cette table protégée en lecture seule ne peut ętre modifiée"; break; - case MSG_READ_SEEK_ERROR: p = "Erreur de recherche en lecture: %s"; break; - case MSG_REGISTER_ERR: p = "Enregistrement NS impossible, préfix='%s' et href='%s'"; break; - case MSG_REMOVE_ERROR: p = "Erreur en supprimant %s: %s"; break; - case MSG_RENAME_ERROR: p = "Erreur renommant %s en %s: %s"; break; - case MSG_ROWID_NOT_IMPL: p = "RowNumber non implémenté pour les tables de type %s"; break; - case MSG_SEC_KEY_FIRST: p = "Les sections et clés doivent ętre insérées en premier"; break; - case MSG_SEC_NAME_FIRST: p = "Le nom de section doit ętre en tęte de liste en insertion"; break; - case MSG_SEP_IN_FIELD: p = "Le champ %d contient le caractčre séparateur"; break; - case MSG_SEQUENCE_ERROR: p = "HSTMT: Allocation hors séquence"; break; - case MSG_SETEOF_ERROR: p = "Erreur %d dans SetEndOfFile"; break; - case MSG_SETRECPOS_NIY: p = "SetRecpos non implémenté pour ce type de table"; break; - case MSG_SET_STR_TRUNC: p = "SetValue: Chaîne de caractčres tronquée"; break; - case MSG_SFP_ERROR: p = "Erreur sur SetFilePointer: %s"; break; - case MSG_SHARED_LIB_ERR: p = "Erreur au chargement de la librairie partagée %s: %s"; break; - case MSG_SINGLE_STEP: p = "Pas ŕ pas"; break; - case MSG_SORTING_VAL: p = "Tri de %d valeurs"; break; - case MSG_SPCOL_READONLY: p = "La colonne spéciale %s est en lecture seulement"; break; - case MSG_SQL_CONF_ERROR: p = "Erreur SQL: SQL_CONFORMANCE"; break; - case MSG_SRCH_CLOSE_ERR: p = "Erreur ŕ la fermeture de l'Handle de recherche"; break; - case MSG_SRC_TABLE_UNDEF: p = "La table source n'est pas définie"; break; - case MSG_STACK_OVERFLOW: p = "Dépassement de capacité de la pile"; break; - case MSG_TABDIR_READONLY: p = "Les tables DIR sont en lecture seulement"; break; - case MSG_TABLE_NOT_OPT: p = "Table non optimisable"; break; - case MSG_TABLE_NO_INDEX: p = "La table %s n'est pas indexable"; break; - case MSG_TABLE_READ_ONLY: p = "Les tables %s sont en lecture seulement "; break; - case MSG_TABMUL_READONLY: p = "Les tables multiples sont en lecture seulement"; break; - case MSG_TOO_MANY_FIELDS: p = "Trop de champs ligne %d de %s"; break; - case MSG_TOO_MANY_JUMPS: p = "Trop de niveaux de saut"; break; - case MSG_TOO_MANY_KEYS: p = "Trop de clés (%d)"; break; - case MSG_TO_BLK_IS_NULL: p = "To Blk est nul"; break; - case MSG_TRUNCATE_ERROR: p = "Erreur en troncation: %s"; break; - case MSG_TRUNC_BY_ESTIM: p = "Tronqué par l'option Estimate"; break; - case MSG_TYPE_MISMATCH: p = "Clé et source ne sont pas du męme type"; break; - case MSG_TYPE_VALUE_ERR: p = "Colonne %s: disparité type(%s)/valeur(%s)"; break; - case MSG_UNBALANCE_QUOTE: p = "Appostrophe en trop ligne %d"; break; - case MSG_UNDEFINED_AM: p = "COLBLK %s: méthode d'accčs indéfinie"; break; - case MSG_UNKNOWN_EXCPT: p = "Exception non répertoriée"; break; - case MSG_UNMATCH_FIL_ARG: p = "Argument de filtre dépareillé"; break; - case MSG_UPDATE_ERROR: p = "Erreur en Update sur %s"; break; - case MSG_UPD_ZIP_NOT_IMP: p = "Mise ŕ jour des tables ZDOS non encore implementé"; break; - case MSG_VALSTR_TOO_LONG: p = "Valeur %s trop longue pour une chaîne de longueur %d"; break; - case MSG_VALTYPE_NOMATCH: p = "Disparité types de valeur"; break; - case MSG_VALUE_ERROR: p = "Colonne %s: bloc valeur nul"; break; - case MSG_VALUE_TOO_BIG: p = "Valeur %lld trop grande pour la colonne %s"; break; - case MSG_VALUE_TOO_LONG: p = "Valeur %s trop longue pour la colonne %s de longueur %d"; break; - case MSG_VAL_ALLOC_ERR: p = "Allocation impossible du noeud valeur"; break; - case MSG_VIR_NO_DELETE: p = "Delete impossible sur les tables %s"; break; - case MSG_VIR_READ_ONLY: p = "Les tables virtuelles %s sont en lecture seulement"; break; - case MSG_VOID_FIRST_ARG: p = "Le premier argument ne doit pas ętre vide"; break; - case MSG_WORK_AREA: p = "Espace de travail: %s"; break; - case MSG_WRITE_SEEK_ERR: p = "Erreur de recherche en écriture: %s"; break; - case MSG_WRITE_STRERROR: p = "Erreur en écriture sur %s: %s"; break; - case MSG_WRITING: p = "Ecriture"; break; - case MSG_WRITING_ERROR: p = "Erreur ŕ l'écriture de %s: %s"; break; - case MSG_WS_CONV_ERR: p = "Erreur de convertion de %s en WS"; break; - case MSG_XCOL_MISMATCH: p = "La colonne %s ne correspond pas ŕ l'index"; break; - case MSG_XFILE_READERR: p = "Erreur %d en lisant le fichier index"; break; - case MSG_XFILE_WRITERR: p = "Erreur en écrivant le fichier index: %s"; break; - case MSG_XMLTAB_INIT_ERR: p = "Erreur d'initialisation de la table XML"; break; - case MSG_XML_INIT_ERROR: p = "Erreur d'initialisation du nouveau fichier XML"; break; - case MSG_XPATH_CNTX_ERR: p = "Le nouveau contexte XPath ne peut ętre créé"; break; - case MSG_XPATH_EVAL_ERR: p = "Impossible d'évaluer l'emplacement xpath '%s'"; break; - case MSG_XPATH_NOT_SUPP: p = "Xpath non supporté colonne %s"; break; diff --git a/storage/connect/frids.h b/storage/connect/frids.h deleted file mode 100644 index 561dbb68837..00000000000 --- a/storage/connect/frids.h +++ /dev/null @@ -1,46 +0,0 @@ - case IDS_TABLES: p = "Table Entętes"; break; - case IDS_TAB_01: p = "Catalogue"; break; - case IDS_TAB_02: p = "Schéma"; break; - case IDS_TAB_03: p = "Nom"; break; - case IDS_TAB_04: p = "Type"; break; - case IDS_TAB_05: p = "Remarque"; break; - case IDS_COLUMNS: p = "Colonne Entętes"; break; - case IDS_COL_01: p = "Cat_Table"; break; - case IDS_COL_02: p = "Schem_Table"; break; - case IDS_COL_03: p = "Nom_Table"; break; - case IDS_COL_04: p = "Nom_Colonne"; break; - case IDS_COL_05: p = "Type_Données"; break; - case IDS_COL_06: p = "Nom_Type"; break; - case IDS_COL_07: p = "Précision"; break; - case IDS_COL_08: p = "Longueur"; break; - case IDS_COL_09: p = "Echelle"; break; - case IDS_COL_10: p = "Base"; break; - case IDS_COL_11: p = "Nullifiable"; break; - case IDS_COL_12: p = "Remarques"; break; - case IDS_PKEY: p = "Clé Entętes"; break; - case IDS_PKY_01: p = "Cat_Table"; break; - case IDS_PKY_02: p = "Schem_Table"; break; - case IDS_PKY_03: p = "Nom_Table"; break; - case IDS_PKY_04: p = "Nom_Colonne"; break; - case IDS_PKY_05: p = "Numéro_Clé"; break; - case IDS_PKY_06: p = "Nom_Clé"; break; - case IDS_STAT: p = "Stat Entętes"; break; - case IDS_STA_01: p = "Table_Catalog"; break; - case IDS_STA_02: p = "Table_Schema"; break; - case IDS_STA_03: p = "Table_Name"; break; - case IDS_STA_04: p = "Non_Unique"; break; - case IDS_STA_05: p = "Index_Qualifier"; break; - case IDS_STA_06: p = "Index_Name"; break; - case IDS_STA_07: p = "Type"; break; - case IDS_STA_08: p = "Seq_in_Index"; break; - case IDS_STA_09: p = "Column_Name"; break; - case IDS_STA_10: p = "Collation"; break; - case IDS_STA_11: p = "Cardinality"; break; - case IDS_STA_12: p = "Pages"; break; - case IDS_STA_13: p = "Filter_Condition"; break; - case IDS_DRIVER: p = "Driver Entętes"; break; - case IDS_DRV_01: p = "Description"; break; - case IDS_DRV_02: p = "Attributs"; break; - case IDS_DSRC: p = "DataSrc Entętes"; break; - case IDS_DSC_01: p = "Nom"; break; - case IDS_DSC_02: p = "Description"; break; diff --git a/storage/connect/frmsg.h b/storage/connect/frmsg.h deleted file mode 100644 index d58779b948f..00000000000 --- a/storage/connect/frmsg.h +++ /dev/null @@ -1,320 +0,0 @@ -#define MSG_ACCESS_VIOLATN "Violation accčs mémoire" -#define MSG_ADD_BAD_TYPE "Ajout d'une valeur de type %s non conforme dans un tableau %s" -#define MSG_ALLOC_ERROR "Erreur d'allocation de %s" -#define MSG_ANSWER_TYPE "Réponse de type" -#define MSG_API_CONF_ERROR "Erreur SQL: API_CONFORMANCE" -#define MSG_APPL_NOT_INIT "Application non initialisée" -#define MSG_ARRAY_BNDS_EXCD "Hors limite de tableau" -#define MSG_BAD_ARRAY_OPER "Les tableaux doivent utiliser l'opérateur IN" -#define MSG_BAD_ARRAY_TYPE "Type=%d invalide pour un tableau" -#define MSG_BAD_ARRAY_VAL "Les tableaux doivent avoir le męme nombre de valeurs" -#define MSG_BAD_BIN_FMT "Format invalide %c pour la colonne BIN %s" -#define MSG_BAD_BLK_ESTIM "Nombre de blocs supérieur ŕ l'estimation" -#define MSG_BAD_BLK_SIZE "Taille du bloc %d non conforme" -#define MSG_BAD_BYTE_NUM "Le nombre d'octets écrits est faux" -#define MSG_BAD_BYTE_READ "Le nombre d'octets lus est faux" -#define MSG_BAD_COL_TYPE "Type invalide %s pour la colonne %s" -#define MSG_BAD_COL_XPATH "Xpath invalide colonne %s de la table HTML %s" -#define MSG_BAD_CONST_TYPE "Type=%d invalide pour une constante" -#define MSG_BAD_CONV_TYPE "Convertion de type invalide %d" -#define MSG_BAD_DATETIME "Valeur date/temps invalide" -#define MSG_BAD_DBF_FILE "Le fichier DBF %s est altéré" -#define MSG_BAD_DBF_REC "Fichier DBF %s altéré enregistrement %d" -#define MSG_BAD_DBF_TYPE "Type DBF %c non supporté colonne %s" -#define MSG_BAD_DIRECTORY "Répertoire invalide %s: %s" -#define MSG_BAD_FIELD_RANK "Rang %d invalide pour la colonne %s" -#define MSG_BAD_FIELD_TYPE "Mauvais type de champ %s" -#define MSG_BAD_FILE_HANDLE "Handle de fichier invalide: %s" -#define MSG_BAD_FILTER "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d" -#define MSG_BAD_FILTER_CONV "Conversion filtre incorrecte, B_T=%d,%d" -#define MSG_BAD_FILTER_OP "Opérateur de filtre invalide %d" -#define MSG_BAD_FLD_FORMAT "Format invalide pour le champs %d de %s" -#define MSG_BAD_FLD_LENGTH "Champs %s trop long (%s --> %d) ligne %d de %s" -#define MSG_BAD_FREQ_SET "Spécification erronnée de Freq pour la colonne %s" -#define MSG_BAD_FUNC_MODE "%s: mode invalide %d" -#define MSG_BAD_HANDLE_VAL "Valeur Handle invalide" -#define MSG_BAD_HEADER "Fichier %s: bloc en-tęte altéré" -#define MSG_BAD_HEAD_END "Lecture fin d'en-tęte impossible" -#define MSG_BAD_INDEX_FILE "Fichier index %s corrompu" -#define MSG_BAD_LINEFLD_FMT "Format invalide ligne %d champs %d de %s" -#define MSG_BAD_LINE_LEN "Longueur ligne non égale ŕ Lrecl" -#define MSG_BAD_LRECL "Disparité lrecl table/fichier (%d,%hd)" -#define MSG_BAD_NODE_TYPE "Type noeud erroné pour la table" -#define MSG_BAD_OFFSET_VAL "Nul offset invalide pour une table CSV" -#define MSG_BAD_OPEN_MODE "Mode d'ouverture invalide %d" -#define MSG_BAD_PARAM_TYPE "%.8s: Paramčtre de type=%d invalide" -#define MSG_BAD_PARM_COUNT "Nombre de paramčtres incohérent" -#define MSG_BAD_QUOTE_FIELD "Quote manquante dans %s champs %d ligne %d" -#define MSG_BAD_READ_NUMBER "Mauvais nombre %d de valeurs lues dans %s" -#define MSG_BAD_RECFM "Recfm type %d invalide pour DOSCOL" -#define MSG_BAD_RECFM_VAL "Valeur invalide %d de Recfm" -#define MSG_BAD_SET_CASE "La casse d'un tableau ne peut pas passer de non respect ŕ respecter" -#define MSG_BAD_SET_STRING "SetValue: appel invalide pour STRING" -#define MSG_BAD_SPECIAL_COL "Colonne spéciale invalide %s" -#define MSG_BAD_SPEC_COLUMN "Colonne spéciale invalide pour ce type de table" -#define MSG_BAD_TABLE_TYPE "Type invalide %s pour la table %s" -#define MSG_BAD_TYPE_LIKE "Type(%d)= %d invalide pour LIKE" -#define MSG_BAD_VALBLK_INDX "Valeur hors limites de l'index du bloc de valeurs" -#define MSG_BAD_VALBLK_TYPE "Type=%d invalide pour un bloc de valeurs" -#define MSG_BAD_VALNODE "Type %d invalide pour le noeud valeur colonne %s" -#define MSG_BAD_VALUE_TYPE "Type de valeur invalide %d" -#define MSG_BAD_VAL_UPDATE "Impossible de déterminer quelle valeur %s doit ętre mise ŕ jour" -#define MSG_BAS_NS_LIST "Format invalide de la liste des espace-noms" -#define MSG_BIN_F_TOO_LONG "Valeur trop longue pour le champ %s (%d --> %d)" -#define MSG_BIN_MODE_FAIL "Echec mode binaire: %s" -#define MSG_BLKTYPLEN_MISM "Disparité types/longueurs de bloc dans SetValue" -#define MSG_BLK_IS_NULL "Blk est nul" -#define MSG_BREAKPOINT "Point de contrôle" -#define MSG_BUILD_INDEX "Construction index %s sur %s" -#define MSG_CANNOT_OPEN "Ouverture impossible de %s" -#define MSG_CHSIZE_ERROR "Erreur dans chsize: %s" -#define MSG_COL_ALLOC_ERR "Allocation impossible du noeud colonne" -#define MSG_COL_ISNOT_TABLE "La colonne %s n'est pas dans la table %s" -#define MSG_COL_NOT_SORTED "La colonne %s de la table %s n'est pas triée" -#define MSG_COL_NUM_MISM "Disparité du nombre de colonnes" -#define MSG_COM_ERROR "Erreur Com" -#define MSG_CONCAT_SUBNODE "Concaténation de sous-noeuds impossible" -#define MSG_CONNECT_CANCEL "Connection interrompue par l'utilisateur" -#define MSG_CONTROL_C_EXIT "Exit par Ctrl-C" -#define MSG_DATABASE_LOADED "Base de données %s chargée" -#define MSG_DATA_MISALIGN "Mauvais alignement pour ce type de données" -#define MSG_DBASE_FILE "Fichier dBASE dbf: " -#define MSG_DEF_ALLOC_ERROR "Erreur d'allocation de la classe DEF %s" -#define MSG_DEL_FILE_ERR "Erreur ŕ l'effacement de %s" -#define MSG_DEL_READ_ERROR "Delete: erreur en lecture req=%d len=%d" -#define MSG_DEL_WRITE_ERROR "Delete: erreur en écriture: %s" -#define MSG_DEPREC_FLAG "Option Flag périmée, utiliser Coltype" -#define MSG_DLL_LOAD_ERROR "Erreur %d au chargement du module %s" -#define MSG_DOM_NOT_SUPP "MS-DOM non supporté par cette version" -#define MSG_DVAL_NOTIN_LIST "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s" -#define MSG_EMPTY_DOC "Document vide" -#define MSG_EMPTY_FILE "%s du fichier vide %s: " -#define MSG_EOF_AFTER_LINE "Fin de fichier aprčs la ligne %d" -#define MSG_EOF_INDEX_FILE "EOF lisant le fichier index" -#define MSG_ERROR_IN_LSK "Erreur %d dans lseek64" -#define MSG_ERROR_IN_SFP "Erreur %d dans SetFilePointer" -#define MSG_ERR_READING_REC "Erreur lisant l'enregistrement %d de %s" -#define MSG_FAIL_ADD_NODE "L'ajout du noeud %s dans la table a échoué" -#define MSG_FETCH_NO_RES "Fetch: Pas de Résultats" -#define MSG_FIELD_TOO_LONG "Valeur trop longue pour le champs %d ligne %d" -#define MSG_FILELEN_ERROR "Erreur dans %s pour %s" -#define MSG_FILE_IS_EMPTY "Le fichier %s est vide" -#define MSG_FILE_MAP_ERR "Erreur de File mapping" -#define MSG_FILE_MAP_ERROR "CreateFileMapping %s erreur rc=%d" -#define MSG_FILE_OPEN_YET "Fichier %s déjŕ ouvert" -#define MSG_FILE_UNFOUND "Fichier %s non trouvé" -#define MSG_FLD_TOO_LNG_FOR "Champs %d trop long pour %s ligne %d de %s" -#define MSG_FLT_BAD_RESULT "Virgule flottante: résultat inexacte" -#define MSG_FLT_DENORMAL_OP "Opérande virgule flottante non normalisé" -#define MSG_FLT_INVALID_OP "Opération virgule flottante invalide" -#define MSG_FLT_OVERFLOW "Dépassement de capacité virgule flottante" -#define MSG_FLT_STACK_CHECK "Virgule flottante: Erreur de la pile" -#define MSG_FLT_UNDERFLOW "Sous-dépassement de capacité virgule flottante" -#define MSG_FLT_ZERO_DIVIDE "Virgule flottante: division par zéro" -#define MSG_FMT_WRITE_NIY "L'écriture des fichiers %s n'est pas encore implémentée" -#define MSG_FOXPRO_FILE "Fichier FoxPro: " -#define MSG_FPUTS_ERROR "Erreur dans fputs: %s" -#define MSG_FSEEK_ERROR "Erreur dans fseek: %s" -#define MSG_FSETPOS_ERROR "Erreur dans fseek pour i=%d" -#define MSG_FTELL_ERROR "Erreur dans ftell enregistrement=%d: %s" -#define MSG_FUNCTION_ERROR "Erreur dans %s: %d" -#define MSG_FUNC_ERRNO "Erreur %d dans %s" -#define MSG_FUNC_ERROR "Erreur dans %s" -#define MSG_FUNC_ERR_S "Erreur dans %s: %s" -#define MSG_FWRITE_ERROR "Erreur dans fwrite: %s" -#define MSG_GET_DIST_VALS "Récupération des valeurs distinctes de " -#define MSG_GET_FUNC_ERR "Erreur en recherche de la fonction %s: %s" -#define MSG_GLOBAL_ERROR "Erreur d'allocation de Global (taille=%d)\n" -#define MSG_GUARD_PAGE "Violation de page de garde" -#define MSG_GZOPEN_ERROR "gzopen %s: erreur %d sur %s" -#define MSG_ILLEGAL_INSTR "Instruction illégale" -#define MSG_ILL_FILTER_CONV "Conversion implicite illégale dans un filtre" -#define MSG_INDEX_NOT_UNIQ "L'index n'est pas Unique" -#define MSG_INDEX_YET_ON "L'index %s existe déjŕ sur %s" -#define MSG_INDX_COL_NOTIN "La colonne index %s n'existe pas dans la table %s" -#define MSG_INDX_EXIST_YET "L'entrée index existe déjŕ" -#define MSG_INIT_FAILED "L'initialisation de %s a échoué" -#define MSG_INT_COL_ERROR "Erreur interne sur la colonne index %s" -#define MSG_INT_OVERFLOW "Dépassement de capacité sur entier" -#define MSG_INT_ZERO_DIVIDE "Division entičre par zéro" -#define MSG_INVALID_DISP "Disposition invalide" -#define MSG_INVALID_FTYPE "SBV: Ftype %d invalide" -#define MSG_INVALID_HANDLE "Poignée invalide" -#define MSG_INVALID_OPER "Opérateur invalide %d pour %s" -#define MSG_INV_COLUMN_TYPE "Type %d Invalide pour la colonne %s" -#define MSG_INV_COL_TYPE "Type de colonne %s invalide" -#define MSG_INV_DEF_READ "Lecture différée invalide rc=%d" -#define MSG_INV_DIRCOL_OFST "Offset invalide pour une colonne DIR" -#define MSG_INV_MAP_POS "Position mémoire invalide" -#define MSG_INV_RAND_ACC "L'accčs aléatoire d'une table non optimisée est impossible" -#define MSG_INV_REC_POS "Position d'enregistrement invalide" -#define MSG_INV_RESULT_TYPE "Type de résultat invalide %s" -#define MSG_INV_UPDT_TABLE "Table %s invalide pour Update" -#define MSG_IN_WITHOUT_SUB "IN ou EXISTS sans tableau ou subquery" -#define MSG_KEY_ALLOC_ERR "Erreur d'allocation d'un bloc offset clé" -#define MSG_KEY_ALLOC_ERROR "Erreur d'allocation mémoire, Klen=%d n=%d" -#define MSG_LINE_TOO_LONG "La nouvelle ligne est trop longue" -#define MSG_LIST "--Liste--" -#define MSG_LOADING_FAILED "Le chargement de %s a échoué" -#define MSG_LRECL_TOO_SMALL "Lrecl trop petit (longueur en-tęte = %d)" -#define MSG_MAKE_EMPTY_FILE "Génération du fichier vide %s: %s" -#define MSG_MAKING "Génération" -#define MSG_MALLOC_ERROR "Allocation mémoire impossible par %s" -#define MSG_MAP_VIEW_ERROR "MapViewOfFile %s erreur rc=%d" -#define MSG_MAXSIZE_ERROR "Maxsize incalculable sur table ouverte" -#define MSG_MEM_ALLOC_ERR "Erreur d'allocation mémoire, taille %s = %d" -#define MSG_MEM_ALLOC_ERROR "Erreur d'allocation mémoire" -#define MSG_MISPLACED_QUOTE "Appostrophe mal placée ligne %d" -#define MSG_MISSING_ARG "Argument manquant pour l'opérateur %d" -#define MSG_MISSING_FIELD "Champs %d manquant dans %s ligne %d" -#define MSG_MISSING_FNAME "Nom du fichier manquant" -#define MSG_MISSING_NODE "Noeud %s manquant dans %s" -#define MSG_MISSING_ROWNODE "Impossible de trouver le noeud de la ligne %d" -#define MSG_MIS_TAG_LIST "Liste des balises colonne manquante" -#define MSG_MUL_MAKECOL_ERR "Erreur logique dans TABMUL::MakeCol" -#define MSG_NAME_CONV_ERR "Erreur de convertion du nom de noeud" -#define MSG_NEW_DOC_FAILED "Impossible de créer le nouveau document" -#define MSG_NEW_RETURN_NULL "NULL renvoyé par New dans PlugEvalLike" -#define MSG_NEXT_FILE_ERROR "Erreur en recherche du fichier suivant. rc=%s" -#define MSG_NONCONT_EXCEPT "Exception non-continuable" -#define MSG_NOP_ZLIB_INDEX "L'indexage d'une table zlib non optimisée est impossible" -#define MSG_NOT_A_DBF_FILE "Le fichier n'a pas le format dBASE dbf " -#define MSG_NOT_FIXED_LEN "Fichier %s non fixe, len=%d lrecl=%d" -#define MSG_NO_0DH_HEAD "0DH manquant en fin d'en-tęte (dbc=%d)" -#define MSG_NO_ACTIVE_DB "Pas de base de données active" -#define MSG_NO_CHAR_FROM "Conversion de type %d en caractčres impossible" -#define MSG_NO_DATE_FMT "Pas de format date pour le valblock de type %d" -#define MSG_NO_DEF_FNCCOL "Colonne fonction par défaut introuvable" -#define MSG_NO_DEF_PIVOTCOL "Colonne pivot par défaut introuvable" -#define MSG_NO_DIR_INDX_RD "Pas d'accčs directe des tables %s" -#define MSG_NO_FEAT_SUPPORT "%s non supporté dans cette version" -#define MSG_NO_FLD_FORMAT "Format absent pour le champs %d de %s" -#define MSG_NO_FORMAT_COL "Type COLUMN informattable" -#define MSG_NO_FORMAT_TYPE "Le format ne peut pas ętre défini ŕ partir du type %d" -#define MSG_NO_INDEX_READ "Pas d'accčs directe des tables multiples" -#define MSG_NO_KEY_COL "Pas de colonne clé trouvée" -#define MSG_NO_KEY_UPDATE "Le nom des clés ne peut pas ętre modifié" -#define MSG_NO_MAP_INSERT "MAP incompatible avec Insert" -#define MSG_NO_MATCHING_COL "Pas de colonne correspondant ŕ %s dans %s" -#define MSG_NO_MATCH_COL "Colonne correspondante introuvable" -#define MSG_NO_MEMORY "Mémoire pleine" -#define MSG_NO_MODE_PADDED "Mode non supporté pour les fichiers 'padded'" -#define MSG_NO_MUL_VCT "Les tables VCT ne peuvent pas ętre multiples" -#define MSG_NO_ODBC_DELETE "Delete ne devrait pas ętre appelé pour les tables ODBC" -#define MSG_NO_ODBC_DIRECT "Accčs directe des tables ODBC non encore implémenté" -#define MSG_NO_ODBC_MUL "Multiple(2) non supporté pour les tables ODBC" -#define MSG_NO_ODBC_SPECOL "Pas de colonne spéciale ODBC" -#define MSG_NO_PART_DEL "Delete partiel des fichier %s impossible" -#define MSG_NO_PART_MAP "Mapping partiel non implémenté pour cet OS" -#define MSG_NO_PAR_BLK_INS "Insertion de bloc partiel impossible" -#define MSG_NO_PIV_DIR_ACC "Pas d'accčs directe aux tables PIVOT" -#define MSG_NO_READ_32 "Lecture de 32 octets impossible" -#define MSG_NO_RECOV_SPACE "Espace non recouvrable dans le fichier index" -#define MSG_NO_ROWID_FOR_AM "Accčs direct impossible de ROWID pour les tables de type %s" -#define MSG_NO_ROW_NODE "Le nom du Rownode n'est pas défini" -#define MSG_NO_SECTION_NAME "Nom de section manquant" -#define MSG_NO_SEC_UPDATE "Les noms de section ne peuvent pas ętre modifiés" -#define MSG_NO_SETPOS_YET "SetPos pas encore implémenté pour les fichier %s" -#define MSG_NO_SPEC_COL "Pas de colonne spéciales MYSQL" -#define MSG_NO_SUB_VAL "Pas de sous-value d'un tableau de type %d" -#define MSG_NO_TABCOL_DATA "Pas de données pour la table %s colonne %s" -#define MSG_NO_TABLE_DEL "Delete non autorisé pour les tables %s " -#define MSG_NO_TAB_DATA "Pas de données pour la table %s" -#define MSG_NO_VCT_DELETE "Délétion Partielle non implémentée pour les fichiers VCT" -#define MSG_NO_ZIP_DELETE "Delete sur fichier Zip non encore implementé" -#define MSG_OPENING "Ouverture" -#define MSG_OPEN_EMPTY_FILE "Ouverture du fichier vide %s: %s" -#define MSG_OPEN_ERROR "Erreur d'ouverture %d en mode %d sur %s: " -#define MSG_OPEN_ERROR_IS "Erreur ŕ l'ouverture de %s: %s" -#define MSG_OPEN_MODE_ERROR "Erreur d'ouverture(%s) %d sur %s" -#define MSG_OPEN_STRERROR "Erreur ŕ l'ouverture: %s" -#define MSG_OPTBLK_RD_ERR "Erreur ŕ la lecture d'un bloc optimisation: %s" -#define MSG_OPTBLK_WR_ERR "Erreur ŕ l'écriture d'un bloc optimisation: %s" -#define MSG_OPTIMIZING "Optimisation de " -#define MSG_OPT_BMAP_RD_ERR "Erreur en lecture des bitmaps d'optimisation: %s" -#define MSG_OPT_BMAP_WR_ERR "Erreur en écriture des bitmaps d'optimisation: %s" -#define MSG_OPT_CANCELLED "Optimisation interrompue par l'utilisateur" -#define MSG_OPT_DVAL_RD_ERR "Erreur en lecture des valeurs distinctes: %s" -#define MSG_OPT_DVAL_WR_ERR "Erreur en écriture des valeurs distinctes: %s" -#define MSG_OPT_HEAD_RD_ERR "Erreur en lecture de l'entęte du fichier opt: %s" -#define MSG_OPT_HEAD_WR_ERR "Erreur en écriture de l'entęte du fichier opt: %s" -#define MSG_OPT_LOGIC_ERR "Erreur logique dans SetBitmap, i=%d" -#define MSG_OPT_MAX_RD_ERR "Erreur en lecture des valeurs maxi: %s" -#define MSG_OPT_MAX_WR_ERR "Erreur en écriture des valeurs maxi: %s" -#define MSG_OPT_MIN_RD_ERR "Erreur en lecture des valeurs mini: %s" -#define MSG_OPT_MIN_WR_ERR "Erreur en écriture des valeurs mini: %s" -#define MSG_OPT_NOT_MATCH "Le fichier opt %s n'est pas ŕ jour" -#define MSG_PAGE_ERROR "Erreur de pagination" -#define MSG_PARM_CNT_MISS "Disparité du nombre de Paramčtres" -#define MSG_PREC_VBLP_NULL "ARRAY SetPrecision: Vblp est NULL" -#define MSG_PRIV_INSTR "Instruction privilégiée" -#define MSG_PROCADD_ERROR "Erreur %d sur l'adresse de %s" -#define MSG_QUERY_CANCELLED "Requęte interrompue par l'utilisateur" -#define MSG_RANGE_NO_JOIN "Range non compatible avec les index de jointure" -#define MSG_RC_READING "rc=%d en lecture de la table %s" -#define MSG_READY "Pręt" -#define MSG_READ_ERROR "Erreur en lecture sur %s: %s" -#define MSG_READ_ONLY "Cette table protégée en lecture seule ne peut ętre modifiée" -#define MSG_READ_SEEK_ERROR "Erreur de recherche en lecture: %s" -#define MSG_REGISTER_ERR "Enregistrement NS impossible, préfix='%s' et href='%s'" -#define MSG_REMOVE_ERROR "Erreur en supprimant %s: %s" -#define MSG_RENAME_ERROR "Erreur renommant %s en %s: %s" -#define MSG_ROWID_NOT_IMPL "RowNumber non implémenté pour les tables de type %s" -#define MSG_SEC_KEY_FIRST "Les sections et clés doivent ętre insérées en premier" -#define MSG_SEC_NAME_FIRST "Le nom de section doit ętre en tęte de liste en insertion" -#define MSG_SEP_IN_FIELD "Le champ %d contient le caractčre séparateur" -#define MSG_SEQUENCE_ERROR "HSTMT: Allocation hors séquence" -#define MSG_SETEOF_ERROR "Erreur %d dans SetEndOfFile" -#define MSG_SETRECPOS_NIY "SetRecpos non implémenté pour ce type de table" -#define MSG_SET_STR_TRUNC "SetValue: Chaîne de caractčres tronquée" -#define MSG_SFP_ERROR "Erreur sur SetFilePointer: %s" -#define MSG_SHARED_LIB_ERR "Erreur au chargement de la librairie partagée %s: %s" -#define MSG_SINGLE_STEP "Pas ŕ pas" -#define MSG_SORTING_VAL "Tri de %d valeurs" -#define MSG_SPCOL_READONLY "La colonne spéciale %s est en lecture seulement" -#define MSG_SQL_CONF_ERROR "Erreur SQL: SQL_CONFORMANCE" -#define MSG_SRCH_CLOSE_ERR "Erreur ŕ la fermeture de l'Handle de recherche" -#define MSG_SRC_TABLE_UNDEF "La table source n'est pas définie" -#define MSG_STACK_OVERFLOW "Dépassement de capacité de la pile" -#define MSG_TABDIR_READONLY "Les tables DIR sont en lecture seulement" -#define MSG_TABLE_NOT_OPT "Table non optimisable" -#define MSG_TABLE_NO_INDEX "La table %s n'est pas indexable" -#define MSG_TABLE_READ_ONLY "Les tables %s sont en lecture seulement " -#define MSG_TABMUL_READONLY "Les tables multiples sont en lecture seulement" -#define MSG_TOO_MANY_FIELDS "Trop de champs ligne %d de %s" -#define MSG_TOO_MANY_JUMPS "Trop de niveaux de saut" -#define MSG_TOO_MANY_KEYS "Trop de clés (%d)" -#define MSG_TO_BLK_IS_NULL "To Blk est nul" -#define MSG_TRUNCATE_ERROR "Erreur en troncation: %s" -#define MSG_TRUNC_BY_ESTIM "Tronqué par l'option Estimate" -#define MSG_TYPE_MISMATCH "Clé et source ne sont pas du męme type" -#define MSG_TYPE_VALUE_ERR "Colonne %s: disparité type(%s)/valeur(%s)" -#define MSG_UNBALANCE_QUOTE "Appostrophe en trop ligne %d" -#define MSG_UNDEFINED_AM "COLBLK %s: méthode d'accčs indéfinie" -#define MSG_UNKNOWN_EXCPT "Exception non répertoriée" -#define MSG_UNMATCH_FIL_ARG "Argument de filtre dépareillé" -#define MSG_UPDATE_ERROR "Erreur en Update sur %s" -#define MSG_UPD_ZIP_NOT_IMP "Mise ŕ jour des tables ZDOS non encore implementé" -#define MSG_VALSTR_TOO_LONG "Valeur %s trop longue pour une chaîne de longueur %d" -#define MSG_VALTYPE_NOMATCH "Disparité types de valeur" -#define MSG_VALUE_ERROR "Colonne %s: bloc valeur nul" -#define MSG_VALUE_TOO_BIG "Valeur %lld trop grande pour la colonne %s" -#define MSG_VALUE_TOO_LONG "Valeur %s trop longue pour la colonne %s de longueur %d" -#define MSG_VAL_ALLOC_ERR "Allocation impossible du noeud valeur" -#define MSG_VIR_NO_DELETE "Delete impossible sur les tables %s" -#define MSG_VIR_READ_ONLY "Les tables virtuelles %s sont en lecture seulement" -#define MSG_VOID_FIRST_ARG "Le premier argument ne doit pas ętre vide" -#define MSG_WORK_AREA "Espace de travail: %s" -#define MSG_WRITE_SEEK_ERR "Erreur de recherche en écriture: %s" -#define MSG_WRITE_STRERROR "Erreur en écriture sur %s: %s" -#define MSG_WRITING "Ecriture" -#define MSG_WRITING_ERROR "Erreur ŕ l'écriture de %s: %s" -#define MSG_WS_CONV_ERR "Erreur de convertion de %s en WS" -#define MSG_XCOL_MISMATCH "La colonne %s ne correspond pas ŕ l'index" -#define MSG_XFILE_READERR "Erreur %d en lisant le fichier index" -#define MSG_XFILE_WRITERR "Erreur en écrivant le fichier index: %s" -#define MSG_XMLTAB_INIT_ERR "Erreur d'initialisation de la table XML" -#define MSG_XML_INIT_ERROR "Erreur d'initialisation du nouveau fichier XML" -#define MSG_XPATH_CNTX_ERR "Le nouveau contexte XPath ne peut ętre créé" -#define MSG_XPATH_EVAL_ERR "Impossible d'évaluer l'emplacement xpath '%s'" -#define MSG_XPATH_NOT_SUPP "Xpath non supporté colonne %s" diff --git a/storage/connect/frmsg1.h b/storage/connect/frmsg1.h deleted file mode 100644 index e88440a3a9c..00000000000 --- a/storage/connect/frmsg1.h +++ /dev/null @@ -1,1013 +0,0 @@ -#define MSG_ACCESS_VIOLATN "Violation accčs mémoire" -#define MSG_ACT_ALLOC_FAIL "PlugInitLang: Erreur d'allocation du bloc Activity" -#define MSG_ADDVAL_ERROR "Erreur %d dans AddValue" -#define MSG_ADD_BAD_TYPE "Ajout d'une valeur de type %s non conforme dans un tableau %s" -#define MSG_ADD_NULL_DOM "Ajout de la chaîne %s ŕ un domaine nul" -#define MSG_ADPOS_IN_DICTP "ADPOS au travail dans User_Dictp" -#define MSG_AFTER " aprčs: " -#define MSG_ALG_CHOICE_AUTO "Le choix du meilleur algorithme est automatique" -#define MSG_ALG_CHOICE_BAD "Choix d'algorithme invalide, remis ŕ AUTO" -#define MSG_ALG_CHOICE_QRY "Utilise l'algorithme 'Query'" -#define MSG_ALG_CURLY_BRK "Le choix de l'algorithme dépend des accolades externes" -#define MSG_ALLOC_ERROR "Erreur d'allocation de %s" -#define MSG_ALL_DELETED "Toutes les lignes enlevées en %.2lf sec" -#define MSG_ALTER_DB_ERR "Impossible de déterminer la base de données ŕ modifier" -#define MSG_AMBIG_COL_QUAL "Qualificateur ambigu %s pour la colonne %s" -#define MSG_AMBIG_CORREL "Select %s.* corrélation ambigue" -#define MSG_AMBIG_SPEC_COL "Colonne spéciale ambiguë %s" -#define MSG_ANSWER_TYPE "Réponse de type" -#define MSG_API_CONF_ERROR "Erreur SQL: API_CONFORMANCE" -#define MSG_APPL_ACCESSIBLE "Application %s accessible" -#define MSG_APPL_ACTIVE "Application %s encore active" -#define MSG_APPL_BAD_SAVE "Application %s partiellement sauvegardée" -#define MSG_APPL_CREATED "Application %s crée" -#define MSG_APPL_IS_ACTIVE "Application déjŕ active" -#define MSG_APPL_NOT_INIT "Application non initialisée" -#define MSG_APPL_NOT_LOADED "Application non chargée" -#define MSG_APPL_QUIT "Fin de l'application %s" -#define MSG_APPL_SAVED "Application %s sauvegardée" -#define MSG_APP_STILL_ACTIV "Application du langage %s encore active (non libérable)" -#define MSG_AREAFILE_NOTFND "Fichier Area introuvable" -#define MSG_ARGS_SYNTAX_ERR "?SetArgs erreur de syntaxe: %s inattendu aprčs %s" -#define MSG_ARG_ALREADY_SET "Argument %d déjŕ alloué" -#define MSG_ARG_NOT_AN_ATTR "L'argument n'est pas un attribut (type %d erroné)" -#define MSG_ARG_OUT_CONTEXT "Argument de type @ utilisé hors contexte" -#define MSG_ARG_OUT_RANGE "Argument de phrase valant %d hors limite" -#define MSG_ARG_PTR_NOSEM "Argument valant %d pointe sur un noeud sans Sem" -#define MSG_ARG_PTR_NOSEMS "Argument valant %d pointe sur un noeud sans sémantique" -#define MSG_ARG_REF_LOOP "?Bouclage entre références croisées des arguments" -#define MSG_ARG_TWO_CONST "Le 2čme argument de %s doit ętre constant" -#define MSG_ARRAY_ALLOC_ERR "Erreur d'allocation mémoire dans ARRAY" -#define MSG_ARRAY_BNDS_EXCD "Hors limite de tableau" -#define MSG_ARRAY_ERROR "Erreur de fonctionnement k=%d n=%d" -#define MSG_ATTRIBUTE_ERROR "Erreur rčgle %u attribut %s: " -#define MSG_ATT_NOT_CASE "Mauvaise valeur %d pour attribut (pas une CaseValue)" -#define MSG_ATT_POSCODE_BIG "Code attribut %d trop grand (max=%d)" -#define MSG_AVGLEN_ERROR "avglen doit ętre entre %d et %d" -#define MSG_BAD_AGGREG_FUNC "Fonction aggrégée %d non supportée" -#define MSG_BAD_ARGTYPES "Argument de type invalide pour %s" -#define MSG_BAD_ARGUMENTS "Argument not attachés pour %s" -#define MSG_BAD_ARG_NUM "Nombre d'arguments invalide %d" -#define MSG_BAD_ARG_TYPE "Type d'argument %d invalide" -#define MSG_BAD_ARRAY_OPER "Les tableaux doivent utiliser l'opérateur IN" -#define MSG_BAD_ARRAY_TYPE "Type=%d invalide pour un tableau" -#define MSG_BAD_ARRAY_VAL "Les tableaux doivent avoir le męme nombre de valeurs" -#define MSG_BAD_BIN_FMT "Format invalide %c pour la colonne BIN %s" -#define MSG_BAD_BLK_ESTIM "Nombre de blocs supérieur ŕ l'estimation" -#define MSG_BAD_BLK_SIZE "Taille du bloc %d non conforme" -#define MSG_BAD_BYTE_NUM "Le nombre d'octets écrits est faux" -#define MSG_BAD_BYTE_READ "Le nombre d'octets lus est faux" -#define MSG_BAD_CARDINALITY "Appel invalide de Cardinality pour une table multiple" -#define MSG_BAD_CASE_SPEC "Min/Maj: spécification %c incorrecte, recommencez: " -#define MSG_BAD_CHAR_SPEC "Spécification '%s' invalide pour caractčre" -#define MSG_BAD_CHECK_TYPE "Sous-type %d invalide pour CheckColumn" -#define MSG_BAD_CHECK_VAL "Valeur pour Check invalide '%s'" -#define MSG_BAD_COLCRT_ARG "COLCRT: Arg invalide (type=%hd, domain=%hd)" -#define MSG_BAD_COLDEF_TYPE "Coldefs: type illégal %d" -#define MSG_BAD_COLIST_ITEM "Elément invalide dans une Colist" -#define MSG_BAD_COLIST_TYPE "Mauvais type=%d pour une Colist" -#define MSG_BAD_COLSIZE "Colsize %d trop petit pour cette base de données" -#define MSG_BAD_COL_ENTRY "Entrée invalide pour la colonne %s" -#define MSG_BAD_COL_FORMAT "Type de formattage %d invalide pour une colonne" -#define MSG_BAD_COL_IN_FILT "Colonne incorrecte dans un filtre" -#define MSG_BAD_COL_QUALIF "Qualificateur invalide %s pour la colonne %s" -#define MSG_BAD_COL_TYPE "Type invalide %s pour la colonne %s" -#define MSG_BAD_COL_XPATH "Xpath invalide colonne %s de la table HTML %s" -#define MSG_BAD_COMPARE_OP "Opérateur de comparaison %d invalide" -#define MSG_BAD_CONST_TYPE "Type=%d invalide pour une constante" -#define MSG_BAD_CONV_TYPE "Convertion de type invalide %d" -#define MSG_BAD_CORREL "Select %s.* corrélation absente" -#define MSG_BAD_DATETIME "Valeur date/temps invalide" -#define MSG_BAD_DATE_OPER "Opérateur de date inattendu %d" -#define MSG_BAD_DBF_FILE "Le fichier DBF %s est altéré" -#define MSG_BAD_DBF_REC "Fichier DBF %s altéré enregistrement %d" -#define MSG_BAD_DBF_TYPE "Type DBF %c non supporté" -#define MSG_BAD_DEF_ARG "Argument invalide pour INDEXDEF (type=%hd, domain=%hd)" -#define MSG_BAD_DEF_READ "EOF inattendue en lecture différée" -#define MSG_BAD_DEF_TYPE "Type de colonne invalide" -#define MSG_BAD_DIRECTORY "Répertoire invalide %s: %s" -#define MSG_BAD_DIST_JN_FIL "Filtre de jointure distincte invalide" -#define MSG_BAD_DIST_JOIN "Spécification invalide de jointure distincte" -#define MSG_BAD_DOM_COL_DEF "Définition de colonnes invalide pour un domaine" -#define MSG_BAD_DOM_VALUE "La valeur %d n'appartient pas au domaine" -#define MSG_BAD_EDIT_INIT "Coparm: édition %s initialisée improprement" -#define MSG_BAD_EVAL_TYPE "Fonction scalaire de type=%d invalide" -#define MSG_BAD_EXEC_MODE "Mode d'exécution invalide '%s'" -#define MSG_BAD_EXP_ARGTYPE "Argument de type %d invalide pour une expression" -#define MSG_BAD_EXP_OPER "Opérateur=%d invalide pour expression" -#define MSG_BAD_FETCH_RC "Code retour inattendu de Fetch %d" -#define MSG_BAD_FIELD_FMT "Format de champ invalide %c pour %s" -#define MSG_BAD_FIELD_RANK "Rang %d invalide pour la colonne %s" -#define MSG_BAD_FIELD_TYPE "Mauvais type de champ %s" -#define MSG_BAD_FILE_HANDLE "Handle de fichier invalide: %s" -#define MSG_BAD_FILE_LIST "La section liste de fichiers est erronée" -#define MSG_BAD_FILTER "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d" -#define MSG_BAD_FILTER_CONV "Conversion filtre incorrecte, B_T=%d,%d" -#define MSG_BAD_FILTER_LINK "Opérateur de chaînage illégal %d" -#define MSG_BAD_FILTER_OP "Opérateur de filtre invalide %d" -#define MSG_BAD_FILTEST_OP "Opérateur invalide %d %d pour FilTest" -#define MSG_BAD_FLD_FORMAT "Format invalide pour le champs %d de %s" -#define MSG_BAD_FLD_LENGTH "Champs %s trop long (%s --> %d) ligne %d de %s" -#define MSG_BAD_FLOAT_CONV "Convertion invalide d'un tableau flottant" -#define MSG_BAD_FPARM_NEXT "Coparm: FPARM avec Next non nul" -#define MSG_BAD_FREQ_SET "Spécification erronnée de Freq pour la colonne %s" -#define MSG_BAD_FUNC_ARG "Funcarg de type %d non implémenté" -#define MSG_BAD_FUNC_ARGTYP "Mauvais type d'argument=%d pour une fonction" -#define MSG_BAD_FUNC_MODE "%s: mode invalide %d" -#define MSG_BAD_GENRE "Genre est invalide" -#define MSG_BAD_GETVIEW_RET "GetView: type de retour %d invalide" -#define MSG_BAD_HANDLE_VAL "Valeur Handle invalide" -#define MSG_BAD_HAV_FILTER "Filtre Having sur une requęte non groupée" -#define MSG_BAD_HAV_FILTYPE "Filtre invalide pour clause Having" -#define MSG_BAD_HEADER "Fichier %s: bloc en-tęte altéré" -#define MSG_BAD_HEADER_VAL "Valeur invalide pour Header" -#define MSG_BAD_HEAD_END "Lecture fin d'en-tęte impossible" -#define MSG_BAD_INDEX_COL "Colonne %s invalide pour index %s" -#define MSG_BAD_INDEX_DEF "Définition invalide pour index %s" -#define MSG_BAD_INDEX_FILE "Fichier index %s corrompu" -#define MSG_BAD_INDEX_PART "Définition colonne invalide pour index %s" -#define MSG_BAD_INPUT "Entrée incorrecte" -#define MSG_BAD_IN_ARGTYPE "Argument de type invalide pour l'opérateur IN" -#define MSG_BAD_IN_ENDING "Erreur: fin de chaîne IN invalide" -#define MSG_BAD_IN_STRING "La chaîne IN commence ou finie par des caractčres invalides %c ... %c" -#define MSG_BAD_JCOL_TYPE "Erreur logique JCT: disparité des types colonnes" -#define MSG_BAD_JOIN_EXP "Expression invalide pour une jointure" -#define MSG_BAD_JOIN_FILTER "Filtre de jointure invalide" -#define MSG_BAD_JOIN_OP "Opérateur de joint invalide %d" -#define MSG_BAD_LANG_SIZE "Le fichier langage a une mauvaise taille %d" -#define MSG_BAD_LINEFLD_FMT "Format invalide ligne %d champs %d de %s" -#define MSG_BAD_LINE_LEN "Longueur ligne non égale ŕ Lrecl" -#define MSG_BAD_LIST_TYPE "Type de liste invalide %d" -#define MSG_BAD_LOCALE "Locale invalide %s" -#define MSG_BAD_LOCDFON_ARG "Mauvais paramčtre pour LOCDFON" -#define MSG_BAD_LOCNODE_USE "Usage inattendu de LOCNODE" -#define MSG_BAD_LRECL "Disparité lrecl table/fichier (%d,%hd)" -#define MSG_BAD_MAX_HAVING "MAXTMP trop petit pour Having" -#define MSG_BAD_MAX_NREC "MaxRec=%d ne correspond pas ŕ MaxBlk=%d Nrec=%d" -#define MSG_BAD_MAX_PARAM "Mauvais paramčtres pour spécifier une valeur maximum" -#define MSG_BAD_MAX_SETTING "Mauvaise valeur '%c' pour max" -#define MSG_BAD_MERGE_TYPE "Le type %d ne pas ętre intercallé" -#define MSG_BAD_NODE_TYPE "Type noeud erroné pour la table" -#define MSG_BAD_OFFSET_VAL "Nul offset invalide pour une table CSV" -#define MSG_BAD_OPEN_MODE "Mode d'ouverture invalide %d" -#define MSG_BAD_OPERATOR "Opérateur invalide %s" -#define MSG_BAD_ORDER_MODE "Mode de tri %c invalide" -#define MSG_BAD_ORDER_TYPE "Tri sur objet de type=%d invalide" -#define MSG_BAD_OUTER_JOIN "Jointure externe invalide sur table enfant" -#define MSG_BAD_PAD_ARGTYP "Argument de type invalide pour Pad ou Justify" -#define MSG_BAD_PARAMETERS "%.8s: Mauvais paramčtres" -#define MSG_BAD_PARAM_TYPE "%.8s: Paramčtre de type=%d invalide" -#define MSG_BAD_PARM_COUNT "Nombre de paramčtres incohérent" -#define MSG_BAD_PHASE_NUM "Numéro de phrase %d hors limite" -#define MSG_BAD_PHRASE_NB "numéro de phrase hors limite %d rc=%d\n" -#define MSG_BAD_POS_CODE "POS_code invalide %d" -#define MSG_BAD_POS_TYPE "Type de POS_code invalide %d" -#define MSG_BAD_PROJNUM "Mauvais projnum %d pour la colonne %s" -#define MSG_BAD_QUERY_OPEN "Mode invalide %d pour l'ouverture d'une requęte" -#define MSG_BAD_QUERY_TYPE "Type de requęte %d invalide pour %s" -#define MSG_BAD_QUOTE_FIELD "Quote manquante dans %s champs %d ligne %d" -#define MSG_BAD_READ_NUMBER "Mauvais nombre %d de valeurs lues dans %s" -#define MSG_BAD_RECFM "Recfm type %d invalide pour DOSCOL" -#define MSG_BAD_RECFM_VAL "Valeur invalide %d de Recfm" -#define MSG_BAD_RESULT_TYPE "Mauvais type de résultat %d pour %s" -#define MSG_BAD_RETURN_TYPE "Type de retour %d incorrect" -#define MSG_BAD_ROW_VALIST "Liste de valeurs invalide pour ROW" -#define MSG_BAD_ROW_VALNB "Nombre de valeurs inégal dans la liste" -#define MSG_BAD_SCF_ARGTYPE "Argument %d de type=%s invalide pour %s" -#define MSG_BAD_SEM_DOMAIN "Domain .%d invalide" -#define MSG_BAD_SETTINGS "Certaines spécifications sont incompatibles avec le type de la table" -#define MSG_BAD_SET_CASE "La casse d'un tableau ne peut pas passer de non respect ŕ respecter" -#define MSG_BAD_SET_STRING "SetValue: appel invalide pour STRING" -#define MSG_BAD_SET_TYPE "Set type %hd invalide" -#define MSG_BAD_SPECIAL_CMD "Commande spéciale invalide" -#define MSG_BAD_SPECIAL_COL "Colonne spéciale invalide %s" -#define MSG_BAD_SPEC_COLUMN "Colonne spéciale invalide pour ce type de table" -#define MSG_BAD_SQL_PARAM "Paramčtre SQL invalide pour FindColblk" -#define MSG_BAD_SUBLST_TYPE "Coparm: type %d de sous-liste invalide" -#define MSG_BAD_SUBSEL_IN_X "Sub-select invalide pour une expression" -#define MSG_BAD_SUBSEL_TYPE "Type %d invalide retourné de Sub-Select" -#define MSG_BAD_SUB_RESULT "Résultat indéfini de fonction Sub-Select" -#define MSG_BAD_SUB_SELECT "Sub-select invalide comme argument de fonction" -#define MSG_BAD_TABLE_LINE "Ligne '%s' illégale ou tronquée dans la section Tables" -#define MSG_BAD_TABLE_LIST "Table %s absente de la liste des tables" -#define MSG_BAD_TABLE_TYPE "Type invalide %s pour la table %s" -#define MSG_BAD_TEST_TYPE "BlockTest sur tableau: types dépareillés %s %s" -#define MSG_BAD_TRIM_ARGTYP "Argument de type invalide pour Trim" -#define MSG_BAD_TYPE_FOR_IN "Types d'argument incompatibles pour la fonction IN" -#define MSG_BAD_TYPE_FOR_S "Type incorrecte %d pour %s(%d)" -#define MSG_BAD_TYPE_LIKE "Type(%d)= %d invalide pour LIKE" -#define MSG_BAD_UPD_COR "Le qualificateur %s de la colonne %s ne se refčre pas ŕ la table mise ŕ jour %s" -#define MSG_BAD_USERBLK_LEN "Mauvaise longueur ŕ l'écriture du bloc utilisateur" -#define MSG_BAD_USETEMP "Usetemp invalide '%s'" -#define MSG_BAD_USETEMP_VAL "Valeur pour Usetemp invalide %d" -#define MSG_BAD_VALBLK_INDX "Valeur hors limites de l'index du bloc de valeurs" -#define MSG_BAD_VALBLK_TYPE "Type=%d invalide pour un bloc de valeurs" -#define MSG_BAD_VALNODE "Type %d invalide pour le noeud valeur colonne %s" -#define MSG_BAD_VALUE_TYPE "Type de valeur invalide %d" -#define MSG_BAD_VAL_UPDATE "Impossible de déterminer quelle valeur %s doit ętre mise ŕ jour" -#define MSG_BAD_VIEW_OPEN "Mode invalide %d pour l'ouverture d'une View" -#define MSG_BAD_XMODE_VAL "Mode d'exécution %d invalide" -#define MSG_BAD_XOBJ_TYPE "Mauvais type de Xobject %d" -#define MSG_BAS_NS_LIST "Format invalide de la liste des espace-noms" -#define MSG_BIN_F_TOO_LONG "Valeur trop longue pour le champ %s (%d --> %d)" -#define MSG_BIN_MODE_FAIL "Echec mode binaire: %s" -#define MSG_BLKTYPLEN_MISM "Disparité types/longueurs de bloc dans SetValue" -#define MSG_BLK_IS_NULL "Blk est nul" -#define MSG_BLOCK_NO_MATCH "Bloc non correspondant" -#define MSG_BREAKPOINT "Point de contrôle" -#define MSG_BUFF_TOO_SMALL "GetColData: Buffer trop petit" -#define MSG_BUFSIZE_ERROR "Erreur en recherchant la taille du buffer" -#define MSG_BUILDING_GROUPS "Formation des groupes" -#define MSG_BUILD_DIST_GRPS "Formation des groupes distinctes" -#define MSG_BUILD_INDEX "Construction index %s sur %s" -#define MSG_BXP_NULL "Bxp nul dans PUTFON" -#define MSG_CANNOT_OPEN "Ouverture impossible de %s" -#define MSG_CD_ONE_STEP "Count Distinct doit ętre exécuté en une seule étape" -#define MSG_CD_ORDER_ERROR "Erreur de tri dans Count Distinct" -#define MSG_CHECKING_ROWS "Test des lignes ŕ mettre ŕ jour" -#define MSG_CHECK_LEVEL "Niveau de vérification fixé ŕ %u" -#define MSG_CHSIZE_ERROR "Erreur dans chsize: %s" -#define MSG_CLN_NOT_IN_JOIN "La colonne C%d n'est pas dans le join" -#define MSG_CNTDIS_COL_LOST "Colonne du Count Distinct perdue" -#define MSG_COLIST_BAD_TYPE "Type=%d invalide pour Colist" -#define MSG_COLNAM_TOO_LONG "Nom de colonne trop long" -#define MSG_COLSEC_TOO_BIG "Section colonne trop grande, table %s (%d)" -#define MSG_COLS_REDUCED " (réduit par Maxcol)" -#define MSG_COLUMN_ERROR "Erreur de colonne" -#define MSG_COLUMN_MISMATCH "Colonne %s dépareillée" -#define MSG_COLUMN_NOT_KEY "La colonne jointe R%d.%s n'est pas une clé" -#define MSG_COL_ALLOC_ERR "Allocation impossible du noeud colonne" -#define MSG_COL_ALLOC_ERROR "Erreur d'allocation mémoire pour la colonne %d" -#define MSG_COL_HAS_NO_DEF "La colonne %s n'est pas définie" -#define MSG_COL_INVAL_TABLE "La colonne %s.%s n'existe pas dans la table %s alias %s" -#define MSG_COL_ISNOT_TABLE "La colonne %s n'est pas dans la table %s" -#define MSG_COL_NB_MISM "Le nombre de colonnes ne correspond pas" -#define MSG_COL_NOTIN_GRPBY "La colonne %s n'est pas dans la liste de Group By" -#define MSG_COL_NOTIN_TABLE "La colonne %s n'est dans aucune table" -#define MSG_COL_NOTIN_UPDT "%s n'appartient pas ŕ la table mise ŕ jour %s" -#define MSG_COL_NOT_CODED "La colonne %s n'est pas codifiée" -#define MSG_COL_NOT_EXIST "La colonne %s n'existe pas dans %s" -#define MSG_COL_NOT_FOUND "La colonne %s n'est pas dans la table %s" -#define MSG_COL_NOT_IN_DB "La colonne %s de la table %s n'est pas dans la base de données" -#define MSG_COL_NOT_IN_JOIN "La colonne %s n'est pas dans le join" -#define MSG_COL_NOT_SORTED "La colonne %s de la table %s n'est pas triée" -#define MSG_COL_NUM_MISM "Disparité du nombre de colonnes" -#define MSG_COL_USED_TWICE "Colonne %s utilisée deux fois ???" -#define MSG_COMPUTE_ERROR "Erreur dans Compute, op=%d" -#define MSG_COMPUTE_NIY "Compute non implémenté pour TOKEN" -#define MSG_COMPUTING "Calculs en cours" -#define MSG_COMPUTING_DIST "Comptage des valeurs distinctes" -#define MSG_COMPUTING_FUNC "Calcul de(s) fonction(s)" -#define MSG_COM_ERROR "Erreur Com" -#define MSG_CONCAT_SUBNODE "Concaténation de sous-noeuds impossible" -#define MSG_CONNECTED "Connecté" -#define MSG_CONNECT_CANCEL "Connection interrompue par l'utilisateur" -#define MSG_CONNECT_ERROR "Erreur %d se connectant ŕ %s" -#define MSG_CONN_CLOSED "%s(%d) fermée" -#define MSG_CONN_CREATED "Connexion %s crée" -#define MSG_CONN_DROPPED "Connexion %s supprimée" -#define MSG_CONN_OPEN "%s(%d) ouverte (%s)" -#define MSG_CONN_SUC_OPEN "%s(%d) ouverte avec succčs" -#define MSG_CONTROL_C_EXIT "Exit par Ctrl-C" -#define MSG_COPY_BAD_PHASE "Copie de liste invalide en phase %d" -#define MSG_COPY_INV_TYPE "Coparm: type non supporté %d" -#define MSG_CORREL_NO_QRY "Les sous-requętes corrélées ne peuvent pas ętre de type QRY" -#define MSG_CREATED_PLUGDB " Créé par PlugDB %s " -#define MSG_CURSOR_SET "Curseur remis ŕ %d" -#define MSG_DATABASE_ACTIVE "Base de données %s activée" -#define MSG_DATABASE_LOADED "Base de données %s chargée" -#define MSG_DATA_IS_NULL "ExecSpecialCmd: data est NULL" -#define MSG_DATA_MISALIGN "Mauvais alignement pour ce type de données" -#define MSG_DBASE_FILE "Fichier dBASE dbf: " -#define MSG_DB_ALREADY_DEF "Base de données %s déjŕ définie" -#define MSG_DB_ALTERED "Base de données modifiée" -#define MSG_DB_CREATED "Base de données %s créée" -#define MSG_DB_NOT_SPEC "Base de données non spécifiée" -#define MSG_DB_REMOVED "Base de données %s retirée de la liste" -#define MSG_DB_SORT_ERROR "Erreur de tri DB" -#define MSG_DB_STOPPED "Arręt de la base de données %s" -#define MSG_DEBUG_NOT_ACTIV "Mode Debug inactif" -#define MSG_DEBUG_SET_INV "Invalide pour Debug: %c" -#define MSG_DEF_ALLOC_ERROR "Erreur d'allocation de la classe DEF %s" -#define MSG_DELETING_ROWS "Suppression des lignes" -#define MSG_DEL_FILE_ERR "Erreur ŕ l'effacement de %s" -#define MSG_DEL_READ_ERROR "Delete: erreur en lecture req=%d len=%d" -#define MSG_DEL_WRITE_ERROR "Delete: erreur en écriture: %s" -#define MSG_DEPREC_FLAG "Option Flag périmée, utiliser Coltype" -#define MSG_DICTIONARY "Dictionnaire " -#define MSG_DIRECT_VARTOK "Accčs direct aux rčgles du Variable Token non implémenté" -#define MSG_DISCONNECTED "Déconnecté" -#define MSG_DISTINCT_ERROR "Plus d'un élément fonctionel DISTINCT" -#define MSG_DISTINCT_ROWS "Sélection des lignes distinctes" -#define MSG_DISTINCT_VALUES "Extraction des valeurs distinctes" -#define MSG_DIS_NOHEAD_JOIN "Jointure distincte sur une table non en tęte" -#define MSG_DLL_LOAD_ERROR "Erreur %d au chargement du module %s" -#define MSG_DOMAIN_EMPTY "Le domaine %s est vide" -#define MSG_DOMAIN_ERROR "Colonne %s: disparité domaine(%s)/valeur(%s)" -#define MSG_DOMAIN_FULL "Le domaine %s est plein (max=%d)" -#define MSG_DOM_FILE_ERROR "Fichier domain %s introuvable" -#define MSG_DOM_NOT_SUPP "MS-DOM non supporté par cette version" -#define MSG_DOM_OPEN_ERROR "Erreur d'ouverture du domaine: %s" -#define MSG_DOM_READ_ERROR "Erreur %d en lecture de domaine: %s" -#define MSG_DOM_READ_ONLY "La table domaine %s est en lecture seulement" -#define MSG_DOM_WRITE_ERROR "Erreur %d en écriture de domaine: %s" -#define MSG_DONE "Effectué, rc=%d" -#define MSG_DOSALMEM_NOMEM "Erreur d'allocation, pas assez de mémoire" -#define MSG_DROP_DB_ERR "Echec du Drop sur le base de données %s" -#define MSG_DSORT_LOG_ERROR "Kindex: Erreur logique de tri distincte" -#define MSG_DUMMY_NO_COLS "Les tables DUMMY ne peuvent pas avoir de colonne" -#define MSG_DUPLICAT_COUNT "Count sur plus d'une colonne" -#define MSG_DUP_COL_NAME "La colonne %s existe en double" -#define MSG_DUP_PROJNUM "Non unique projnum %d pour la colonne %s" -#define MSG_DVAL_NOTIN_LIST "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s" -#define MSG_EMPTY_DOC "Document vide" -#define MSG_EMPTY_FILE "%s du fichier vide %s: " -#define MSG_ENDSTR_MISMATCH "Fins de chaîne et de noeud ne correspondent pas" -#define MSG_END_OF_DELETE "%d ligne(s) enlevée(s) en %.2lf sec" -#define MSG_END_OF_INSERT "%d ligne(s) insérée(s) en %.2lf sec" -#define MSG_END_OF_QUERY "%d ligne(s) extraite(s) en %.2lf sec" -#define MSG_END_OF_UPDATE "%d ligne(s) modifiée(s) en %.2lf sec" -#define MSG_EOF_AFTER_LINE "Fin de fichier aprčs la ligne %d" -#define MSG_EOF_INDEX_FILE "EOF lisant le fichier index" -#define MSG_ERASED " et effacée" -#define MSG_ERASE_FAILED " (échec de l'effacement)" -#define MSG_ERROR "Erreur" -#define MSG_ERROR_IN_LSK "Erreur %d dans lseek64" -#define MSG_ERROR_IN_SFP "Erreur %d dans SetFilePointer" -#define MSG_ERROR_NO_PARM "Paramčtre absent (valide seulement pour %.8s.1 et %.8s.5)" -#define MSG_ERROR_OPENING "Erreur ŕ l'ouverture de : " -#define MSG_ERR_NUM_GT_MAX "Erreur: Numval (%d) plus grand que Maxnum (%d)" -#define MSG_ERR_READING_REC "Erreur lisant l'enregistrement %d de %s" -#define MSG_ERR_RET_RULE "Retour erreur, rčgle=%u" -#define MSG_ERR_RET_TYPE "Retour erreur, type=%d" -#define MSG_EVAL_EXPIRED "Cette version d'évaluation est expirée" -#define MSG_EVAL_ONLY "L'utilisation de cette Dll est pour évaluation seulement" -#define MSG_EXECUTING "Exécution" -#define MSG_EXECUTION_ERROR "Erreur d'exécution" -#define MSG_EXEC_MODE_IS "Le mode d'exécution est %s" -#define MSG_EXEC_MODE_RESET ". Mode remis ŕ Execute" -#define MSG_EXEC_MODE_SET "Mode d'exécution fixé ŕ %s" -#define MSG_EXIT_EVAL_ERR "Erreur pendant l'évaluation de Exit" -#define MSG_EXIT_FROM_LANG "Fin du langage %s version %d.%d" -#define MSG_FAIL_ADD_NODE "L'ajout du noeud %s dans la table a échoué" -#define MSG_FETCHING_DATA "Recherche des données" -#define MSG_FETCHING_ROWS "Recherche des lignes" -#define MSG_FETCH_NO_RES "Fetch: Pas de Résultats" -#define MSG_FIELD_TOO_LONG "Valeur trop longue pour le champs %d ligne %d" -#define MSG_FILELEN_ERROR "Erreur dans %s pour %s" -#define MSG_FILE_CLOSE_ERR "Erreur %d ŕ la fermeture du fichier" -#define MSG_FILE_IS_EMPTY "Le fichier %s est vide" -#define MSG_FILE_MAP_ERR "Erreur de File mapping" -#define MSG_FILE_MAP_ERROR "CreateFileMapping %s erreur rc=%d" -#define MSG_FILE_NOT_FOUND "Fichier %s introuvable" -#define MSG_FILE_OPEN_YET "Fichier %s déjŕ ouvert" -#define MSG_FILE_UNFOUND "Fichier %s non trouvé" -#define MSG_FILGRP_NO_TABLE "Table %d manquante pour groupe filtre" -#define MSG_FILTER_ATTACH "Filtre passé ŕ Attach" -#define MSG_FILTER_NO_TABLE "Filtre: premičre table manquante" -#define MSG_FIND_BAD_TYPE "Recherche dans un tableau: type non conforme %s %s" -#define MSG_FIX_OVFLW_ADD "Dépassement de capacité en addition" -#define MSG_FIX_OVFLW_TIMES "Dépassement de capacité en mutiplication" -#define MSG_FIX_UNFLW_ADD "Sous dépassement de capacité en addition" -#define MSG_FIX_UNFLW_TIMES "Sous dépassement de capacité en multiplication" -#define MSG_FLD_TOO_LNG_FOR "Champs %d trop long pour %s ligne %d de %s" -#define MSG_FLTST_NO_CORREL "FilTest ne devrait ętre appelé que pour les sous-requętes corrélées" -#define MSG_FLT_BAD_RESULT "Virgule flottante: résultat inexacte" -#define MSG_FLT_DENORMAL_OP "Opérande virgule flottante non normalisé" -#define MSG_FLT_INVALID_OP "Opération virgule flottante invalide" -#define MSG_FLT_OVERFLOW "Dépassement de capacité virgule flottante" -#define MSG_FLT_STACK_CHECK "Virgule flottante: Erreur de la pile" -#define MSG_FLT_UNDERFLOW "Sous-dépassement de capacité virgule flottante" -#define MSG_FLT_ZERO_DIVIDE "Virgule flottante: division par zéro" -#define MSG_FMT_WRITE_NIY "L'écriture des fichiers %s n'est pas encore implémentée" -#define MSG_FNC_NOTIN_SLIST "Fonction de tri absente de la liste de sélection" -#define MSG_FORMAT_ERROR "Erreur de formattage" -#define MSG_FOXPRO_FILE "Fichier FoxPro: " -#define MSG_FPUTS_ERROR "Erreur dans fputs: %s" -#define MSG_FSBPARP_NULL "PUTFON: fsbparp est nul" -#define MSG_FSEEK_ERROR "Erreur dans fseek: %s" -#define MSG_FSETPOS_ERROR "Erreur dans fseek pour i=%d" -#define MSG_FTELL_ERROR "Erreur dans ftell enregistrement=%d: %s" -#define MSG_FUNCTION_ERROR "Erreur dans %s: %d" -#define MSG_FUNC_ERRNO "Erreur %d dans %s" -#define MSG_FUNC_ERROR "Erreur dans %s" -#define MSG_FUNC_ERR_S "Erreur dans %s: %s" -#define MSG_FUNC_REF_DEL "Référence ŕ une fonction définie (rčgle %d) qui a été supprimée" -#define MSG_FWRITE_ERROR "Erreur dans fwrite: %s" -#define MSG_GETCWD_ERR_NO "?getcwd %s errno=%d" -#define MSG_GETFILESIZE_ERR "Erreur %d dans GetFileSize" -#define MSG_GET_DIST_VALS "Récupération des valeurs distinctes de " -#define MSG_GET_ERROR "Erreur dans %s (colonne %d)" -#define MSG_GET_FUNC_ERR "Erreur en recherche de la fonction %s: %s" -#define MSG_GET_NAME_ERR "Erreur en retrouvant le nom d'une table SYS" -#define MSG_GLOBAL_ERROR "Erreur d'allocation de Global (taille=%d)\n" -#define MSG_GRAM_ALLOC_ERR "Erreur d'allocation dans Grammar Up" -#define MSG_GRAM_MISMATCH "Avertissement: version de GRAMMAR perimée (sauvé sous GRAMMAR v%u)" -#define MSG_GRAM_SUBSET_ERR "Erreur d'initialisation du dictionnaire de la grammaire" -#define MSG_GRBY_TAB_NOTIMP "Group by avec tables jointes non implémenté" -#define MSG_GROUPBY_NOT_ALL "Group By doit inclure toutes les sélections non-fonctionnelles" -#define MSG_GROUP_ON_FUNC "Group by invalide sur colonne fonctionnelle" -#define MSG_GRP_COL_MISM "Disparité colonne des groupes" -#define MSG_GRP_LIST_MISMAT "Le groupement ne couvre pas la liste de sélection" -#define MSG_GUARD_PAGE "Violation de page de garde" -#define MSG_GZOPEN_ERROR "gzopen %s: erreur %d sur %s" -#define MSG_GZPUTS_ERROR "Erreur dans gzputs: %s" -#define MSG_HANDLE_IS_NULL "%s est NULL: erreur code: %d" -#define MSG_HARRY_COMP_NIY "Compute non implémenté pour les chaînes codées" -#define MSG_HAVING_FILTER "Traitement du Filtre Having" -#define MSG_HBUF_TOO_SMALL "Buffer(%d) trop petit pour entęte(%d)" -#define MSG_HEAD_OPEN_ERROR "Erreur ŕ l'ouverture du fichier header" -#define MSG_HEAD_READ_ERROR "Erreur en lecture du fichier header %s" -#define MSG_HEAD_WRITE_ERR "Erreur en écriture du fichier header" -#define MSG_HI_OFFSET_ERR "Offset supérieur non nul" -#define MSG_HUGE_DEFAULT "Huge est %d par défault" -#define MSG_HUGE_WARNING_1 "Mémoire Huge non compatible 16-bit pour %d\n" -#define MSG_HUGE_WARNING_2 "Résultats imprévisibles possibles\n" -#define MSG_IDLE "Au repos" -#define MSG_ILLEGAL_INSTR "Instruction illégale" -#define MSG_ILL_FILTER_CONV "Conversion implicite illégale dans un filtre" -#define MSG_INDEX_CREATED "Index %s créé sur %s" -#define MSG_INDEX_DEF_ERR "Erreur sauvegardant l'index définition pour %s" -#define MSG_INDEX_DROPPED "Index %s supprimé de %s" -#define MSG_INDEX_INIT_ERR "Echec de l'initialisation de l'index %s" -#define MSG_INDEX_NOT_DEF "Index %s non défini" -#define MSG_INDEX_NOT_UNIQ "L'index n'est pas Unique" -#define MSG_INDEX_ONE_SAVE "Les index sont sauvegardés dans un fichier unique" -#define MSG_INDEX_SEP_SAVE "Les index sont sauvegardés dans des fichiers séparés" -#define MSG_INDEX_YET_ON "L'index %s existe déjŕ sur %s" -#define MSG_INDX_ALL_DROP "Tous les index de %s supprimés" -#define MSG_INDX_COL_NOTIN "La colonne index %s n'existe pas dans la table %s" -#define MSG_INDX_EXIST_YET "L'entrée index existe déjŕ" -#define MSG_INIT_ERROR "Erreur ŕ l'initialisation de %s" -#define MSG_INIT_FAILED "L'initialisation de %s a échoué" -#define MSG_INPUT "Entrée: " -#define MSG_INPUT_KEYBD_YET "L'entrée est déjŕ au clavier" -#define MSG_INSERTING "Insertion: " -#define MSG_INSERT_ERROR "Insert erreur: usage multiple du fichier %s" -#define MSG_INSERT_MISMATCH "Les listes colonne et valeur ne correspondent pas" -#define MSG_INTERNAL "interne" -#define MSG_INT_COL_ERROR "Erreur interne sur la colonne index %s" -#define MSG_INT_OVERFLOW "Dépassement de capacité sur entier" -#define MSG_INT_ZERO_DIVIDE "Division entičre par zéro" -#define MSG_INVALID_BIP "Bip invalide .%d" -#define MSG_INVALID_DISP "Disposition invalide" -#define MSG_INVALID_FTYPE "SBV: Ftype %d invalide" -#define MSG_INVALID_HANDLE "Poignée invalide" -#define MSG_INVALID_OPER "Opérateur invalide %d pour %s" -#define MSG_INVALID_OPTION "Option invalide %s" -#define MSG_INV_COLUMN_TYPE "Type %d Invalide pour la colonne %s" -#define MSG_INV_COL_DATATYP "Type de données %d invalide pour la colonne %d" -#define MSG_INV_COL_NUM "Colonne invalide %d" -#define MSG_INV_COL_TYPE "Type de colonne %s invalide" -#define MSG_INV_CONC_BIP "Bip invalide (seuls valides: %.8s.0 .1 and .5)" -#define MSG_INV_DATA_PATH "Chemin vers les données invalide" -#define MSG_INV_DEF_READ "Lecture différée invalide rc=%d" -#define MSG_INV_DIRCOL_OFST "Offset invalide pour une colonne DIR" -#define MSG_INV_DOMAIN_TYPE "Type invalide %d" -#define MSG_INV_FILTER "Filtre résiduel dans %s" -#define MSG_INV_FNC_BUFTYPE "FNC: Type %d de l'argument invalide pour %s" -#define MSG_INV_INFO_TYPE "Type d'info catalog invalide %d" -#define MSG_INV_INIPATH "Inipath invalide " -#define MSG_INV_MAP_POS "Position mémoire invalide" -#define MSG_INV_OPERATOR "opérateur invalide %d\n" -#define MSG_INV_PARAMETER "Paramčtre invalide %s" -#define MSG_INV_PARM_TYPE "Type de paramčtre invalide" -#define MSG_INV_QUALIFIER "Qalificateur '%s' invalide" -#define MSG_INV_QUERY_TYPE "Type de requęte %d invalide" -#define MSG_INV_RAND_ACC "L'accčs aléatoire d'une table non optimisée est impossible" -#define MSG_INV_REC_POS "Position d'enregistrement invalide" -#define MSG_INV_RESULT_TYPE "Type de résultat invalide %s" -#define MSG_INV_SET_SUBTYPE "Type de formattage %d invalide" -#define MSG_INV_SPECIAL_CMD "%s: Commande spéciale invalide" -#define MSG_INV_SUBTYPE "Sous type invalide %s" -#define MSG_INV_TOK_DOMAIN "Le domaine %s n'existe pas" -#define MSG_INV_TOPSEM_CMD "Commande TopSem invalide %c" -#define MSG_INV_TRANSF_USE "Usage invalide en rčgle transformationnelle" -#define MSG_INV_TYPE_SPEC "Spécification de type invalide (%.8s.%d)" -#define MSG_INV_UPDT_TABLE "Table %s invalide pour Update" -#define MSG_INV_VALUE_LIST "Liste de valeurs invalide pour Insert" -#define MSG_INV_WHERE_JOIN "Clause Where invalide dans une requęte de jointure" -#define MSG_INV_WORK_PATH "Chemin de travail invalide" -#define MSG_IN_ARGTYPE_MISM "Arguments de types incompatibles pour une expression IN" -#define MSG_IN_USE " et en activité" -#define MSG_IN_WITHOUT_SUB "IN ou EXISTS sans tableau ou subquery" -#define MSG_IS_NOT_CONN "%s n'est pas une connexion définie" -#define MSG_JCT_MISS_COLS "Colonnes manquantes pour une table JCT" -#define MSG_JCT_MISS_TABLE "Table jointe manquante pour JCT" -#define MSG_JCT_NO_FILTER "Filtrage impossible des tables virtuelles JCT" -#define MSG_JCT_NO_KEY "Erreur logique JCT: clé manquante" -#define MSG_JOIN_KEY_NO_COL "La clé de jointure n'est pas une colonne" -#define MSG_KEY_ALLOC_ERR "Erreur d'allocation d'un bloc offset clé" -#define MSG_KEY_ALLOC_ERROR "Erreur d'allocation mémoire, Klen=%d n=%d" -#define MSG_LANGUAGE_QUIT "%s libéré" -#define MSG_LANG_ACTIVE "Langage %s actif" -#define MSG_LANG_ALLOC_FAIL "PlugInitLang: Erreur d'allocation du bloc Lang" -#define MSG_LANG_ALREADY_UP "Langage déjŕ en édition" -#define MSG_LANG_BAD_SAVE "Langage %s peut-ętre incorrectement sauvegardé" -#define MSG_LANG_NOT_FREED "Langage %s non libérable (pas dans la chaîne principale)" -#define MSG_LANG_SAVED "Langage %s sauvegardé" -#define MSG_LANG_WR_LEN_ERR "Erreur de longueur ŕ l'écriture du bloc Lang" -#define MSG_LDF_ALLOC_ERROR "Erreur d'allocation d'un LdfBlock" -#define MSG_LDF_RN_MISMATCH "LDF: décalage des numéros de rčgle" -#define MSG_LDF_WLEN_ERROR "Erreur de longueur en écrivant LdfData" -#define MSG_LDF_W_LEN_ERROR "Erreur de longueur pour LdfData en écriture" -#define MSG_LIC_NO_MYSQL "Votre licence actuelle ne permet pas l'utilisation du type MYSQL" -#define MSG_LINEAR_ERROR "Erreur de linéarisation" -#define MSG_LINE_LENGTH "Largeur d'impression fixée ŕ %d" -#define MSG_LINE_MAXLIN "Nombre de lignes de travail plafonné ŕ %d" -#define MSG_LINE_MAXRES "Nombre de lignes de résultat plafonné ŕ %d" -#define MSG_LINE_MAXTMP "Nombre de lignes intermédiaires plafonné ŕ %d" -#define MSG_LINE_TOO_LONG "La nouvelle ligne est trop longue" -#define MSG_LINJOINDB_ERROR "Erreur systčme: appel incorrecte ŕ LinJoinDB" -#define MSG_LIST "--Liste--" -#define MSG_LNG_NOT_IN_LIST "Le langage %s n'est pas dans la liste" -#define MSG_LOADING_DB "Chargement description de la BD" -#define MSG_LOADING_FAILED "Le chargement de %s a échoué" -#define MSG_LOAD_CDLL_ERROR "Erreur au chargement de ConnDll: rc=%d" -#define MSG_LOCSTRG_TOO_BIG "LOCSTRG: n trop grand ? (%d)\n" -#define MSG_LOGICAL_ERROR "%s: Erreur logique" -#define MSG_LRECL_TOO_SMALL "Lrecl trop petit (longueur en-tęte = %d)" -#define MSG_MAC_NO_DELETE "Pas de suppression de lignes pour les tables MAC" -#define MSG_MAC_NO_INDEX "Pas d'accčs direct aux tables MAC" -#define MSG_MAC_READ_ONLY "Les tables MAC sont en lecture seulement" -#define MSG_MAC_WIN_ONLY "Les tables MAC sont seulement sous Windows" -#define MSG_MAKE_EMPTY_FILE "Génération du fichier vide %s: %s" -#define MSG_MAKING "Génération" -#define MSG_MAKING_DISTINCT "Regroupement des valeures distinctes" -#define MSG_MALLOC_ERROR "Allocation mémoire impossible par %s" -#define MSG_MALLOC_NULL "malloc retourne Null" -#define MSG_MAP_NO_MORE "Le type %s n'est plus supporté" -#define MSG_MAP_OBJ_ERR "Erreur %d ŕ la fermeture du map objet" -#define MSG_MAP_VEC_ONLY "MAP Insert permis seulement pour les tables VEC Estimate" -#define MSG_MAP_VIEW_ERROR "MapViewOfFile %s erreur rc=%d" -#define MSG_MAXSIZE_ERROR "Maxsize incalculable sur table ouverte" -#define MSG_MAXTMP_TRUNCATE "Résultats intermédiaires tronqués par maxtmp=%d" -#define MSG_MAX_BITMAP "Taille maxi des bitmaps d'optimisation fixée ŕ %d" -#define MSG_MEMSIZE_TOO_BIG "Erreur: memsize (%d) trop grand pour Length (%d)" -#define MSG_MEM_ALLOC_ERR "Erreur d'allocation mémoire, taille %s = %d" -#define MSG_MEM_ALLOC_ERROR "Erreur d'allocation mémoire" -#define MSG_MEM_ALLOC_YET "Mémoire déjŕ allouée" -#define MSG_METAFILE_NOTFND "Fichier Meta introuvable" -#define MSG_MISPLACED_QUOTE "Appostrophe mal placée ligne %d" -#define MSG_MISSING "Manquant: Value=%p Argval=%p Builtin=%d" -#define MSG_MISSING_ARG "Argument manquant pour l'opérateur %d" -#define MSG_MISSING_COL_DEF "Définition des colonnes manquante" -#define MSG_MISSING_CONNECT "Connection #1 manquante" -#define MSG_MISSING_EOL "Fin de ligne manquante dans %s" -#define MSG_MISSING_FIELD "Champs %d manquant dans %s ligne %d" -#define MSG_MISSING_FNAME "Nom du fichier manquant" -#define MSG_MISSING_NODE "Noeud %s manquant dans %s" -#define MSG_MISSING_POS "POS code manquant" -#define MSG_MISSING_ROWNODE "Impossible de trouver le noeud de la ligne %d" -#define MSG_MISSING_SERV_DB "Indication serveur et/ou base de données manquante" -#define MSG_MISS_LEAD_COL "Colonne majeure %s manquante" -#define MSG_MISS_NAME_LRECL "Nom du fichier et/ou LRECL manquant" -#define MSG_MISS_TABLE_LIST "Liste des tables manquante" -#define MSG_MISS_VCT_ELMT "Taille de bloc vectoriel manquante (Elements)" -#define MSG_MIS_TAG_LIST "Liste des balises colonne manquante" -#define MSG_MKEMPTY_NIY "MakeEmptyFile: pas encore implementé pour Huge et Unix" -#define MSG_MOVE_INV_TYPE "MOVPARM: paramčtre de type invalide %d" -#define MSG_MULT_DISTINCT "Distinct utilisé plus d'une fois" -#define MSG_MULT_KEY_ERROR "Erreur sur clé multiple k=%d n=%d" -#define MSG_MUL_MAKECOL_ERR "Erreur logique dans TABMUL::MakeCol" -#define MSG_MYSQL_CNC_OFF "La connexion ŕ MySQL est fermée" -#define MSG_MYSQL_CNC_ON "La connexion ŕ MySQL est établie" -#define MSG_MYSQL_NOT_SUP "Pas de support de MySQL dans cette version" -#define MSG_MY_CNC_ALREADY "La connexion ŕ MySQL est déjŕ active" -#define MSG_NAME_CONV_ERR "Erreur de convertion du nom de noeud" -#define MSG_NAME_IS_USED "Le nom %s est déjŕ utilisé" -#define MSG_NCOL_GT_MAXCOL "Trop de colonnes (%d > %d max)" -#define MSG_NEW_CHAR_NULL "new char(%d) retourne Null" -#define MSG_NEW_DOC_FAILED "Impossible de créer le nouveau document" -#define MSG_NEW_RETURN_NULL "NULL renvoyé par New dans PlugEvalLike" -#define MSG_NEW_TABLE_ERR "La nouvelle table %s ne peut pas ętre chargée" -#define MSG_NEXT_FILE_ERROR "Erreur en recherche du fichier suivant. rc=%s" -#define MSG_NODEF_FROM_VIEW "Pas de définition de table depuis une view" -#define MSG_NODE_FOR_CHAR "Noeud %s trouvé au lieu d'un caractčre" -#define MSG_NODE_SUBSET_ERR "Erreur d'initialisation de la zone Noeud %d" -#define MSG_NONCONT_EXCEPT "Exception non-continuable" -#define MSG_NON_DUP_HAVING "Clause Having dans une requęte non fonctionelle" -#define MSG_NON_EVAL_SEM "Sem non évaluée: p_no=%d" -#define MSG_NOP_ZLIB_INDEX "L'indexage d'une table zlib non optimisée est impossible" -#define MSG_NOT_A_DBF_FILE "Le fichier n'a pas le format dBASE dbf " -#define MSG_NOT_ENOUGH_COLS "Pas assez de colonnes dans %s" -#define MSG_NOT_ENOUGH_MEM "Mémoire insuffisante pour cette opération" -#define MSG_NOT_FIXED_LEN "Fichier %s non fixe, len=%d lrecl=%d" -#define MSG_NOT_IMPLEMENTED "Non implementé: %.8s" -#define MSG_NOT_IMPL_JOIN "Pas implémenté pour les jointures" -#define MSG_NOT_IMPL_SET "Pas implémenté pour les opérateurs d'ensembles" -#define MSG_NOT_IMPL_YET "Pas encore implementé" -#define MSG_NOT_LINEARIZED "Arborescence des tables non linéarisée" -#define MSG_NOT_MODIFIABLE " (non modifiable)" -#define MSG_NO_0DH_HEAD "0DH manquant en fin d'en-tęte (dbc=%d)" -#define MSG_NO_ACTIVE_APPL "Pas d'application active" -#define MSG_NO_ACTIVE_DB "Pas de base de données active" -#define MSG_NO_ACTIVE_UDIC "Pas de dictionaire utilisateur actif" -#define MSG_NO_AGGR_FUNC "Fonction aggrégée %d illégale ŕ cet endroit" -#define MSG_NO_AREA_FILE "Fichier Area introuvable" -#define MSG_NO_AVAIL_RESULT "Pas de résultat disponible" -#define MSG_NO_BIG_DELETE "Délétion Partielle non implémentée pour les fichiers HUGE" -#define MSG_NO_CHAR_FROM "Conversion de type %d en caractčres impossible" -#define MSG_NO_CLUSTER_COL "Pas de colonne optimisable" -#define MSG_NO_COL_ADDING "Ajouter des colonnes dans une définition existante est impossible" -#define MSG_NO_COL_DEF_AS "La définitions des colonnes est incompatible avec AS Select" -#define MSG_NO_COL_FOUND "La section colonne %s est vide" -#define MSG_NO_COL_IN_TABLE "La colonne %d n'est pas dans la table %s" -#define MSG_NO_COL_SECTION "Section colonne manquante pour la table %s" -#define MSG_NO_CONNECT_ADDR "Adresse de connection non spécifiée" -#define MSG_NO_CONST_FILTER "Filtres constants non implementés" -#define MSG_NO_CURLY_BRKT "Pas d'accolade de fermeture" -#define MSG_NO_DATABASE "Base de données %s introuvable" -#define MSG_NO_DATE_FMT "Pas de format date pour le valblock de type %d" -#define MSG_NO_DBF_INSERT "Insert pas encore implémenté pour les fichier DBF" -#define MSG_NO_DEF_FNCCOL "Colonne fonction par défaut introuvable" -#define MSG_NO_DEF_PIVOTCOL "Colonne pivot par défaut introuvable" -#define MSG_NO_DIR_INDX_RD "Pas d'accčs directe des tables %s" -#define MSG_NO_DMY_DIR_ACC "Pas d'accčs direct aux tables virtuelles DUMMY" -#define MSG_NO_DOM_DELETE "Délétion Partielle non implémentée pour les domaines" -#define MSG_NO_DOM_MATCH "Chaîne %.8s... non touvée dans le domaine %s" -#define MSG_NO_EDITED_LANG "Coparm: Pas de langage en édition" -#define MSG_NO_EXP_LINK "Liaison par expression invalide pour une table JCT" -#define MSG_NO_EXT_FILTER "Le filtrage ne peut se référer ŕ une autre table" -#define MSG_NO_EXT_UPDATE "Pas de mise ŕ jour en référence ŕ une autre table" -#define MSG_NO_FEAT_SUPPORT "%s non supporté dans cette version" -#define MSG_NO_FILE_LIST "La table %s n'a pas de liste de fichiers" -#define MSG_NO_FLD_FORMAT "Format absent pour le champs %d de %s" -#define MSG_NO_FORMAT_COL "Type COLUMN informattable" -#define MSG_NO_FORMAT_TYPE "Le format ne peut pas ętre défini ŕ partir du type %d" -#define MSG_NO_FULL_JOIN "Jointures autorisées seulement ŕ égalité sur clé(s)" -#define MSG_NO_FUL_OUT_JOIN "Jointures externes complčtes non supportées" -#define MSG_NO_FUNC_ORDER "Tri non supporté sur élément fonctionnel" -#define MSG_NO_HEAD_JOIN "Jointure sur une table non en tęte" -#define MSG_NO_HQL_CONV "Conversion en HQL non disponible" -#define MSG_NO_INDEX "La table %s n'a pas d'index" -#define MSG_NO_INDEX_GBX "Pas ou mauvais index pour SQLGBX" -#define MSG_NO_INDEX_IN "Pas d'index dans %s" -#define MSG_NO_INDEX_READ "Pas d'accčs directe des tables multiples" -#define MSG_NO_INIT_LANG "Pas de langage initial" -#define MSG_NO_JOIN_TO_EXP "Jointure vers une expression impossible" -#define MSG_NO_JOIN_UPDEL "Pas de jointure avec Update/Delete" -#define MSG_NO_KEY_COL "Pas de colonne clé trouvée" -#define MSG_NO_KEY_UPDATE "Le nom des clés ne peut pas ętre modifié" -#define MSG_NO_LANGUAGE "Pas de langage opérationnel\n" -#define MSG_NO_LANG_TO_QUIT "Pas de langage ŕ quitter" -#define MSG_NO_LISTVAL_HERE "LSTBLK: Liste de valeurs utilisée hors contexte" -#define MSG_NO_MAP_INSERT "MAP incompatible avec Insert" -#define MSG_NO_MATCHING_COL "Pas de colonne correspondant ŕ %s dans %s" -#define MSG_NO_MATCH_COL "Colonne correspondante introuvable" -#define MSG_NO_MEMORY "Mémoire pleine" -#define MSG_NO_MEM_CORR_SUB "Subquery corrélée en mémoire non encore implémentée" -#define MSG_NO_MODE_PADDED "Mode non supporté pour les fichiers 'padded'" -#define MSG_NO_MORE_COL "La colonne %s n'est plus dans la table pivot" -#define MSG_NO_MORE_LANG "Plus de langage, exit de %s\n" -#define MSG_NO_MORE_VAR "Les fichiers VAR ne sont plus supportés" -#define MSG_NO_MULCOL_JOIN "Jointure vers un index multi-colonne pas encore possible" -#define MSG_NO_MULT_HAVING "Clauses Having multiples non implémentées" -#define MSG_NO_MUL_DIR_ACC "Accčs direct des tables multiples pas encore implémenté" -#define MSG_NO_MUL_VCT "Les tables VCT ne peuvent pas ętre multiples" -#define MSG_NO_MYSQL_CONN "Aucune connexion MySQL ouverte" -#define MSG_NO_MYSQL_DELETE "Pas de Delete pour les tables MySQL" -#define MSG_NO_NBCOL "Pas de NBcol" -#define MSG_NO_NBLIN "Pas de NBlin, MaxSize ou Continued" -#define MSG_NO_NBLIN_CONT "Fetch: Pas de NBlin ou Continued" -#define MSG_NO_NULL_CONST "Les constantes ne sont pas prises en charge" -#define MSG_NO_ODBC_COL "Colonnes ODBC automatiques non supportées par cette version" -#define MSG_NO_ODBC_DELETE "Delete ne devrait pas ętre appelé pour les tables ODBC" -#define MSG_NO_ODBC_DIRECT "Accčs directe des tables ODBC non encore implémenté" -#define MSG_NO_ODBC_MUL "Multiple(2) non supporté pour les tables ODBC" -#define MSG_NO_ODBC_SPECOL "Pas de colonne spéciale ODBC" -#define MSG_NO_OPT_COLUMN "Pas optimisable ou pas de colonne optimisées" -#define MSG_NO_OP_MODIF "Les modificateurs ne s'appliquent pas ŕ %s" -#define MSG_NO_PARAMETER "Pas de paramčtre" -#define MSG_NO_PART_DEL "Delete partiel des fichier %s impossible" -#define MSG_NO_PART_MAP "Mapping partiel non implémenté pour cet OS" -#define MSG_NO_PAR_BLK_INS "Insertion de bloc partiel impossible" -#define MSG_NO_PIV_DIR_ACC "Pas d'accčs directe aux tables PIVOT" -#define MSG_NO_POS_ADDED "Pos_code non ajouté" -#define MSG_NO_PROMPTING "Relance impossible pour les tables distribuées" -#define MSG_NO_QRY_DELETE "Delete n'est pas utilisable pour les views QRY" -#define MSG_NO_QUERY_ARRAY "Tableaux avec QUERY non encore implémentés" -#define MSG_NO_RCUR_DSK_YET "Usage recursif de DISK non encore implementé" -#define MSG_NO_READ_32 "Lecture de 32 octets impossible" -#define MSG_NO_RECOV_SPACE "Espace non recouvrable dans le fichier index" -#define MSG_NO_REF_DELETE "Pas de suppression en référence ŕ une autre table" -#define MSG_NO_REF_UPDATE "Pas de mise ŕ jour en référence ŕ une autre table" -#define MSG_NO_REMOTE_FNC "Certaines fonctions ne peuvent pas ętre exécutées ŕ distance" -#define MSG_NO_ROWID_FOR_AM "Accčs direct impossible de ROWID pour les tables de type %s" -#define MSG_NO_ROW_NODE "Le nom du Rownode n'est pas défini" -#define MSG_NO_SECTION_NAME "Nom de section manquant" -#define MSG_NO_SEC_UPDATE "Les noms de section ne peuvent pas ętre modifiés" -#define MSG_NO_SELECTED_DB "Aucune base de données sélectée" -#define MSG_NO_SELF_PIVOT "Une table ne peut se pivoter elle-męme !" -#define MSG_NO_SERVER_FOUND "Serveur introuvable" -#define MSG_NO_SETPOS_YET "SetPos pas encore implémenté pour les fichier %s" -#define MSG_NO_SFEXIT_UNIX "Fonction %s non disponible sur Unix" -#define MSG_NO_SOURCE " (pas de source)" -#define MSG_NO_SPEC_COL "Pas de colonne spéciales MYSQL" -#define MSG_NO_SQL_DELETE "Delete n'est pas utilisable actuellement pour les views SQL" -#define MSG_NO_SUB_VAL "Pas de sous-value d'un tableau de type %d" -#define MSG_NO_SUCH_INDEX "La table %s n'a pas l'index %s" -#define MSG_NO_SUCH_SERVER "Serveur %s introuvable" -#define MSG_NO_SUCH_TABLE "Table %s pas dans la base de données" -#define MSG_NO_TABCOL_DATA "Pas de données pour la table %s colonne %s" -#define MSG_NO_TABLE_COL "Aucune colonne trouvée pour %s" -#define MSG_NO_TABLE_DEL "Delete non autorisé pour les tables %s " -#define MSG_NO_TABLE_DESC "Pas de bloc descriptif de table" -#define MSG_NO_TABLE_INDEX "La table %s n'a pas d'index" -#define MSG_NO_TABLE_LIST "Pas de liste de tables" -#define MSG_NO_TAB_DATA "Pas de données pour la table %s" -#define MSG_NO_TERM_IN_TOK "Les non-terminaux ne sont pas utilisables dans les rčgles de Token" -#define MSG_NO_TOKEN_DB "DB introuvable pour la colonne TOKEN %s" -#define MSG_NO_UNIX_CATINFO "Pas d'info catalogue sous Unix" -#define MSG_NO_UPDEL_JOIN "Pas de jointure de tables ODBC pour Update/Delete" -#define MSG_NO_VCT_DELETE "Délétion Partielle non implémentée pour les fichiers VCT" -#define MSG_NO_VIEW_COLDEF "Colonne définition impossible pour les views" -#define MSG_NO_VIEW_SORT "La View fonctionnelle %s ne peut pas ętre triée ou jointe" -#define MSG_NO_ZIP_DELETE "Delete sur fichier Zip non encore implementé" -#define MSG_NO_ZIP_DIR_ACC "Accčs directe des tables ZDOS non encore implementé" -#define MSG_NULL_COL_VALUE "La colonne n'a pas de valeur" -#define MSG_NULL_ENTRY "InitLang, entrée nulle %d %s" -#define MSG_NULL_QUERY "Requęte vide" -#define MSG_NUMVAL_NOMATCH "Disparité de Numval pour %s" -#define MSG_N_FULL_PARSES "%d significations" -#define MSG_ODBC_READ_ONLY "ODBC est actuellement en lecture seulement" -#define MSG_OFFSET_NOT_SUPP "Offset non supporté pour ce type de sous requęte" -#define MSG_ONE_LANG_YET "Un langage est déjŕ en édition" -#define MSG_ONE_PARAM_ONLY "Un seul paramčtre autorisé" -#define MSG_ONLY_LOG10_IMPL "Seul Log10 est implementé" -#define MSG_ON_LANGUAGE "Langage %.8s version %d niveau %d éditable" -#define MSG_OPENING "Ouverture" -#define MSG_OPENING_QUERY "Ouverture de la requęte" -#define MSG_OPEN_EMPTY_FILE "Ouverture du fichier vide %s: %s" -#define MSG_OPEN_ERROR "Erreur d'ouverture %d en mode %d sur %s: " -#define MSG_OPEN_ERROR_IS "Erreur ŕ l'ouverture de %s: %s" -#define MSG_OPEN_ERROR_ON "Erreur d'ouverture sur %s" -#define MSG_OPEN_MODE_ERROR "Erreur d'ouverture(%s) %d sur %s" -#define MSG_OPEN_SORT_ERROR "Erreur logique de tri dans QUERY Open" -#define MSG_OPEN_STRERROR "Erreur ŕ l'ouverture: %s" -#define MSG_OPEN_W_ERROR "Erreur ŕ l'ouverture de %s en écriture" -#define MSG_OPTBLK_RD_ERR "Erreur ŕ la lecture d'un bloc optimisation: %s" -#define MSG_OPTBLK_WR_ERR "Erreur ŕ l'écriture d'un bloc optimisation: %s" -#define MSG_OPTIMIZING "Optimisation de " -#define MSG_OPT_BMAP_RD_ERR "Erreur en lecture des bitmaps d'optimisation: %s" -#define MSG_OPT_BMAP_WR_ERR "Erreur en écriture des bitmaps d'optimisation: %s" -#define MSG_OPT_CANCELLED "Optimisation interrompue par l'utilisateur" -#define MSG_OPT_DVAL_RD_ERR "Erreur en lecture des valeurs distinctes: %s" -#define MSG_OPT_DVAL_WR_ERR "Erreur en écriture des valeurs distinctes: %s" -#define MSG_OPT_HEAD_RD_ERR "Erreur en lecture de l'entęte du fichier opt: %s" -#define MSG_OPT_HEAD_WR_ERR "Erreur en écriture de l'entęte du fichier opt: %s" -#define MSG_OPT_INIT "Optimisation initialisée" -#define MSG_OPT_LOGIC_ERR "Erreur logique dans SetBitmap, i=%d" -#define MSG_OPT_MAX_RD_ERR "Erreur en lecture des valeurs maxi: %s" -#define MSG_OPT_MAX_WR_ERR "Erreur en écriture des valeurs maxi: %s" -#define MSG_OPT_MIN_RD_ERR "Erreur en lecture des valeurs mini: %s" -#define MSG_OPT_MIN_WR_ERR "Erreur en écriture des valeurs mini: %s" -#define MSG_OPT_NOT_MATCH "Le fichier opt %s n'est pas ŕ jour" -#define MSG_OP_RES_TOO_LONG "Résultat trop long pour l'opérateur=%d" -#define MSG_ORDER_OUT_RANGE "Tri: Order %d hors limite" -#define MSG_ORDER_TWICE "Un męme élément est trié deux fois" -#define MSG_PAGE_ERROR "Erreur de pagination" -#define MSG_PARM_CNT_MISS "Disparité du nombre de Paramčtres" -#define MSG_PARSE_NULL_SEM "Sémantique nulle" -#define MSG_PARSING_QUERY "Analyse de la requęte" -#define MSG_PIX_ERROR "Pix %s erreur rčgle no=%u\n" -#define MSG_PIX_TEST_ERROR "Rčgle=%u: pix-TEST pas dans le premier noeud\n" -#define MSG_PLG_READ_ONLY "PLG est actuellement en lecture seulement" -#define MSG_PLM_NULL_SFP "TABPLM ReadDB: Sfp est NULL" -#define MSG_PLUG_NOT_INIT "Plug n'est pas initialisé\n" -#define MSG_PLUG_NOT_RUN "Plug n'est pas en marche" -#define MSG_PNODE_RULE "(Noeud %d rčgle %d) " -#define MSG_POS_TOO_LONG "%s trop long (>%d)" -#define MSG_PREC_VBLP_NULL "ARRAY SetPrecision: Vblp est NULL" -#define MSG_PRIV_INSTR "Instruction privilégiée" -#define MSG_PROCADD_ERROR "Erreur %d sur l'adresse de %s" -#define MSG_PROCESS_SUBQRY "Sub-Query en cours de traitement" -#define MSG_PROC_WOULD_LOOP "Bouclage du traitement (maxres=%d maxlin=%d)" -#define MSG_PROGRESS_INFO "Informations sur le traitement en cours" -#define MSG_PROMPT_CANCEL "Relance annulée" -#define MSG_PROMPT_NIY "Prompt non implémenté pour cette configuration" -#define MSG_PTR_NOT_FOUND "Pointeur introuvable Num=%d ti1=%d" -#define MSG_PXDEF_IS_NULL "Pxdef est NULL" -#define MSG_QRY_READ_ONLY "Les views QRY sont en lecture seulement" -#define MSG_QUERY_CANCELLED "Requęte interrompue par l'utilisateur" -#define MSG_QUERY_NOT_EXEC "Requęte non exécutée" -#define MSG_QUERY_SAVED "Requęte %s sauvegardée" -#define MSG_QUOTE_IN_QUOTE "Appostrophe dans un champ entre appostrophe ligne %d" -#define MSG_RANGE_NIY "Range pas encore implémenté pour %s" -#define MSG_RANGE_NO_JOIN "Range non compatible avec les index de jointure" -#define MSG_RC_READING "rc=%d en lecture de la table %s" -#define MSG_READB_BAD_INIT "%s ReadDB appelé avec Init=0" -#define MSG_READCOL_ERROR "SQLCOL: erreur dans ReadColumn" -#define MSG_READING "Lecture" -#define MSG_READING_FROM "Lecture de %s" -#define MSG_READING_RECORD "Erreur en lecture de l'enregistrement %d de %s" -#define MSG_READY "Pręt" -#define MSG_READ_ERROR "Erreur en lecture sur %s: %s" -#define MSG_READ_ERROR_RC "Erreur en lecture, rc=%d" -#define MSG_READ_MEM_ERROR "Lecture mémoire %d: taille=%d" -#define MSG_READ_ONLY "Cette table protégée en lecture seule ne peut ętre modifiée" -#define MSG_READ_SEEK_ERROR "Erreur de recherche en lecture: %s" -#define MSG_READ_SEG_ERROR "Lecture segment %d: taille=%d" -#define MSG_RECEIVED "Reçu %c\n" -#define MSG_RECORD_ERROR "Erreur ŕ la lecture de l'enregistrement %d de %s" -#define MSG_RECORD_NO_SEP "Enregistrement sans séparateur" -#define MSG_REC_SKIPPED " (%d lignes erronnées sautées par l'option MaxErr)" -#define MSG_REDUCE_INDEX "Réduction de l'index" -#define MSG_REGISTER_ERR "Enregistrement NS impossible, préfix='%s' et href='%s'" -#define MSG_REMOTE_CONN_ERR "La connection éloignée a échoué" -#define MSG_REMOVE_ERROR "Erreur en supprimant %s: %s" -#define MSG_REMOVE_NOT_IMPL "Remove non implémenté pour TDB non Table" -#define MSG_RENAME_ERROR "Erreur renommant %s en %s: %s" -#define MSG_RENUM_RULES "Renumérotez les rčgles et réentrez ADD (rčgle sauvegardée dans la zone tampon)" -#define MSG_REORDER_INDEX "Reclassement de l'index" -#define MSG_REQU_ARG_NUM "La fonction %s doit avoir %d arguments" -#define MSG_RESET_TO "%s remis ŕ %d" -#define MSG_RES_NOT_UNIQUE "Le résultat n'est pas unique" -#define MSG_RET_FROM_LANG "Retour au language %s version %d.%d du language %s version %d.%d" -#define MSG_ROWID_NOT_IMPL "RowNumber non implémenté pour les tables de type %s" -#define MSG_ROWS_SELECTED "%d lignes sélectionnées en %.2lf sec" -#define MSG_ROWS_TRUNCATED " (tronqué par MAXRES, LIMIT, FREQ ou AreaSize)" -#define MSG_ROW_ARGNB_ERR "ROW: disparité du nombre d'arguments (%d,%d)" -#define MSG_RPC_SERVER_ERR "Erreur logique dans TABMUL::MakeCol" -#define MSG_RSC_ALLOC_ERROR "Erreur d'allocation mémoire dans Rescol %s" -#define MSG_RULE_ENTERED "Rčgle %d entrée" -#define MSG_RULE_SUBSET_ERR "Erreur d'initialisation de la zone Rčgles" -#define MSG_SAVING_INDEX "Sauvegarde du fichier index" -#define MSG_SCAN_NOT_IMP "Scan non implémenté" -#define MSG_SEC_KEY_FIRST "Les sections et clés doivent ętre insérées en premier" -#define MSG_SEC_NAME_FIRST "Le nom de section doit ętre en tęte de liste en insertion" -#define MSG_SEC_NOT_FOUND "Section %s absente de %s" -#define MSG_SEEK_ERROR "Seek erreur dans CopyHeader" -#define MSG_SEMANTIC_TREE "Arbre sémantique" -#define MSG_SEM_BAD_REF "Sem @%d référence un argument de type non 0 ou 1" -#define MSG_SEM_UNKNOWN "inconnue, rc=%d" -#define MSG_SEP_IN_FIELD "Le champ %d contient le caractčre séparateur" -#define MSG_SEQUENCE_ERROR "HSTMT: Allocation hors séquence" -#define MSG_SETEOF_ERROR "Erreur %d dans SetEndOfFile" -#define MSG_SETRECPOS_NIY "SetRecpos non implémenté pour ce type de table" -#define MSG_SET_LOCALE "Locale fixée ŕ %s" -#define MSG_SET_NULL_DOM "Valeur %d donnée ŕ un domaine nul" -#define MSG_SET_OP_NOT_IMPL "Opérateurs ensemblistes non implementés" -#define MSG_SET_STR_TRUNC "SetValue: Chaîne de caractčres tronquée" -#define MSG_SEVERAL_TREES "Jointure non spécifiée pour certaines tables" -#define MSG_SFP_ERROR "Erreur sur SetFilePointer: %s" -#define MSG_SFUNC_NOT_IMPL "Fonction scalaire %s non implémentée" -#define MSG_SHARED_LIB_ERR "Erreur au chargement de la librairie partagée %s: %s" -#define MSG_SINGLE_STEP "Pas ŕ pas" -#define MSG_SLEEP "J'ai dormi %d milliseconds" -#define MSG_SMART_SORTING "Récupération des lignes triées (passage %d de %d)" -#define MSG_SMART_SORT_ERR "Erreur logique 1 dans Smart Sort" -#define MSG_SORTING "Tri en cours" -#define MSG_SORTING_INDEX "Tri de l'index" -#define MSG_SORTING_VAL "Tri de %d valeurs" -#define MSG_SORT_JOIN_INDEX "Tri de l'index de jointure" -#define MSG_SPCOL_READONLY "La colonne spéciale %s est en lecture seulement" -#define MSG_SPEC_CMD_SEP "Les commandes spéciales doivent ętre exécutées séparément" -#define MSG_SQL_BAD_TYPE "RephraseSQL: type %d non supporté" -#define MSG_SQL_BLOCK_MISM "CheckColumn: bloc SQL courant non correspondant" -#define MSG_SQL_CONF_ERROR "Erreur SQL: SQL_CONFORMANCE" -#define MSG_SQL_READ_ONLY "Les views SQL sont actuellement en lecture seulement" -#define MSG_SRCH_CLOSE_ERR "Erreur ŕ la fermeture de l'Handle de recherche" -#define MSG_SRC_TABLE_UNDEF "La table source n'est pas définie" -#define MSG_STACK_ERROR "Erreur sur la pile, i=%d\n" -#define MSG_STACK_OVERFLOW "Parser: Débordement de la pile\n" -#define MSG_STRG_NOT_FOUND "Chaîne introuvable" -#define MSG_STRING_INV_LIST "Liste invalide pour SemString" -#define MSG_STRING_TOO_BIG "Chaîne trop grande pour le domaine %s" -#define MSG_SUBALLOC_ERROR "Pas assez de mémoire en zone %p pour allouer %d (utilisé=%d libre=%d)" -#define MSG_SUBAL_HUGE_ERR "Pas assez de mémoire en zone huge %p pour allouer %d" -#define MSG_SUBARG_NOSEM "Argument @ ou sous-phrase de niveau %d pointe sur un noeud sans Sem" -#define MSG_SUBARG_OUTRANGE "Argument @ ou sous-phrase de niveau %d hors limite" -#define MSG_SUBQRY_ONEITEM "Une Sub-Query ne doit avoir qu'une sélection" -#define MSG_SUBSET_ERROR "SubSet erreur dans LoadDB" -#define MSG_SUB_OPEN_YET "Subquery déjŕ ouverte" -#define MSG_SUB_RES_TOO_LNG "Résultat trop long pour SUBSTR" -#define MSG_SYNTAX_ERROR "Erreur de syntaxe" -#define MSG_SYSTEM_ERROR "Erreur systčme %d" -#define MSG_S_ACCESS_DENIED "%s: accčs non autorisé" -#define MSG_S_ERROR "%s erreur" -#define MSG_S_ERROR_NUM "%s: erreur=%d" -#define MSG_S_INTRUPT_ERROR "%s: erreur interruption" -#define MSG_S_INVALID_PARM "%s: paramčtre invalide" -#define MSG_S_INV_ADDRESS "%s: adresse invalide" -#define MSG_S_UNKNOWN_ERROR "%s: erreur de code %u inconnu" -#define MSG_TABDIR_READONLY "Les tables DIR sont en lecture seulement" -#define MSG_TABLE_ALREADY "La table %s existe déjŕ" -#define MSG_TABLE_ALTERED "Table %s %s altérée" -#define MSG_TABLE_CREATED "%s table %s créée" -#define MSG_TABLE_DROPPED "Table %s supprimée" -#define MSG_TABLE_MULT_JOIN "Utilisation multiple de la table %s pour jointure" -#define MSG_TABLE_NOT_IN_DB "La table %s n'existe pas dans %s" -#define MSG_TABLE_NOT_OPT "Table non optimisable" -#define MSG_TABLE_NO_INDEX "La table %s n'est pas indexable" -#define MSG_TABLE_NO_OPT "La table %s n'existe pas ou de type non optimisable" -#define MSG_TABLE_READ_ONLY "Les tables %s sont en lecture seulement " -#define MSG_TABMUL_READONLY "Les tables multiples sont en lecture seulement" -#define MSG_TAB_NOT_LOADED " (certaines tables n'ont put ętre chargées)" -#define MSG_TAB_NOT_SPEC "Table non specifiée" -#define MSG_TB_VW_NOTIN_DB "Table ou view %s pas dans la base de données" -#define MSG_TDB_NXT_NOT_NUL "Tdb.Next non NULL" -#define MSG_TDB_USE_ERROR "Erreur, Tdbp->Use=%d" -#define MSG_TOO_MANY_COLS "Trop de colonnes" -#define MSG_TOO_MANY_COLTAB "Trop de colonnes dans %s (%d)" -#define MSG_TOO_MANY_FIELDS "Trop de champs ligne %d de %s" -#define MSG_TOO_MANY_JUMPS "Trop de niveaux de saut" -#define MSG_TOO_MANY_KEYS "Trop de clés (%d)" -#define MSG_TOO_MANY_POS "Trop de pos_codes" -#define MSG_TOO_MANY_TABLES "Trop de tables (%d)" -#define MSG_TOPSEM_ERROR "Erreur inconnue dans TopSem" -#define MSG_TO_BLK_IS_NULL "To Blk est nul" -#define MSG_TO_FTR_NOT_NULL "Set.To_Ftr n'est pas nul" -#define MSG_TO_PIX_NOT_NULL "Set.To_Pix n'est pas nul" -#define MSG_TO_SEM_NOT_NULL "Set.To_Sem n'est pas nul" -#define MSG_TRUNCATE_ERROR "Erreur en troncation: %s" -#define MSG_TRUNC_BY_ESTIM "Tronqué par l'option Estimate" -#define MSG_TYPES_ERROR "Erreur sur Types(%d)" -#define MSG_TYPE_CONV_ERROR "Type non convertible dans une expression" -#define MSG_TYPE_DEF_MISM "Disparité entre type et définition" -#define MSG_TYPE_MISMATCH "Clé et source ne sont pas du męme type" -#define MSG_TYPE_RECFM_MISM "Disparité entre Type et Recfm" -#define MSG_TYPE_TO_VERIFY "Type ŕ vérifier: %d" -#define MSG_TYPE_VALUE_ERR "Colonne %s: disparité type(%s)/valeur(%s)" -#define MSG_UNBALANCE_QUOTE "Appostrophe en trop ligne %d" -#define MSG_UNDEFINED_AM "COLBLK %s: méthode d'accčs indéfinie" -#define MSG_UNDEFINED_PATH "Chemin d'accčs indéfini pour Plgcnx.ini" -#define MSG_UNDEF_COL_COUNT "Count sur colonne non définie" -#define MSG_UNKNOWN_DOMAIN "Domaine inconnu %s" -#define MSG_UNKNOWN_ERROR "Erreur inconnue" -#define MSG_UNKNOWN_EXCPT "Exception non répertoriée" -#define MSG_UNKNOWN_NAME "Nom inconnu: %.8s" -#define MSG_UNKNOWN_PATH "Chemin d'accčs inconnu pour Plgcnx.ini" -#define MSG_UNKNOWN_POS "Nom pos_code inconnu: %s" -#define MSG_UNKNOWN_SEM "Sem %.8s inconnue, rc=%d" -#define MSG_UNKNOWN_SYNONYM "Synonyme inconnu" -#define MSG_UNKNW_QRY_TYPE "ReadDB: type de requęte inconnu" -#define MSG_UNKN_ERR_CODE "Erreur de code %d inconnu" -#define MSG_UNLOADABLE " inchargeable: " -#define MSG_UNLOADABLE_PRM "%s inchargeable: %s" -#define MSG_UNMATCH_FIL_ARG "Argument de filtre dépareillé" -#define MSG_UNQ_COL_SEV_TAB "La colonne %s non qualifiée est dans plusieurs tables" -#define MSG_UNRESOLVED_ARG "?Argument manquant: %s non résolu en %d ligne %d" -#define MSG_UPDATE_ERROR "Erreur en Update sur %s" -#define MSG_UPDATING_ROWS "Mise ŕ jour des lignes" -#define MSG_UPD_ZIP_NOT_IMP "Mise ŕ jour des tables ZDOS non encore implementé" -#define MSG_UP_LANGUAGE "Bloc langage %.8s version %d niveau %d chargé" -#define MSG_USED_FREE_MEM "Sarea: utilisé %d, libre %d" -#define MSG_USETEMP_IS "Usetemp est : %s" -#define MSG_USETEMP_RESET ". Usetemp remis ŕ Auto" -#define MSG_USETEMP_SET "Usetemp fixé ŕ %s" -#define MSG_USE_NO_MATCH "Use non correspondant : Use=%d, ti2=%d, ti3=%d" -#define MSG_USING_INDEX " (Indexé par" -#define MSG_VALIST_MISMATCH "Disparité des listes de valeurs" -#define MSG_VALSTR_TOO_LONG "Valeur %s trop longue pour une chaîne de longueur %d" -#define MSG_VALTYPE_NOMATCH "Disparité types de valeur" -#define MSG_VALUE_ERROR "Colonne %s: bloc valeur nul" -#define MSG_VALUE_NOT_ALLOC "Valeur non allouée pour la colonne R%d %s" -#define MSG_VALUE_TOO_BIG "Valeur %lld trop grande pour la colonne %s" -#define MSG_VALUE_TOO_LONG "Valeur %s trop longue pour la colonne %s de longueur %d" -#define MSG_VAL_ALLOC_ERR "Allocation impossible du noeud valeur" -#define MSG_VAL_TOO_LONG "Valeur %s trop longue pour le champ %s" -#define MSG_VIEW_ALREADY "La VIEW %s existe déjŕ" -#define MSG_VIEW_CREATED "%s view %s créée" -#define MSG_VIEW_DROPPED "View %s supprimée" -#define MSG_VIEW_NOT_IN_DB "%s n'est pas une View de %s" -#define MSG_VIR_NO_DELETE "Delete impossible sur les tables %s" -#define MSG_VIR_READ_ONLY "Les tables virtuelles %s sont en lecture seulement" -#define MSG_VM_LANG "Langage au format VM, non supporté" -#define MSG_VOID_FIRST_ARG "Le premier argument ne doit pas ętre vide" -#define MSG_VOID_IN_STRING "Erreur: chaîne IN vide" -#define MSG_VOID_ORDER_LIST "Liste de tri vide, erreur systčme ?" -#define MSG_VOID_POS_DICT "Dictionnaire interne du langage vide" -#define MSG_VOID_QUERY "Requęte vide %s" -#define MSG_WORK_AREA "Espace de travail: %s" -#define MSG_WORK_TOO_SMALL "Zone de travail trop petite, accroître AreaSize" -#define MSG_WRITE_ERROR "Erreur ŕ l'écriture de %s" -#define MSG_WRITE_SEEK_ERR "Erreur de recherche en écriture: %s" -#define MSG_WRITE_STRERROR "Erreur en écriture sur %s: %s" -#define MSG_WRITING "Ecriture" -#define MSG_WRITING_ERROR "Erreur ŕ l'écriture de %s: %s" -#define MSG_WRITING_QUERY "Erreur ŕ l'écriture de la requęte: " -#define MSG_WRONG_ARG_NUM "La fonction %s ne prend pas %d arguments" -#define MSG_WRONG_COL_NUM "Numéro de colonne %d trop grand pour %s" -#define MSG_WRONG_DB_LIST "Liste des bases de données incorrecte ou vide" -#define MSG_WRONG_FUNCTION "Mauvaise fonction %d" -#define MSG_WRONG_OP_PARM "Mauvais opérateur ou paramčtres pour %s" -#define MSG_WRONG_PARMS "Mauvais paramčtres pour %s" -#define MSG_WRONG_PASSWORD "Mot de passe illégal pour %s" -#define MSG_WRONG_TYPE "type non supporté" -#define MSG_WRONG_USERFILE "La Userfile a une mauvaise taille %d" -#define MSG_WS_CONV_ERR "Erreur de convertion de %s en WS" -#define MSG_XCOL_MISMATCH "La colonne %s ne correspond pas ŕ l'index" -#define MSG_XDB_DEL_ERROR "Erreur en supprimant des entrées du fichier XDB" -#define MSG_XFILE_READERR "Erreur %d en lisant le fichier index" -#define MSG_XFILE_TOO_SMALL "Le fichier index est plus petit que la taille de l'index" -#define MSG_XFILE_WRITERR "Erreur en écrivant le fichier index: %s" -#define MSG_XMLTAB_INIT_ERR "Erreur d'initialisation de la table XML" -#define MSG_XML_INIT_ERROR "Erreur d'initialisation du nouveau fichier XML" -#define MSG_XPATH_CNTX_ERR "Le nouveau contexte XPath ne peut ętre créé" -#define MSG_XPATH_EVAL_ERR "Impossible d'évaluer l'emplacement xpath '%s'" -#define MSG_XPATH_NOT_SUPP "Xpath non supporté colonne %s" -#define MSG_X_ARG_ADDED "%d arguments ajoutés" -#define MSG_X_ARG_SET "%d arguments ont été initialisés" -#define MSG_X_ON_TAB " %s sur %s(" -#define MSG_ZERO_DIVIDE "Division par zéro dans une expression" diff --git a/storage/connect/frmsg2.h b/storage/connect/frmsg2.h deleted file mode 100644 index 487db3395fb..00000000000 --- a/storage/connect/frmsg2.h +++ /dev/null @@ -1,1013 +0,0 @@ -#define MSG_ACCESS_VIOLATN "Violation accŠs m‚moire" -#define MSG_ACT_ALLOC_FAIL "PlugInitLang: Erreur d'allocation du bloc Activity" -#define MSG_ADDVAL_ERROR "Erreur %d dans AddValue" -#define MSG_ADD_BAD_TYPE "Ajout d'une valeur de type %s non conforme dans un tableau %s" -#define MSG_ADD_NULL_DOM "Ajout de la chaŒne %s … un domaine nul" -#define MSG_ADPOS_IN_DICTP "ADPOS au travail dans User_Dictp" -#define MSG_AFTER " aprŠs: " -#define MSG_ALG_CHOICE_AUTO "Le choix du meilleur algorithme est automatique" -#define MSG_ALG_CHOICE_BAD "Choix d'algorithme invalide, remis … AUTO" -#define MSG_ALG_CHOICE_QRY "Utilise l'algorithme 'Query'" -#define MSG_ALG_CURLY_BRK "Le choix de l'algorithme d‚pend des accolades externes" -#define MSG_ALLOC_ERROR "Erreur d'allocation de %s" -#define MSG_ALL_DELETED "Toutes les lignes enlev‚es en %.2lf sec" -#define MSG_ALTER_DB_ERR "Impossible de d‚terminer la base de donn‚es … modifier" -#define MSG_AMBIG_COL_QUAL "Qualificateur ambigu %s pour la colonne %s" -#define MSG_AMBIG_CORREL "Select %s.* corr‚lation ambigue" -#define MSG_AMBIG_SPEC_COL "Colonne sp‚ciale ambigue %s" -#define MSG_ANSWER_TYPE "R‚ponse de type" -#define MSG_API_CONF_ERROR "Erreur SQL: API_CONFORMANCE" -#define MSG_APPL_ACCESSIBLE "Application %s accessible" -#define MSG_APPL_ACTIVE "Application %s encore active" -#define MSG_APPL_BAD_SAVE "Application %s partiellement sauvegard‚e" -#define MSG_APPL_CREATED "Application %s cr‚‚" -#define MSG_APPL_IS_ACTIVE "Application d‚j… active" -#define MSG_APPL_NOT_INIT "Application non initialis‚e" -#define MSG_APPL_NOT_LOADED "Application non charg‚e" -#define MSG_APPL_QUIT "Fin de l'application %s" -#define MSG_APPL_SAVED "Application %s sauvegard‚e" -#define MSG_APP_STILL_ACTIV "Application du langage %s encore active (non lib‚rable)" -#define MSG_AREAFILE_NOTFND "Fichier Area introuvable" -#define MSG_ARGS_SYNTAX_ERR "?SetArgs erreur de syntaxe: %s inattendu aprŠs %s" -#define MSG_ARG_ALREADY_SET "Argument %d d‚j… allou‚" -#define MSG_ARG_NOT_AN_ATTR "L'argument n'est pas un attribut (type %d erron‚)" -#define MSG_ARG_OUT_CONTEXT "Argument de type @ utilis‚ hors contexte" -#define MSG_ARG_OUT_RANGE "Argument de phrase valant %d hors limite" -#define MSG_ARG_PTR_NOSEM "Argument valant %d pointe sur un noeud sans Sem" -#define MSG_ARG_PTR_NOSEMS "Argument valant %d pointe sur un noeud sans s‚mantique" -#define MSG_ARG_REF_LOOP "?Bouclage entre r‚f‚rences crois‚es des arguments" -#define MSG_ARG_TWO_CONST "Le 2Šme argument de %s doit ˆtre constant" -#define MSG_ARRAY_ALLOC_ERR "Erreur d'allocation m‚moire dans ARRAY" -#define MSG_ARRAY_BNDS_EXCD "Hors limite de tableau" -#define MSG_ARRAY_ERROR "Erreur de fonctionnement k=%d n=%d" -#define MSG_ATTRIBUTE_ERROR "Erreur rŠgle %u attribut %s: " -#define MSG_ATT_NOT_CASE "Mauvaise valeur %d pour attribut (pas une CaseValue)" -#define MSG_ATT_POSCODE_BIG "Code attribut %d trop grand (max=%d)" -#define MSG_AVGLEN_ERROR "avglen doit ˆtre entre %d et %d" -#define MSG_BAD_AGGREG_FUNC "Fonction aggr‚g‚e %d non support‚e" -#define MSG_BAD_ARGTYPES "Argument de type invalide pour %s" -#define MSG_BAD_ARGUMENTS "Argument non attach‚s pour %s" -#define MSG_BAD_ARG_NUM "Nombre d'arguments invalide %d" -#define MSG_BAD_ARG_TYPE "Type d'argument %d invalide" -#define MSG_BAD_ARRAY_OPER "Les tableaux doivent utiliser l'op‚rateur IN" -#define MSG_BAD_ARRAY_TYPE "Type=%d invalide pour un tableau" -#define MSG_BAD_ARRAY_VAL "Les tableaux doivent avoir le mˆme nombre de valeurs" -#define MSG_BAD_BIN_FMT "Format invalide %c pour la colonne BIN %s" -#define MSG_BAD_BLK_ESTIM "Nombre de blocs sup‚rieur … l'estimation" -#define MSG_BAD_BLK_SIZE "Taille du bloc %d non conforme" -#define MSG_BAD_BYTE_NUM "Le nombre d'octets ‚crits est faux" -#define MSG_BAD_BYTE_READ "Le nombre d'octets lus est faux" -#define MSG_BAD_CARDINALITY "Appel invalide de Cardinality pour une table multiple" -#define MSG_BAD_CASE_SPEC "Min/Maj: sp‚cification %c incorrecte, recommencez: " -#define MSG_BAD_CHAR_SPEC "Sp‚cification '%s' invalide pour caractŠre" -#define MSG_BAD_CHECK_TYPE "Sous-type %d invalide pour CheckColumn" -#define MSG_BAD_CHECK_VAL "Valeur pour Check invalide '%s'" -#define MSG_BAD_COLCRT_ARG "COLCRT: Arg invalide (type=%hd, domain=%hd)" -#define MSG_BAD_COLDEF_TYPE "Coldefs: type ill‚gal %d" -#define MSG_BAD_COLIST_ITEM "El‚ment invalide dans une Colist" -#define MSG_BAD_COLIST_TYPE "Mauvais type=%d pour une Colist" -#define MSG_BAD_COLSIZE "Colsize %d trop petit pour cette base de donn‚es" -#define MSG_BAD_COL_ENTRY "Entr‚e invalide pour la colonne %s" -#define MSG_BAD_COL_FORMAT "Type de formattage %d invalide pour une colonne" -#define MSG_BAD_COL_IN_FILT "Colonne incorrecte dans un filtre" -#define MSG_BAD_COL_QUALIF "Qualificateur invalide %s pour la colonne %s" -#define MSG_BAD_COL_TYPE "Type invalide %s pour la colonne %s" -#define MSG_BAD_COL_XPATH "Xpath invalide colonne %s de la table HTML %s" -#define MSG_BAD_COMPARE_OP "Op‚rateur de comparaison %d invalide" -#define MSG_BAD_CONST_TYPE "Type=%d invalide pour une constante" -#define MSG_BAD_CONV_TYPE "Convertion de type invalide %d" -#define MSG_BAD_CORREL "Select %s.* corr‚lation absente" -#define MSG_BAD_DATETIME "Valeur date/temps invalide" -#define MSG_BAD_DATE_OPER "Op‚rateur de date inattendu %d" -#define MSG_BAD_DBF_FILE "Le fichier DBF %s est alt‚r‚" -#define MSG_BAD_DBF_REC "Fichier DBF %s alt‚r‚ enregistrement %d" -#define MSG_BAD_DBF_TYPE "Type DBF %c non support‚" -#define MSG_BAD_DEF_ARG "Argument invalide pour INDEXDEF (type=%hd, domain=%hd)" -#define MSG_BAD_DEF_READ "EOF inattendue en lecture diff‚r‚e" -#define MSG_BAD_DEF_TYPE "Type de colonne invalide" -#define MSG_BAD_DIRECTORY "R‚pertoire invalide %s: %s" -#define MSG_BAD_DIST_JN_FIL "Filtre de jointure distincte invalide" -#define MSG_BAD_DIST_JOIN "Sp‚cification invalide de jointure distincte" -#define MSG_BAD_DOM_COL_DEF "D‚finition de colonnes invalide pour un domaine" -#define MSG_BAD_DOM_VALUE "La valeur %d n'appartient pas au domaine" -#define MSG_BAD_EDIT_INIT "Coparm: ‚dition %s initialis‚e improprement" -#define MSG_BAD_EVAL_TYPE "Fonction scalaire de type=%d invalide" -#define MSG_BAD_EXEC_MODE "Mode d'ex‚cution invalide '%s'" -#define MSG_BAD_EXP_ARGTYPE "Argument de type %d invalide pour une expression" -#define MSG_BAD_EXP_OPER "Op‚rateur=%d invalide pour expression" -#define MSG_BAD_FETCH_RC "Code retour inattendu de Fetch %d" -#define MSG_BAD_FIELD_FMT "Format de champ invalide %c pour %s" -#define MSG_BAD_FIELD_RANK "Rang %d invalide pour la colonne %s" -#define MSG_BAD_FIELD_TYPE "Mauvais type de champ %s" -#define MSG_BAD_FILE_HANDLE "Handle de fichier invalide: %s" -#define MSG_BAD_FILE_LIST "La section liste de fichiers est erron‚e" -#define MSG_BAD_FILTER "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d" -#define MSG_BAD_FILTER_CONV "Conversion filtre incorrecte, B_T=%d,%d" -#define MSG_BAD_FILTER_LINK "Op‚rateur de chaŒnage ill‚gal %d" -#define MSG_BAD_FILTER_OP "Op‚rateur de filtre invalide %d" -#define MSG_BAD_FILTEST_OP "Op‚rateur invalide %d %d pour FilTest" -#define MSG_BAD_FLD_FORMAT "Format invalide pour le champs %d de %s" -#define MSG_BAD_FLD_LENGTH "Champs %s trop long (%s --> %d) ligne %d de %s" -#define MSG_BAD_FLOAT_CONV "Convertion invalide d'un tableau flottant" -#define MSG_BAD_FPARM_NEXT "Coparm: FPARM avec Next non nul" -#define MSG_BAD_FREQ_SET "Sp‚cification erronn‚e de Freq pour la colonne %s" -#define MSG_BAD_FUNC_ARG "Funcarg de type %d non impl‚ment‚" -#define MSG_BAD_FUNC_ARGTYP "Mauvais type d'argument=%d pour une fonction" -#define MSG_BAD_FUNC_MODE "%s: mode invalide %d" -#define MSG_BAD_GENRE "Genre est invalide" -#define MSG_BAD_GETVIEW_RET "GetView: type de retour %d invalide" -#define MSG_BAD_HANDLE_VAL "Valeur Handle invalide" -#define MSG_BAD_HAV_FILTER "Filtre Having sur une requˆte non group‚e" -#define MSG_BAD_HAV_FILTYPE "Filtre invalide pour clause Having" -#define MSG_BAD_HEADER "Fichier %s: bloc en-tˆte alt‚r‚" -#define MSG_BAD_HEADER_VAL "Valeur invalide pour Header" -#define MSG_BAD_HEAD_END "Lecture fin d'en-tˆte impossible" -#define MSG_BAD_INDEX_COL "Colonne %s invalide pour index %s" -#define MSG_BAD_INDEX_DEF "D‚finition invalide pour index %s" -#define MSG_BAD_INDEX_FILE "Fichier index %s corrompu" -#define MSG_BAD_INDEX_PART "D‚finition colonne invalide pour index %s" -#define MSG_BAD_INPUT "Entr‚e incorrecte" -#define MSG_BAD_IN_ARGTYPE "Argument de type invalide pour l'op‚rateur IN" -#define MSG_BAD_IN_ENDING "Erreur: fin de chaŒne IN invalide" -#define MSG_BAD_IN_STRING "La chaŒne IN commence ou finie par des caractŠres invalides %c ... %c" -#define MSG_BAD_JCOL_TYPE "Erreur logique JCT: disparit‚ des types colonnes" -#define MSG_BAD_JOIN_EXP "Expression invalide pour une jointure" -#define MSG_BAD_JOIN_FILTER "Filtre de jointure invalide" -#define MSG_BAD_JOIN_OP "Op‚rateur de joint invalide %d" -#define MSG_BAD_LANG_SIZE "Le fichier langage a une mauvaise taille %d" -#define MSG_BAD_LINEFLD_FMT "Format invalide ligne %d champs %d de %s" -#define MSG_BAD_LINE_LEN "Longueur ligne non ‚gale … Lrecl" -#define MSG_BAD_LIST_TYPE "Type de liste invalide %d" -#define MSG_BAD_LOCALE "Locale invalide %s" -#define MSG_BAD_LOCDFON_ARG "Mauvais paramŠtre pour LOCDFON" -#define MSG_BAD_LOCNODE_USE "Usage inattendu de LOCNODE" -#define MSG_BAD_LRECL "Disparit‚ lrecl table/fichier (%d,%hd)" -#define MSG_BAD_MAX_HAVING "MAXTMP trop petit pour Having" -#define MSG_BAD_MAX_NREC "MaxRec=%d ne correspond pas … MaxBlk=%d Nrec=%d" -#define MSG_BAD_MAX_PARAM "Mauvais paramŠtres pour sp‚cifier une valeur maximum" -#define MSG_BAD_MAX_SETTING "Mauvaise valeur '%c' pour max" -#define MSG_BAD_MERGE_TYPE "Le type %d ne pas ˆtre intercall‚" -#define MSG_BAD_NODE_TYPE "Type noeud erron‚ pour la table" -#define MSG_BAD_OFFSET_VAL "Nul offset invalide pour une table CSV" -#define MSG_BAD_OPEN_MODE "Mode d'ouverture invalide %d" -#define MSG_BAD_OPERATOR "Op‚rateur invalide %s" -#define MSG_BAD_ORDER_MODE "Mode de tri %c invalide" -#define MSG_BAD_ORDER_TYPE "Tri sur objet de type=%d invalide" -#define MSG_BAD_OUTER_JOIN "Jointure externe invalide sur table enfant" -#define MSG_BAD_PAD_ARGTYP "Argument de type invalide pour Pad ou Justify" -#define MSG_BAD_PARAMETERS "%.8s: Mauvais paramŠtres" -#define MSG_BAD_PARAM_TYPE "%.8s: ParamŠtre de type=%d invalide" -#define MSG_BAD_PARM_COUNT "Nombre de paramŠtres incoh‚rent" -#define MSG_BAD_PHASE_NUM "Num‚ro de phrase %d hors limite" -#define MSG_BAD_PHRASE_NB "num‚ro de phrase hors limite %d rc=%d\n" -#define MSG_BAD_POS_CODE "POS_code invalide %d" -#define MSG_BAD_POS_TYPE "Type de POS_code invalide %d" -#define MSG_BAD_PROJNUM "Mauvais projnum %d pour la colonne %s" -#define MSG_BAD_QUERY_OPEN "Mode invalide %d pour l'ouverture d'une requˆte" -#define MSG_BAD_QUERY_TYPE "Type de requˆte %d invalide pour %s" -#define MSG_BAD_QUOTE_FIELD "Quote manquante dans %s champs %d ligne %d" -#define MSG_BAD_READ_NUMBER "Mauvais nombre %d de valeurs lues dans %s" -#define MSG_BAD_RECFM "Recfm type %d invalide pour DOSCOL" -#define MSG_BAD_RECFM_VAL "Valeur invalide %d de Recfm" -#define MSG_BAD_RESULT_TYPE "Mauvais type de r‚sultat %d pour %s" -#define MSG_BAD_RETURN_TYPE "Type de retour %d incorrect" -#define MSG_BAD_ROW_VALIST "Liste de valeurs invalide pour ROW" -#define MSG_BAD_ROW_VALNB "Nombre de valeurs in‚gal dans la liste" -#define MSG_BAD_SCF_ARGTYPE "Argument %d de type=%s invalide pour %s" -#define MSG_BAD_SEM_DOMAIN "Domain .%d invalide" -#define MSG_BAD_SETTINGS "Certaines sp‚cifications sont incompatibles avec le type de la table" -#define MSG_BAD_SET_CASE "La casse d'un tableau ne peut pas passer de non respect … respecter" -#define MSG_BAD_SET_STRING "SetValue: appel invalide pour STRING" -#define MSG_BAD_SET_TYPE "Set type %hd invalide" -#define MSG_BAD_SPECIAL_CMD "Commande sp‚ciale invalide" -#define MSG_BAD_SPECIAL_COL "Colonne sp‚ciale invalide %s" -#define MSG_BAD_SPEC_COLUMN "Colonne sp‚ciale invalide pour ce type de table" -#define MSG_BAD_SQL_PARAM "ParamŠtre SQL invalide pour FindColblk" -#define MSG_BAD_SUBLST_TYPE "Coparm: type %d de sous-liste invalide" -#define MSG_BAD_SUBSEL_IN_X "Sub-select invalide pour une expression" -#define MSG_BAD_SUBSEL_TYPE "Type %d invalide retourn‚ de Sub-Select" -#define MSG_BAD_SUB_RESULT "R‚sultat ind‚fini de fonction Sub-Select" -#define MSG_BAD_SUB_SELECT "Sub-select invalide comme argument de fonction" -#define MSG_BAD_TABLE_LINE "Ligne '%s' ill‚gale ou tronqu‚e dans la section Tables" -#define MSG_BAD_TABLE_LIST "Table %s absente de la liste des tables" -#define MSG_BAD_TABLE_TYPE "Type invalide %s pour la table %s" -#define MSG_BAD_TEST_TYPE "BlockTest sur tableau: types d‚pareill‚s %s %s" -#define MSG_BAD_TRIM_ARGTYP "Argument de type invalide pour Trim" -#define MSG_BAD_TYPE_FOR_IN "Types d'argument incompatibles pour la fonction IN" -#define MSG_BAD_TYPE_FOR_S "Type incorrecte %d pour %s(%d)" -#define MSG_BAD_TYPE_LIKE "Type(%d)= %d invalide pour LIKE" -#define MSG_BAD_UPD_COR "Le qualificateur %s de la colonne %s ne se refŠre pas … la table mise … jour %s" -#define MSG_BAD_USERBLK_LEN "Mauvaise longueur … l'‚criture du bloc utilisateur" -#define MSG_BAD_USETEMP "Usetemp invalide '%s'" -#define MSG_BAD_USETEMP_VAL "Valeur pour Usetemp invalide %d" -#define MSG_BAD_VALBLK_INDX "Valeur hors limites de l'index du bloc de valeurs" -#define MSG_BAD_VALBLK_TYPE "Type=%d invalide pour un bloc de valeurs" -#define MSG_BAD_VALNODE "Type %d invalide pour le noeud valeur colonne %s" -#define MSG_BAD_VALUE_TYPE "Type de valeur invalide %d" -#define MSG_BAD_VAL_UPDATE "Impossible de d‚terminer quelle valeur %s doit ˆtre mise … jour" -#define MSG_BAD_VIEW_OPEN "Mode invalide %d pour l'ouverture d'une View" -#define MSG_BAD_XMODE_VAL "Mode d'ex‚cution %d invalide" -#define MSG_BAD_XOBJ_TYPE "Mauvais type de Xobject %d" -#define MSG_BAS_NS_LIST "Format invalide de la liste des espace-noms" -#define MSG_BIN_F_TOO_LONG "Valeur trop longue pour le champ %s (%d --> %d)" -#define MSG_BIN_MODE_FAIL "Echec mode binaire: %s" -#define MSG_BLKTYPLEN_MISM "Disparit‚ types/longueurs de bloc dans SetValue" -#define MSG_BLK_IS_NULL "Blk est nul" -#define MSG_BLOCK_NO_MATCH "Bloc non correspondant" -#define MSG_BREAKPOINT "Point de controle" -#define MSG_BUFF_TOO_SMALL "GetColData: Buffer trop petit" -#define MSG_BUFSIZE_ERROR "Erreur en recherchant la taille du buffer" -#define MSG_BUILDING_GROUPS "Formation des groupes" -#define MSG_BUILD_DIST_GRPS "Formation des groupes distinctes" -#define MSG_BUILD_INDEX "Construction index %s sur %s" -#define MSG_BXP_NULL "Bxp nul dans PUTFON" -#define MSG_CANNOT_OPEN "Ouverture impossible de %s" -#define MSG_CD_ONE_STEP "Count Distinct doit ˆtre ex‚cut‚ en une seule ‚tape" -#define MSG_CD_ORDER_ERROR "Erreur de tri dans Count Distinct" -#define MSG_CHECKING_ROWS "Test des lignes … mettre … jour" -#define MSG_CHECK_LEVEL "Niveau de v‚rification fix‚ … %u" -#define MSG_CHSIZE_ERROR "Erreur dans chsize: %s" -#define MSG_CLN_NOT_IN_JOIN "La colonne C%d n'est pas dans le join" -#define MSG_CNTDIS_COL_LOST "Colonne du Count Distinct perdue" -#define MSG_COLIST_BAD_TYPE "Type=%d invalide pour Colist" -#define MSG_COLNAM_TOO_LONG "Nom de colonne trop long" -#define MSG_COLSEC_TOO_BIG "Section colonne trop grande, table %s (%d)" -#define MSG_COLS_REDUCED " (r‚duit par Maxcol)" -#define MSG_COLUMN_ERROR "Erreur de colonne" -#define MSG_COLUMN_MISMATCH "Colonne %s d‚pareill‚e" -#define MSG_COLUMN_NOT_KEY "La colonne jointe R%d.%s n'est pas une cl‚" -#define MSG_COL_ALLOC_ERR "Allocation impossible du noeud colonne" -#define MSG_COL_ALLOC_ERROR "Erreur d'allocation m‚moire pour la colonne %d" -#define MSG_COL_HAS_NO_DEF "La colonne %s n'est pas d‚finie" -#define MSG_COL_INVAL_TABLE "La colonne %s.%s n'existe pas dans la table %s alias %s" -#define MSG_COL_ISNOT_TABLE "La colonne %s n'est pas dans la table %s" -#define MSG_COL_NB_MISM "Le nombre de colonnes ne correspond pas" -#define MSG_COL_NOTIN_GRPBY "La colonne %s n'est pas dans la liste de Group By" -#define MSG_COL_NOTIN_TABLE "La colonne %s n'est dans aucune table" -#define MSG_COL_NOTIN_UPDT "%s n'appartient pas … la table mise … jour %s" -#define MSG_COL_NOT_CODED "La colonne %s n'est pas codifi‚e" -#define MSG_COL_NOT_EXIST "La colonne %s n'existe pas dans %s" -#define MSG_COL_NOT_FOUND "La colonne %s n'est pas dans la table %s" -#define MSG_COL_NOT_IN_DB "La colonne %s de la table %s n'est pas dans la base de donn‚es" -#define MSG_COL_NOT_IN_JOIN "La colonne %s n'est pas dans le join" -#define MSG_COL_NOT_SORTED "La colonne %s de la table %s n'est pas tri‚e" -#define MSG_COL_NUM_MISM "Disparit‚ du nombre de colonnes" -#define MSG_COL_USED_TWICE "Colonne %s utilis‚e deux fois ???" -#define MSG_COMPUTE_ERROR "Erreur dans Compute, op=%d" -#define MSG_COMPUTE_NIY "Compute non impl‚ment‚ pour TOKEN" -#define MSG_COMPUTING "Calculs en cours" -#define MSG_COMPUTING_DIST "Comptage des valeurs distinctes" -#define MSG_COMPUTING_FUNC "Calcul de(s) fonction(s)" -#define MSG_COM_ERROR "Erreur Com" -#define MSG_CONCAT_SUBNODE "Concat‚nation de sous-noeuds impossible" -#define MSG_CONNECTED "Connect‚e" -#define MSG_CONNECT_CANCEL "Connection interrompue par l'utilisateur" -#define MSG_CONNECT_ERROR "Erreur %d se connectant ŕ %s" -#define MSG_CONN_CLOSED "%s(%d) ferm‚e" -#define MSG_CONN_CREATED "Connexion %s cr‚e" -#define MSG_CONN_DROPPED "Connexion %s supprim‚e" -#define MSG_CONN_OPEN "%s(%d) ouverte (%s)" -#define MSG_CONN_SUC_OPEN "%s(%d) ouverte avec succŠs" -#define MSG_CONTROL_C_EXIT "Exit par Ctrl-C" -#define MSG_COPY_BAD_PHASE "Copie de liste invalide en phase %d" -#define MSG_COPY_INV_TYPE "Coparm: type non support‚ %d" -#define MSG_CORREL_NO_QRY "Les sous-requˆtes corr‚l‚es ne peuvent pas ˆtre de type QRY" -#define MSG_CREATED_PLUGDB " Cr‚‚ par PlugDB %s " -#define MSG_CURSOR_SET "Curseur remis … %d" -#define MSG_DATABASE_ACTIVE "Base de donn‚es %s activ‚e" -#define MSG_DATABASE_LOADED "Base de donn‚es %s charg‚e" -#define MSG_DATA_IS_NULL "ExecSpecialCmd: data est NULL" -#define MSG_DATA_MISALIGN "Mauvais alignement pour ce type de donn‚es" -#define MSG_DBASE_FILE "Fichier dBASE dbf: " -#define MSG_DB_ALREADY_DEF "Base de donn‚es %s d‚j… d‚finie" -#define MSG_DB_ALTERED "Base de donn‚es modifi‚e" -#define MSG_DB_CREATED "Base de donn‚es %s cr‚‚e" -#define MSG_DB_NOT_SPEC "Base de donn‚es non sp‚cifi‚e" -#define MSG_DB_REMOVED "Base de donn‚es %s retir‚e de la liste" -#define MSG_DB_SORT_ERROR "Erreur de tri DB" -#define MSG_DB_STOPPED "Arrˆt de la base de donn‚es %s" -#define MSG_DEBUG_NOT_ACTIV "Mode Debug inactif" -#define MSG_DEBUG_SET_INV "Invalide pour Debug: %c" -#define MSG_DEF_ALLOC_ERROR "Erreur d'allocation de la classe DEF %s" -#define MSG_DELETING_ROWS "Suppression des lignes" -#define MSG_DEL_FILE_ERR "Erreur … l'effacement de %s" -#define MSG_DEL_READ_ERROR "Delete: erreur en lecture req=%d len=%d" -#define MSG_DEL_WRITE_ERROR "Delete: erreur en ‚criture: %s" -#define MSG_DEPREC_FLAG "Option Flag p‚rim‚e, utiliser Coltype" -#define MSG_DICTIONARY "Dictionnaire " -#define MSG_DIRECT_VARTOK "AccŠs direct aux rŠgles du Variable Token non impl‚ment‚" -#define MSG_DISCONNECTED "D‚connect‚" -#define MSG_DISTINCT_ERROR "Plus d'un ‚l‚ment fonctionel DISTINCT" -#define MSG_DISTINCT_ROWS "S‚lection des lignes distinctes" -#define MSG_DISTINCT_VALUES "Extraction des valeurs distinctes" -#define MSG_DIS_NOHEAD_JOIN "Jointure distincte sur une table non en tˆte" -#define MSG_DLL_LOAD_ERROR "Erreur %d au chargement du module %s" -#define MSG_DOMAIN_EMPTY "Le domaine %s est vide" -#define MSG_DOMAIN_ERROR "Colonne %s: disparit‚ domaine(%s)/valeur(%s)" -#define MSG_DOMAIN_FULL "Le domaine %s est plein (max=%d)" -#define MSG_DOM_FILE_ERROR "Fichier domain %s introuvable" -#define MSG_DOM_NOT_SUPP "MS-DOM non support‚ par cette version" -#define MSG_DOM_OPEN_ERROR "Erreur d'ouverture du domaine: %s" -#define MSG_DOM_READ_ERROR "Erreur %d en lecture de domaine: %s" -#define MSG_DOM_READ_ONLY "La table domaine %s est en lecture seulement" -#define MSG_DOM_WRITE_ERROR "Erreur %d en ‚criture de domaine: %s" -#define MSG_DONE "Effectu‚, rc=%d" -#define MSG_DOSALMEM_NOMEM "Erreur d'allocation, pas assez de m‚moire" -#define MSG_DROP_DB_ERR "Echec du Drop sur le base de donn‚es %s" -#define MSG_DSORT_LOG_ERROR "Kindex: Erreur logique de tri distincte" -#define MSG_DUMMY_NO_COLS "Les tables DUMMY ne peuvent pas avoir de colonne" -#define MSG_DUPLICAT_COUNT "Count sur plus d'une colonne" -#define MSG_DUP_COL_NAME "La colonne %s existe en double" -#define MSG_DUP_PROJNUM "Non unique projnum %d pour la colonne %s" -#define MSG_DVAL_NOTIN_LIST "Valeur %s non trouv‚e dans la liste des valeurs distinctes de la colonne %s" -#define MSG_EMPTY_DOC "Document vide" -#define MSG_EMPTY_FILE "%s du fichier vide %s: " -#define MSG_ENDSTR_MISMATCH "Fins de chaŒne et de noeud ne correspondent pas" -#define MSG_END_OF_DELETE "%d ligne(s) enlev‚e(s) en %.2lf sec" -#define MSG_END_OF_INSERT "%d ligne(s) ins‚r‚e(s) en %.2lf sec" -#define MSG_END_OF_QUERY "%d ligne(s) extraite(s) en %.2lf sec" -#define MSG_END_OF_UPDATE "%d ligne(s) modifi‚e(s) en %.2lf sec" -#define MSG_EOF_AFTER_LINE "Fin de fichier aprŠs la ligne %d" -#define MSG_EOF_INDEX_FILE "EOF lisant le fichier index" -#define MSG_ERASED " et effac‚e" -#define MSG_ERASE_FAILED " (‚chec de l'effacement)" -#define MSG_ERROR "Erreur" -#define MSG_ERROR_IN_LSK "Erreur %d dans lseek64" -#define MSG_ERROR_IN_SFP "Erreur %d dans SetFilePointer" -#define MSG_ERROR_NO_PARM "ParamŠtre absent (valide seulement pour %.8s.1 et %.8s.5)" -#define MSG_ERROR_OPENING "Erreur … l'ouverture de : " -#define MSG_ERR_NUM_GT_MAX "Erreur: Numval (%d) plus grand que Maxnum (%d)" -#define MSG_ERR_READING_REC "Erreur lisant l'enregistrement %d de %s" -#define MSG_ERR_RET_RULE "Retour erreur, rŠgle=%u" -#define MSG_ERR_RET_TYPE "Retour erreur, type=%d" -#define MSG_EVAL_EXPIRED "Cette version d'évaluation est expir‚e" -#define MSG_EVAL_ONLY "L'utilisation de cette Dll est pour ‚valuation seulement" -#define MSG_EXECUTING "Ex‚cution" -#define MSG_EXECUTION_ERROR "Erreur d'ex‚cution" -#define MSG_EXEC_MODE_IS "Le mode d'ex‚cution est %s" -#define MSG_EXEC_MODE_RESET ". Mode remis … Execute" -#define MSG_EXEC_MODE_SET "Mode d'ex‚cution fix‚ … %s" -#define MSG_EXIT_EVAL_ERR "Erreur pendant l'‚valuation de Exit" -#define MSG_EXIT_FROM_LANG "Fin du langage %s version %d.%d" -#define MSG_FAIL_ADD_NODE "L'ajout du noeud %s dans la table a ‚chou‚" -#define MSG_FETCHING_DATA "Recherche des donn‚es" -#define MSG_FETCHING_ROWS "Recherche des lignes" -#define MSG_FETCH_NO_RES "Fetch: Pas de R‚sultats" -#define MSG_FIELD_TOO_LONG "Valeur trop longue pour le champs %d ligne %d" -#define MSG_FILELEN_ERROR "Erreur dans %s pour %s" -#define MSG_FILE_CLOSE_ERR "Erreur %d … la fermeture du fichier" -#define MSG_FILE_IS_EMPTY "Le fichier %s est vide" -#define MSG_FILE_MAP_ERR "Erreur de File mapping" -#define MSG_FILE_MAP_ERROR "CreateFileMapping %s erreur rc=%d" -#define MSG_FILE_NOT_FOUND "Fichier %s introuvable" -#define MSG_FILE_OPEN_YET "Fichier %s d‚j… ouvert" -#define MSG_FILE_UNFOUND "Fichier %s non trouv‚" -#define MSG_FILGRP_NO_TABLE "Table %d manquante pour groupe filtre" -#define MSG_FILTER_ATTACH "Filtre pass‚ … Attach" -#define MSG_FILTER_NO_TABLE "Filtre: premiŠre table manquante" -#define MSG_FIND_BAD_TYPE "Recherche dans un tableau: type non conforme %s %s" -#define MSG_FIX_OVFLW_ADD "D‚passement de capacit‚ en addition" -#define MSG_FIX_OVFLW_TIMES "D‚passement de capacit‚ en mutiplication" -#define MSG_FIX_UNFLW_ADD "Sous d‚passement de capacit‚ en addition" -#define MSG_FIX_UNFLW_TIMES "Sous d‚passement de capacit‚ en multiplication" -#define MSG_FLD_TOO_LNG_FOR "Champs %d trop long pour %s ligne %d de %s" -#define MSG_FLTST_NO_CORREL "FilTest ne devrait ˆtre appel‚ que pour les sous-requˆtes corr‚l‚es" -#define MSG_FLT_BAD_RESULT "Virgule flottante: r‚sultat inexacte" -#define MSG_FLT_DENORMAL_OP "Op‚rande virgule flottante non normalis‚" -#define MSG_FLT_INVALID_OP "Op‚ration virgule flottante invalide" -#define MSG_FLT_OVERFLOW "D‚passement de capacit‚ virgule flottante" -#define MSG_FLT_STACK_CHECK "Virgule flottante: Erreur de la pile" -#define MSG_FLT_UNDERFLOW "Sous-d‚passement de capacit‚ virgule flottante" -#define MSG_FLT_ZERO_DIVIDE "Virgule flottante: division par z‚ro" -#define MSG_FMT_WRITE_NIY "L'‚criture des fichiers %s n'est pas encore impl‚ment‚e" -#define MSG_FNC_NOTIN_SLIST "Fonction de tri absente de la liste de s‚lection" -#define MSG_FORMAT_ERROR "Erreur de formattage" -#define MSG_FOXPRO_FILE "Fichier FoxPro: " -#define MSG_FPUTS_ERROR "Erreur dans fputs: %s" -#define MSG_FSBPARP_NULL "PUTFON: fsbparp est nul" -#define MSG_FSEEK_ERROR "Erreur dans fseek: %s" -#define MSG_FSETPOS_ERROR "Erreur dans fseek pour i=%d" -#define MSG_FTELL_ERROR "Erreur dans ftell enregistrement=%d: %s" -#define MSG_FUNCTION_ERROR "Erreur dans %s: %d" -#define MSG_FUNC_ERRNO "Erreur %d dans %s" -#define MSG_FUNC_ERROR "Erreur dans %s" -#define MSG_FUNC_ERR_S "Erreur dans %s: %s" -#define MSG_FUNC_REF_DEL "R‚f‚rence … une fonction d‚finie (rŠgle %d) qui a ‚t‚ supprim‚e" -#define MSG_FWRITE_ERROR "Erreur dans fwrite: %s" -#define MSG_GETCWD_ERR_NO "?getcwd %s errno=%d" -#define MSG_GETFILESIZE_ERR "Erreur %d dans GetFileSize" -#define MSG_GET_DIST_VALS "R‚cup‚ration des valeurs distinctes de " -#define MSG_GET_ERROR "Erreur dans %s (colonne %d)" -#define MSG_GET_FUNC_ERR "Erreur en recherche de la fonction %s: %s" -#define MSG_GET_NAME_ERR "Erreur en retrouvant le nom d'une table SYS" -#define MSG_GLOBAL_ERROR "Erreur d'allocation de Global (taille=%d)\n" -#define MSG_GRAM_ALLOC_ERR "Erreur d'allocation dans Grammar Up" -#define MSG_GRAM_MISMATCH "Avertissement: version de GRAMMAR p‚rim‚e (sauv‚ sous GRAMMAR v%u)" -#define MSG_GRAM_SUBSET_ERR "Erreur d'initialisation du dictionnaire de la grammaire" -#define MSG_GRBY_TAB_NOTIMP "Group by avec tables jointes non impl‚ment‚" -#define MSG_GROUPBY_NOT_ALL "Group By doit inclure toutes les s‚lections non-fonctionnelles" -#define MSG_GROUP_ON_FUNC "Group by invalide sur colonne fonctionnelle" -#define MSG_GRP_COL_MISM "Disparit‚ colonne des groupes" -#define MSG_GRP_LIST_MISMAT "Le groupement ne couvre pas la liste de s‚lection" -#define MSG_GUARD_PAGE "Violation de page de garde" -#define MSG_GZOPEN_ERROR "gzopen %s: erreur %d sur %s" -#define MSG_GZPUTS_ERROR "Erreur dans gzputs: %s" -#define MSG_HANDLE_IS_NULL "%s est NULL: erreur code: %d" -#define MSG_HARRY_COMP_NIY "Compute non impl‚ment‚ pour les chaŒnes cod‚es" -#define MSG_HAVING_FILTER "Traitement du Filtre Having" -#define MSG_HBUF_TOO_SMALL "Buffer(%d) trop petit pour entˆte(%d)" -#define MSG_HEAD_OPEN_ERROR "Erreur … l'ouverture du fichier header" -#define MSG_HEAD_READ_ERROR "Erreur en lecture du fichier header %s" -#define MSG_HEAD_WRITE_ERR "Erreur en ‚criture du fichier header" -#define MSG_HI_OFFSET_ERR "Offset sup‚rieur non nul" -#define MSG_HUGE_DEFAULT "Huge est %d par d‚fault" -#define MSG_HUGE_WARNING_1 "M‚moire Huge non compatible 16-bit pour %d\n" -#define MSG_HUGE_WARNING_2 "R‚sultats impr‚visibles possibles\n" -#define MSG_IDLE "Au repos" -#define MSG_ILLEGAL_INSTR "Instruction ill‚gale" -#define MSG_ILL_FILTER_CONV "Conversion implicite ill‚gale dans un filtre" -#define MSG_INDEX_CREATED "Index %s cr‚‚ sur %s" -#define MSG_INDEX_DEF_ERR "Erreur sauvegardant l'index d‚finition pour %s" -#define MSG_INDEX_DROPPED "Index %s supprim‚ de %s" -#define MSG_INDEX_INIT_ERR "Echec de l'initialisation de l'index %s" -#define MSG_INDEX_NOT_DEF "Index %s non d‚fini" -#define MSG_INDEX_NOT_UNIQ "L'index n'est pas Unique" -#define MSG_INDEX_ONE_SAVE "Les index sont sauvegard‚s dans un fichier unique" -#define MSG_INDEX_SEP_SAVE "Les index sont sauvegard‚s dans des fichiers s‚par‚s" -#define MSG_INDEX_YET_ON "L'index %s existe d‚j… sur %s" -#define MSG_INDX_ALL_DROP "Tous les index de %s supprim‚s" -#define MSG_INDX_COL_NOTIN "La colonne index %s n'existe pas dans la table %s" -#define MSG_INDX_EXIST_YET "L'entr‚e index existe d‚j…" -#define MSG_INIT_ERROR "Erreur ŕ l'initialisation de %s" -#define MSG_INIT_FAILED "L'initialisation de %s a ‚chou‚" -#define MSG_INPUT "Entr‚e: " -#define MSG_INPUT_KEYBD_YET "L'entr‚e est d‚j… au clavier" -#define MSG_INSERTING "Insertion: " -#define MSG_INSERT_ERROR "Insert erreur: usage multiple du fichier %s" -#define MSG_INSERT_MISMATCH "Les listes colonne et valeur ne correspondent pas" -#define MSG_INTERNAL "interne" -#define MSG_INT_COL_ERROR "Erreur interne sur la colonne index %s" -#define MSG_INT_OVERFLOW "D‚passement de capacit‚ sur entier" -#define MSG_INT_ZERO_DIVIDE "Division entiŠre par z‚ro" -#define MSG_INVALID_BIP "Bip invalide .%d" -#define MSG_INVALID_DISP "Disposition invalide" -#define MSG_INVALID_FTYPE "SBV: Ftype %d invalide" -#define MSG_INVALID_HANDLE "Poign‚e invalide" -#define MSG_INVALID_OPER "Op‚rateur invalide %d pour %s" -#define MSG_INVALID_OPTION "Option invalide %s" -#define MSG_INV_COLUMN_TYPE "Type %d Invalide pour la colonne %s" -#define MSG_INV_COL_DATATYP "Type de donn‚es %d invalide pour la colonne %d" -#define MSG_INV_COL_NUM "Colonne invalide %d" -#define MSG_INV_COL_TYPE "Type de colonne %s invalide" -#define MSG_INV_CONC_BIP "Bip invalide (seuls valides: %.8s.0 .1 and .5)" -#define MSG_INV_DATA_PATH "Chemin vers les donn‚es invalide" -#define MSG_INV_DEF_READ "Lecture diff‚r‚e invalide rc=%d" -#define MSG_INV_DIRCOL_OFST "Offset invalide pour une colonne DIR" -#define MSG_INV_DOMAIN_TYPE "Type invalide %d" -#define MSG_INV_FILTER "Filtre r‚siduel dans %s" -#define MSG_INV_FNC_BUFTYPE "FNC: Type %d de l'argument invalide pour %s" -#define MSG_INV_INFO_TYPE "Type d'info catalog invalide %d" -#define MSG_INV_INIPATH "Inipath invalide " -#define MSG_INV_MAP_POS "Position m‚moire invalide" -#define MSG_INV_OPERATOR "op‚rateur invalide %d\n" -#define MSG_INV_PARAMETER "ParamŠtre invalide %s" -#define MSG_INV_PARM_TYPE "Type de paramŠtre invalide" -#define MSG_INV_QUALIFIER "Qalificateur '%s' invalide" -#define MSG_INV_QUERY_TYPE "Type de requˆte %d invalide" -#define MSG_INV_RAND_ACC "L'accŠs al‚atoire d'une table non optimis‚e est impossible" -#define MSG_INV_REC_POS "Position d'enregistrement invalide" -#define MSG_INV_RESULT_TYPE "Type de r‚sultat invalide %s" -#define MSG_INV_SET_SUBTYPE "Type de formattage %d invalide" -#define MSG_INV_SPECIAL_CMD "%s: Commande sp‚ciale invalide" -#define MSG_INV_SUBTYPE "Sous type invalide %s" -#define MSG_INV_TOK_DOMAIN "Le domaine %s n'existe pas" -#define MSG_INV_TOPSEM_CMD "Commande TopSem invalide %c" -#define MSG_INV_TRANSF_USE "Usage invalide en rŠgle transformationnelle" -#define MSG_INV_TYPE_SPEC "Sp‚cification de type invalide (%.8s.%d)" -#define MSG_INV_UPDT_TABLE "Table %s invalide pour Update" -#define MSG_INV_VALUE_LIST "Liste de valeurs invalide pour Insert" -#define MSG_INV_WHERE_JOIN "Clause Where invalide dans une requˆte de jointure" -#define MSG_INV_WORK_PATH "Chemin de travail invalide" -#define MSG_IN_ARGTYPE_MISM "Arguments de types incompatibles pour une expression IN" -#define MSG_IN_USE " et en activit‚" -#define MSG_IN_WITHOUT_SUB "IN ou EXISTS sans tableau ou subquery" -#define MSG_IS_NOT_CONN "%s n'est pas une connexion d‚finie" -#define MSG_JCT_MISS_COLS "Colonnes manquantes pour une table JCT" -#define MSG_JCT_MISS_TABLE "Table jointe manquante pour JCT" -#define MSG_JCT_NO_FILTER "Filtrage impossible des tables virtuelles JCT" -#define MSG_JCT_NO_KEY "Erreur logique JCT: cl‚ manquante" -#define MSG_JOIN_KEY_NO_COL "La cl‚ de jointure n'est pas une colonne" -#define MSG_KEY_ALLOC_ERR "Erreur d'allocation d'un bloc offset cl‚" -#define MSG_KEY_ALLOC_ERROR "Erreur d'allocation m‚moire, Klen=%d n=%d" -#define MSG_LANGUAGE_QUIT "%s lib‚r‚" -#define MSG_LANG_ACTIVE "Langage %s actif" -#define MSG_LANG_ALLOC_FAIL "PlugInitLang: Erreur d'allocation du bloc Lang" -#define MSG_LANG_ALREADY_UP "Langage d‚j… en ‚dition" -#define MSG_LANG_BAD_SAVE "Langage %s peut-ˆtre incorrectement sauvegard‚" -#define MSG_LANG_NOT_FREED "Langage %s non lib‚rable (pas dans la chaŒne principale)" -#define MSG_LANG_SAVED "Langage %s sauvegard‚" -#define MSG_LANG_WR_LEN_ERR "Erreur de longueur … l'‚criture du bloc Lang" -#define MSG_LDF_ALLOC_ERROR "Erreur d'allocation d'un LdfBlock" -#define MSG_LDF_RN_MISMATCH "LDF: d‚calage des num‚ros de rŠgle" -#define MSG_LDF_WLEN_ERROR "Erreur de longueur en ‚crivant LdfData" -#define MSG_LDF_W_LEN_ERROR "Erreur de longueur pour LdfData en ‚criture" -#define MSG_LIC_NO_MYSQL "Votre licence actuelle ne permet pas l'utilisation du type MYSQL" -#define MSG_LINEAR_ERROR "Erreur de lin‚arisation" -#define MSG_LINE_LENGTH "Largeur d'impression fix‚e … %d" -#define MSG_LINE_MAXLIN "Nombre de lignes de travail plafonn‚ … %d" -#define MSG_LINE_MAXRES "Nombre de lignes de r‚sultat plafonn‚ … %d" -#define MSG_LINE_MAXTMP "Nombre de lignes interm‚diaires plafonn‚ … %d" -#define MSG_LINE_TOO_LONG "La nouvelle ligne est trop longue" -#define MSG_LINJOINDB_ERROR "Erreur systŠme: appel incorrecte … LinJoinDB" -#define MSG_LIST "--Liste--" -#define MSG_LNG_NOT_IN_LIST "Le langage %s n'est pas dans la liste" -#define MSG_LOADING_DB "Chargement description de la BD" -#define MSG_LOADING_FAILED "Le chargement de %s a ‚chou‚" -#define MSG_LOAD_CDLL_ERROR "Erreur au chargement de ConnDll: rc=%d" -#define MSG_LOCSTRG_TOO_BIG "LOCSTRG: n trop grand ? (%d)\n" -#define MSG_LOGICAL_ERROR "%s: Erreur logique" -#define MSG_LRECL_TOO_SMALL "Lrecl trop petit (longueur en-tˆte = %d)" -#define MSG_MAC_NO_DELETE "Pas de suppression de lignes pour les tables MAC" -#define MSG_MAC_NO_INDEX "Pas d'accŠs direct aux tables MAC" -#define MSG_MAC_READ_ONLY "Les tables MAC sont en lecture seulement" -#define MSG_MAC_WIN_ONLY "Les tables MAC sont seulement sous Windows" -#define MSG_MAKE_EMPTY_FILE "G‚n‚ration du fichier vide %s: %s" -#define MSG_MAKING "G‚n‚ration" -#define MSG_MAKING_DISTINCT "Regroupement des valeures distinctes" -#define MSG_MALLOC_ERROR "Allocation m‚moire impossible par %s" -#define MSG_MALLOC_NULL "malloc retourne Null" -#define MSG_MAP_NO_MORE "Le type %s n'est plus support‚" -#define MSG_MAP_OBJ_ERR "Erreur %d … la fermeture du map objet" -#define MSG_MAP_VEC_ONLY "MAP Insert permis seulement pour les tables VEC Estimate" -#define MSG_MAP_VIEW_ERROR "MapViewOfFile %s erreur rc=%d" -#define MSG_MAXSIZE_ERROR "Maxsize incalculable sur table ouverte" -#define MSG_MAXTMP_TRUNCATE "R‚sultats interm‚diaires tronqu‚s par maxtmp=%d" -#define MSG_MAX_BITMAP "Taille maxi des bitmaps d'optimisation fix‚e … %d" -#define MSG_MEMSIZE_TOO_BIG "Erreur: memsize (%d) trop grand pour Length (%d)" -#define MSG_MEM_ALLOC_ERR "Erreur d'allocation m‚moire, taille %s = %d" -#define MSG_MEM_ALLOC_ERROR "Erreur d'allocation m‚moire" -#define MSG_MEM_ALLOC_YET "M‚moire d‚j… allou‚e" -#define MSG_METAFILE_NOTFND "Fichier Meta introuvable" -#define MSG_MISPLACED_QUOTE "Appostrophe mal plac‚e ligne %d" -#define MSG_MISSING "Manquant: Value=%p Argval=%p Builtin=%d" -#define MSG_MISSING_ARG "Argument manquant pour l'op‚rateur %d" -#define MSG_MISSING_COL_DEF "D‚finition des colonnes manquante" -#define MSG_MISSING_CONNECT "Connection #1 manquante" -#define MSG_MISSING_EOL "Fin de ligne manquante dans %s" -#define MSG_MISSING_FIELD "Champs %d manquant dans %s ligne %d" -#define MSG_MISSING_FNAME "Nom du fichier manquant" -#define MSG_MISSING_NODE "Noeud %s manquant dans %s" -#define MSG_MISSING_POS "POS code manquant" -#define MSG_MISSING_ROWNODE "Impossible de trouver le noeud de la ligne %d" -#define MSG_MISSING_SERV_DB "Indication serveur et/ou base de donn‚es manquante" -#define MSG_MISS_LEAD_COL "Colonne majeure %s manquante" -#define MSG_MISS_NAME_LRECL "Nom du fichier et/ou LRECL manquant" -#define MSG_MISS_TABLE_LIST "Liste des tables manquante" -#define MSG_MISS_VCT_ELMT "Taille de bloc vectoriel manquante (Elements)" -#define MSG_MIS_TAG_LIST "Liste des balises colonne manquante" -#define MSG_MKEMPTY_NIY "MakeEmptyFile: pas encore implement‚ pour Huge et Unix" -#define MSG_MOVE_INV_TYPE "MOVPARM: paramŠtre de type invalide %d" -#define MSG_MULT_DISTINCT "Distinct utilis‚ plus d'une fois" -#define MSG_MULT_KEY_ERROR "Erreur sur cl‚ multiple k=%d n=%d" -#define MSG_MUL_MAKECOL_ERR "Erreur logique dans TABMUL::MakeCol" -#define MSG_MYSQL_CNC_OFF "La connexion … MySQL est ferm‚e" -#define MSG_MYSQL_CNC_ON "La connexion … MySQL est ‚tablie" -#define MSG_MYSQL_NOT_SUP "Pas de support de MySQL dans cette version" -#define MSG_MY_CNC_ALREADY "La connexion … MySQL est d‚j… active" -#define MSG_NAME_CONV_ERR "Erreur de convertion du nom de noeud" -#define MSG_NAME_IS_USED "Le nom %s est d‚j… utilis‚" -#define MSG_NCOL_GT_MAXCOL "Trop de colonnes (%d > %d max)" -#define MSG_NEW_CHAR_NULL "new char(%d) retourne Null" -#define MSG_NEW_DOC_FAILED "Impossible de cr‚er le nouveau document" -#define MSG_NEW_RETURN_NULL "NULL renvoy‚ par New dans PlugEvalLike" -#define MSG_NEW_TABLE_ERR "La nouvelle table %s ne peut pas ˆtre charg‚e" -#define MSG_NEXT_FILE_ERROR "Erreur en recherche du fichier suivant. rc=%s" -#define MSG_NODEF_FROM_VIEW "Pas de d‚finition de table depuis une view" -#define MSG_NODE_FOR_CHAR "Noeud %s trouve au lieu d'un caractŠre" -#define MSG_NODE_SUBSET_ERR "Erreur d'initialisation de la zone Noeud %d" -#define MSG_NONCONT_EXCEPT "Exception non-continuable" -#define MSG_NON_DUP_HAVING "Clause Having dans une requˆte non fonctionelle" -#define MSG_NON_EVAL_SEM "Sem non ‚valu‚e: p_no=%d" -#define MSG_NOP_ZLIB_INDEX "L'indexage d'une table zlib non optimis‚e est impossible" -#define MSG_NOT_A_DBF_FILE "Le fichier n'a pas le format dBASE dbf " -#define MSG_NOT_ENOUGH_COLS "Pas assez de colonnes dans %s" -#define MSG_NOT_ENOUGH_MEM "M‚moire insuffisante pour cette op‚ration" -#define MSG_NOT_FIXED_LEN "Fichier %s non fixe, len=%d lrecl=%d" -#define MSG_NOT_IMPLEMENTED "Non implement‚: %.8s" -#define MSG_NOT_IMPL_JOIN "Pas impl‚ment‚ pour les jointures" -#define MSG_NOT_IMPL_SET "Pas impl‚ment‚ pour les op‚rateurs d'ensembles" -#define MSG_NOT_IMPL_YET "Pas encore implement‚" -#define MSG_NOT_LINEARIZED "Arborescence des tables non lin‚aris‚e" -#define MSG_NOT_MODIFIABLE " (non modifiable)" -#define MSG_NO_0DH_HEAD "0DH manquant en fin d'en-tˆte (dbc=%d)" -#define MSG_NO_ACTIVE_APPL "Pas d'application active" -#define MSG_NO_ACTIVE_DB "Pas de base de donn‚es active" -#define MSG_NO_ACTIVE_UDIC "Pas de dictionaire utilisateur actif" -#define MSG_NO_AGGR_FUNC "Fonction aggr‚g‚e %d ill‚gale … cet endroit" -#define MSG_NO_AREA_FILE "Fichier Area introuvable" -#define MSG_NO_AVAIL_RESULT "Pas de r‚sultat disponible" -#define MSG_NO_BIG_DELETE "D‚l‚tion Partielle non impl‚ment‚e pour les fichiers HUGE" -#define MSG_NO_CHAR_FROM "Conversion de type %d en caractŠres impossible" -#define MSG_NO_CLUSTER_COL "Pas de colonne optimisable" -#define MSG_NO_COL_ADDING "Ajouter des colonnes dans une d‚finition existante est impossible" -#define MSG_NO_COL_DEF_AS "La d‚finitions des colonnes est incompatible avec AS Select" -#define MSG_NO_COL_FOUND "La section colonne %s est vide" -#define MSG_NO_COL_IN_TABLE "La colonne %d n'est pas dans la table %s" -#define MSG_NO_COL_SECTION "Section colonne manquante pour la table %s" -#define MSG_NO_CONNECT_ADDR "Adresse de connection non sp‚cifi‚e" -#define MSG_NO_CONST_FILTER "Filtres constants non implement‚s" -#define MSG_NO_CURLY_BRKT "Pas d'accolade de fermeture" -#define MSG_NO_DATABASE "Base de donn‚es %s introuvable" -#define MSG_NO_DATE_FMT "Pas de format date pour le valblock de type %d" -#define MSG_NO_DBF_INSERT "Insert pas encore impl‚ment‚ pour les fichier DBF" -#define MSG_NO_DEF_FNCCOL "Colonne fonction par d‚faut introuvable" -#define MSG_NO_DEF_PIVOTCOL "Colonne pivot par d‚faut introuvable" -#define MSG_NO_DIR_INDX_RD "Pas d'accŠs directe des tables %s" -#define MSG_NO_DMY_DIR_ACC "Pas d'accŠs direct aux tables virtuelles DUMMY" -#define MSG_NO_DOM_DELETE "D‚l‚tion Partielle non impl‚ment‚e pour les domaines" -#define MSG_NO_DOM_MATCH "ChaŒne %.8s... non touv‚e dans le domaine %s" -#define MSG_NO_EDITED_LANG "Coparm: Pas de langage en ‚dition" -#define MSG_NO_EXP_LINK "Liaison par expression invalide pour une table JCT" -#define MSG_NO_EXT_FILTER "Le filtrage ne peut se r‚f‚rer … une autre table" -#define MSG_NO_EXT_UPDATE "Pas de mise … jour en r‚f‚rence … une autre table" -#define MSG_NO_FEAT_SUPPORT "%s non support‚ dans cette version" -#define MSG_NO_FILE_LIST "La table %s n'a pas de liste de fichiers" -#define MSG_NO_FLD_FORMAT "Format absent pour le champs %d de %s" -#define MSG_NO_FORMAT_COL "Type COLUMN informattable" -#define MSG_NO_FORMAT_TYPE "Le format ne peut pas ˆtre d‚fini … partir du type %d" -#define MSG_NO_FULL_JOIN "Jointures autoris‚es seulement … ‚galit‚ sur cl‚(s)" -#define MSG_NO_FUL_OUT_JOIN "Jointures externes complŠtes non support‚es" -#define MSG_NO_FUNC_ORDER "Tri non support‚ sur ‚l‚ment fonctionnel" -#define MSG_NO_HEAD_JOIN "Jointure sur une table non en tˆte" -#define MSG_NO_HQL_CONV "Conversion en HQL non disponible" -#define MSG_NO_INDEX "La table %s n'a pas d'index" -#define MSG_NO_INDEX_GBX "Pas ou mauvais index pour SQLGBX" -#define MSG_NO_INDEX_IN "Pas d'index dans %s" -#define MSG_NO_INDEX_READ "Pas d'accŠs directe des tables multiples" -#define MSG_NO_INIT_LANG "Pas de langage initial" -#define MSG_NO_JOIN_TO_EXP "Jointure vers une expression impossible" -#define MSG_NO_JOIN_UPDEL "Pas de jointure avec Update/Delete" -#define MSG_NO_KEY_COL "Pas de colonne cl‚ trouv‚e" -#define MSG_NO_KEY_UPDATE "Le nom des cl‚s ne peut pas ˆtre modifi‚" -#define MSG_NO_LANGUAGE "Pas de langage op‚rationnel\n" -#define MSG_NO_LANG_TO_QUIT "Pas de langage … quitter" -#define MSG_NO_LISTVAL_HERE "LSTBLK: Liste de valeurs utilis‚e hors contexte" -#define MSG_NO_MAP_INSERT "MAP incompatible avec Insert" -#define MSG_NO_MATCHING_COL "Pas de colonne correspondant … %s dans %s" -#define MSG_NO_MATCH_COL "Colonne correspondante introuvable" -#define MSG_NO_MEMORY "M‚moire pleine" -#define MSG_NO_MEM_CORR_SUB "Subquery corr‚l‚e en m‚moire non encore impl‚ment‚e" -#define MSG_NO_MODE_PADDED "Mode non support‚ pour les fichiers 'padded'" -#define MSG_NO_MORE_COL "La colonne %s n'est plus dans la table pivot" -#define MSG_NO_MORE_LANG "Plus de langage, exit de %s\n" -#define MSG_NO_MORE_VAR "Les fichiers VAR ne sont plus support‚s" -#define MSG_NO_MULCOL_JOIN "Jointure vers un index multi-colonne pas encore possible" -#define MSG_NO_MULT_HAVING "Clauses Having multiples non impl‚ment‚es" -#define MSG_NO_MUL_DIR_ACC "AccŠs direct des tables multiples pas encore impl‚ment‚" -#define MSG_NO_MUL_VCT "Les tables VCT ne peuvent pas ˆtre multiples" -#define MSG_NO_MYSQL_CONN "Aucune connexion MySQL ouverte" -#define MSG_NO_MYSQL_DELETE "Pas de Delete pour les tables MySQL" -#define MSG_NO_NBCOL "Pas de NBcol" -#define MSG_NO_NBLIN "Pas de NBlin, MaxSize ou Continued" -#define MSG_NO_NBLIN_CONT "Fetch: Pas de NBlin ou Continued" -#define MSG_NO_NULL_CONST "Les constantes ne sont pas prises en charge" -#define MSG_NO_ODBC_COL "Colonnes ODBC automatiques non support‚es par cette version" -#define MSG_NO_ODBC_DELETE "Delete ne devrait pas ˆtre appel‚ pour les tables ODBC" -#define MSG_NO_ODBC_DIRECT "AccŠs directe des tables ODBC non encore impl‚ment‚" -#define MSG_NO_ODBC_MUL "Multiple(2) non support‚ pour les tables ODBC" -#define MSG_NO_ODBC_SPECOL "Pas de colonne sp‚ciale ODBC" -#define MSG_NO_OPT_COLUMN "Pas optimisable ou pas de colonne optimis‚es" -#define MSG_NO_OP_MODIF "Les modificateurs ne s'appliquent pas … %s" -#define MSG_NO_PARAMETER "Pas de paramŠtre" -#define MSG_NO_PART_DEL "Delete partiel des fichier %s impossible" -#define MSG_NO_PART_MAP "Mapping partiel non impl‚ment‚ pour cet OS" -#define MSG_NO_PAR_BLK_INS "Insertion de bloc partiel impossible" -#define MSG_NO_PIV_DIR_ACC "Pas d'accŠs directe aux tables PIVOT" -#define MSG_NO_POS_ADDED "Pos_code non ajout‚" -#define MSG_NO_PROMPTING "Relance impossible pour les tables distribu‚es" -#define MSG_NO_QRY_DELETE "Delete n'est pas utilisable pour les views QRY" -#define MSG_NO_QUERY_ARRAY "Tableaux avec QUERY non encore impl‚ment‚s" -#define MSG_NO_RCUR_DSK_YET "Usage r‚cursif de DISK non encore implement‚" -#define MSG_NO_READ_32 "Lecture de 32 octets impossible" -#define MSG_NO_RECOV_SPACE "Espace non recouvrable dans le fichier index" -#define MSG_NO_REF_DELETE "Pas de suppression en r‚f‚rence … une autre table" -#define MSG_NO_REF_UPDATE "Pas de mise … jour en r‚f‚rence … une autre table" -#define MSG_NO_REMOTE_FNC "Certaines fonctions ne peuvent pas ˆtre ex‚cut‚es … distance" -#define MSG_NO_ROWID_FOR_AM "AccŠs direct impossible de ROWID pour les tables de type %s" -#define MSG_NO_ROW_NODE "Le nom du Rownode n'est pas d‚fini" -#define MSG_NO_SECTION_NAME "Nom de section manquant" -#define MSG_NO_SEC_UPDATE "Les noms de section ne peuvent pas ˆtre modifi‚s" -#define MSG_NO_SELECTED_DB "Aucune base de donn‚es s‚lect‚e" -#define MSG_NO_SELF_PIVOT "Une table ne peut se pivoter elle-mˆme !" -#define MSG_NO_SERVER_FOUND "Serveur introuvable" -#define MSG_NO_SETPOS_YET "SetPos pas encore impl‚ment‚ pour les fichier %s" -#define MSG_NO_SFEXIT_UNIX "Fonction %s non disponible sur Unix" -#define MSG_NO_SOURCE " (pas de source)" -#define MSG_NO_SPEC_COL "Pas de colonne sp‚ciales MYSQL" -#define MSG_NO_SQL_DELETE "Delete n'est pas utilisable actuellement pour les views SQL" -#define MSG_NO_SUB_VAL "Pas de sous-value d'un tableau de type %d" -#define MSG_NO_SUCH_INDEX "La table %s n'a pas l'index %s" -#define MSG_NO_SUCH_SERVER "Serveur %s introuvable" -#define MSG_NO_SUCH_TABLE "Table %s pas dans la base de donn‚es" -#define MSG_NO_TABCOL_DATA "Pas de donn‚es pour la table %s colonne %s" -#define MSG_NO_TABLE_COL "Aucune colonne trouv‚e pour %s" -#define MSG_NO_TABLE_DEL "Delete non autoris‚ pour les tables %s " -#define MSG_NO_TABLE_DESC "Pas de bloc descriptif de table" -#define MSG_NO_TABLE_INDEX "La table %s n'a pas d'index" -#define MSG_NO_TABLE_LIST "Pas de liste de tables" -#define MSG_NO_TAB_DATA "Pas de donn‚es pour la table %s" -#define MSG_NO_TERM_IN_TOK "Les non-terminaux ne sont pas utilisables dans les rŠgles de Token" -#define MSG_NO_TOKEN_DB "DB introuvable pour la colonne TOKEN %s" -#define MSG_NO_UNIX_CATINFO "Pas d'info catalogue sous Unix" -#define MSG_NO_UPDEL_JOIN "Pas de jointure de tables ODBC pour Update/Delete" -#define MSG_NO_VCT_DELETE "D‚l‚tion Partielle non impl‚ment‚e pour les fichiers VCT" -#define MSG_NO_VIEW_COLDEF "Colonne d‚finition impossible pour les views" -#define MSG_NO_VIEW_SORT "La View fonctionnelle %s ne peut pas ˆtre tri‚e ou jointe" -#define MSG_NO_ZIP_DELETE "Delete sur fichier Zip non encore implement‚" -#define MSG_NO_ZIP_DIR_ACC "AccŠs directe des tables ZDOS non encore implement‚" -#define MSG_NULL_COL_VALUE "La colonne n'a pas de valeur" -#define MSG_NULL_ENTRY "InitLang, entr‚e nulle %d %s" -#define MSG_NULL_QUERY "Requˆte vide" -#define MSG_NUMVAL_NOMATCH "Disparit‚ de Numval pour %s" -#define MSG_N_FULL_PARSES "%d significations" -#define MSG_ODBC_READ_ONLY "ODBC est actuellement en lecture seulement" -#define MSG_OFFSET_NOT_SUPP "Offset non support‚ pour ce type de sous requˆte" -#define MSG_ONE_LANG_YET "Un langage est d‚j… en ‚dition" -#define MSG_ONE_PARAM_ONLY "Un seul paramŠtre autoris‚" -#define MSG_ONLY_LOG10_IMPL "Seul Log10 est implement‚" -#define MSG_ON_LANGUAGE "Langage %.8s version %d niveau %d ‚ditable" -#define MSG_OPENING "Ouverture" -#define MSG_OPENING_QUERY "Ouverture de la requˆte" -#define MSG_OPEN_EMPTY_FILE "Ouverture du fichier vide %s: %s" -#define MSG_OPEN_ERROR "Erreur d'ouverture %d en mode %d sur %s: " -#define MSG_OPEN_ERROR_IS "Erreur … l'ouverture de %s: %s" -#define MSG_OPEN_ERROR_ON "Erreur d'ouverture sur %s" -#define MSG_OPEN_MODE_ERROR "Erreur d'ouverture(%s) %d sur %s" -#define MSG_OPEN_SORT_ERROR "Erreur logique de tri dans QUERY Open" -#define MSG_OPEN_STRERROR "Erreur … l'ouverture: %s" -#define MSG_OPEN_W_ERROR "Erreur … l'ouverture de %s en ‚criture" -#define MSG_OPTBLK_RD_ERR "Erreur … la lecture d'un bloc optimisation: %s" -#define MSG_OPTBLK_WR_ERR "Erreur … l'‚criture d'un bloc optimisation: %s" -#define MSG_OPTIMIZING "Optimisation de " -#define MSG_OPT_BMAP_RD_ERR "Erreur en lecture des bitmaps d'optimisation: %s" -#define MSG_OPT_BMAP_WR_ERR "Erreur en ‚criture des bitmaps d'optimisation: %s" -#define MSG_OPT_CANCELLED "Optimisation interrompue par l'utilisateur" -#define MSG_OPT_DVAL_RD_ERR "Erreur en lecture des valeurs distinctes: %s" -#define MSG_OPT_DVAL_WR_ERR "Erreur en ‚criture des valeurs distinctes: %s" -#define MSG_OPT_HEAD_RD_ERR "Erreur en lecture de l'entˆte du fichier opt: %s" -#define MSG_OPT_HEAD_WR_ERR "Erreur en ‚criture de l'entˆte du fichier opt: %s" -#define MSG_OPT_INIT "Optimisation initialis‚e" -#define MSG_OPT_LOGIC_ERR "Erreur logique dans SetBitmap, i=%d" -#define MSG_OPT_MAX_RD_ERR "Erreur en lecture des valeurs maxi: %s" -#define MSG_OPT_MAX_WR_ERR "Erreur en ‚criture des valeurs maxi: %s" -#define MSG_OPT_MIN_RD_ERR "Erreur en lecture des valeurs mini: %s" -#define MSG_OPT_MIN_WR_ERR "Erreur en ‚criture des valeurs mini: %s" -#define MSG_OPT_NOT_MATCH "Le fichier opt %s n'est pas … jour" -#define MSG_OP_RES_TOO_LONG "R‚sultat trop long pour l'op‚rateur=%d" -#define MSG_ORDER_OUT_RANGE "Tri: Order %d hors limite" -#define MSG_ORDER_TWICE "Un mˆme ‚l‚ment est tri‚ deux fois" -#define MSG_PAGE_ERROR "Erreur de pagination" -#define MSG_PARM_CNT_MISS "Disparit‚ du nombre de ParamŠtres" -#define MSG_PARSE_NULL_SEM "S‚mantique nulle" -#define MSG_PARSING_QUERY "Analyse de la requˆte" -#define MSG_PIX_ERROR "Pix %s erreur rŠgle no=%u\n" -#define MSG_PIX_TEST_ERROR "RŠgle=%u: pix-TEST pas dans le premier noeud\n" -#define MSG_PLG_READ_ONLY "PLG est actuellement en lecture seulement" -#define MSG_PLM_NULL_SFP "TABPLM ReadDB: Sfp est NULL" -#define MSG_PLUG_NOT_INIT "Plug n'est pas initialis‚\n" -#define MSG_PLUG_NOT_RUN "Plug n'est pas en marche" -#define MSG_PNODE_RULE "(Noeud %d rŠgle %d) " -#define MSG_POS_TOO_LONG "%s trop long (>%d)" -#define MSG_PREC_VBLP_NULL "ARRAY SetPrecision: Vblp est NULL" -#define MSG_PRIV_INSTR "Instruction privil‚gi‚e" -#define MSG_PROCADD_ERROR "Erreur %d sur l'adresse de %s" -#define MSG_PROCESS_SUBQRY "Sub-Query en cours de traitement" -#define MSG_PROC_WOULD_LOOP "Bouclage du traitement (maxres=%d maxlin=%d)" -#define MSG_PROGRESS_INFO "Informations sur le traitement en cours" -#define MSG_PROMPT_CANCEL "Relance annul‚e" -#define MSG_PROMPT_NIY "Prompt non impl‚ment‚ pour cette configuration" -#define MSG_PTR_NOT_FOUND "Pointeur introuvable Num=%d ti1=%d" -#define MSG_PXDEF_IS_NULL "Pxdef est NULL" -#define MSG_QRY_READ_ONLY "Les views QRY sont en lecture seulement" -#define MSG_QUERY_CANCELLED "Requˆte interrompue par l'utilisateur" -#define MSG_QUERY_NOT_EXEC "Requˆte non ex‚cut‚e" -#define MSG_QUERY_SAVED "Requˆte %s sauvegard‚e" -#define MSG_QUOTE_IN_QUOTE "Appostrophe dans un champ entre appostrophe ligne %d" -#define MSG_RANGE_NIY "Range pas encore impl‚ment‚ pour %s" -#define MSG_RANGE_NO_JOIN "Range non compatible avec les index de jointure" -#define MSG_RC_READING "rc=%d en lecture de la table %s" -#define MSG_READB_BAD_INIT "%s ReadDB appel‚ avec Init=0" -#define MSG_READCOL_ERROR "SQLCOL: erreur dans ReadColumn" -#define MSG_READING "Lecture" -#define MSG_READING_FROM "Lecture de %s" -#define MSG_READING_RECORD "Erreur en lecture de l'enregistrement %d de %s" -#define MSG_READY "Prˆt" -#define MSG_READ_ERROR "Erreur en lecture sur %s: %s" -#define MSG_READ_ERROR_RC "Erreur en lecture, rc=%d" -#define MSG_READ_MEM_ERROR "Lecture m‚moire %d: taille=%d" -#define MSG_READ_ONLY "Cette table prot‚g‚e en lecture seule ne peut ˆtre modifi‚e" -#define MSG_READ_SEEK_ERROR "Erreur de recherche en lecture: %s" -#define MSG_READ_SEG_ERROR "Lecture segment %d: taille=%d" -#define MSG_RECEIVED "Re‡u %c\n" -#define MSG_RECORD_ERROR "Erreur … la lecture de l'enregistrement %d de %s" -#define MSG_RECORD_NO_SEP "Enregistrement sans s‚parateur" -#define MSG_REC_SKIPPED " (%d lignes erronn‚es saut‚es par l'option MaxErr)" -#define MSG_REDUCE_INDEX "Réduction de l'index" -#define MSG_REGISTER_ERR "Enregistrement NS impossible, pr‚fix='%s' et href='%s'" -#define MSG_REMOTE_CONN_ERR "La connection ‚loign‚e a ‚chou‚" -#define MSG_REMOVE_ERROR "Erreur en supprimant %s: %s" -#define MSG_REMOVE_NOT_IMPL "Remove non impl‚ment‚ pour TDB non Table" -#define MSG_RENAME_ERROR "Erreur renommant %s en %s: %s" -#define MSG_RENUM_RULES "Renum‚rotez les rŠgles et r‚entrez ADD (rŠgle sauvegard‚e dans la zone tampon)" -#define MSG_REORDER_INDEX "Reclassement de l'index" -#define MSG_REQU_ARG_NUM "La fonction %s doit avoir %d arguments" -#define MSG_RESET_TO "%s remis … %d" -#define MSG_RES_NOT_UNIQUE "Le r‚sultat n'est pas unique" -#define MSG_RET_FROM_LANG "Retour au language %s version %d.%d du language %s version %d.%d" -#define MSG_ROWID_NOT_IMPL "RowNumber non impl‚ment‚ pour les tables de type %s" -#define MSG_ROWS_SELECTED "%d lignes s‚lectionn‚es en %.2lf sec" -#define MSG_ROWS_TRUNCATED " (tronqu‚ par MAXRES, LIMIT, FREQ ou AreaSize)" -#define MSG_ROW_ARGNB_ERR "ROW: disparit‚ du nombre d'arguments (%d,%d)" -#define MSG_RPC_SERVER_ERR "Erreur logique dans TABMUL::MakeCol" -#define MSG_RSC_ALLOC_ERROR "Erreur d'allocation m‚moire dans Rescol %s" -#define MSG_RULE_ENTERED "RŠgle %d entr‚e" -#define MSG_RULE_SUBSET_ERR "Erreur d'initialisation de la zone RŠgles" -#define MSG_SAVING_INDEX "Sauvegarde du fichier index" -#define MSG_SCAN_NOT_IMP "Scan non impl‚ment‚" -#define MSG_SEC_KEY_FIRST "Les sections et cl‚s doivent ˆtre ins‚r‚es en premier" -#define MSG_SEC_NAME_FIRST "Le nom de section doit ˆtre en tˆte de liste en insertion" -#define MSG_SEC_NOT_FOUND "Section %s absente de %s" -#define MSG_SEEK_ERROR "Seek erreur dans CopyHeader" -#define MSG_SEMANTIC_TREE "Arbre s‚mantique" -#define MSG_SEM_BAD_REF "Sem @%d r‚f‚rence un argument de type non 0 ou 1" -#define MSG_SEM_UNKNOWN "inconnue, rc=%d" -#define MSG_SEP_IN_FIELD "Le champ %d contient le caractŠre s‚parateur" -#define MSG_SEQUENCE_ERROR "HSTMT: Allocation hors s‚quence" -#define MSG_SETEOF_ERROR "Erreur %d dans SetEndOfFile" -#define MSG_SETRECPOS_NIY "SetRecpos non impl‚ment‚ pour ce type de table" -#define MSG_SET_LOCALE "Locale fix‚e … %s" -#define MSG_SET_NULL_DOM "Valeur %d donn‚e … un domaine nul" -#define MSG_SET_OP_NOT_IMPL "Op‚rateurs ensemblistes non impl‚ment‚s" -#define MSG_SET_STR_TRUNC "SetValue: ChaŒne de caractŠres tronqu‚e" -#define MSG_SEVERAL_TREES "Jointure non sp‚cifi‚e pour certaines tables" -#define MSG_SFP_ERROR "Erreur sur SetFilePointer: %s" -#define MSG_SFUNC_NOT_IMPL "Fonction scalaire %s non impl‚ment‚e" -#define MSG_SHARED_LIB_ERR "Erreur au chargement de la librairie partag‚e %s: %s" -#define MSG_SINGLE_STEP "Pas … pas" -#define MSG_SLEEP "J'ai dormi %d milliseconds" -#define MSG_SMART_SORTING "R‚cup‚ration des lignes tri‚es (passage %d de %d)" -#define MSG_SMART_SORT_ERR "Erreur logique 1 dans Smart Sort" -#define MSG_SORTING "Tri en cours" -#define MSG_SORTING_INDEX "Tri de l'index" -#define MSG_SORTING_VAL "Tri de %d valeurs" -#define MSG_SORT_JOIN_INDEX "Tri de l'index de jointure" -#define MSG_SPCOL_READONLY "La colonne sp‚ciale %s est en lecture seulement" -#define MSG_SPEC_CMD_SEP "Les commandes sp‚ciales doivent ˆtre ex‚cut‚es s‚par‚ment" -#define MSG_SQL_BAD_TYPE "RephraseSQL: type %d non support‚" -#define MSG_SQL_BLOCK_MISM "CheckColumn: bloc SQL courant non correspondant" -#define MSG_SQL_CONF_ERROR "Erreur SQL: SQL_CONFORMANCE" -#define MSG_SQL_READ_ONLY "Les views SQL sont actuellement en lecture seulement" -#define MSG_SRCH_CLOSE_ERR "Erreur … la fermeture de l'Handle de recherche" -#define MSG_SRC_TABLE_UNDEF "La table source n'est pas d‚finie" -#define MSG_STACK_ERROR "Erreur sur la pile, i=%d\n" -#define MSG_STACK_OVERFLOW "Parser: D‚bordement de la pile\n" -#define MSG_STRG_NOT_FOUND "ChaŒne introuvable" -#define MSG_STRING_INV_LIST "Liste invalide pour SemString" -#define MSG_STRING_TOO_BIG "ChaŒne trop grande pour le domaine %s" -#define MSG_SUBALLOC_ERROR "Pas assez de m‚moire en zone %p pour allouer %d (utilis‚=%d libre=%d)" -#define MSG_SUBAL_HUGE_ERR "Pas assez de m‚moire en zone huge %p pour allouer %d" -#define MSG_SUBARG_NOSEM "Argument @ ou sous-phrase de niveau %d pointe sur un noeud sans Sem" -#define MSG_SUBARG_OUTRANGE "Argument @ ou sous-phrase de niveau %d hors limite" -#define MSG_SUBQRY_ONEITEM "Une Sub-Query ne doit avoir qu'une s‚lection" -#define MSG_SUBSET_ERROR "SubSet erreur dans LoadDB" -#define MSG_SUB_OPEN_YET "Subquery d‚j… ouverte" -#define MSG_SUB_RES_TOO_LNG "R‚sultat trop long pour SUBSTR" -#define MSG_SYNTAX_ERROR "Erreur de syntaxe" -#define MSG_SYSTEM_ERROR "Erreur systŠme %d" -#define MSG_S_ACCESS_DENIED "%s: accŠs non autoris‚" -#define MSG_S_ERROR "%s erreur" -#define MSG_S_ERROR_NUM "%s: erreur=%d" -#define MSG_S_INTRUPT_ERROR "%s: erreur interruption" -#define MSG_S_INVALID_PARM "%s: paramŠtre invalide" -#define MSG_S_INV_ADDRESS "%s: adresse invalide" -#define MSG_S_UNKNOWN_ERROR "%s: erreur de code %u inconnu" -#define MSG_TABDIR_READONLY "Les tables DIR sont en lecture seulement" -#define MSG_TABLE_ALREADY "La table %s existe d‚j…" -#define MSG_TABLE_ALTERED "Table %s %s alt‚r‚e" -#define MSG_TABLE_CREATED "%s table %s cr‚‚e" -#define MSG_TABLE_DROPPED "Table %s supprim‚e" -#define MSG_TABLE_MULT_JOIN "Utilisation multiple de la table %s pour jointure" -#define MSG_TABLE_NOT_IN_DB "La table %s n'existe pas dans %s" -#define MSG_TABLE_NOT_OPT "Table non optimisable" -#define MSG_TABLE_NO_INDEX "La table %s n'est pas indexable" -#define MSG_TABLE_NO_OPT "La table %s n'existe pas ou de type non optimisable" -#define MSG_TABLE_READ_ONLY "Les tables %s sont en lecture seulement " -#define MSG_TABMUL_READONLY "Les tables multiples sont en lecture seulement" -#define MSG_TAB_NOT_LOADED " (certaines tables n'ont put ˆtre charg‚es)" -#define MSG_TAB_NOT_SPEC "Table non specifi‚e" -#define MSG_TB_VW_NOTIN_DB "Table ou view %s pas dans la base de donn‚es" -#define MSG_TDB_NXT_NOT_NUL "Tdb.Next non NULL" -#define MSG_TDB_USE_ERROR "Erreur, Tdbp->Use=%d" -#define MSG_TOO_MANY_COLS "Trop de colonnes" -#define MSG_TOO_MANY_COLTAB "Trop de colonnes dans %s (%d)" -#define MSG_TOO_MANY_FIELDS "Trop de champs ligne %d de %s" -#define MSG_TOO_MANY_JUMPS "Trop de niveaux de saut" -#define MSG_TOO_MANY_KEYS "Trop de cl‚s (%d)" -#define MSG_TOO_MANY_POS "Trop de pos_codes" -#define MSG_TOO_MANY_TABLES "Trop de tables (%d)" -#define MSG_TOPSEM_ERROR "Erreur inconnue dans TopSem" -#define MSG_TO_BLK_IS_NULL "To Blk est nul" -#define MSG_TO_FTR_NOT_NULL "Set.To_Ftr n'est pas nul" -#define MSG_TO_PIX_NOT_NULL "Set.To_Pix n'est pas nul" -#define MSG_TO_SEM_NOT_NULL "Set.To_Sem n'est pas nul" -#define MSG_TRUNCATE_ERROR "Erreur en troncation: %s" -#define MSG_TRUNC_BY_ESTIM "Tronqu‚ par l'option Estimate" -#define MSG_TYPES_ERROR "Erreur sur Types(%d)" -#define MSG_TYPE_CONV_ERROR "Type non convertible dans une expression" -#define MSG_TYPE_DEF_MISM "Disparit‚ entre type et d‚finition" -#define MSG_TYPE_MISMATCH "Cl‚ et source ne sont pas du mˆme type" -#define MSG_TYPE_RECFM_MISM "Disparit‚ entre Type et Recfm" -#define MSG_TYPE_TO_VERIFY "Type … v‚rifier: %d" -#define MSG_TYPE_VALUE_ERR "Colonne %s: disparit‚ type(%s)/valeur(%s)" -#define MSG_UNBALANCE_QUOTE "Appostrophe en trop ligne %d" -#define MSG_UNDEFINED_AM "COLBLK %s: m‚thode d'accŠs ind‚finie" -#define MSG_UNDEFINED_PATH "Chemin d'accŠs ind‚fini pour Plgcnx.ini" -#define MSG_UNDEF_COL_COUNT "Count sur colonne non d‚finie" -#define MSG_UNKNOWN_DOMAIN "Domaine inconnu %s" -#define MSG_UNKNOWN_ERROR "Erreur inconnue" -#define MSG_UNKNOWN_EXCPT "Exception non r‚pertori‚e" -#define MSG_UNKNOWN_NAME "Nom inconnu: %.8s" -#define MSG_UNKNOWN_PATH "Chemin d'accŠs inconnu pour Plgcnx.ini" -#define MSG_UNKNOWN_POS "Nom pos_code inconnu: %s" -#define MSG_UNKNOWN_SEM "Sem %.8s inconnue, rc=%d" -#define MSG_UNKNOWN_SYNONYM "Synonyme inconnu" -#define MSG_UNKNW_QRY_TYPE "ReadDB: type de requˆte inconnu" -#define MSG_UNKN_ERR_CODE "Erreur de code %d inconnu" -#define MSG_UNLOADABLE " inchargeable: " -#define MSG_UNLOADABLE_PRM "%s inchargeable: %s" -#define MSG_UNMATCH_FIL_ARG "Argument de filtre d‚pareill‚" -#define MSG_UNQ_COL_SEV_TAB "La colonne %s non qualifi‚e est dans plusieurs tables" -#define MSG_UNRESOLVED_ARG "?Argument manquant: %s non r‚solu en %d ligne %d" -#define MSG_UPDATE_ERROR "Erreur en Update sur %s" -#define MSG_UPDATING_ROWS "Mise … jour des lignes" -#define MSG_UPD_ZIP_NOT_IMP "Mise … jour des tables ZDOS non encore implement‚" -#define MSG_UP_LANGUAGE "Bloc langage %.8s version %d niveau %d charg‚" -#define MSG_USED_FREE_MEM "Sarea: utilis‚ %d, libre %d" -#define MSG_USETEMP_IS "Usetemp est : %s" -#define MSG_USETEMP_RESET ". Usetemp remis … Auto" -#define MSG_USETEMP_SET "Usetemp fix‚ … %s" -#define MSG_USE_NO_MATCH "Use non correspondant : Use=%d, ti2=%d, ti3=%d" -#define MSG_USING_INDEX " (Index‚ par" -#define MSG_VALIST_MISMATCH "Disparit‚ des listes de valeurs" -#define MSG_VALSTR_TOO_LONG "Valeur %s trop longue pour une chaŒne de longueur %d" -#define MSG_VALTYPE_NOMATCH "Disparit‚ types de valeur" -#define MSG_VALUE_ERROR "Colonne %s: bloc valeur nul" -#define MSG_VALUE_NOT_ALLOC "Valeur non allou‚e pour la colonne R%d %s" -#define MSG_VALUE_TOO_BIG "Valeur %lld trop grande pour la colonne %s" -#define MSG_VALUE_TOO_LONG "Valeur %s trop longue pour la colonne %s de longueur %d" -#define MSG_VAL_ALLOC_ERR "Allocation impossible du noeud valeur" -#define MSG_VAL_TOO_LONG "Valeur %s trop longue pour le champ %s" -#define MSG_VIEW_ALREADY "La VIEW %s existe d‚j…" -#define MSG_VIEW_CREATED "%s view %s cr‚‚e" -#define MSG_VIEW_DROPPED "View %s supprim‚e" -#define MSG_VIEW_NOT_IN_DB "%s n'est pas une View de %s" -#define MSG_VIR_NO_DELETE "Delete impossible sur les tables %s" -#define MSG_VIR_READ_ONLY "Les tables virtuelles %s sont en lecture seulement" -#define MSG_VM_LANG "Langage au format VM, non support‚" -#define MSG_VOID_FIRST_ARG "Le premier argument ne doit pas ˆtre vide" -#define MSG_VOID_IN_STRING "Erreur: chaŒne IN vide" -#define MSG_VOID_ORDER_LIST "Liste de tri vide, erreur systŠme ?" -#define MSG_VOID_POS_DICT "Dictionnaire interne du langage vide" -#define MSG_VOID_QUERY "Requˆte vide %s" -#define MSG_WORK_AREA "Espace de travail: %s" -#define MSG_WORK_TOO_SMALL "Zone de travail trop petite, accroŒtre AreaSize" -#define MSG_WRITE_ERROR "Erreur … l'‚criture de %s" -#define MSG_WRITE_SEEK_ERR "Erreur de recherche en ‚criture: %s" -#define MSG_WRITE_STRERROR "Erreur en ‚criture sur %s: %s" -#define MSG_WRITING "Ecriture" -#define MSG_WRITING_ERROR "Erreur … l'‚criture de %s: %s" -#define MSG_WRITING_QUERY "Erreur … l'‚criture de la requˆte: " -#define MSG_WRONG_ARG_NUM "La fonction %s ne prend pas %d arguments" -#define MSG_WRONG_COL_NUM "Num‚ro de colonne %d trop grand pour %s" -#define MSG_WRONG_DB_LIST "Liste des bases de donn‚es incorrecte ou vide" -#define MSG_WRONG_FUNCTION "Mauvaise fonction %d" -#define MSG_WRONG_OP_PARM "Mauvais op‚rateur ou paramŠtres pour %s" -#define MSG_WRONG_PARMS "Mauvais paramŠtres pour %s" -#define MSG_WRONG_PASSWORD "Mot de passe ill‚gal pour %s" -#define MSG_WRONG_TYPE "type non support‚" -#define MSG_WRONG_USERFILE "La Userfile a une mauvaise taille %d" -#define MSG_WS_CONV_ERR "Erreur de convertion de %s en WS" -#define MSG_XCOL_MISMATCH "La colonne %s ne correspond pas … l'index" -#define MSG_XDB_DEL_ERROR "Erreur en supprimant des entr‚es du fichier XDB" -#define MSG_XFILE_READERR "Erreur %d en lisant le fichier index" -#define MSG_XFILE_TOO_SMALL "Le fichier index est plus petit que la taille de l'index" -#define MSG_XFILE_WRITERR "Erreur en ‚crivant le fichier index: %s" -#define MSG_XMLTAB_INIT_ERR "Erreur d'initialisation de la table XML" -#define MSG_XML_INIT_ERROR "Erreur d'initialisation du nouveau fichier XML" -#define MSG_XPATH_CNTX_ERR "Le nouveau contexte XPath ne peut ˆtre cr‚‚" -#define MSG_XPATH_EVAL_ERR "Impossible d'‚valuer l'emplacement xpath '%s'" -#define MSG_XPATH_NOT_SUPP "Xpath non support‚ colonne %s" -#define MSG_X_ARG_ADDED "%d arguments ajout‚s" -#define MSG_X_ARG_SET "%d arguments ont ‚t‚ initialis‚s" -#define MSG_X_ON_TAB " %s sur %s(" -#define MSG_ZERO_DIVIDE "Division par z‚ro dans une expression" diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index 775782bace2..f40095b7cb8 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -540,11 +540,7 @@ extern "C" const char *msglang(void) #else // !XMSG && !NEWMSG extern "C" const char *msglang(void) { -#if defined(FRENCH) - return "french"; -#else // DEFAULT return "english"; -#endif // DEFAULT } // end of msglang #endif // !XMSG && !NEWMSG @@ -1868,7 +1864,7 @@ bool ha_connect::CheckVirtualIndex(TABLE_SHARE *s) rid= (fp->option_struct) ? fp->option_struct->special : NULL; if (!rid || (stricmp(rid, "ROWID") && stricmp(rid, "ROWNUM"))) { - strcpy(g->Message, "Invalid virtual index"); + snprintf(g->Message, sizeof(g->Message), "Invalid virtual index"); return true; } // endif rowid @@ -2014,7 +2010,7 @@ int ha_connect::OpenTable(PGLOBAL g, bool del) case MODE_INSERT: case MODE_UPDATE: case MODE_DELETE: - strcpy(g->Message, MSG(READ_ONLY)); + snprintf(g->Message, sizeof(g->Message), MSG(READ_ONLY)); return HA_ERR_TABLE_READONLY; default: break; @@ -2143,7 +2139,7 @@ bool ha_connect::CheckColumnList(PGLOBAL g) htrc("Exception %d: %s\n", n, g->Message); brc= true; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); brc= true; } // end catch @@ -2512,7 +2508,7 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL vop, char q, ranges[1]= (end_range && !eq_range) ? &save_end_range : NULL; if (!ranges[0] && !ranges[1]) { - strcpy(g->Message, "MakeKeyWhere: No key"); + snprintf(g->Message, sizeof(g->Message), "MakeKeyWhere: No key"); return true; } else both= ranges[0] && ranges[1]; @@ -2611,7 +2607,7 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL vop, char q, qry->Append(')'); if ((oom= qry->IsTruncated())) - strcpy(g->Message, "Out of memory"); + snprintf(g->Message, sizeof(g->Message), "Out of memory"); dbug_tmp_restore_column_map(&table->write_set, old_map); return oom; @@ -3385,7 +3381,7 @@ const COND *ha_connect::cond_push(const COND *cond) if (trace(1)) htrc("Exception %d: %s\n", n, g->Message); } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); } // end catch fin:; @@ -3611,7 +3607,7 @@ int ha_connect::optimize(THD* thd, HA_CHECK_OPT*) htrc("Exception %d: %s\n", n, g->Message); rc= HA_ERR_INTERNAL_ERROR; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); rc= HA_ERR_INTERNAL_ERROR; } // end catch @@ -4711,7 +4707,7 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, break; default: htrc("Unsupported sql_command=%d\n", thd_sql_command(thd)); - strcpy(g->Message, "CONNECT Unsupported command"); + snprintf(g->Message, sizeof(g->Message), "CONNECT Unsupported command"); my_message(ER_NOT_ALLOWED_COMMAND, g->Message, MYF(0)); newmode= MODE_ERROR; break; @@ -4769,7 +4765,7 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, break; default: htrc("Unsupported sql_command=%d\n", thd_sql_command(thd)); - strcpy(g->Message, "CONNECT Unsupported command"); + snprintf(g->Message, sizeof(g->Message), "CONNECT Unsupported command"); my_message(ER_NOT_ALLOWED_COMMAND, g->Message, MYF(0)); newmode= MODE_ERROR; break; @@ -5024,7 +5020,7 @@ int ha_connect::external_lock(THD *thd, int lock_type) xmod= MODE_ANY; // For info commands DBUG_RETURN(rc); } else if (check_privileges(thd, options, table->s->db.str)) { - strcpy(g->Message, "This operation requires the FILE privilege"); + snprintf(g->Message, sizeof(g->Message), "This operation requires the FILE privilege"); htrc("%s\n", g->Message); DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } // endif check_privileges @@ -5390,7 +5386,7 @@ bool CheckSelf(PGLOBAL g, TABLE_SHARE *s, PCSZ host, else if (port && port != (signed)GetDefaultPort()) return false; - strcpy(g->Message, "This MySQL table is defined on itself"); + snprintf(g->Message, sizeof(g->Message), "This MySQL table is defined on itself"); return true; } // end of CheckSelf @@ -5733,7 +5729,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, } else if (topt->http) { if (ttp == TAB_UNDEF) { ttr= TAB_JSON; - strcpy(g->Message, "No table_type. Was set to JSON"); + snprintf(g->Message, sizeof(g->Message), "No table_type. Was set to JSON"); push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, 0, g->Message); } else ttr= ttp; @@ -5766,7 +5762,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, case TAB_BSON: #endif // BSON_SUPPORT if (checkPrivileges(thd, ttp, topt, db)) { - strcpy(g->Message, "This operation requires the FILE privilege"); + snprintf(g->Message, sizeof(g->Message), "This operation requires the FILE privilege"); rc= HA_ERR_INTERNAL_ERROR; goto err; } // endif check_privileges @@ -5782,7 +5778,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, char *p; if (!tbl) { - strcpy(g->Message, "Missing table list"); + snprintf(g->Message, sizeof(g->Message), "Missing table list"); rc= HA_ERR_INTERNAL_ERROR; goto err; } // endif tbl @@ -5840,7 +5836,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, if (fnc & FNC_DRIVER) { ok= true; } else if (!(url= strz(g, create_info->connect_string))) { - strcpy(g->Message, "Missing URL"); + snprintf(g->Message, sizeof(g->Message), "Missing URL"); } else { // Store JDBC additional parameters int rc; @@ -5944,7 +5940,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, if (topt->module && topt->subtype) ok= true; else - strcpy(g->Message, "Missing OEM module or subtype"); + snprintf(g->Message, sizeof(g->Message), "Missing OEM module or subtype"); break; #if defined(LIBXML2_SUPPORT) || defined(DOMDOC_SUPPORT) @@ -5996,7 +5992,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, } // endif supfnc if (src && fnc != FNC_NO) { - strcpy(g->Message, "Cannot make catalog table from srcdef"); + snprintf(g->Message, sizeof(g->Message), "Cannot make catalog table from srcdef"); ok= false; } // endif src @@ -6148,7 +6144,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, qrp= OEMColumns(g, topt, tab, (char*)db, fnc == FNC_COL); break; default: - strcpy(g->Message, "System error during assisted discovery"); + snprintf(g->Message, sizeof(g->Message), "System error during assisted discovery"); break; } // endswitch ttp @@ -6392,7 +6388,7 @@ static int connect_assisted_discovery(handlerton *, THD* thd, htrc("Exception %d: %s\n", n, g->Message); rc= HA_ERR_INTERNAL_ERROR; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); rc= HA_ERR_INTERNAL_ERROR; } // end catch @@ -6550,7 +6546,7 @@ int ha_connect::create(const char *name, TABLE *table_arg, case TAB_PIVOT: case TAB_OCCUR: if (options->srcdef) { - strcpy(g->Message, "Cannot check looping reference"); + snprintf(g->Message, sizeof(g->Message), "Cannot check looping reference"); push_warning(thd, Sql_condition::WARN_LEVEL_WARN, 0, g->Message); } else if (options->tabname) { if (!stricmp(options->tabname, create_info->alias.str) && @@ -6563,7 +6559,7 @@ int ha_connect::create(const char *name, TABLE *table_arg, } // endif tab } else { - strcpy(g->Message, "Missing object table name or definition"); + snprintf(g->Message, sizeof(g->Message), "Missing object table name or definition"); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } // endif tabname @@ -6641,14 +6637,14 @@ int ha_connect::create(const char *name, TABLE *table_arg, #if !defined(DOMDOC_SUPPORT) if (dom) { - strcpy(g->Message, "MS-DOM not supported by this version"); + snprintf(g->Message, sizeof(g->Message), "MS-DOM not supported by this version"); xsup= NULL; } // endif DomDoc #endif // !DOMDOC_SUPPORT #if !defined(LIBXML2_SUPPORT) if (!dom) { - strcpy(g->Message, "libxml2 not supported by this version"); + snprintf(g->Message, sizeof(g->Message), "libxml2 not supported by this version"); xsup= NULL; } // endif Libxml2 #endif // !LIBXML2_SUPPORT @@ -6693,7 +6689,7 @@ int ha_connect::create(const char *name, TABLE *table_arg, continue; // This is a virtual column if (fp->flags & AUTO_INCREMENT_FLAG) { - strcpy(g->Message, "Auto_increment is not supported yet"); + snprintf(g->Message, sizeof(g->Message), "Auto_increment is not supported yet"); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); rc= HA_ERR_INTERNAL_ERROR; DBUG_RETURN(rc); @@ -6709,7 +6705,7 @@ int ha_connect::create(const char *name, TABLE *table_arg, if (type == TAB_VIR) if (!fp->option_struct || !fp->option_struct->special) { - strcpy(g->Message, "Virtual tables accept only special or virtual columns"); + snprintf(g->Message, sizeof(g->Message), "Virtual tables accept only special or virtual columns"); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); rc= HA_ERR_INTERNAL_ERROR; DBUG_RETURN(rc); @@ -6927,7 +6923,7 @@ int ha_connect::create(const char *name, TABLE *table_arg, // This is an ALTER to CONNECT from another engine. // It cannot be accepted because the table data would be modified // except when the target file does not exist. - strcpy(g->Message, "Operation denied. Table data would be modified."); + snprintf(g->Message, sizeof(g->Message), "Operation denied. Table data would be modified."); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); DBUG_RETURN(HA_ERR_INTERNAL_ERROR); } // endif part_info @@ -6937,11 +6933,11 @@ int ha_connect::create(const char *name, TABLE *table_arg, // Get the index definitions if ((xdp= GetIndexInfo()) || sqlcom == SQLCOM_DROP_INDEX) { if (options->multiple) { - strcpy(g->Message, "Multiple tables are not indexable"); + snprintf(g->Message, sizeof(g->Message), "Multiple tables are not indexable"); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); rc= HA_ERR_UNSUPPORTED; } else if (options->compressed) { - strcpy(g->Message, "Compressed tables are not indexable"); + snprintf(g->Message, sizeof(g->Message), "Compressed tables are not indexable"); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); rc= HA_ERR_UNSUPPORTED; } else if (GetIndexType(type) == 1) { @@ -7223,11 +7219,11 @@ ha_connect::check_if_supported_inplace_alter(TABLE *altered_table, !SameString(altered_table, "optname") || !SameBool(altered_table, "sepindex")) { if (newopt->multiple) { - strcpy(g->Message, "Multiple tables are not indexable"); + snprintf(g->Message, sizeof(g->Message), "Multiple tables are not indexable"); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); DBUG_RETURN(HA_ALTER_ERROR); } else if (newopt->compressed) { - strcpy(g->Message, "Compressed tables are not indexable"); + snprintf(g->Message, sizeof(g->Message), "Compressed tables are not indexable"); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); DBUG_RETURN(HA_ALTER_ERROR); } else if (GetIndexType(type) == 1) { @@ -7278,7 +7274,7 @@ ha_connect::check_if_supported_inplace_alter(TABLE *altered_table, tshp= NULL; if (FileExists(fn, false)) { - strcpy(g->Message, "Operation denied. Table data would be lost."); + snprintf(g->Message, sizeof(g->Message), "Operation denied. Table data would be lost."); my_message(ER_UNKNOWN_ERROR, g->Message, MYF(0)); DBUG_RETURN(HA_ALTER_ERROR); } else diff --git a/storage/connect/javaconn.cpp b/storage/connect/javaconn.cpp index efde2e86330..847014e3ca5 100644 --- a/storage/connect/javaconn.cpp +++ b/storage/connect/javaconn.cpp @@ -167,7 +167,7 @@ bool JAVAConn::gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig mid = env->GetMethodID(jdi, name, sig); if (Check()) { - strcpy(g->Message, Msg); + snprintf(g->Message, sizeof(g->Message), "%s", Msg); return true; } else return false; @@ -372,7 +372,7 @@ bool JAVAConn::Open(PGLOBAL g) rc = jvm->AttachCurrentThread((void**)&env, nullptr); if (rc != JNI_OK) { - strcpy(g->Message, "Cannot attach jvm to the current thread"); + snprintf(g->Message, sizeof(g->Message), "Cannot attach jvm to the current thread"); return true; } // endif rc @@ -456,26 +456,26 @@ bool JAVAConn::Open(PGLOBAL g) switch (rc) { case JNI_OK: - strcpy(g->Message, "VM successfully created"); + snprintf(g->Message, sizeof(g->Message), "VM successfully created"); brc = false; break; case JNI_ERR: - strcpy(g->Message, "Initialising JVM failed: unknown error"); + snprintf(g->Message, sizeof(g->Message), "Initialising JVM failed: unknown error"); break; case JNI_EDETACHED: - strcpy(g->Message, "Thread detached from the VM"); + snprintf(g->Message, sizeof(g->Message), "Thread detached from the VM"); break; case JNI_EVERSION: - strcpy(g->Message, "JNI version error"); + snprintf(g->Message, sizeof(g->Message), "JNI version error"); break; case JNI_ENOMEM: - strcpy(g->Message, "Not enough memory"); + snprintf(g->Message, sizeof(g->Message), "Not enough memory"); break; case JNI_EEXIST: - strcpy(g->Message, "VM already created"); + snprintf(g->Message, sizeof(g->Message), "VM already created"); break; case JNI_EINVAL: - strcpy(g->Message, "Invalid arguments"); + snprintf(g->Message, sizeof(g->Message), "Invalid arguments"); break; default: snprintf(g->Message, sizeof(g->Message), "Unknown return code %d", (int)rc); @@ -516,7 +516,7 @@ bool JAVAConn::Open(PGLOBAL g) rc = env->CallStaticIntMethod(jdi, alp, path); if ((msg = Check(rc))) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), msg); env->DeleteLocalRef(path); return RC_FX; } else switch (rc) { @@ -528,7 +528,7 @@ bool JAVAConn::Open(PGLOBAL g) break; case JNI_ERR: default: - strcpy(g->Message, "Error adding jpath"); + snprintf(g->Message, sizeof(g->Message), "Error adding jpath"); env->DeleteLocalRef(path); return RC_FX; } // endswitch rc @@ -559,7 +559,7 @@ bool JAVAConn::Open(PGLOBAL g) errid = env->GetMethodID(jdi, "GetErrmsg", "()Ljava/lang/String;"); if (env->ExceptionCheck()) { - strcpy(g->Message, "ERROR: method GetErrmsg() not found!"); + snprintf(g->Message, sizeof(g->Message), "ERROR: method GetErrmsg() not found!"); env->ExceptionDescribe(); env->ExceptionClear(); return true; diff --git a/storage/connect/jdbconn.cpp b/storage/connect/jdbconn.cpp index fa3937a5d80..0d52bfcec2a 100644 --- a/storage/connect/jdbconn.cpp +++ b/storage/connect/jdbconn.cpp @@ -878,11 +878,11 @@ int JDBConn::ExecuteCommand(PCSZ sql) snprintf(g->Message, sizeof(g->Message), "GetResult: %s", Msg); rc = RC_FX; } else if (m_Ncol) { - strcpy(g->Message, "Result set column number"); + snprintf(g->Message, sizeof(g->Message), "Result set column number"); rc = RC_OK; // A result set was returned } else { m_Aff = (int)n; // Affected rows - strcpy(g->Message, "Affected rows"); + snprintf(g->Message, sizeof(g->Message), "Affected rows"); rc = RC_NF; } // endif ncol @@ -902,7 +902,7 @@ int JDBConn::Fetch(int pos) if (pos) { if (!m_Scrollable) { - strcpy(g->Message, "Cannot fetch(pos) if FORWARD ONLY"); + snprintf(g->Message, sizeof(g->Message), "Cannot fetch(pos) if FORWARD ONLY"); return rc; } else if (gmID(m_G, fetchid, "Fetch", "(I)Z")) return rc; @@ -1231,7 +1231,7 @@ int JDBConn::ExecuteSQL(void) jint n = env->CallIntMethod(job, xpid); if (n == -3) - strcpy(g->Message, "SQL statement is not prepared"); + snprintf(g->Message, sizeof(g->Message), "SQL statement is not prepared"); else if (Check(n)) snprintf(g->Message, sizeof(g->Message), "ExecutePrep: %s", Msg); else { @@ -1314,17 +1314,17 @@ bool JDBConn::SetParam(JDBCCOL *colp) break; case TYPE_DATE: if ((dat = env->FindClass("java/sql/Timestamp")) == nullptr) { - strcpy(g->Message, "Cannot find Timestamp class"); + snprintf(g->Message, sizeof(g->Message), "Cannot find Timestamp class"); return true; } else if (!(dtc = env->GetMethodID(dat, "", "(J)V"))) { - strcpy(g->Message, "Cannot find Timestamp class constructor"); + snprintf(g->Message, sizeof(g->Message), "Cannot find Timestamp class constructor"); return true; } // endif's lg = (jlong)val->GetBigintValue() * 1000; if ((datobj = env->NewObject(dat, dtc, lg)) == nullptr) { - strcpy(g->Message, "Cannot make Timestamp object"); + snprintf(g->Message, sizeof(g->Message), "Cannot make Timestamp object"); return true; } else if (gmID(g, setid, "SetTimestampParm", "(ILjava/sql/Timestamp;)V")) return true; @@ -1415,12 +1415,12 @@ bool JDBConn::SetParam(JDBCCOL *colp) int rc = ExecuteCommand(src); if (rc == RC_NF) { - strcpy(g->Message, "Srcdef is not returning a result set"); + snprintf(g->Message, sizeof(g->Message), "Srcdef is not returning a result set"); return NULL; } else if ((rc) == RC_FX) { return NULL; } else if (m_Ncol == 0) { - strcpy(g->Message, "Invalid Srcdef"); + snprintf(g->Message, sizeof(g->Message), "Invalid Srcdef"); return NULL; } // endif's @@ -1462,7 +1462,7 @@ bool JDBConn::SetParam(JDBCCOL *colp) if (Check()) snprintf(g->Message, sizeof(g->Message), "ColumnDesc: %s", Msg); else - strcpy(g->Message, "No result metadata"); + snprintf(g->Message, sizeof(g->Message), "No result metadata"); env->ReleaseIntArrayElements(val, n, 0); return NULL; @@ -1566,7 +1566,7 @@ bool JDBConn::SetParam(JDBCCOL *colp) // n because we no more ignore the first column if ((n = qrp->Nbcol) > (uint)ncol) { - strcpy(g->Message, MSG(COL_NUM_MISM)); + snprintf(g->Message, sizeof(g->Message), MSG(COL_NUM_MISM)); return -1; } // endif n @@ -1636,7 +1636,7 @@ bool JDBConn::SetParam(JDBCCOL *colp) PQRYRES qrp; if (!m_Rows) { - strcpy(g->Message, "Void result"); + snprintf(g->Message, sizeof(g->Message), "Void result"); return NULL; } // endif m_Rows diff --git a/storage/connect/jmgoconn.cpp b/storage/connect/jmgoconn.cpp index f527eb83dfe..16f472ea084 100644 --- a/storage/connect/jmgoconn.cpp +++ b/storage/connect/jmgoconn.cpp @@ -264,7 +264,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, p = strrchr(Options, ']'); if (!p) { - strcpy(g->Message, "Missing ] in pipeline"); + snprintf(g->Message, sizeof(g->Message), "Missing ] in pipeline"); return true; } else *(char*)p = 0; @@ -275,7 +275,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, s->Append(",{\"$match\":"); if (MakeSelector(g, filp, s)) { - strcpy(g->Message, "Failed making selector"); + snprintf(g->Message, sizeof(g->Message), "Failed making selector"); return true; } else s->Append('}'); @@ -343,7 +343,7 @@ bool JMgoConn::MakeCursor(PGLOBAL g, PTDB tdbp, PCSZ options, s->Append(','); if (MakeSelector(g, filp, s)) { - strcpy(g->Message, "Failed making selector"); + snprintf(g->Message, sizeof(g->Message), "Failed making selector"); return true; } // endif Selector diff --git a/storage/connect/json.cpp b/storage/connect/json.cpp index a46d6001434..50558437d5f 100644 --- a/storage/connect/json.cpp +++ b/storage/connect/json.cpp @@ -164,7 +164,7 @@ PJSON ParseJson(PGLOBAL g, char* s, size_t len, int* ptyp, bool* comma) htrc("ParseJson: s=%.10s len=%zd\n", s, len); if (!s || !len) { - strcpy(g->Message, "Void JSON object"); + snprintf(g->Message, sizeof(g->Message), "Void JSON object"); return NULL; } else if (comma) *comma = false; @@ -247,7 +247,7 @@ PJSON ParseJson(PGLOBAL g, char* s, size_t len, int* ptyp, bool* comma) htrc("Exception %d: %s\n", n, g->Message); jsp = NULL; } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); jsp = NULL; } // end catch @@ -271,7 +271,7 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char* fn, int pretty) { jdp->dfp = GetDefaultPrec(); if (!jsp) { - safe_strcpy(g->Message, sizeof(g->Message), "Null json tree"); + snprintf(g->Message, sizeof(g->Message), "Null json tree"); throw 1; } else if (!fn) { // Serialize to a string @@ -307,20 +307,25 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char* fn, int pretty) { err = jdp->SerializeValue((PJVAL)jsp); break; default: - strcpy(g->Message, "Invalid json tree"); + snprintf(g->Message, sizeof(g->Message), "Invalid json tree"); } // endswitch Type if (fs) { fputs(EL, fs); fclose(fs); - str = (err) ? NULL : strcpy(g->Message, "Ok"); + if(err) { + str = NULL; + } else { + snprintf(g->Message, sizeof(g->Message), "Ok"); + str = g->Message; + } } else if (!err) { str = ((JOUTSTR*)jp)->Strp; jp->WriteChr('\0'); PlugSubAlloc(g, NULL, ((JOUTSTR*)jp)->N); } else { if (!g->Message[0]) - strcpy(g->Message, "Error in Serialize"); + snprintf(g->Message, sizeof(g->Message), "Error in Serialize"); } // endif's @@ -329,7 +334,7 @@ PSZ Serialize(PGLOBAL g, PJSON jsp, char* fn, int pretty) { htrc("Exception %d: %s\n", n, g->Message); str = NULL; } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); str = NULL; } // end catch @@ -553,7 +558,7 @@ PJAR JDOC::ParseAsArray(PGLOBAL g, int& i, int pretty, int *ptyp) return jsp; } else - strcpy(g->Message, "More than one item in file"); + snprintf(g->Message, sizeof(g->Message), "More than one item in file"); return NULL; } // end of ParseAsArray @@ -672,7 +677,7 @@ PJOB JDOC::ParseObject(PGLOBAL g, int& i) throw 2; }; // endswitch s[i] - strcpy(g->Message, "Unexpected EOF in Object"); + snprintf(g->Message, sizeof(g->Message), "Unexpected EOF in Object"); throw 2; } // end of ParseObject @@ -1179,7 +1184,7 @@ PSZ JOBJECT::GetText(PGLOBAL g, PSTRG text) bool JOBJECT::Merge(PGLOBAL g, PJSON jsp) { if (jsp->GetType() != TYPE_JOB) { - strcpy(g->Message, "Second argument is not an object"); + snprintf(g->Message, sizeof(g->Message), "Second argument is not an object"); return true; } // endif Type @@ -1353,7 +1358,7 @@ PJVAL JARRAY::AddArrayValue(PGLOBAL g, PJVAL jvp, int *x) bool JARRAY::Merge(PGLOBAL g, PJSON jsp) { if (jsp->GetType() != TYPE_JAR) { - strcpy(g->Message, "Second argument is not an array"); + snprintf(g->Message, sizeof(g->Message), "Second argument is not an array"); return true; } // endif Type diff --git a/storage/connect/jsonudf.cpp b/storage/connect/jsonudf.cpp index f514e9ee806..48366ba1f2c 100644 --- a/storage/connect/jsonudf.cpp +++ b/storage/connect/jsonudf.cpp @@ -172,7 +172,7 @@ my_bool JSNX::SetArrayOptions(PGLOBAL g, char *p, int i, PSZ nm) case '!': jnp->Op = OP_SEP; break; // Average case '#': jnp->Op = OP_NUM; break; case '*': // Expand this array - strcpy(g->Message, "Expand not supported by this function"); + snprintf(g->Message, sizeof(g->Message), "Expand not supported by this function"); return true; default: snprintf(g->Message, sizeof(g->Message), "Invalid function specification %c", *p); @@ -194,7 +194,7 @@ my_bool JSNX::SetArrayOptions(PGLOBAL g, char *p, int i, PSZ nm) } // endif n } else { - strcpy(g->Message, "Wrong array specification"); + snprintf(g->Message, sizeof(g->Message), "Wrong array specification"); return true; } // endif's @@ -355,10 +355,10 @@ PJVAL JSNX::MakeJson(PGLOBAL g, PJSON jsp, int n) Jb = false; if (Value->IsTypeNum()) { - strcpy(g->Message, "Cannot make Json for a numeric value"); + snprintf(g->Message, sizeof(g->Message), "Cannot make Json for a numeric value"); return NULL; } else if (jsp->GetType() != TYPE_JAR && jsp->GetType() != TYPE_JOB) { - strcpy(g->Message, "Target is not an array or object"); + snprintf(g->Message, sizeof(g->Message), "Target is not an array or object"); return NULL; } else if (n < Nod -1) { if (jsp->GetType() == TYPE_JAR) { @@ -447,7 +447,7 @@ PJVAL JSNX::GetRowValue(PGLOBAL g, PJSON row, int i, my_bool b) val = new(g)JVALUE(row); } else { - strcpy(g->Message, "Unexpected object"); + snprintf(g->Message, sizeof(g->Message), "Unexpected object"); val = NULL; } //endif Op @@ -497,7 +497,7 @@ PJVAL JSNX::GetRowValue(PGLOBAL g, PJSON row, int i, my_bool b) /*********************************************************************************/ PVAL JSNX::ExpandArray(PGLOBAL g, PJAR arp, int n) { - strcpy(g->Message, "Expand cannot be done by this function"); + snprintf(g->Message, sizeof(g->Message), "Expand cannot be done by this function"); return NULL; } // end of ExpandArray @@ -783,7 +783,7 @@ PJSON JSNX::GetRow(PGLOBAL g) ((PJAR)row)->AddArrayValue(g, new(g)JVALUE(nwr)); ((PJAR)row)->InitArray(g); } else { - strcpy(g->Message, "Wrong type when writing new row"); + snprintf(g->Message, sizeof(g->Message), "Wrong type when writing new row"); nwr = NULL; } // endif's @@ -816,7 +816,7 @@ my_bool JSNX::WriteValue(PGLOBAL g, PJVAL jvalp) case TYPE_JAR: arp = (PJAR)row; break; case TYPE_JVAL: jvp = (PJVAL)row; break; default: - strcpy(g->Message, "Invalid target type"); + snprintf(g->Message, sizeof(g->Message), "Invalid target type"); return true; } // endswitch Type @@ -851,7 +851,7 @@ PSZ JSNX::Locate(PGLOBAL g, PJSON jsp, PJVAL jvp, int k) g->Message[0] = 0; if (!jsp) { - strcpy(g->Message, "Null json tree"); + snprintf(g->Message, sizeof(g->Message), "Null json tree"); return NULL; } // endif jsp @@ -878,7 +878,7 @@ PSZ JSNX::Locate(PGLOBAL g, PJSON jsp, PJVAL jvp, int k) if (err) { if (!g->Message[0]) - strcpy(g->Message, "Invalid json tree"); + snprintf(g->Message, sizeof(g->Message), "Invalid json tree"); } else if (Found) { Jp->WriteChr('\0'); @@ -892,7 +892,7 @@ PSZ JSNX::Locate(PGLOBAL g, PJSON jsp, PJVAL jvp, int k) PUSH_WARNING(g->Message); } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); } // end catch return str; @@ -972,7 +972,7 @@ PSZ JSNX::LocateAll(PGLOBAL g, PJSON jsp, PJVAL jvp, int mx) PJPN jnp; if (!jsp) { - strcpy(g->Message, "Null json tree"); + snprintf(g->Message, sizeof(g->Message), "Null json tree"); return NULL; } // endif jsp @@ -1011,7 +1011,7 @@ PSZ JSNX::LocateAll(PGLOBAL g, PJSON jsp, PJVAL jvp, int mx) PlugSubAlloc(g, NULL, Jp->N); str = Jp->Strp; } else if (!g->Message[0]) - strcpy(g->Message, "Invalid json tree"); + snprintf(g->Message, sizeof(g->Message), "Invalid json tree"); } catch (int n) { if (trace(1)) @@ -1019,7 +1019,7 @@ PSZ JSNX::LocateAll(PGLOBAL g, PJSON jsp, PJVAL jvp, int mx) PUSH_WARNING(g->Message); } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); } // end catch return str; @@ -1402,7 +1402,7 @@ static my_bool CheckPath(PGLOBAL g, UDF_ARGS *args, PJSON jsp, PJVAL& jvp, int n } // endif jvp } else { - strcpy(g->Message, "Path argument is null"); + snprintf(g->Message, sizeof(g->Message), "Path argument is null"); return true; } // endif path @@ -1750,7 +1750,7 @@ my_bool CheckMemory(PGLOBAL g, UDF_INIT *initid, UDF_ARGS *args, uint n, char errmsg[MAX_STR]; snprintf(errmsg, sizeof(errmsg) - 1, MSG(WORK_AREA), g->Message); - strcpy(g->Message, errmsg); + snprintf(g->Message, sizeof(g->Message), "%s", errmsg); return true; } // endif SareaAlloc @@ -3620,7 +3620,7 @@ char *jsonget_string(UDF_INIT *initid, UDF_ARGS *args, char *result, PUSH_WARNING(g->Message); str = NULL; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); str = NULL; } // end catch @@ -3980,7 +3980,7 @@ char *jsonlocate(UDF_INIT *initid, UDF_ARGS *args, char *result, *error = 1; path = NULL; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); *error = 1; path = NULL; @@ -4106,7 +4106,7 @@ char *json_locate_all(UDF_INIT *initid, UDF_ARGS *args, char *result, *error = 1; path = NULL; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); *error = 1; path = NULL; @@ -4379,7 +4379,7 @@ char *handle_item(UDF_INIT *initid, UDF_ARGS *args, char *result, PUSH_WARNING(g->Message); str = NULL; } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); PUSH_WARNING(g->Message); str = NULL; } // end catch @@ -6187,7 +6187,7 @@ bool JUP::unPretty(PGLOBAL g, int lrecl) { htrc("UnPretty: s=%.10s len=%zd lrecl=%d\n", s, len, lrecl); if (!s || !len) { - strcpy(g->Message, "Void JSON file"); + snprintf(g->Message, sizeof(g->Message), "Void JSON file"); return true; } else if (*s != '[') { // strcpy(g->Message, "JSON file is not an array"); @@ -6250,7 +6250,7 @@ bool JUP::unPretty(PGLOBAL g, int lrecl) { htrc("Exception %d: %s\n", n, g->Message); rc = true; } catch (const char* msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); rc = true; } // end catch diff --git a/storage/connect/macutil.cpp b/storage/connect/macutil.cpp index fd85210ac91..99b2cce8ade 100644 --- a/storage/connect/macutil.cpp +++ b/storage/connect/macutil.cpp @@ -57,12 +57,11 @@ void MACINFO::MakeErrorMsg(PGLOBAL g, DWORD drc) "GetAdaptersInfo: Buffer Overflow buflen=%d nbofadap=%d", Buflen, N); else if (drc == ERROR_INVALID_PARAMETER) - strcpy(g->Message, "GetAdaptersInfo: Invalid parameters"); + snprintf(g->Message, sizeof(g->Message), "GetAdaptersInfo: Invalid parameters"); else if (drc == ERROR_NO_DATA) - strcpy(g->Message, - "No adapter information exists for the local computer"); + snprintf(g->Message, sizeof(g->Message), "No adapter information exists for the local computer"); else if (drc == ERROR_NOT_SUPPORTED) - strcpy(g->Message, "GetAdaptersInfo is not supported"); + snprintf(g->Message, sizeof(g->Message), "GetAdaptersInfo is not supported"); else FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), diff --git a/storage/connect/messages.h b/storage/connect/messages.h index b55ec39b235..91e04f3d472 100644 --- a/storage/connect/messages.h +++ b/storage/connect/messages.h @@ -1,13 +1,5 @@ /**************************************************************************/ /* NLS messsages definition. */ /**************************************************************************/ -#if defined(FRENCH) -#if defined(CPX) -#include "frmsg1.h" -#else /* not CPX */ -#include "frmsg2.h" -#endif /* CPX */ -#else /* not FRENCH */ #include "engmsg.h" -#endif /* FRENCH */ /* ---------------------------------------------------------------------- */ diff --git a/storage/connect/odbconn.cpp b/storage/connect/odbconn.cpp index a47d954c0a7..18bb77a9d00 100644 --- a/storage/connect/odbconn.cpp +++ b/storage/connect/odbconn.cpp @@ -1155,7 +1155,7 @@ int ODBConn::Open(PCSZ ConnectString, POPARM sop, DWORD options) if (!m_UseCnc) { if (DriverConnect(options)) { - strcpy(g->Message, MSG(CONNECT_CANCEL)); + snprintf(g->Message, sizeof(g->Message), MSG(CONNECT_CANCEL)); return 0; } // endif @@ -1477,7 +1477,7 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols) ThrowDBX(rc, "SQLNumResultCols", hstmt); if (ncol == 0) { - strcpy(g->Message, "This Srcdef does not return a result set"); + snprintf(g->Message, sizeof(g->Message), "This Srcdef does not return a result set"); return -1; } // endif ncol @@ -1520,7 +1520,7 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols) tp = GetSQLCType(colp->GetResultType()); if (tp == SQL_TYPE_NULL) { - sprintf(m_G->Message, MSG(INV_COLUMN_TYPE), + snprintf(m_G->Message, sizeof(m_G->Message), MSG(INV_COLUMN_TYPE), colp->GetResultType(), SVP(colp->GetName())); ThrowDBX(m_G->Message); } // endif tp @@ -1546,7 +1546,7 @@ int ODBConn::ExecDirectSQL(char *sql, ODBCCOL *tocols) for (int i = 0; i < MAX_NUM_OF_MSG && x->m_ErrMsg[i]; i++) htrc(x->m_ErrMsg[i]); - sprintf(m_G->Message, "%s: %s", x->m_Msg, x->GetErrorMessage(0)); + snprintf(m_G->Message, sizeof(m_G->Message), "%s: %s", x->m_Msg, x->GetErrorMessage(0)); if (b) SQLCancel(hstmt); @@ -1774,7 +1774,7 @@ int ODBConn::ExecuteSQL(void) if (ncol) { // This should never happen while inserting - strcpy(g->Message, "Logical error while inserting"); + snprintf(g->Message, sizeof(g->Message), "Logical error while inserting"); } else { // Insert, Update or Delete statement if (!Check(rc = SQLRowCount(m_hstmt, &afrw))) @@ -1783,7 +1783,7 @@ int ODBConn::ExecuteSQL(void) } // endif ncol } catch(DBX *x) { - sprintf(m_G->Message, "%s: %s", x->m_Msg, x->GetErrorMessage(0)); + snprintf(m_G->Message, sizeof(m_G->Message), "%s: %s", x->m_Msg, x->GetErrorMessage(0)); SQLCancel(m_hstmt); rc = SQLFreeStmt(m_hstmt, SQL_DROP); m_hstmt = NULL; @@ -1822,7 +1822,7 @@ bool ODBConn::BindParam(ODBCCOL *colp) ThrowDBX(rc, "SQLDescribeParam", m_hstmt); } catch(DBX *x) { - sprintf(m_G->Message, "%s: %s", x->m_Msg, x->GetErrorMessage(0)); + snprintf(m_G->Message, sizeof(m_G->Message), "%s: %s", x->m_Msg, x->GetErrorMessage(0)); #endif // 0 colsize = colp->GetPrecision(); sqlt = GetSQLType(buftype); @@ -1920,10 +1920,10 @@ bool ODBConn::ExecSQLcommand(char *sql) ThrowDBX(rc, "SQLRowCount", hstmt); m_Tdb->AftRows = (int)afrw; - strcpy(g->Message, "Affected rows"); + snprintf(g->Message, sizeof(g->Message), "Affected rows"); } else { m_Tdb->AftRows = (int)ncol; - strcpy(g->Message, "Result set column number"); + snprintf(g->Message, sizeof(g->Message), "Result set column number"); } // endif ncol } catch(DBX *x) { @@ -2021,7 +2021,7 @@ PQRYRES ODBConn::GetMetaData(PGLOBAL g, PCSZ dsn, PCSZ src) } // end try/catch if (!ncol) { - strcpy(g->Message, "Invalid Srcdef"); + snprintf(g->Message, sizeof(g->Message), "Invalid Srcdef"); goto err; } // endif ncol @@ -2119,7 +2119,7 @@ bool ODBConn::GetDataSources(PQRYRES qrp) } // endfor i } catch(DBX *x) { - sprintf(m_G->Message, "%s: %s", x->m_Msg, x->GetErrorMessage(0)); + snprintf(m_G->Message, sizeof(m_G->Message), "%s: %s", x->m_Msg, x->GetErrorMessage(0)); rv = true; } // end try/catch @@ -2170,7 +2170,7 @@ bool ODBConn::GetDrivers(PQRYRES qrp) } // endfor n } catch(DBX *x) { - sprintf(m_G->Message, "%s: %s", x->m_Msg, x->GetErrorMessage(0)); + snprintf(m_G->Message, sizeof(m_G->Message), "%s: %s", x->m_Msg, x->GetErrorMessage(0)); rv = true; } // end try/catch @@ -2514,7 +2514,7 @@ PQRYRES ODBConn::AllocateResult(PGLOBAL g) PQRYRES qrp; if (!m_Rows) { - strcpy(g->Message, "Void result"); + snprintf(g->Message, sizeof(g->Message), "Void result"); return NULL; } // endif m_Res @@ -2593,7 +2593,7 @@ int ODBConn::Rewind(char *sql, ODBCCOL *tocols) rbuf = (int)crow; } catch(DBX *x) { - sprintf(m_G->Message, "%s: %s", x->m_Msg, x->GetErrorMessage(0)); + snprintf(m_G->Message, sizeof(m_G->Message), "%s: %s", x->m_Msg, x->GetErrorMessage(0)); rbuf = -1; } // end try/catch diff --git a/storage/connect/osutil.c b/storage/connect/osutil.c index 278023f55a2..9b1771be105 100644 --- a/storage/connect/osutil.c +++ b/storage/connect/osutil.c @@ -4,6 +4,7 @@ #include #include #include "osutil.h" +#include "m_string.h" #ifdef _WIN32 my_bool CloseFileHandle(HANDLE h) @@ -140,25 +141,25 @@ char *_fullpath(char *absPath, const char *relPath, size_t maxLength) char *p; if ( *relPath == '\\' || *relPath == '/' ) { - strncpy(absPath, relPath, maxLength); + snprintf(absPath, maxLength, "%s", relPath); } else if (*relPath == '~') { // get the path to the home directory struct passwd *pw = getpwuid(getuid()); const char *homedir = pw->pw_dir; if (homedir) - strcat(strncpy(absPath, homedir, maxLength), relPath + 1); + snprintf(absPath, maxLength, "%s%s", homedir, relPath + 1); else - strncpy(absPath, relPath, maxLength); + snprintf(absPath, maxLength, "%s", relPath); } else { char buff[2*_MAX_PATH]; p= getcwd(buff, _MAX_PATH); assert(p); - strcat(buff,"/"); - strcat(buff, relPath); - strncpy(absPath, buff, maxLength); + safe_strcat(buff, sizeof(buff), "/"); + safe_strcat(buff, sizeof(buff), relPath); + snprintf(absPath, maxLength, "%s", buff); } /* endif's relPath */ p = absPath; diff --git a/storage/connect/plgdbsem.h b/storage/connect/plgdbsem.h index 370bf69ffa0..4371f90a21d 100644 --- a/storage/connect/plgdbsem.h +++ b/storage/connect/plgdbsem.h @@ -14,11 +14,7 @@ /***********************************************************************/ /* DB Constant definitions. */ /***********************************************************************/ -#if defined(FRENCH) -#define DEFAULT_LOCALE "French" -#else // !FRENCH #define DEFAULT_LOCALE "English" -#endif // !FRENCH #define DOS_MAX_PATH 144 /* Must be the same across systems */ #define DOS_BUFF_LEN 100 /* Number of lines in binary file buffer */ diff --git a/storage/connect/plgdbutl.cpp b/storage/connect/plgdbutl.cpp index 0f075a67876..68641129dc9 100644 --- a/storage/connect/plgdbutl.cpp +++ b/storage/connect/plgdbutl.cpp @@ -381,7 +381,7 @@ char *SetPath(PGLOBAL g, const char *path) return NULL; if (PlugIsAbsolutePath(path)) { - strcpy(buf, path); + snprintf(buf, len, "%s", path); return buf; } // endif path @@ -391,9 +391,9 @@ char *SetPath(PGLOBAL g, const char *path) #else // !_WIN32 const char *s = "/"; #endif // !_WIN32 - strcat(strcat(strcat(strcpy(buf, "."), s), path), s); + snprintf(buf, len, ".%s%s%s", s, path, s); } else - strcpy(buf, path); + snprintf(buf, len, "%s", path); } // endif path diff --git a/storage/connect/plugutil.cpp b/storage/connect/plugutil.cpp index 6fb40c92a1b..a39c5846225 100644 --- a/storage/connect/plugutil.cpp +++ b/storage/connect/plugutil.cpp @@ -74,6 +74,7 @@ /***********************************************************************/ #define STORAGE /* Initialize global variables */ +#include "m_string.h" #include "osutil.h" #include "global.h" #include "plgdbsem.h" @@ -329,14 +330,15 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath) switch (*direc) { case '\0': - strcpy(direc, defdir); + snprintf(direc, sizeof(direc), "%s", defdir); break; case '\\': case '/': break; default: // This supposes that defdir ends with a SLASH - strcpy(direc, strcat(defdir, direc)); + safe_strcat(defdir, sizeof(defdir), direc); + snprintf(direc, sizeof(direc), "%s", defdir); } // endswitch _makepath(newname, drive, direc, fname, ftype); @@ -607,7 +609,7 @@ char *PlugDup(PGLOBAL g, const char *str) if (str) { char *sm = (char*)PlugSubAlloc(g, NULL, strlen(str) + 1); - strcpy(sm, str); + snprintf(sm, strlen(str) + 1, "%s", str); return sm; } else return NULL; diff --git a/storage/connect/rcmsg.c b/storage/connect/rcmsg.c index 4cd443d88bb..e2fd08ba866 100644 --- a/storage/connect/rcmsg.c +++ b/storage/connect/rcmsg.c @@ -32,17 +32,6 @@ const char *GetMsgid(int id) const char *p = NULL; // This conditional until a real fix is found for MDEV-7304 -#if defined(FRENCH) - if (!stricmp(msglang(), "french")) - switch (id) { -#include "frids.h" -#if defined(NEWMSG) -#include "frcas.h" -#endif // NEWMSG - } // endswitch(id) - - else // English -#endif // FRENCH switch (id) { #include "enids.h" #if defined(NEWMSG) diff --git a/storage/connect/tabjmg.cpp b/storage/connect/tabjmg.cpp index 06a91f57dea..cf0fa73b5d5 100644 --- a/storage/connect/tabjmg.cpp +++ b/storage/connect/tabjmg.cpp @@ -48,7 +48,7 @@ JMGDISC::JMGDISC(PGLOBAL g, int *lg) : MGODISC(g, lg) bool JMGDISC::Init(PGLOBAL g) { if (!(Jcp = ((TDBJMG*)tmgp)->Jcp)) { - strcpy(g->Message, "Init: Jcp is NULL"); + snprintf(g->Message, sizeof(g->Message), "Init: Jcp is NULL"); return true; } else if (Jcp->gmID(g, columnid, "ColumnDesc", "(Ljava/lang/Object;I[II)Ljava/lang/Object;")) @@ -86,7 +86,7 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt, jintArray val = Jcp->env->NewIntArray(5); if (val == nullptr) { - strcpy(g->Message, "Cannot allocate jint array"); + snprintf(g->Message, sizeof(g->Message), "Cannot allocate jint array"); return true; } else if (!ncol) n = Jcp->env->GetIntArrayElements(val, 0); @@ -113,7 +113,7 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt, z = 65 - strlen(colname); strncat(strncat(colname, "_", z), key, z - 1); } else - strcpy(colname, key); + snprintf(colname, sizeof(colname), "%s", key); if (pfmt) { strncpy(fmt, pfmt, 128); @@ -121,7 +121,7 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt, z = 129 - strlen(fmt); strncat(strncat(fmt, ".", z), key, z - 1); } else - strcpy(fmt, key); + snprintf(fmt, sizeof(fmt), "%s", key); if (!jres) { bcol.Type = n[0]; @@ -318,7 +318,7 @@ bool TDBJMG::OpenDB(PGLOBAL g) /* First opening. */ /*********************************************************************/ if (Pipe && Mode != MODE_READ) { - strcpy(g->Message, "Pipeline tables are read only"); + snprintf(g->Message, sizeof(g->Message), "Pipeline tables are read only"); return true; } // endif Pipe @@ -353,7 +353,7 @@ bool TDBJMG::OpenDB(PGLOBAL g) /***********************************************************************/ bool TDBJMG::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr) { - strcpy(g->Message, "MONGO tables are not indexable"); + snprintf(g->Message, sizeof(g->Message), "MONGO tables are not indexable"); return true; } // end of ReadKey @@ -601,7 +601,7 @@ bool JMGCOL::AddValue(PGLOBAL g, bson_t *doc, char *key, bool upd) } // endswitch Buf_Type if (!rc) { - strcpy(g->Message, "Adding value failed"); + snprintf(g->Message, sizeof(g->Message), "Adding value failed"); return true; } else return false; diff --git a/storage/connect/tabmysql.cpp b/storage/connect/tabmysql.cpp index 7192b572309..2c6ffa8bdcc 100644 --- a/storage/connect/tabmysql.cpp +++ b/storage/connect/tabmysql.cpp @@ -112,7 +112,7 @@ bool MYSQLDEF::GetServerInfo(PGLOBAL g, const char *server_name) if (!server_name || !strlen(server_name)) { DBUG_PRINT("info", ("server_name not defined!")); - strcpy(g->Message, "server_name not defined!"); + snprintf(g->Message, sizeof(g->Message), "server_name not defined!"); DBUG_RETURN(true); } // endif server_name @@ -121,7 +121,7 @@ bool MYSQLDEF::GetServerInfo(PGLOBAL g, const char *server_name) if (!(server= get_server_by_name(mem, server_name, &server_buffer))) { DBUG_PRINT("info", ("get_server_by_name returned > 0 error condition!")); /* need to come up with error handling */ - strcpy(g->Message, "get_server_by_name returned > 0 error condition!"); + snprintf(g->Message, sizeof(g->Message), "get_server_by_name returned > 0 error condition!"); DBUG_RETURN(true); } // endif server @@ -214,21 +214,21 @@ bool MYSQLDEF::ParseURL(PGLOBAL g, char *url, bool b) char *sport, *scheme = url; if (!(Username = strstr(url, "://"))) { - strcpy(g->Message, "Connection is not an URL"); + snprintf(g->Message, sizeof(g->Message), "Connection is not an URL"); return true; } // endif User scheme[Username - scheme] = 0; if (stricmp(scheme, "mysql")) { - strcpy(g->Message, "scheme must be mysql"); + snprintf(g->Message, sizeof(g->Message), "scheme must be mysql"); return true; } // endif scheme Username += 3; if (!(Hostname = (char*)strchr(Username, '@'))) { - strcpy(g->Message, "No host specified in URL"); + snprintf(g->Message, sizeof(g->Message), "No host specified in URL"); return true; } else { *Hostname++ = 0; // End Username @@ -240,7 +240,7 @@ bool MYSQLDEF::ParseURL(PGLOBAL g, char *url, bool b) // Make sure there isn't an extra / if (strchr(pwd, '/')) { - strcpy(g->Message, "Syntax error in URL"); + snprintf(g->Message, sizeof(g->Message), "Syntax error in URL"); return true; } // endif @@ -256,7 +256,7 @@ bool MYSQLDEF::ParseURL(PGLOBAL g, char *url, bool b) // Make sure there isn't an extra / or @ */ if ((strchr(Username, '/')) || (strchr(Hostname, '@'))) { - strcpy(g->Message, "Syntax error in URL"); + snprintf(g->Message, sizeof(g->Message), "Syntax error in URL"); return true; } // endif @@ -268,7 +268,7 @@ bool MYSQLDEF::ParseURL(PGLOBAL g, char *url, bool b) // Make sure there's not an extra / if ((strchr(tabn, '/'))) { - strcpy(g->Message, "Syntax error in URL"); + snprintf(g->Message, sizeof(g->Message), "Syntax error in URL"); return true; } // endif / @@ -574,7 +574,7 @@ bool TDBMYSQL::MakeSelect(PGLOBAL g, bool mx) len += (mx ? 256 : 1); if (Query->IsTruncated() || Query->Resize(len)) { - strcpy(g->Message, "MakeSelect: Out of memory"); + snprintf(g->Message, sizeof(g->Message), "MakeSelect: Out of memory"); return true; } // endif Query @@ -599,7 +599,7 @@ bool TDBMYSQL::MakeInsert(PGLOBAL g) if (Prep) { #if !defined(MYSQL_PREPARED_STATEMENTS) - strcpy(g->Message, "Prepared statements not used (not supported)"); + snprintf(g->Message, sizeof(g->Message), "Prepared statements not used (not supported)"); PushWarning(g, this); Prep = false; #endif // !MYSQL_PREPARED_STATEMENTS @@ -607,7 +607,7 @@ bool TDBMYSQL::MakeInsert(PGLOBAL g) for (colp = Columns; colp; colp = colp->GetNext()) if (colp->IsSpecial()) { - strcpy(g->Message, MSG(NO_SPEC_COL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_SPEC_COL)); return true; } else { len += (strlen(colp->GetName()) + 4); @@ -664,7 +664,7 @@ bool TDBMYSQL::MakeInsert(PGLOBAL g) #endif // MYSQL_PREPARED_STATEMENTS if ((oom = Query->IsTruncated())) - strcpy(g->Message, "MakeInsert: Out of memory"); + snprintf(g->Message, sizeof(g->Message), "MakeInsert: Out of memory"); return oom; } // end of MakeInsert @@ -706,7 +706,7 @@ bool TDBMYSQL::MakeCommand(PGLOBAL g) Query->Append(Qrystr + (p - qrystr) + strlen(name)); if (Query->IsTruncated()) { - strcpy(g->Message, "MakeCommand: Out of memory"); + snprintf(g->Message, sizeof(g->Message), "MakeCommand: Out of memory"); return true; } else strlwr(strcpy(qrystr, Query->GetStr())); @@ -742,7 +742,7 @@ int TDBMYSQL::MakeUpdate(PGLOBAL g) && !stricmp(tab, Name)) qc = (Quoted) ? "`" : ""; else { - strcpy(g->Message, "Cannot use this UPDATE command"); + snprintf(g->Message, sizeof(g->Message), "Cannot use this UPDATE command"); return RC_FX; } // endif sscanf @@ -769,7 +769,7 @@ int TDBMYSQL::MakeDelete(PGLOBAL g) else if (sscanf(Qrystr, "%s %s %s%511c", cmd, from, tab, end) > 2) qc = (Quoted) ? "`" : ""; else { - strcpy(g->Message, "Cannot use this DELETE command"); + snprintf(g->Message, sizeof(g->Message), "Cannot use this DELETE command"); return RC_FX; } // endif sscanf @@ -934,7 +934,7 @@ bool TDBMYSQL::OpenDB(PGLOBAL g) } else if (Mode == MODE_INSERT) { if (Srcdef) { - strcpy(g->Message, "No insert into anonym views"); + snprintf(g->Message, sizeof(g->Message), "No insert into anonym views"); Myc.Close(); return true; } // endif Srcdef @@ -946,7 +946,7 @@ bool TDBMYSQL::OpenDB(PGLOBAL g) if (Nparm != n) { if (n >= 0) // Other errors return negative values - strcpy(g->Message, MSG(BAD_PARM_COUNT)); + snprintf(g->Message, sizeof(g->Message), MSG(BAD_PARM_COUNT)); } else #endif // MYSQL_PREPARED_STATEMENTS @@ -1109,7 +1109,7 @@ bool TDBMYSQL::ReadKey(PGLOBAL g, OPVAL op, const key_range *kr) if (To_CondFil) if (Query->Append(" AND ") || Query->Append(To_CondFil->Body)) { - strcpy(g->Message, "Readkey: Out of memory"); + snprintf(g->Message, sizeof(g->Message), "Readkey: Out of memory"); return true; } // endif Append @@ -1184,7 +1184,7 @@ int TDBMYSQL::WriteDB(PGLOBAL g) } // endfor colp if (unlikely(Query->IsTruncated())) { - strcpy(g->Message, "WriteDB: Out of memory"); + snprintf(g->Message, sizeof(g->Message), "WriteDB: Out of memory"); rc = RC_FX; } else { Query->RepLast(')'); @@ -1530,13 +1530,13 @@ PCMD TDBMYEXC::MakeCMD(PGLOBAL g) (To_CondFil->Op == OP_EQ || To_CondFil->Op == OP_IN)) { xcmd = To_CondFil->Cmds; } else - strcpy(g->Message, "Invalid command specification filter"); + snprintf(g->Message, sizeof(g->Message), "Invalid command specification filter"); } else - strcpy(g->Message, "No command column in select list"); + snprintf(g->Message, sizeof(g->Message), "No command column in select list"); } else if (!Srcdef) - strcpy(g->Message, "No Srcdef default command"); + snprintf(g->Message, sizeof(g->Message), "No Srcdef default command"); else xcmd = new(g) CMD(g, Srcdef); @@ -1561,7 +1561,7 @@ int TDBMYEXC::GetMaxSize(PGLOBAL) bool TDBMYEXC::OpenDB(PGLOBAL g) { if (Use == USE_OPEN) { - strcpy(g->Message, "Multiple execution is not allowed"); + snprintf(g->Message, sizeof(g->Message), "Multiple execution is not allowed"); return true; } // endif use @@ -1579,7 +1579,7 @@ bool TDBMYEXC::OpenDB(PGLOBAL g) Use = USE_OPEN; // Do it now in case we are recursively called if (Mode != MODE_READ && Mode != MODE_READX) { - strcpy(g->Message, "No INSERT/DELETE/UPDATE of MYSQL EXEC tables"); + snprintf(g->Message, sizeof(g->Message), "No INSERT/DELETE/UPDATE of MYSQL EXEC tables"); return true; } // endif Mode @@ -1626,11 +1626,11 @@ int TDBMYEXC::ReadDB(PGLOBAL g) switch (rc = Myc.ExecSQLcmd(g, Query->GetStr(), &Warnings)) { case RC_NF: AftRows = Myc.m_Afrw; - strcpy(g->Message, "Affected rows"); + snprintf(g->Message, sizeof(g->Message), "Affected rows"); break; case RC_OK: AftRows = Myc.m_Fields; - strcpy(g->Message, "Result set columns"); + snprintf(g->Message, sizeof(g->Message), "Result set columns"); break; case RC_FX: AftRows = Myc.m_Afrw; @@ -1660,7 +1660,7 @@ int TDBMYEXC::ReadDB(PGLOBAL g) /***********************************************************************/ int TDBMYEXC::WriteDB(PGLOBAL g) { - strcpy(g->Message, "EXEC MYSQL tables are read only"); + snprintf(g->Message, sizeof(g->Message), "EXEC MYSQL tables are read only"); return RC_FX; } // end of WriteDB diff --git a/storage/connect/tabpivot.cpp b/storage/connect/tabpivot.cpp index ba9b903399d..da5885f9914 100644 --- a/storage/connect/tabpivot.cpp +++ b/storage/connect/tabpivot.cpp @@ -120,7 +120,7 @@ PQRYRES PIVAID::MakePivotColumns(PGLOBAL g) uint n = strlen(Skcol); skc = (char*)PlugSubAlloc(g, NULL, n + 2); - strcpy(skc, Skcol); + snprintf(skc, n + 2, "%s", Skcol); skc[n + 1] = 0; // Replace ; by nulls in skc @@ -133,9 +133,9 @@ PQRYRES PIVAID::MakePivotColumns(PGLOBAL g) if (!Tabsrc && Tabname) { // Locate the query query = (char*)PlugSubAlloc(g, NULL, strlen(Tabname) + 26); - sprintf(query, "SELECT * FROM `%s` LIMIT 1", Tabname); + snprintf(query, strlen(Tabname) + 26, "SELECT * FROM `%s` LIMIT 1", Tabname); } else if (!Tabsrc) { - strcpy(g->Message, MSG(SRC_TABLE_UNDEF)); + snprintf(g->Message, sizeof(g->Message), MSG(SRC_TABLE_UNDEF)); goto err; } else query = (char*)Tabsrc; @@ -167,7 +167,7 @@ PQRYRES PIVAID::MakePivotColumns(PGLOBAL g) Fncol = crp->Name; if (!Fncol) { - strcpy(g->Message, MSG(NO_DEF_FNCCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_FNCCOL)); goto err; } // endif Fncol @@ -180,7 +180,7 @@ PQRYRES PIVAID::MakePivotColumns(PGLOBAL g) Picol = crp->Name; if (!Picol) { - strcpy(g->Message, MSG(NO_DEF_PIVOTCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_PIVOTCOL)); goto err; } // endif Picol @@ -206,10 +206,10 @@ PQRYRES PIVAID::MakePivotColumns(PGLOBAL g) pcrp = &crp->Next; } if (!Rblkp) { - strcpy(g->Message, MSG(NO_DEF_PIVOTCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_PIVOTCOL)); goto err; } else if (!fncrp) { - strcpy(g->Message, MSG(NO_DEF_FNCCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_FNCCOL)); goto err; } // endif @@ -302,7 +302,7 @@ PQRYRES PIVAID::MakePivotColumns(PGLOBAL g) if (trace(1)) htrc("Exception %d: %s\n", n, g->Message); } catch (const char *msg) { - strcpy(g->Message, msg); + snprintf(g->Message, sizeof(g->Message), "%s", msg); } // end catch err: @@ -442,7 +442,7 @@ bool TDBPIVOT::FindDefaultColumns(PGLOBAL g) Fncol = cdp->GetName(); if (!Fncol) { - strcpy(g->Message, MSG(NO_DEF_FNCCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_FNCCOL)); return true; } // endif Fncol @@ -455,7 +455,7 @@ bool TDBPIVOT::FindDefaultColumns(PGLOBAL g) Picol = cdp->GetName(); if (!Picol) { - strcpy(g->Message, MSG(NO_DEF_PIVOTCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_PIVOTCOL)); return true; } // endif Picol @@ -518,7 +518,7 @@ bool TDBPIVOT::GetSourceTable(PGLOBAL g) } // endif !GBdone } else if (!Tabsrc) { - strcpy(g->Message, MSG(SRC_TABLE_UNDEF)); + snprintf(g->Message, sizeof(g->Message), MSG(SRC_TABLE_UNDEF)); return true; } // endif @@ -587,18 +587,18 @@ bool TDBPIVOT::MakeViewColumns(PGLOBAL g) PTDBMY tdbp; if (Tdbp->GetAmType() != TYPE_AM_MYSQL) { - strcpy(g->Message, "View is not MySQL"); + snprintf(g->Message, sizeof(g->Message),"View is not MySQL"); return true; } else tdbp = (PTDBMY)Tdbp; if (!Fncol && !(Fncol = tdbp->FindFieldColumn(Picol))) { - strcpy(g->Message, MSG(NO_DEF_FNCCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_FNCCOL)); return true; } // endif Fncol if (!Picol && !(Picol = tdbp->FindFieldColumn(Fncol))) { - strcpy(g->Message, MSG(NO_DEF_PIVOTCOL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_DEF_PIVOTCOL)); return true; } // endif Picol @@ -678,7 +678,7 @@ bool TDBPIVOT::OpenDB(PGLOBAL g) /*******************************************************************/ /* Direct access of PIVOT tables is not implemented yet. */ /*******************************************************************/ - strcpy(g->Message, MSG(NO_PIV_DIR_ACC)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_PIV_DIR_ACC)); return TRUE; } // endif To_Key_Col @@ -779,7 +779,7 @@ int TDBPIVOT::ReadDB(PGLOBAL g) if (!colp && !(colp = Dcolp)) { if (!Accept) { - strcpy(g->Message, MSG(NO_MATCH_COL)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_MATCH_COL)); return RC_FX; } else continue; diff --git a/storage/connect/tabsys.cpp b/storage/connect/tabsys.cpp index 7d90b467276..9e8a7d9dbfd 100644 --- a/storage/connect/tabsys.cpp +++ b/storage/connect/tabsys.cpp @@ -84,7 +84,7 @@ bool INIDEF::DefineAM(PGLOBAL g, LPCSTR, int) PlugSetPath(p, Fn, GetPath()); Fn = p; } else { - strcpy(g->Message, MSG(MISSING_FNAME)); + snprintf(g->Message, sizeof(g->Message), MSG(MISSING_FNAME)); return true; } // endif Fn @@ -326,7 +326,7 @@ int TDBINI::DeleteDB(PGLOBAL g, int irc) break; default: if (!Section) { - strcpy(g->Message, MSG(NO_SECTION_NAME)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_SECTION_NAME)); return RC_FX; } else if (!WritePrivateProfileString(Section, NULL, NULL, Ifile)) { @@ -514,7 +514,7 @@ void INICOL::WriteColumn(PGLOBAL g) throw 31; } else if (Flag == 1) { if (tdbp->Mode == MODE_UPDATE) { - strcpy(g->Message, MSG(NO_SEC_UPDATE)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_SEC_UPDATE)); throw 31; } else if (*p) { tdbp->Section = p; @@ -523,7 +523,7 @@ void INICOL::WriteColumn(PGLOBAL g) return; } else if (!tdbp->Section) { - strcpy(g->Message, MSG(SEC_NAME_FIRST)); + snprintf(g->Message, sizeof(g->Message), MSG(SEC_NAME_FIRST)); throw 31; } // endif's @@ -752,7 +752,7 @@ int TDBXIN::DeleteDB(PGLOBAL g, int irc) } // endif } else if (!Section) { - strcpy(g->Message, MSG(NO_SECTION_NAME)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_SECTION_NAME)); return RC_FX; } else if (!WritePrivateProfileString(Section, Keycur, NULL, Ifile)) { @@ -840,7 +840,7 @@ void XINCOL::WriteColumn(PGLOBAL g) throw 31; } else if (Flag == 1) { if (tdbp->Mode == MODE_UPDATE) { - strcpy(g->Message, MSG(NO_SEC_UPDATE)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_SEC_UPDATE)); throw 31; } else if (*p) { tdbp->Section = p; @@ -850,7 +850,7 @@ void XINCOL::WriteColumn(PGLOBAL g) return; } else if (Flag == 2) { if (tdbp->Mode == MODE_UPDATE) { - strcpy(g->Message, MSG(NO_KEY_UPDATE)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_KEY_UPDATE)); throw 31; } else if (*p) { tdbp->Keycur = p; @@ -859,7 +859,7 @@ void XINCOL::WriteColumn(PGLOBAL g) return; } else if (!tdbp->Section || !tdbp->Keycur) { - strcpy(g->Message, MSG(SEC_KEY_FIRST)); + snprintf(g->Message, sizeof(g->Message), MSG(SEC_KEY_FIRST)); throw 31; } // endif's diff --git a/storage/connect/tabwmi.cpp b/storage/connect/tabwmi.cpp index 935d21c59c9..1cd46a7442c 100644 --- a/storage/connect/tabwmi.cpp +++ b/storage/connect/tabwmi.cpp @@ -6,6 +6,7 @@ #error This is a WINDOWS only table type #endif // !_WIN32 #include "my_global.h" +#include "m_string.h" #include #include "global.h" @@ -49,7 +50,7 @@ PWMIUT InitWMI(PGLOBAL g, PCSZ nsp, PCSZ classname) else if (!stricmp(nsp, "root\\cli")) classname = "Msft_CliAlias"; else { - strcpy(g->Message, "Missing class name"); + safe_strcpy(g->Message, sizeof(g->Message), "Missing class name"); return NULL; } // endif classname @@ -512,7 +513,8 @@ char *TDBWMI::MakeWQL(PGLOBAL g) ncol++; if (ncol) { - colist = (char*)PlugSubAlloc(g, NULL, (NAM_LEN + 4) * ncol); + size_t colist_sz = (NAM_LEN + 4) * ncol; + colist = (char*)PlugSubAlloc(g, NULL, colist_sz); for (colp = Columns; colp; colp = colp->GetNext()) if (!colp->IsSpecial()) { @@ -521,10 +523,13 @@ char *TDBWMI::MakeWQL(PGLOBAL g) if (colp->GetColUse(U_P | U_J_EXT) || noloc) { if (first) { - strcpy(colist, colp->GetName()); + snprintf(colist, colist_sz, colp->GetName()); first = false; - } else + } else { strcat(strcat(colist, ", "), colp->GetName()); + safe_strcat(colist, colist_sz, ", "); + safe_strcat(colist, colist_sz, colp->GetName()); + } } // endif ColUse @@ -534,18 +539,19 @@ char *TDBWMI::MakeWQL(PGLOBAL g) // ncol == 0 can occur for queries such that sql count(*) from... // for which we will count the rows from sql * from... colist = (char*)PlugSubAlloc(g, NULL, 2); - strcpy(colist, "*"); + snprintf(colist, 2, "*"); } // endif ncol // Below 14 is length of 'select ' + length of ' from ' + 1 len = (strlen(colist) + strlen(Wclass) + 14); len += (To_CondFil ? strlen(To_CondFil->Body) + 7 : 0); wql = (char*)PlugSubAlloc(g, NULL, len); - strcat(strcat(strcpy(wql, "SELECT "), colist), " FROM "); - strcat(wql, Wclass); + snprintf(wql, len, "SELECT %s FROM %s", colist, Wclass); - if (To_CondFil) - strcat(strcat(wql, " WHERE "), To_CondFil->Body); + if (To_CondFil) { + safe_strcat(wql, len, " WHERE "); + safe_strcat(wql, len, To_CondFil->Body); + } return wql; } // end of MakeWQL @@ -654,13 +660,13 @@ bool TDBWMI::OpenDB(PGLOBAL g) /*******************************************************************/ /* WMI tables cannot be modified. */ /*******************************************************************/ - strcpy(g->Message, "WMI tables are read only"); + safe_strcpy(g->Message, sizeof(g->Message), "WMI tables are read only"); return true; } // endif Mode if (!To_CondFil && !stricmp(Wclass, "CIM_Datafile") && !stricmp(Nspace, "root\\cimv2")) { - strcpy(g->Message, + safe_strcpy(g->Message, sizeof(g->Message), "Would last forever when not filtered, use DIR table instead"); return true; } else @@ -697,7 +703,7 @@ int TDBWMI::ReadDB(PGLOBAL g) /***********************************************************************/ int TDBWMI::WriteDB(PGLOBAL g) { - strcpy(g->Message, "WMI tables are read only"); + safe_strcpy(g->Message, sizeof(g->Message), "WMI tables are read only"); return RC_FX; } // end of WriteDB @@ -706,7 +712,7 @@ int TDBWMI::WriteDB(PGLOBAL g) /***********************************************************************/ int TDBWMI::DeleteDB(PGLOBAL g, int irc) { - strcpy(g->Message, "Delete not enabled for WMI tables"); + safe_strcpy(g->Message, sizeof(g->Message), "Delete not enabled for WMI tables"); return RC_FX; } // end of DeleteDB diff --git a/storage/connect/tabxml.cpp b/storage/connect/tabxml.cpp index 3bd2cfbf6cd..fae2375e5a1 100644 --- a/storage/connect/tabxml.cpp +++ b/storage/connect/tabxml.cpp @@ -140,7 +140,7 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info) } // endif info if (GetIntegerTableOption(g, topt, "Multiple", 0)) { - strcpy(g->Message, "Cannot find column definition for multiple table"); + snprintf(g->Message, sizeof(g->Message), "Cannot find column definition for multiple table"); return NULL; } // endif Multiple @@ -152,7 +152,7 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info) fn = GetStringTableOption(g, topt, "Subtype", NULL); if (!fn) { - strcpy(g->Message, MSG(MISSING_FNAME)); + snprintf(g->Message, sizeof(g->Message), MSG(MISSING_FNAME)); return NULL; } else topt->subtype = NULL; @@ -483,12 +483,12 @@ bool XMLDEF::DefineAM(PGLOBAL g, LPCSTR am, int poff) Encoding = GetStringCatInfo(g, "Encoding", "UTF-8"); if (*Fn == '?') { - strcpy(g->Message, MSG(MISSING_FNAME)); + snprintf(g->Message, sizeof(g->Message), MSG(MISSING_FNAME)); return true; } // endif fn if ((signed)GetIntCatInfo("Flag", -1) != -1) { - strcpy(g->Message, MSG(DEPREC_FLAG)); + snprintf(g->Message, sizeof(g->Message), MSG(DEPREC_FLAG)); return true; } // endif flag @@ -567,7 +567,7 @@ PTDB XMLDEF::GetTable(PGLOBAL g, MODE m) return new(g) TDBXCT(this); if (Zipped && !(m == MODE_READ || m == MODE_ANY)) { - strcpy(g->Message, "ZIpped XML tables are read only"); + snprintf(g->Message, sizeof(g->Message), "ZIpped XML tables are read only"); return NULL; } // endif Zipped @@ -857,16 +857,16 @@ bool TDBXML::Initialize(PGLOBAL g) // Get root node if (!(Root = Docp->GetRoot(g))) { // This should never happen as load should have failed - strcpy(g->Message, MSG(EMPTY_DOC)); + snprintf(g->Message, sizeof(g->Message), MSG(EMPTY_DOC)); goto error; } // endif Root // If tabname is not an Xpath, // construct one that will find it anywhere if (!strchr(Tabname, '/')) - strcat(strcpy(tabpath, "//"), Tabname); + snprintf(tabpath, sizeof(tabpath), "//%s", Tabname); else - strcpy(tabpath, Tabname); + snprintf(tabpath, sizeof(tabpath), "%s", Tabname); // Evaluate table xpath if ((TabNode = Root->SelectSingleNode(g, tabpath))) { @@ -911,7 +911,7 @@ bool TDBXML::Initialize(PGLOBAL g) // Create the XML node if (Docp->NewDoc(g, "1.0")) { - strcpy(g->Message, MSG(NEW_DOC_FAILED)); + snprintf(g->Message, sizeof(g->Message), MSG(NEW_DOC_FAILED)); goto error; } // endif NewDoc @@ -919,7 +919,7 @@ bool TDBXML::Initialize(PGLOBAL g) To_Xb = Docp->LinkXblock(g, Mode, rc, filename); // Add a CONNECT comment node - strcpy(buf, " Created by the MariaDB CONNECT Storage Engine"); + snprintf(buf, sizeof(buf), " Created by the MariaDB CONNECT Storage Engine"); Docp->AddComment(g, buf); if (XmlDB) { @@ -932,7 +932,7 @@ bool TDBXML::Initialize(PGLOBAL g) TabNode = Root = Docp->NewRoot(g, Tabname); if (TabNode == NULL || Root == NULL) { - strcpy(g->Message, MSG(XML_INIT_ERROR)); + snprintf(g->Message, sizeof(g->Message), MSG(XML_INIT_ERROR)); goto error; } else if (SetTabNode(g)) goto error; @@ -992,7 +992,7 @@ bool TDBXML::Initialize(PGLOBAL g) #if !defined(UNIX) } catch(...) { // Other errors - strcpy(g->Message, MSG(XMLTAB_INIT_ERR)); + snprintf(g->Message, sizeof(g->Message), MSG(XMLTAB_INIT_ERR)); goto error; #endif } // end of try-catches @@ -1037,7 +1037,7 @@ bool TDBXML::SetTabNode(PGLOBAL g) TabNode->AddText(g, "\n\t"); rn = TabNode->AddChildNode(g, Rowname, NULL); } else { - strcpy(g->Message, MSG(NO_ROW_NODE)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_ROW_NODE)); return true; } // endif Rowname @@ -1293,7 +1293,7 @@ bool TDBXML::CheckRow(PGLOBAL g, bool b) TabNode->AddText(g, "\n\t"); RowNode = TabNode->AddChildNode(g, Rowname, RowNode); } else { - strcpy(g->Message, MSG(NO_ROW_NODE)); + snprintf(g->Message, sizeof(g->Message), MSG(NO_ROW_NODE)); return true; } // endif Rowname } @@ -1550,7 +1550,7 @@ bool XMLCOL::ParseXpath(PGLOBAL g, bool mode) if (Tdbp->Mulnode && !strncmp(p, Tdbp->Mulnode, p2 - p)) { if (!Tdbp->Xpand && mode) { - strcpy(g->Message, MSG(CONCAT_SUBNODE)); + snprintf(g->Message, sizeof(g->Message), MSG(CONCAT_SUBNODE)); return true; } else Inod = i; // Index of multiple node @@ -1843,7 +1843,7 @@ void XMLCOL::WriteColumn(PGLOBAL g) } // endfor k if (ColNode == NULL) { - strcpy(g->Message, MSG(COL_ALLOC_ERR)); + snprintf(g->Message, sizeof(g->Message), MSG(COL_ALLOC_ERR)); throw (int)TYPE_AM_XML; } // endif ColNode @@ -1862,7 +1862,7 @@ void XMLCOL::WriteColumn(PGLOBAL g) AttNode = ColNode->AddProperty(g, Xname, Vxap); if (ValNode == NULL && AttNode == NULL) { - strcpy(g->Message, MSG(VAL_ALLOC_ERR)); + snprintf(g->Message, sizeof(g->Message), MSG(VAL_ALLOC_ERR)); throw (int)TYPE_AM_XML; } // endif ValNode @@ -2104,7 +2104,7 @@ void XMULCOL::WriteColumn(PGLOBAL g) } // endfor k if (ColNode == NULL) { - strcpy(g->Message, MSG(COL_ALLOC_ERR)); + snprintf(g->Message, sizeof(g->Message), MSG(COL_ALLOC_ERR)); throw (int)TYPE_AM_XML; } // endif ColNode @@ -2123,7 +2123,7 @@ void XMULCOL::WriteColumn(PGLOBAL g) AttNode = ColNode->AddProperty(g, Xname, Vxap); if (ValNode == NULL && AttNode == NULL) { - strcpy(g->Message, MSG(VAL_ALLOC_ERR)); + snprintf(g->Message, sizeof(g->Message), MSG(VAL_ALLOC_ERR)); throw (int)TYPE_AM_XML; } // endif ValNode @@ -2165,7 +2165,7 @@ void XPOSCOL::ReadColumn(PGLOBAL g) return; // Same row than the last read if (Tdbp->Clist == NULL) { - strcpy(g->Message, MSG(MIS_TAG_LIST)); + snprintf(g->Message, sizeof(g->Message), MSG(MIS_TAG_LIST)); throw (int)TYPE_AM_XML; } // endif Clist @@ -2235,7 +2235,7 @@ void XPOSCOL::WriteColumn(PGLOBAL g) /* Find the column and value nodes to update or insert. */ /*********************************************************************/ if (Tdbp->Clist == NULL) { - strcpy(g->Message, MSG(MIS_TAG_LIST)); + snprintf(g->Message, sizeof(g->Message), MSG(MIS_TAG_LIST)); throw (int)TYPE_AM_XML; } // endif Clist diff --git a/storage/connect/value.cpp b/storage/connect/value.cpp index 7265b2ed0ca..344b0dea50f 100644 --- a/storage/connect/value.cpp +++ b/storage/connect/value.cpp @@ -59,7 +59,7 @@ #if defined(_DEBUG) #define CheckType(V) if (Type != V->GetType()) { \ PGLOBAL& g = Global; \ - strcpy(g->Message, MSG(VALTYPE_NOMATCH)); \ + snprintf(g->Message, sizeof(g->Message), MSG(VALTYPE_NOMATCH)); \ throw Type; #else #define CheckType(V) @@ -556,7 +556,7 @@ BYTE VALUE::TestValue(PVAL vp) /***********************************************************************/ bool VALUE::Compute(PGLOBAL g, PVAL *, int, OPVAL) { - strcpy(g->Message, "Compute not implemented for this value type"); + snprintf(g->Message, sizeof(g->Message), "Compute not implemented for this value type"); return true; } // end of Compute @@ -1051,11 +1051,11 @@ TYPE TYPVAL::SafeAdd(TYPE n1, TYPE n2) if ((n2 > 0) && (n < n1)) { // Overflow - strcpy(g->Message, MSG(FIX_OVFLW_ADD)); + snprintf(g->Message, sizeof(g->Message), MSG(FIX_OVFLW_ADD)); throw 138; } else if ((n2 < 0) && (n > n1)) { // Underflow - strcpy(g->Message, MSG(FIX_UNFLW_ADD)); + snprintf(g->Message, sizeof(g->Message), MSG(FIX_UNFLW_ADD)); throw 138; } // endif's n2 @@ -1079,11 +1079,11 @@ TYPE TYPVAL::SafeMult(TYPE n1, TYPE n2) if (n > MinMaxVal(true)) { // Overflow - strcpy(g->Message, MSG(FIX_OVFLW_TIMES)); + snprintf(g->Message, sizeof(g->Message), MSG(FIX_OVFLW_TIMES)); throw 138; } else if (n < MinMaxVal(false)) { // Underflow - strcpy(g->Message, MSG(FIX_UNFLW_TIMES)); + snprintf(g->Message, sizeof(g->Message), MSG(FIX_UNFLW_TIMES)); throw 138; } // endif's n2 @@ -1119,7 +1119,7 @@ bool TYPVAL::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op) break; case OP_DIV: if (!val[1]) { - strcpy(g->Message, MSG(ZERO_DIVIDE)); + snprintf(g->Message, sizeof(g->Message),MSG(ZERO_DIVIDE)); return true; } // endif @@ -1173,7 +1173,7 @@ bool TYPVAL::Compall(PGLOBAL g, PVAL *vp, int np, OPVAL op) case OP_DIV: if (val[0]) { if (!val[1]) { - strcpy(g->Message, MSG(ZERO_DIVIDE)); + snprintf(g->Message, sizeof(g->Message), MSG(ZERO_DIVIDE)); return true; } // endif @@ -1190,7 +1190,7 @@ bool TYPVAL::Compall(PGLOBAL g, PVAL *vp, int np, OPVAL op) break; default: // snprintf(g->Message, sizeof(g->Message), MSG(BAD_EXP_OPER), op); - strcpy(g->Message, "Function not supported"); + snprintf(g->Message, sizeof(g->Message), "Function not supported"); return true; } // endswitch op @@ -1701,7 +1701,7 @@ bool TYPVAL::Compute(PGLOBAL g, PVAL *vp, int np, OPVAL op) break; default: // snprintf(g->Message, sizeof(g->Message), MSG(BAD_EXP_OPER), op); - strcpy(g->Message, "Function not supported"); + snprintf(g->Message, sizeof(g->Message), "Function not supported"); return true; } // endswitch op @@ -2616,7 +2616,7 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval) if (MakeTime(&datm)) { if (g) { - strcpy(g->Message, MSG(BAD_DATETIME)); + snprintf(g->Message, sizeof(g->Message), MSG(BAD_DATETIME)); rc = true; } else Tval = 0; diff --git a/storage/connect/xindex.cpp b/storage/connect/xindex.cpp index 4bcbbfd4235..471339a7126 100644 --- a/storage/connect/xindex.cpp +++ b/storage/connect/xindex.cpp @@ -45,6 +45,7 @@ //nclude "array.h" #include "filamtxt.h" #include "tabdos.h" +#include "m_string.h" #if defined(VCT_SUPPORT) #include "tabvct.h" #endif // VCT_SUPPORT @@ -857,7 +858,8 @@ bool XINDEX::SaveIndex(PGLOBAL g, PIXDEF sxp) char fname[_MAX_FNAME]; _splitpath(defp->GetOfn(), drive, direc, fname, NULL); - strcat(strcat(fname, "_"), Xdp->GetName()); + safe_strcat(fname, sizeof(fname), "_"); + safe_strcat(fname, sizeof(fname), Xdp->GetName()); _makepath(fn, drive, direc, fname, ftype); sxp = NULL; } else { @@ -1011,7 +1013,8 @@ bool XINDEX::Init(PGLOBAL g) char fname[_MAX_FNAME]; _splitpath(defp->GetOfn(), drive, direc, fname, NULL); - strcat(strcat(fname, "_"), Xdp->GetName()); + safe_strcat(fname, sizeof(fname), "_"); + safe_strcat(fname, sizeof(fname), Xdp->GetName()); _makepath(fn, drive, direc, fname, ftype); } else { id = ID; @@ -1264,7 +1267,8 @@ bool XINDEX::MapInit(PGLOBAL g) char fname[_MAX_FNAME]; _splitpath(defp->GetOfn(), drive, direc, fname, NULL); - strcat(strcat(fname, "_"), Xdp->GetName()); + safe_strcat(fname, sizeof(fname), "_"); + safe_strcat(fname, sizeof(fname), Xdp->GetName()); _makepath(fn, drive, direc, fname, ftype); } else { id = ID; @@ -1479,7 +1483,8 @@ bool XINDEX::GetAllSizes(PGLOBAL g,/* int &ndif,*/ int &numk) char fname[_MAX_FNAME]; _splitpath(defp->GetOfn(), drive, direc, fname, NULL); - strcat(strcat(fname, "_"), Xdp->GetName()); + safe_strcat(fname, sizeof(fname), "_"); + safe_strcat(fname, sizeof(fname), Xdp->GetName()); _makepath(fn, drive, direc, fname, ftype); } else { id = ID; diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index a14874ec011..e076a3b7962 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -1140,10 +1140,13 @@ static ulint btr_node_ptr_max_size(const dict_index_t* index) break; } /* fall through */ + case DATA_FIXBINARY: + case DATA_BINARY: case DATA_VARMYSQL: case DATA_CHAR: case DATA_MYSQL: - /* CHAR(0) and VARCHAR(0) are possible + /* BINARY(0), VARBINARY(0), + CHAR(0) and VARCHAR(0) are possible data type definitions in MariaDB. The InnoDB internal SQL parser maps CHAR to DATA_VARCHAR, so DATA_CHAR (or diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index e3c802a7b46..2389c056245 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -7580,6 +7580,71 @@ static bool alter_templ_needs_rebuild(const TABLE* altered_table, const Alter_inplace_info* ha_alter_info, const dict_table_t* table); +/** Check whether the column is present in table foreign key +relations. +@param table table which has foreign key relation +@param col column to be checked +@param col_name column name to be display during error +@param drop_fk Drop foreign key constraint +@param n_drop_fk number of drop foreign keys +@param add_fk Newly added foreign key constraint +@param n_add_fk number of newly added foreign constraint */ +static +bool check_col_is_in_fk_indexes( + const dict_table_t *table, const dict_col_t *col, + const char* col_name, + span drop_fk, + span add_fk) +{ + char *fk_id= nullptr; + + for (dict_foreign_set::iterator it= table->foreign_set.begin(); + it!= table->foreign_set.end();) + { + if (std::find(drop_fk.begin(), drop_fk.end(), (*it)) + != drop_fk.end()) + goto next_item; + for (ulint i= 0; i < (*it)->n_fields; i++) + if ((*it)->foreign_index->fields[i].col == col) + { + fk_id= (*it)->id; + goto err_exit; + } +next_item: + it++; + } + + for (const auto &a : add_fk) + { + for (ulint i= 0; i < a->n_fields; i++) + { + if (a->foreign_index->fields[i].col == col) + { + fk_id= a->id; + goto err_exit; + } + } + } + + for (const auto &f : table->referenced_set) + { + for (ulint i= 0; i < f->n_fields; i++) + { + if (f->referenced_index->fields[i].col == col) + { + my_error(ER_FK_COLUMN_CANNOT_CHANGE_CHILD, MYF(0), + col_name, f->id, f->foreign_table_name); + return true; + } + } + } + return false; +err_exit: + my_error(ER_FK_COLUMN_CANNOT_CHANGE, MYF(0), col_name, + fk_id ? fk_id : + (std::string(table->name.m_name) + "_ibfk_0").c_str()); + return true; +} /** Allows InnoDB to update internal structures with concurrent writes blocked (provided that check_if_supported_inplace_alter() @@ -7605,7 +7670,7 @@ ha_innobase::prepare_inplace_alter_table( dict_foreign_t**drop_fk; /*!< Foreign key constraints to drop */ ulint n_drop_fk; /*!< Number of foreign keys to drop */ dict_foreign_t**add_fk = NULL; /*!< Foreign key constraints to drop */ - ulint n_add_fk; /*!< Number of foreign keys to drop */ + ulint n_add_fk= 0; /*!< Number of foreign keys to drop */ dict_table_t* indexed_table; /*!< Table where indexes are created */ mem_heap_t* heap; const char** col_names; @@ -8122,8 +8187,6 @@ check_if_can_drop_indexes: } } - n_add_fk = 0; - if (ha_alter_info->handler_flags & ALTER_ADD_FOREIGN_KEY) { ut_ad(!m_prebuilt->trx->check_foreigns); @@ -8157,6 +8220,12 @@ err_exit: m_prebuilt->trx); } + for (uint i = 0; i < n_add_fk; i++) { + if (add_fk[i]) { + dict_foreign_free(add_fk[i]); + } + } + if (heap) { mem_heap_free(heap); } @@ -8175,6 +8244,33 @@ err_exit: } } + /** Alter shouldn't support if the foreign and referenced + index columns are modified */ + if (ha_alter_info->handler_flags + & ALTER_COLUMN_TYPE_CHANGE_BY_ENGINE) { + List_iterator it( + ha_alter_info->alter_info->create_list); + for (uint i = 0; i < table->s->fields; i++) { + Field* field = table->field[i]; + Create_field *f= it++; + if (!f->field || field->is_equal(*f)) + continue; + + const char* col_name= field->field_name.str; + dict_col_t *col= dict_table_get_nth_col( + m_prebuilt->table, i); + if (check_col_is_in_fk_indexes( + m_prebuilt->table, col, col_name, + span( + const_cast( + drop_fk), n_drop_fk), + span( + const_cast( + add_fk), n_add_fk))) + goto err_exit; + } + } + if (ha_alter_info->handler_flags & ALTER_RENAME_INDEX) { for (const Alter_inplace_info::Rename_key_pair& pair : ha_alter_info->rename_keys) { diff --git a/storage/innobase/include/trx0sys.h b/storage/innobase/include/trx0sys.h index 016ac0b1363..d7b99cc6758 100644 --- a/storage/innobase/include/trx0sys.h +++ b/storage/innobase/include/trx0sys.h @@ -640,9 +640,21 @@ public: sizeof(trx_id_t))); if (element) { + /* rw_trx_hash_t::erase() sets element->trx to nullptr under + element->mutex protection before removing the element from hash table. + If the element was removed before the mutex acquisition, element->trx + will be equal to nullptr. */ + DEBUG_SYNC_C("before_trx_hash_find_element_mutex_enter"); mutex_enter(&element->mutex); + /* element_trx can't point to reused object now. If transaction was + deregistered before element->mutex acquisition, element->trx is nullptr. + It can't be deregistered while element->mutex is held. */ + trx_t *element_trx = element->trx; lf_hash_search_unpin(pins); - if ((trx= element->trx)) { + /* The *element can be reused now, as element->trx value is stored + locally in element_trx. */ + DEBUG_SYNC_C("after_trx_hash_find_element_mutex_enter"); + if ((trx= element_trx)) { DBUG_ASSERT(trx_id == trx->id); ut_d(validate_element(trx)); if (do_ref_count) @@ -658,12 +670,19 @@ public: trx_mutex_enter(trx); const trx_state_t state= trx->state; trx_mutex_exit(trx); + /* trx_t::commit_in_memory() sets the state to + TRX_STATE_COMMITTED_IN_MEMORY before deregistering the transaction. + It also waits for any implicit-to-explicit lock conversions to cease + after deregistering. */ if (state == TRX_STATE_COMMITTED_IN_MEMORY) trx= NULL; else trx->reference(); } } + /* element's lifetime is equal to the hash lifetime, that's why + element->mutex is valid here despite the element is unpinned. In the + worst case some thread will wait for element->mutex releasing. */ mutex_exit(&element->mutex); } if (!caller_trx) diff --git a/storage/maria/aria_chk.c b/storage/maria/aria_chk.c index 30bb2cf0d96..d60585259db 100644 --- a/storage/maria/aria_chk.c +++ b/storage/maria/aria_chk.c @@ -436,7 +436,8 @@ static struct my_option my_long_options[] = "Size of sort buffer. Used by --recover", &check_param.orig_sort_buffer_length, &check_param.orig_sort_buffer_length, 0, GET_ULL, REQUIRED_ARG, - SORT_BUFFER_INIT, MIN_SORT_BUFFER, SIZE_T_MAX, MALLOC_OVERHEAD, 1L, 0}, + SORT_BUFFER_INIT, MARIA_MIN_SORT_MEMORY, SIZE_T_MAX/10, MALLOC_OVERHEAD, + 1L, 0}, { "sort_key_blocks", OPT_SORT_KEY_BLOCKS, "Internal buffer for sorting keys; Don't touch :)", &check_param.sort_key_blocks, diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 7cc60aa18c2..35d1aa52bcd 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -268,7 +268,7 @@ static MYSQL_THDVAR_ULONGLONG(sort_buffer_size, PLUGIN_VAR_RQCMDARG, "The buffer that is allocated when sorting the index when doing a " "REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE.", NULL, NULL, - SORT_BUFFER_INIT, MIN_SORT_BUFFER, SIZE_T_MAX/2, 1); + SORT_BUFFER_INIT, MARIA_MIN_SORT_MEMORY, SIZE_T_MAX/16, 1); static MYSQL_THDVAR_ENUM(stats_method, PLUGIN_VAR_RQCMDARG, "Specifies how Aria index statistics collection code should treat " @@ -291,7 +291,8 @@ static MYSQL_SYSVAR_BOOL(used_for_temp_tables, "Whether temporary tables should be MyISAM or Aria", 0, 0, 1); -static MYSQL_SYSVAR_BOOL(encrypt_tables, maria_encrypt_tables, PLUGIN_VAR_OPCMDARG, +static MYSQL_SYSVAR_BOOL(encrypt_tables, maria_encrypt_tables, + PLUGIN_VAR_OPCMDARG, "Encrypt tables (only for tables with ROW_FORMAT=PAGE (default) " "and not FIXED/DYNAMIC)", 0, 0, 0); diff --git a/storage/maria/ma_blockrec.c b/storage/maria/ma_blockrec.c index eec4628497b..e1a56b835a7 100644 --- a/storage/maria/ma_blockrec.c +++ b/storage/maria/ma_blockrec.c @@ -4729,7 +4729,7 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record, uchar *data, uchar *end_of_data) { MARIA_SHARE *share= info->s; - uchar *UNINIT_VAR(field_length_data), *UNINIT_VAR(blob_buffer), *start_of_data; + uchar *field_length_data= 0, *UNINIT_VAR(blob_buffer), *start_of_data; uint flag, null_bytes, cur_null_bytes, row_extents, field_lengths; my_bool found_blob= 0; MARIA_EXTENT_CURSOR extent; diff --git a/storage/maria/ma_check.c b/storage/maria/ma_check.c index 38fd904e52e..3c5ad75f070 100644 --- a/storage/maria/ma_check.c +++ b/storage/maria/ma_check.c @@ -3985,6 +3985,16 @@ int maria_repair_by_sort(HA_CHECK *param, register MARIA_HA *info, { sort_param.key_read= sort_key_read; sort_param.key_write= sort_key_write; + + /* + Limit usage of sort memory + We assume we don't need more memory than data file length * 2 + (There is a pointer overhead for each key, but this is hard to + estimae as we cannot be sure how many records we have in file to + be repaired). + */ + set_if_smaller(param->sort_buffer_length, sort_info.filelength*2); + set_if_bigger(param->sort_buffer_length, MARIA_MIN_SORT_MEMORY); } if (sort_info.new_info->s->data_file_type == BLOCK_RECORD) @@ -4587,6 +4597,16 @@ int maria_repair_parallel(HA_CHECK *param, register MARIA_HA *info, DBUG_PRINT("io_cache_share", ("thread: %u read_cache: %p", i, &sort_param[i].read_cache)); + /* + Limit usage of sort memory + We assume we don't need more memory than data file length * 2 + (There is a pointer overhead for each key, but this is hard to + estimae as we cannot be sure how many records we have in file to + be repaired). + */ + set_if_smaller(param->sort_buffer_length, sort_info.filelength*2); + set_if_bigger(param->sort_buffer_length, MARIA_MIN_SORT_MEMORY); + /* two approaches: the same amount of memory for each thread or the memory for the same number of keys for each thread... @@ -4599,6 +4619,8 @@ int maria_repair_parallel(HA_CHECK *param, register MARIA_HA *info, #else param->sort_buffer_length*sort_param[i].key_length/total_key_length; #endif + set_if_bigger(sort_param[i].sortbuff_size, MARIA_MIN_SORT_MEMORY); + if (mysql_thread_create(key_thread_find_all_keys, &sort_param[i].thr, &thr_attr, _ma_thr_find_all_keys, (void *) (sort_param+i))) diff --git a/storage/maria/ma_create.c b/storage/maria/ma_create.c index 43fbfa22178..bbbde63dcd0 100644 --- a/storage/maria/ma_create.c +++ b/storage/maria/ma_create.c @@ -1067,6 +1067,8 @@ int maria_create(const char *name, enum data_file_type datafile_type, if (encrypted) { + DBUG_ASSERT(share.data_file_name.length == 0); + share.data_file_name.str= (char*) name; /* For error reporting */ if (ma_crypt_create(&share) || ma_crypt_write(&share, file)) goto err; diff --git a/storage/maria/ma_crypt.c b/storage/maria/ma_crypt.c index 9282405bae9..69dd29bf399 100644 --- a/storage/maria/ma_crypt.c +++ b/storage/maria/ma_crypt.c @@ -100,6 +100,7 @@ static void crypt_data_scheme_locker(struct st_encryption_scheme *scheme, int ma_crypt_create(MARIA_SHARE* share) { + uint key_version; MARIA_CRYPT_DATA *crypt_data= (MARIA_CRYPT_DATA*)my_malloc(PSI_INSTRUMENT_ME, sizeof(MARIA_CRYPT_DATA), MYF(MY_ZEROFILL)); crypt_data->scheme.type= CRYPT_SCHEME_1; @@ -110,6 +111,16 @@ ma_crypt_create(MARIA_SHARE* share) my_random_bytes((uchar*)&crypt_data->space, sizeof(crypt_data->space)); share->crypt_data= crypt_data; share->crypt_page_header_space= CRYPT_SCHEME_1_KEY_VERSION_SIZE; + + key_version = encryption_key_get_latest_version(crypt_data->scheme.key_id); + if (unlikely(key_version == ENCRYPTION_KEY_VERSION_INVALID)) + { + my_errno= HA_ERR_NO_ENCRYPTION; + my_printf_error(HA_ERR_NO_ENCRYPTION, + "Initialization of encryption failed for %s", MYF(0), + share->data_file_name.str); + return 1; + } return 0; } @@ -145,7 +156,7 @@ ma_crypt_write(MARIA_SHARE* share, File file) } uchar* -ma_crypt_read(MARIA_SHARE* share, uchar *buff) +ma_crypt_read(MARIA_SHARE* share, uchar *buff, my_bool silent) { uchar type= buff[0]; uchar iv_length= buff[1]; @@ -155,9 +166,9 @@ ma_crypt_read(MARIA_SHARE* share, uchar *buff) iv_length != sizeof(((MARIA_CRYPT_DATA*)1)->scheme.iv) + 4) { my_printf_error(HA_ERR_UNSUPPORTED, - "Unsupported crypt scheme! type: %d iv_length: %d\n", - MYF(ME_FATAL|ME_ERROR_LOG), - type, iv_length); + "Unsupported crypt scheme type: %d iv_length: %d\n", + MYF(ME_ERROR_LOG | (silent ? ME_WARNING : ME_FATAL)), + type, iv_length); return 0; } @@ -166,6 +177,7 @@ ma_crypt_read(MARIA_SHARE* share, uchar *buff) /* opening a table */ MARIA_CRYPT_DATA *crypt_data= (MARIA_CRYPT_DATA*)my_malloc(PSI_INSTRUMENT_ME, sizeof(MARIA_CRYPT_DATA), MYF(MY_ZEROFILL)); + uint key_version; crypt_data->scheme.type= type; mysql_mutex_init(key_CRYPT_DATA_lock, &crypt_data->lock, @@ -175,6 +187,17 @@ ma_crypt_read(MARIA_SHARE* share, uchar *buff) crypt_data->space= uint4korr(buff + 2); memcpy(crypt_data->scheme.iv, buff + 6, sizeof(crypt_data->scheme.iv)); share->crypt_data= crypt_data; + + key_version= encryption_key_get_latest_version(crypt_data->scheme.key_id); + if (unlikely(key_version == ENCRYPTION_KEY_VERSION_INVALID)) + { + my_errno= HA_ERR_NO_ENCRYPTION; + my_printf_error(HA_ERR_NO_ENCRYPTION, + "Initialization of encryption failed for %s", + MYF(ME_ERROR_LOG | (silent ? ME_WARNING : ME_FATAL)), + share->data_file_name.str); + return 0; + } } share->crypt_page_header_space= CRYPT_SCHEME_1_KEY_VERSION_SIZE; @@ -462,7 +485,7 @@ static int ma_encrypt(MARIA_SHARE *share, MARIA_CRYPT_DATA *crypt_data, uint32 dstlen= 0; /* Must be set because of error message */ *key_version = encryption_key_get_latest_version(crypt_data->scheme.key_id); - if (*key_version == ENCRYPTION_KEY_VERSION_INVALID) + if (unlikely(*key_version == ENCRYPTION_KEY_VERSION_INVALID)) { /* We use this error for both encryption and decryption, as in normal @@ -470,7 +493,7 @@ static int ma_encrypt(MARIA_SHARE *share, MARIA_CRYPT_DATA *crypt_data, */ my_errno= HA_ERR_DECRYPTION_FAILED; my_printf_error(HA_ERR_DECRYPTION_FAILED, - "Unknown key id %u. Can't continue!", + "Unknown encryption key id %u. Can't continue!", MYF(ME_FATAL|ME_ERROR_LOG), crypt_data->scheme.key_id); return 1; diff --git a/storage/maria/ma_crypt.h b/storage/maria/ma_crypt.h index 811b319bc0c..acaf36ee831 100644 --- a/storage/maria/ma_crypt.h +++ b/storage/maria/ma_crypt.h @@ -26,7 +26,8 @@ uint ma_crypt_get_index_page_header_space(struct st_maria_share *); uint ma_crypt_get_file_length(); /* bytes needed in file */ int ma_crypt_create(struct st_maria_share *); /* create encryption data */ int ma_crypt_write(struct st_maria_share *, File); /* write encryption data */ -uchar* ma_crypt_read(struct st_maria_share *, uchar *buff); /* read crypt data*/ +uchar* ma_crypt_read(struct st_maria_share *, uchar *buff, + my_bool silent); /* read crypt data*/ void ma_crypt_set_data_pagecache_callbacks(struct st_pagecache_file *file, struct st_maria_share *share); diff --git a/storage/maria/ma_delete_table.c b/storage/maria/ma_delete_table.c index fa93a7100b0..ebd94cdbdd8 100644 --- a/storage/maria/ma_delete_table.c +++ b/storage/maria/ma_delete_table.c @@ -43,12 +43,14 @@ int maria_delete_table(const char *name) 'open_for_repair' to be able to open even a crashed table. */ my_errno= 0; - if (!(info= maria_open(name, O_RDONLY, HA_OPEN_FOR_REPAIR, 0))) + if (!(info= maria_open(name, O_RDONLY, + (HA_OPEN_FOR_DROP | HA_OPEN_FOR_REPAIR), 0))) { sync_dir= 0; /* Ignore not found errors and wrong symlink errors */ - if (my_errno != ENOENT && my_errno != HA_WRONG_CREATE_OPTION) - got_error= my_errno;; + if (my_errno != ENOENT && my_errno != HA_WRONG_CREATE_OPTION && + my_errno != HA_ERR_NO_ENCRYPTION) + got_error= my_errno; } else { diff --git a/storage/maria/ma_open.c b/storage/maria/ma_open.c index 2f5cb525950..947db3a1762 100644 --- a/storage/maria/ma_open.c +++ b/storage/maria/ma_open.c @@ -961,7 +961,8 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags, if (MY_TEST(share->base.extra_options & MA_EXTRA_OPTIONS_ENCRYPTED)) { - if (!(disk_pos= ma_crypt_read(share, disk_pos))) + if (!(disk_pos= ma_crypt_read(share, disk_pos, + MY_TEST(open_flags & HA_OPEN_FOR_DROP)))) goto err; } diff --git a/storage/maria/ma_sort.c b/storage/maria/ma_sort.c index 8153ec701a0..095fdc814bf 100644 --- a/storage/maria/ma_sort.c +++ b/storage/maria/ma_sort.c @@ -29,12 +29,10 @@ /* static variables */ -#undef MIN_SORT_MEMORY #undef DISK_BUFFER_SIZE #define MERGEBUFF 15 #define MERGEBUFF2 31 -#define MIN_SORT_MEMORY (4096-MALLOC_OVERHEAD) #define DISK_BUFFER_SIZE (IO_SIZE*128) /* How many keys we can keep in memory */ @@ -145,11 +143,11 @@ int _ma_create_index_by_sort(MARIA_SORT_PARAM *info, my_bool no_messages, sort_keys= (uchar **) NULL; error= 1; maxbuffer=1; - memavl=MY_MAX(sortbuff_size,MIN_SORT_MEMORY); + memavl=MY_MAX(sortbuff_size,MARIA_MIN_SORT_MEMORY); records= info->sort_info->max_records; sort_length= info->key_length; - while (memavl >= MIN_SORT_MEMORY) + while (memavl >= MARIA_MIN_SORT_MEMORY) { /* Check if we can fit all keys into memory */ if (((ulonglong) (records + 1) * @@ -208,10 +206,10 @@ int _ma_create_index_by_sort(MARIA_SORT_PARAM *info, my_bool no_messages, break; } old_memavl=memavl; - if ((memavl=memavl/4*3) < MIN_SORT_MEMORY && old_memavl > MIN_SORT_MEMORY) - memavl=MIN_SORT_MEMORY; + if ((memavl=memavl/4*3) < MARIA_MIN_SORT_MEMORY && old_memavl > MARIA_MIN_SORT_MEMORY) + memavl=MARIA_MIN_SORT_MEMORY; } - if (memavl < MIN_SORT_MEMORY) + if (memavl < MARIA_MIN_SORT_MEMORY) { /* purecov: begin inspected */ _ma_check_print_error(info->sort_info->param, @@ -387,12 +385,12 @@ static my_bool _ma_thr_find_all_keys_exec(MARIA_SORT_PARAM* sort_param) bzero((char*) &sort_param->unique, sizeof(sort_param->unique)); sortbuff_size= sort_param->sortbuff_size; - memavl= MY_MAX(sortbuff_size, MIN_SORT_MEMORY); + memavl= MY_MAX(sortbuff_size, MARIA_MIN_SORT_MEMORY); idx= (ha_keys) sort_param->sort_info->max_records; sort_length= sort_param->key_length; maxbuffer= 1; - while (memavl >= MIN_SORT_MEMORY) + while (memavl >= MARIA_MIN_SORT_MEMORY) { if ((my_off_t) (idx+1)*(sort_length+sizeof(char*)) <= (my_off_t) memavl) keys= idx+1; @@ -442,11 +440,11 @@ static my_bool _ma_thr_find_all_keys_exec(MARIA_SORT_PARAM* sort_param) break; } old_memavl= memavl; - if ((memavl= memavl/4*3) < MIN_SORT_MEMORY && - old_memavl > MIN_SORT_MEMORY) - memavl= MIN_SORT_MEMORY; + if ((memavl= memavl/4*3) < MARIA_MIN_SORT_MEMORY && + old_memavl > MARIA_MIN_SORT_MEMORY) + memavl= MARIA_MIN_SORT_MEMORY; } - if (memavl < MIN_SORT_MEMORY) + if (memavl < MARIA_MIN_SORT_MEMORY) { /* purecov: begin inspected */ _ma_check_print_error(sort_param->sort_info->param, @@ -626,7 +624,7 @@ int _ma_thr_write_keys(MARIA_SORT_PARAM *sort_param) if (!mergebuf) { length=(size_t)param->sort_buffer_length; - while (length >= MIN_SORT_MEMORY) + while (length >= MARIA_MIN_SORT_MEMORY) { if ((mergebuf= my_malloc(PSI_INSTRUMENT_ME, (size_t) length, MYF(0)))) break; diff --git a/storage/maria/maria_def.h b/storage/maria/maria_def.h index 2be30a22e76..3d60fa90b04 100644 --- a/storage/maria/maria_def.h +++ b/storage/maria/maria_def.h @@ -332,6 +332,8 @@ void _ma_update_auto_increment_key(HA_CHECK *param, MARIA_HA *info, #define MARIA_MAX_TREE_LEVELS 32 #define MARIA_MAX_RECORD_ON_STACK 16384 +#define MARIA_MIN_SORT_MEMORY (16384-MALLOC_OVERHEAD) + /* maria_open() flag, specific for maria_pack */ #define HA_OPEN_IGNORE_MOVED_STATE (1U << 30) @@ -1587,7 +1589,6 @@ typedef struct st_maria_block_info #define PAGE_BUFFER_INIT MY_ALIGN_DOWN(1024L*1024L*256L-MALLOC_OVERHEAD, 8192) #define READ_BUFFER_INIT MY_ALIGN_DOWN(1024L*256L-MALLOC_OVERHEAD, 1024) #define SORT_BUFFER_INIT MY_ALIGN_DOWN(1024L*1024L*256L-MALLOC_OVERHEAD, 1024) -#define MIN_SORT_BUFFER 4096U #define fast_ma_writeinfo(INFO) if (!(INFO)->s->tot_locks) (void) _ma_writeinfo((INFO),0) #define fast_ma_readinfo(INFO) ((INFO)->lock_type == F_UNLCK) && _ma_readinfo((INFO),F_RDLCK,1) diff --git a/storage/mroonga/vendor/groonga/CMakeLists.txt b/storage/mroonga/vendor/groonga/CMakeLists.txt index 27afb935467..5b25ada4f5b 100644 --- a/storage/mroonga/vendor/groonga/CMakeLists.txt +++ b/storage/mroonga/vendor/groonga/CMakeLists.txt @@ -15,7 +15,7 @@ # https://buildbot.askmonty.org/buildbot/builders/work-amd64-valgrind/builds/5263/steps/compile/logs/stdio # says CMake 2.6.2... We want to drop old software support... -cmake_minimum_required(VERSION 2.6.2) +cmake_minimum_required(VERSION 2.8.12) # cmake_minimum_required(VERSION 2.6.4) # CentOS 5 set(GRN_PROJECT_NAME "groonga") set(GRN_PROJECT_LABEL "Groonga") diff --git a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt index 4c2aa343089..96f9b3e6bbf 100644 --- a/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt +++ b/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql/CMakeLists.txt @@ -15,7 +15,7 @@ # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, # MA 02110-1335 USA -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8.12) if(NOT DEFINED GROONGA_NORMALIZER_MYSQL_PROJECT_NAME) set(GROONGA_NORMALIZER_MYSQL_PROJECT_NAME "groonga-normalizer-mysql") endif() diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index 1b16943a97c..6924a55a722 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -80,7 +80,7 @@ static MYSQL_THDVAR_ULONG(repair_threads, PLUGIN_VAR_RQCMDARG, static MYSQL_THDVAR_ULONGLONG(sort_buffer_size, PLUGIN_VAR_RQCMDARG, "The buffer that is allocated when sorting the index when doing " "a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE", NULL, NULL, - SORT_BUFFER_INIT, MIN_SORT_BUFFER, SIZE_T_MAX, 1); + SORT_BUFFER_INIT, MIN_SORT_BUFFER, SIZE_T_MAX/16, 1); static MYSQL_SYSVAR_BOOL(use_mmap, opt_myisam_use_mmap, PLUGIN_VAR_NOCMDARG, "Use memory mapping for reading and writing MyISAM tables", NULL, NULL, FALSE); diff --git a/storage/oqgraph/CMakeLists.txt b/storage/oqgraph/CMakeLists.txt index e725f9712ea..2cb02727a64 100644 --- a/storage/oqgraph/CMakeLists.txt +++ b/storage/oqgraph/CMakeLists.txt @@ -1,6 +1,6 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -SET(CPACK_RPM_oqgraph-engine_PACKAGE_SUMMARY "OQGraph storage engine for MariaDB" PARENT_SCOPE) +SET(CPACK_RPM_oqgraph-engine_PACKAGE_SUMMARY "OQGraph storage engine for MariaDB server" PARENT_SCOPE) SET(CPACK_RPM_oqgraph-engine_PACKAGE_DESCRIPTION "The Open Query GRAPH computation engine, or OQGRAPH as the engine itself is called, allows you to handle hierarchies (tree structures) and complex graphs (nodes having many connections in several directions). diff --git a/storage/rocksdb/CMakeLists.txt b/storage/rocksdb/CMakeLists.txt index 3570aadfc9f..fd0787e8bcd 100644 --- a/storage/rocksdb/CMakeLists.txt +++ b/storage/rocksdb/CMakeLists.txt @@ -1,6 +1,6 @@ # TODO: Copyrights -SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB" PARENT_SCOPE) +SET(CPACK_RPM_rocksdb-engine_PACKAGE_SUMMARY "RocksDB storage engine for MariaDB server" PARENT_SCOPE) SET(CPACK_RPM_rocksdb-engine_PACKAGE_DESCRIPTION "The RocksDB storage engine is a high performance storage engine, aimed at maximising storage efficiency while maintaining InnoDB-like performance." PARENT_SCOPE) diff --git a/storage/rocksdb/rdb_i_s.cc b/storage/rocksdb/rdb_i_s.cc index 5350ec3bce9..5c67655662c 100644 --- a/storage/rocksdb/rdb_i_s.cc +++ b/storage/rocksdb/rdb_i_s.cc @@ -65,7 +65,16 @@ namespace RDB_CFSTATS_FIELD { enum { CF_NAME = 0, STAT_TYPE, VALUE }; } // namespace RDB_CFSTATS_FIELD -using namespace Show; + +using Column = Show::Column; +using CEnd = Show::CEnd; +using Varchar = Show::Varchar; +using SShort = Show::SShort; +using SLong = Show::SLong; +using SLonglong = Show::SLonglong; +using ULonglong = Show::ULonglong; +using Double = Show::Double; + static ST_FIELD_INFO rdb_i_s_cfstats_fields_info[] = { Column("CF_NAME", Varchar(NAME_LEN + 1), NOT_NULL), diff --git a/storage/spider/mysql-test/spider/bugfix/disabled.def b/storage/spider/mysql-test/spider/bugfix/disabled.def index e19ea07b76b..99443c854e5 100644 --- a/storage/spider/mysql-test/spider/bugfix/disabled.def +++ b/storage/spider/mysql-test/spider/bugfix/disabled.def @@ -1 +1,2 @@ wait_timeout : MDEV-26045 +mdev_29904 : MDEV-31101 diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_26541.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_26541.result index b2edaff6918..72921d2e695 100644 --- a/storage/spider/mysql-test/spider/bugfix/r/mdev_26541.result +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_26541.result @@ -1,14 +1,13 @@ # # MDEV-26541 Undefined symbol: _ZTI12ha_partition when attempting to use ha_spider.so in UBSAN builds # -INSTALL PLUGIN spider SONAME 'ha_spider.so'; +INSTALL SONAME 'ha_spider.so'; DROP FUNCTION spider_flush_table_mon_cache; DROP FUNCTION spider_copy_tables; DROP FUNCTION spider_ping_table; DROP FUNCTION spider_bg_direct_sql; DROP FUNCTION spider_direct_sql; -UNINSTALL PLUGIN spider_alloc_mem; -UNINSTALL PLUGIN spider; +UNINSTALL SONAME IF EXISTS "ha_spider"; DROP TABLE IF EXISTS mysql.spider_xa; DROP TABLE IF EXISTS mysql.spider_xa_member; DROP TABLE IF EXISTS mysql.spider_xa_failed_log; diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_29447.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_29447.result new file mode 100644 index 00000000000..358e131fcf2 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_29447.result @@ -0,0 +1,33 @@ +# +# MDEV-29447 SIGSEGV in spider_db_open_item_field and SIGSEGV spider_db_print_item_type, on SELECT +# +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"'; +SELECT TRIM(LEADING 'c' FROM a) FROM tbl_a; +TRIM(LEADING 'c' FROM a) +connection child2_1; +DROP DATABASE auto_test_remote; +connection master_1; +DROP DATABASE auto_test_local; +for master_1 +for child2 +child2_1 +child2_2 +child2_3 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_30981.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_30981.result new file mode 100644 index 00000000000..6db36e2b46c --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_30981.result @@ -0,0 +1,12 @@ +# +# MDEV-30981 Spider UBSAN: null pointer passed as argument 2, which is declared to never be null in spider_create_trx_alter_table on ALTER +# +for master_1 +for child2 +for child3 +CREATE TABLE t (c INT) ENGINE=Spider PARTITION BY LIST (c) (PARTITION p VALUES IN (1,2)); +ALTER TABLE t ENGINE=InnoDB; +drop table t; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_31338.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_31338.result new file mode 100644 index 00000000000..dd951933fff --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_31338.result @@ -0,0 +1,15 @@ +# +# MDEV-31338 UBSAN: runtime error: member access within null pointer of type 'struct SPIDER_FIELD_CHAIN' and SIGSEGV in spider_db_open_item_ident on SELECT +# +for master_1 +for child2 +for child3 +CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +CREATE TABLE t (c BLOB) ENGINE=InnoDB; +CREATE TABLE ts (c BLOB) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"'; +SELECT TRIM(BOTH ' ' FROM c) FROM ts ORDER BY c; +TRIM(BOTH ' ' FROM c) +drop table t, ts; +for master_1 +for child2 +for child3 diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_26541.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_26541.test index ffd99390748..bf6cb255d02 100644 --- a/storage/spider/mysql-test/spider/bugfix/t/mdev_26541.test +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_26541.test @@ -2,14 +2,14 @@ --echo # MDEV-26541 Undefined symbol: _ZTI12ha_partition when attempting to use ha_spider.so in UBSAN builds --echo # -if (`select not(count(*)) from information_schema.system_variables where variable_name='have_sanitizer' and global_value="UBSAN"`) +if (`select not(count(*)) from information_schema.system_variables where variable_name='have_sanitizer' and global_value like "%UBSAN%"`) { --skip test needs to be run with UBSAN } # init spider -INSTALL PLUGIN spider SONAME 'ha_spider.so'; +INSTALL SONAME 'ha_spider.so'; let $PLUGIN_NAME= spider_flush_table_mon_cache; let $PLUGIN_EXIST= @@ -20,21 +20,4 @@ while (!$PLUGIN_EXIST) `SELECT COUNT(*) FROM mysql.func WHERE name = '$PLUGIN_NAME'`; } -# deinit spider - -DROP FUNCTION spider_flush_table_mon_cache; -DROP FUNCTION spider_copy_tables; -DROP FUNCTION spider_ping_table; -DROP FUNCTION spider_bg_direct_sql; -DROP FUNCTION spider_direct_sql; -UNINSTALL PLUGIN spider_alloc_mem; -UNINSTALL PLUGIN spider; -DROP TABLE IF EXISTS mysql.spider_xa; -DROP TABLE IF EXISTS mysql.spider_xa_member; -DROP TABLE IF EXISTS mysql.spider_xa_failed_log; -DROP TABLE IF EXISTS mysql.spider_tables; -DROP TABLE IF EXISTS mysql.spider_link_mon_servers; -DROP TABLE IF EXISTS mysql.spider_link_failed_log; -DROP TABLE IF EXISTS mysql.spider_table_position_for_recovery; -DROP TABLE IF EXISTS mysql.spider_table_sts; -DROP TABLE IF EXISTS mysql.spider_table_crd; +--source ../../include/clean_up_spider.inc diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_29447.cnf b/storage/spider/mysql-test/spider/bugfix/t/mdev_29447.cnf new file mode 100644 index 00000000000..05dfd8a0bce --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_29447.cnf @@ -0,0 +1,3 @@ +!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_29447.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_29447.test new file mode 100644 index 00000000000..60250be6481 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_29447.test @@ -0,0 +1,37 @@ +--echo # +--echo # MDEV-29447 SIGSEGV in spider_db_open_item_field and SIGSEGV spider_db_print_item_type, on SELECT +--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"'; + +SELECT TRIM(LEADING 'c' FROM a) FROM tbl_a; + +--connection child2_1 +DROP DATABASE auto_test_remote; + +--connection master_1 +DROP DATABASE auto_test_local; + +--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/bugfix/t/mdev_30370.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_30370.test index 99e56ab062a..0e982d90ba6 100644 --- a/storage/spider/mysql-test/spider/bugfix/t/mdev_30370.test +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_30370.test @@ -1,3 +1,4 @@ +--source include/have_wsrep.inc --echo # --echo # MDEV-30370 mariadbd hangs when running with --wsrep-recover and --plugin-load-add=ha_spider.so --echo # diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_30981.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_30981.test new file mode 100644 index 00000000000..cc24ce82ce4 --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_30981.test @@ -0,0 +1,24 @@ +--echo # +--echo # MDEV-30981 Spider UBSAN: null pointer passed as argument 2, which is declared to never be null in spider_create_trx_alter_table on ALTER +--echo # + +if (`select not(count(*)) from information_schema.system_variables where variable_name='have_sanitizer' and global_value like "%UBSAN%"`) +{ +--skip test needs to be run with UBSAN +} + +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +CREATE TABLE t (c INT) ENGINE=Spider PARTITION BY LIST (c) (PARTITION p VALUES IN (1,2)); +ALTER TABLE t ENGINE=InnoDB; +drop table t; + +--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/bugfix/t/mdev_31338.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_31338.test new file mode 100644 index 00000000000..95ca7c1253c --- /dev/null +++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_31338.test @@ -0,0 +1,22 @@ +--echo # +--echo # MDEV-31338 UBSAN: runtime error: member access within null pointer of type 'struct SPIDER_FIELD_CHAIN' and SIGSEGV in spider_db_open_item_ident on SELECT +--echo # +--source include/have_innodb.inc + +--disable_query_log +--disable_result_log +--source ../../t/test_init.inc +--enable_result_log +--enable_query_log + +evalp CREATE SERVER srv FOREIGN DATA WRAPPER MYSQL OPTIONS (SOCKET "$MASTER_1_MYSOCK", DATABASE 'test',user 'root'); +CREATE TABLE t (c BLOB) ENGINE=InnoDB; +CREATE TABLE ts (c BLOB) ENGINE=Spider COMMENT='WRAPPER "mysql",srv "srv",TABLE "t"'; +SELECT TRIM(BOTH ' ' FROM c) FROM ts ORDER BY c; +drop table t, ts; + +--disable_query_log +--disable_result_log +--source ../../t/test_deinit.inc +--enable_result_log +--enable_query_log diff --git a/storage/spider/mysql-test/spider/include/clean_up_spider.inc b/storage/spider/mysql-test/spider/include/clean_up_spider.inc new file mode 100644 index 00000000000..1f0659dc98a --- /dev/null +++ b/storage/spider/mysql-test/spider/include/clean_up_spider.inc @@ -0,0 +1,15 @@ +DROP FUNCTION spider_flush_table_mon_cache; +DROP FUNCTION spider_copy_tables; +DROP FUNCTION spider_ping_table; +DROP FUNCTION spider_bg_direct_sql; +DROP FUNCTION spider_direct_sql; +UNINSTALL SONAME IF EXISTS "ha_spider"; +DROP TABLE IF EXISTS mysql.spider_xa; +DROP TABLE IF EXISTS mysql.spider_xa_member; +DROP TABLE IF EXISTS mysql.spider_xa_failed_log; +DROP TABLE IF EXISTS mysql.spider_tables; +DROP TABLE IF EXISTS mysql.spider_link_mon_servers; +DROP TABLE IF EXISTS mysql.spider_link_failed_log; +DROP TABLE IF EXISTS mysql.spider_table_position_for_recovery; +DROP TABLE IF EXISTS mysql.spider_table_sts; +DROP TABLE IF EXISTS mysql.spider_table_crd; diff --git a/storage/spider/mysql-test/spider/include/deinit_spider.inc b/storage/spider/mysql-test/spider/include/deinit_spider.inc index dd474c59bc7..1d55e3b3d5f 100644 --- a/storage/spider/mysql-test/spider/include/deinit_spider.inc +++ b/storage/spider/mysql-test/spider/include/deinit_spider.inc @@ -28,23 +28,7 @@ if (`SELECT IF($PLUGIN_VERSION = 3, 1, 0)`) DROP TABLE IF EXISTS mysql.spider_rewritten_tables; } } -DROP FUNCTION spider_flush_table_mon_cache; -DROP FUNCTION spider_copy_tables; -DROP FUNCTION spider_ping_table; -DROP FUNCTION spider_bg_direct_sql; -DROP FUNCTION spider_direct_sql; -UNINSTALL PLUGIN spider_wrapper_protocols; -UNINSTALL PLUGIN spider_alloc_mem; -UNINSTALL PLUGIN spider; -DROP TABLE IF EXISTS mysql.spider_xa; -DROP TABLE IF EXISTS mysql.spider_xa_member; -DROP TABLE IF EXISTS mysql.spider_xa_failed_log; -DROP TABLE IF EXISTS mysql.spider_tables; -DROP TABLE IF EXISTS mysql.spider_link_mon_servers; -DROP TABLE IF EXISTS mysql.spider_link_failed_log; -DROP TABLE IF EXISTS mysql.spider_table_position_for_recovery; -DROP TABLE IF EXISTS mysql.spider_table_sts; -DROP TABLE IF EXISTS mysql.spider_table_crd; +--source clean_up_spider.inc if ($VERSION_COMPILE_OS_WIN) { if ($MASTER_1_MYPORT) diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index bc8383017f7..18fc821d9ef 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -5683,6 +5683,13 @@ int spider_db_mbase_util::append_unlock_table( DBUG_RETURN(0); } +/** + The function check if the given item_func and its arguments can be pushed + down to a data node. If so and str != NULL, the function also print, to str, + the string corresponding to the item_func. + + @return 0: success, otherwise: error + */ int spider_db_mbase_util::open_item_func( Item_func *item_func, ha_spider *spider, @@ -5691,6 +5698,173 @@ int spider_db_mbase_util::open_item_func( uint alias_length, bool use_fields, spider_fields *fields +) { + DBUG_ENTER("spider_db_mbase_util::open_item_func"); + + int error = check_item_func(item_func, spider, alias, + alias_length, use_fields, fields); + if (error) + DBUG_RETURN(error); + if (!str) + DBUG_RETURN(0); + + DBUG_RETURN(print_item_func(item_func, spider, str, alias, + alias_length, use_fields, fields)); +} + +static bool item_func_is_timestampdiff( + const char *func_name, + int func_name_length +) { + return func_name_length == 13 && + !strncasecmp("timestampdiff", func_name, func_name_length); +} + +static bool not_func_should_be_skipped( + Item_func *item_func +){ + DBUG_ENTER("not_func_should_be_skipped"); + DBUG_ASSERT(item_func->functype() == Item_func::NOT_FUNC); + Item **item_list = item_func->arguments(); + + if (item_list[0]->type() == Item::COND_ITEM) + { + DBUG_PRINT("info",("spider item_list[0] is COND_ITEM")); + Item_cond *item_cond = (Item_cond *) item_list[0]; + if (item_cond->functype() == Item_func::COND_AND_FUNC) + { + DBUG_PRINT("info",("spider item_cond is COND_AND_FUNC")); + List_iterator_fast lif(*(item_cond->argument_list())); + bool has_expr_cache_item = FALSE; + bool has_isnotnull_func = FALSE; + bool has_other_item = FALSE; + while(Item *item = lif++) + { + if ( + item->type() == Item::EXPR_CACHE_ITEM + ) { + DBUG_PRINT("info",("spider EXPR_CACHE_ITEM")); + has_expr_cache_item = TRUE; + } else + if ( + item->type() == Item::FUNC_ITEM && + ((Item_func *) item)->functype() == Item_func::ISNOTNULL_FUNC + ) { + DBUG_PRINT("info",("spider ISNOTNULL_FUNC")); + has_isnotnull_func = TRUE; + } else { + DBUG_PRINT("info",("spider has other item")); + DBUG_PRINT("info",("spider COND type=%d", item->type())); + has_other_item = TRUE; + } + } + if (has_expr_cache_item && has_isnotnull_func && !has_other_item) + { + DBUG_PRINT("info",("spider NOT EXISTS skip")); + DBUG_RETURN(TRUE); + } + } + } + DBUG_RETURN(FALSE); +} + +/** + Check if the given item_func and its arguments can be pushed down to + a data node. This function is recursive because we need to also check + the arguments of the item_func. + + @return 0: success, otherwise: error + */ +int spider_db_mbase_util::check_item_func( + Item_func *item_func, + ha_spider *spider, + const char *alias, + uint alias_length, + bool use_fields, + spider_fields *fields +) { + int use_pushdown_udf; + DBUG_ENTER("spider_db_mbase_util::check_item_func"); + + Item_func::Functype func_type = item_func->functype(); + DBUG_PRINT("info",("spider functype = %d", func_type)); + + const char *func_name = (char*) item_func->func_name(); + int func_name_length = strlen(func_name); + DBUG_PRINT("info",("spider func_name = %s", func_name)); + + /* The blacklist of the functions that cannot be pushed down */ + switch (func_type) + { + case Item_func::TRIG_COND_FUNC: + case Item_func::CASE_SEARCHED_FUNC: + case Item_func::CASE_SIMPLE_FUNC: + DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); + case Item_func::NOT_FUNC: + /* Why the following check is necessary? */ + if (not_func_should_be_skipped(item_func)) + DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); + break; + case Item_func::FUNC_SP: + case Item_func::UDF_FUNC: + /* Notes on merging regarding MDEV-29447: please refer to the + following commits for build error or merge conflicts: + 10.6: 1ed20b993b0dd4e95450cab2e8347e5bf4617a69 + 10.9: dd316b6e20265cfd832bb5585cb4c96e716387c8 + 10.10-11: 3f67f110ba1b23a89c5ede0fbeeb203cf5e164f4 + 11.0-1: 17ba6748afa8834df5658361088e6c8e65aca16f + Please remove this comment after merging. */ + use_pushdown_udf= spider_param_use_pushdown_udf( + spider->wide_handler->trx->thd, spider->share->use_pushdown_udf); + if (!use_pushdown_udf) + DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); + break; + case Item_func::FT_FUNC: + if (spider_db_check_ft_idx(item_func, spider) == MAX_KEY) + DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); + break; +#ifndef ITEM_FUNC_TIMESTAMPDIFF_ARE_PUBLIC + case Item_func::UNKNOWN_FUNC: + if (item_func_is_timestampdiff(func_name, func_name_length)) + DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); + break; +#endif + default: + break; + } + /* End of the blacklist */ + + /* Check the arguments recursively */ + if (uint item_count = item_func->argument_count()) + { + Item **item_list = item_func->arguments(); + for (uint roop_count = 0; roop_count < item_count; roop_count++) + { + Item *item = item_list[roop_count]; + if (int error_num = spider_db_print_item_type(item, NULL, spider, NULL, + alias, alias_length, dbton_id, use_fields, fields)) + DBUG_RETURN(error_num); + } + } + + DBUG_RETURN(0); +} + +/** + The function print the string corresponding to the given item_func to str. + The function is assumed to be called only when the check by the function + check_item_func() has passed. + + @return 0: success, otherwise: error + */ +int spider_db_mbase_util::print_item_func( + Item_func *item_func, + ha_spider *spider, + spider_string *str, + const char *alias, + uint alias_length, + bool use_fields, + spider_fields *fields ) { int error_num; Item *item, **item_list = item_func->arguments(); @@ -5705,13 +5879,15 @@ int spider_db_mbase_util::open_item_func( last_str_length = SPIDER_SQL_NULL_CHAR_LEN; int use_pushdown_udf; bool merge_func = FALSE; - DBUG_ENTER("spider_db_mbase_util::open_item_func"); - if (str) - { - if (str->reserve(SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } + DBUG_ENTER("spider_db_mbase_util::print_item_func"); + DBUG_ASSERT(!check_item_func(item_func, spider, alias, alias_length, + use_fields, fields)); + DBUG_ASSERT(str); + + if (str->reserve(SPIDER_SQL_OPEN_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); + DBUG_PRINT("info",("spider functype = %d", item_func->functype())); switch (item_func->functype()) { @@ -5759,14 +5935,9 @@ int spider_db_mbase_util::open_item_func( { if ( !strncasecmp("rand", func_name, func_name_length) && -#ifdef SPIDER_Item_args_arg_count_IS_PROTECTED !item_func->argument_count() -#else - !item_func->arg_count -#endif ) { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); DBUG_RETURN(spider_db_open_item_int(item_func, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields)); } else if ( @@ -5776,38 +5947,36 @@ int spider_db_mbase_util::open_item_func( /* item_count == 1 means this TRIM() is without a remove_str */ item = item_list[0]; Item *item_tmp = item_list[1]; - if (str) + + if (item_tmp->is_of_type(Item::CONST_ITEM, STRING_RESULT)) { - if (item_tmp->is_of_type(Item::CONST_ITEM, STRING_RESULT)) - { - /* 1. append 'TRIM(BOTH ' */ - if (str->reserve(SPIDER_SQL_TRIM_LEN + SPIDER_SQL_OPEN_PAREN_LEN + - SPIDER_SQL_TRIM_BOTH_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_TRIM_STR, SPIDER_SQL_TRIM_LEN); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, - SPIDER_SQL_OPEN_PAREN_LEN); - str->q_append(SPIDER_SQL_TRIM_BOTH_STR, SPIDER_SQL_TRIM_BOTH_LEN); - /* 2. append "remove_str"*/ - if ((error_num = spider_db_print_item_type( - item_tmp, NULL, spider, str, alias, alias_length, dbton_id, - use_fields, fields))) - DBUG_RETURN(error_num); - /* 3. append ' FROM ' */ - if (str->reserve(SPIDER_SQL_FROM_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - /* 4. append `field` */ - if ((error_num = spider_db_print_item_type( - item, NULL, spider, str, alias, alias_length, dbton_id, - use_fields, fields))) - DBUG_RETURN(error_num); - /* 5. append ')' */ - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } + /* 1. append 'TRIM(BOTH ' */ + if (str->reserve(SPIDER_SQL_TRIM_LEN + SPIDER_SQL_OPEN_PAREN_LEN + + SPIDER_SQL_TRIM_BOTH_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_TRIM_STR, SPIDER_SQL_TRIM_LEN); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, + SPIDER_SQL_OPEN_PAREN_LEN); + str->q_append(SPIDER_SQL_TRIM_BOTH_STR, SPIDER_SQL_TRIM_BOTH_LEN); + /* 2. append "remove_str"*/ + if ((error_num = spider_db_print_item_type( + item_tmp, NULL, spider, str, alias, alias_length, dbton_id, + use_fields, fields))) + DBUG_RETURN(error_num); + /* 3. append ' FROM ' */ + if (str->reserve(SPIDER_SQL_FROM_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); + /* 4. append `field` */ + if ((error_num = spider_db_print_item_type( + item, NULL, spider, str, alias, alias_length, dbton_id, + use_fields, fields))) + DBUG_RETURN(error_num); + /* 5. append ')' */ + if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, + SPIDER_SQL_CLOSE_PAREN_LEN); } item_count -= 2; break; @@ -5823,50 +5992,47 @@ int spider_db_mbase_util::open_item_func( /* item_count == 2 means this TRIM(LEADING/TRAILING ...) is with a remove_str */ item = item_list[0]; Item *item_tmp = item_list[1]; - if (str) + if (item_tmp->is_of_type(Item::CONST_ITEM, STRING_RESULT)) { - if (item_tmp->is_of_type(Item::CONST_ITEM, STRING_RESULT)) - { - /* 1. append 'TRIM(LEADING ' or 'TRIM(TRAILING ' */ - if (func_name[0] == 'l' || func_name[0] == 'L') - { /* ltrim */ - if (str->reserve(SPIDER_SQL_TRIM_LEN + SPIDER_SQL_OPEN_PAREN_LEN + - SPIDER_SQL_TRIM_LEADING_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_TRIM_STR, SPIDER_SQL_TRIM_LEN); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, - SPIDER_SQL_OPEN_PAREN_LEN); - str->q_append(SPIDER_SQL_TRIM_LEADING_STR, SPIDER_SQL_TRIM_LEADING_LEN); - } else - { /* rtrim */ - if (str->reserve(SPIDER_SQL_TRIM_LEN + SPIDER_SQL_OPEN_PAREN_LEN + - SPIDER_SQL_TRIM_TRAILING_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_TRIM_STR, SPIDER_SQL_TRIM_LEN); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, - SPIDER_SQL_OPEN_PAREN_LEN); - str->q_append(SPIDER_SQL_TRIM_TRAILING_STR, SPIDER_SQL_TRIM_TRAILING_LEN); - } - /* 2. append "remove_str"*/ - if ((error_num = spider_db_print_item_type( - item_tmp, NULL, spider, str, alias, alias_length, dbton_id, - use_fields, fields))) - DBUG_RETURN(error_num); - /* 3. append ' FROM ' */ - if (str->reserve(SPIDER_SQL_FROM_LEN)) + /* 1. append 'TRIM(LEADING ' or 'TRIM(TRAILING ' */ + if (func_name[0] == 'l' || func_name[0] == 'L') + { /* ltrim */ + if (str->reserve(SPIDER_SQL_TRIM_LEN + SPIDER_SQL_OPEN_PAREN_LEN + + SPIDER_SQL_TRIM_LEADING_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); - /* 4. append `field` */ - if ((error_num = spider_db_print_item_type( - item, NULL, spider, str, alias, alias_length, dbton_id, - use_fields, fields))) - DBUG_RETURN(error_num); - /* 5. append ')' */ - if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) + str->q_append(SPIDER_SQL_TRIM_STR, SPIDER_SQL_TRIM_LEN); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, + SPIDER_SQL_OPEN_PAREN_LEN); + str->q_append(SPIDER_SQL_TRIM_LEADING_STR, SPIDER_SQL_TRIM_LEADING_LEN); + } else + { /* rtrim */ + if (str->reserve(SPIDER_SQL_TRIM_LEN + SPIDER_SQL_OPEN_PAREN_LEN + + SPIDER_SQL_TRIM_TRAILING_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); + str->q_append(SPIDER_SQL_TRIM_STR, SPIDER_SQL_TRIM_LEN); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, + SPIDER_SQL_OPEN_PAREN_LEN); + str->q_append(SPIDER_SQL_TRIM_TRAILING_STR, SPIDER_SQL_TRIM_TRAILING_LEN); } + /* 2. append "remove_str"*/ + if ((error_num = spider_db_print_item_type( + item_tmp, NULL, spider, str, alias, alias_length, dbton_id, + use_fields, fields))) + DBUG_RETURN(error_num); + /* 3. append ' FROM ' */ + if (str->reserve(SPIDER_SQL_FROM_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_FROM_STR, SPIDER_SQL_FROM_LEN); + /* 4. append `field` */ + if ((error_num = spider_db_print_item_type( + item, NULL, spider, str, alias, alias_length, dbton_id, + use_fields, fields))) + DBUG_RETURN(error_num); + /* 5. append ')' */ + if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, + SPIDER_SQL_CLOSE_PAREN_LEN); } item_count -= 2; break; @@ -5889,23 +6055,19 @@ int spider_db_mbase_util::open_item_func( !strncasecmp("curdate", func_name, func_name_length) || !strncasecmp("curtime", func_name, func_name_length) ) { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields)); } else if ( !strncasecmp("convert", func_name, func_name_length) ) { - if (str) - { - if (str->reserve(func_name_length * 2 + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, - SPIDER_SQL_OPEN_PAREN_LEN); - last_str = SPIDER_SQL_CLOSE_PAREN_STR; - last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; - } + if (str->reserve(func_name_length * 2 + SPIDER_SQL_OPEN_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, + SPIDER_SQL_OPEN_PAREN_LEN); + last_str = SPIDER_SQL_CLOSE_PAREN_STR; + last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; break; } } else if (func_name_length == 8 && @@ -5914,8 +6076,7 @@ int spider_db_mbase_util::open_item_func( !strncasecmp("utc_time", func_name, func_name_length) ) ) { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields)); } else if (func_name_length == 9 && @@ -5933,14 +6094,12 @@ int spider_db_mbase_util::open_item_func( break; } else if (!strncasecmp("column_get", func_name, func_name_length)) { - if (str) - { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); + func_name = SPIDER_SQL_COMMA_STR; func_name_length = SPIDER_SQL_COMMA_LEN; separator_str = SPIDER_SQL_COMMA_STR; @@ -5974,15 +6133,12 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } + if (str->reserve(SPIDER_SQL_CAST_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } last_str = SPIDER_SQL_AS_DATE_STR; last_str_length = SPIDER_SQL_AS_DATE_LEN; @@ -6012,15 +6168,12 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } + if (str->reserve(SPIDER_SQL_CAST_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } last_str = SPIDER_SQL_AS_TIME_STR; last_str_length = SPIDER_SQL_AS_TIME_LEN; @@ -6030,8 +6183,7 @@ int spider_db_mbase_util::open_item_func( { if (!strncasecmp("utc_timestamp", func_name, func_name_length)) { - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields)); } else if (!strncasecmp("timestampdiff", func_name, func_name_length)) @@ -6039,64 +6191,62 @@ int spider_db_mbase_util::open_item_func( #ifdef ITEM_FUNC_TIMESTAMPDIFF_ARE_PUBLIC Item_func_timestamp_diff *item_func_timestamp_diff = (Item_func_timestamp_diff *) item_func; - if (str) + const char *interval_str; + uint interval_len; + switch (item_func_timestamp_diff->int_type) { - const char *interval_str; - uint interval_len; - switch (item_func_timestamp_diff->int_type) - { - case INTERVAL_YEAR: - interval_str = SPIDER_SQL_YEAR_STR; - interval_len = SPIDER_SQL_YEAR_LEN; - break; - case INTERVAL_QUARTER: - interval_str = SPIDER_SQL_QUARTER_STR; - interval_len = SPIDER_SQL_QUARTER_LEN; - break; - case INTERVAL_MONTH: - interval_str = SPIDER_SQL_MONTH_STR; - interval_len = SPIDER_SQL_MONTH_LEN; - break; - case INTERVAL_WEEK: - interval_str = SPIDER_SQL_WEEK_STR; - interval_len = SPIDER_SQL_WEEK_LEN; - break; - case INTERVAL_DAY: - interval_str = SPIDER_SQL_DAY_STR; - interval_len = SPIDER_SQL_DAY_LEN; - break; - case INTERVAL_HOUR: - interval_str = SPIDER_SQL_HOUR_STR; - interval_len = SPIDER_SQL_HOUR_LEN; - break; - case INTERVAL_MINUTE: - interval_str = SPIDER_SQL_MINUTE_STR; - interval_len = SPIDER_SQL_MINUTE_LEN; - break; - case INTERVAL_SECOND: - interval_str = SPIDER_SQL_SECOND_STR; - interval_len = SPIDER_SQL_SECOND_LEN; - break; - case INTERVAL_MICROSECOND: - interval_str = SPIDER_SQL_MICROSECOND_STR; - interval_len = SPIDER_SQL_MICROSECOND_LEN; - break; - default: - interval_str = ""; - interval_len = 0; - break; - } - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN + - interval_len + SPIDER_SQL_COMMA_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - str->q_append(interval_str, interval_len); - str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); + case INTERVAL_YEAR: + interval_str = SPIDER_SQL_YEAR_STR; + interval_len = SPIDER_SQL_YEAR_LEN; + break; + case INTERVAL_QUARTER: + interval_str = SPIDER_SQL_QUARTER_STR; + interval_len = SPIDER_SQL_QUARTER_LEN; + break; + case INTERVAL_MONTH: + interval_str = SPIDER_SQL_MONTH_STR; + interval_len = SPIDER_SQL_MONTH_LEN; + break; + case INTERVAL_WEEK: + interval_str = SPIDER_SQL_WEEK_STR; + interval_len = SPIDER_SQL_WEEK_LEN; + break; + case INTERVAL_DAY: + interval_str = SPIDER_SQL_DAY_STR; + interval_len = SPIDER_SQL_DAY_LEN; + break; + case INTERVAL_HOUR: + interval_str = SPIDER_SQL_HOUR_STR; + interval_len = SPIDER_SQL_HOUR_LEN; + break; + case INTERVAL_MINUTE: + interval_str = SPIDER_SQL_MINUTE_STR; + interval_len = SPIDER_SQL_MINUTE_LEN; + break; + case INTERVAL_SECOND: + interval_str = SPIDER_SQL_SECOND_STR; + interval_len = SPIDER_SQL_SECOND_LEN; + break; + case INTERVAL_MICROSECOND: + interval_str = SPIDER_SQL_MICROSECOND_STR; + interval_len = SPIDER_SQL_MICROSECOND_LEN; + break; + default: + interval_str = ""; + interval_len = 0; + break; } + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN + + interval_len + SPIDER_SQL_COMMA_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); + str->q_append(interval_str, interval_len); + str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); + if ((error_num = spider_db_print_item_type(item_list[0], NULL, spider, - str, alias, alias_length, dbton_id, use_fields, fields))) + str, alias, alias_length, dbton_id, use_fields, fields))) DBUG_RETURN(error_num); if (str) { @@ -6105,14 +6255,14 @@ int spider_db_mbase_util::open_item_func( str->q_append(SPIDER_SQL_COMMA_STR, SPIDER_SQL_COMMA_LEN); } if ((error_num = spider_db_print_item_type(item_list[1], NULL, spider, - str, alias, alias_length, dbton_id, use_fields, fields))) + str, alias, alias_length, dbton_id, use_fields, fields))) DBUG_RETURN(error_num); if (str) { if (str->reserve(SPIDER_SQL_CLOSE_PAREN_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); + SPIDER_SQL_CLOSE_PAREN_LEN); } DBUG_RETURN(0); #else @@ -6146,35 +6296,28 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + char *tmp_ptr, *tmp_ptr2; + DBUG_ASSERT(tmp_str.length() == 0); + tmp_str.set_charset(str->charset()); + tmp_str.init_calc_mem(123); + tmp_str.reserve(MAX_FIELD_WIDTH); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - char *tmp_ptr, *tmp_ptr2; - DBUG_ASSERT(tmp_str.length() == 0); - tmp_str.set_charset(str->charset()); - tmp_str.init_calc_mem(123); - tmp_str.reserve(MAX_FIELD_WIDTH); - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } -#if MYSQL_VERSION_ID < 50500 - item_func->print(tmp_str.get_str(), QT_IS); -#else - item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); -#endif - tmp_str.mem_calc(); - if (tmp_str.reserve(1)) + if (str->reserve(SPIDER_SQL_CAST_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); - DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); - while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_BINARY_STR))) - tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; - last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } + item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); + tmp_str.mem_calc(); + if (tmp_str.reserve(1)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + tmp_ptr = tmp_str.c_ptr_quick(); + DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); + while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_BINARY_STR))) + tmp_ptr = tmp_ptr2 + 1; + last_str = tmp_ptr - 1; + last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; break; } else if (!strncasecmp("cast_as_signed", func_name, func_name_length)) { @@ -6201,15 +6344,12 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } + if (str->reserve(SPIDER_SQL_CAST_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } last_str = SPIDER_SQL_AS_SIGNED_STR; last_str_length = SPIDER_SQL_AS_SIGNED_LEN; @@ -6242,15 +6382,12 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } + if (str->reserve(SPIDER_SQL_CAST_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } last_str = SPIDER_SQL_AS_UNSIGNED_STR; last_str_length = SPIDER_SQL_AS_UNSIGNED_LEN; @@ -6281,35 +6418,28 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + char *tmp_ptr, *tmp_ptr2; + DBUG_ASSERT(tmp_str.length() == 0); + tmp_str.set_charset(str->charset()); + tmp_str.init_calc_mem(124); + tmp_str.reserve(MAX_FIELD_WIDTH); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - char *tmp_ptr, *tmp_ptr2; - DBUG_ASSERT(tmp_str.length() == 0); - tmp_str.set_charset(str->charset()); - tmp_str.init_calc_mem(124); - tmp_str.reserve(MAX_FIELD_WIDTH); - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } -#if MYSQL_VERSION_ID < 50500 - item_func->print(tmp_str.get_str(), QT_IS); -#else - item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); -#endif - tmp_str.mem_calc(); - if (tmp_str.reserve(1)) + if (str->reserve(SPIDER_SQL_CAST_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); - DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); - while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_DECIMAL_STR))) - tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; - last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } + item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); + tmp_str.mem_calc(); + if (tmp_str.reserve(1)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + tmp_ptr = tmp_str.c_ptr_quick(); + DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); + while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_DECIMAL_STR))) + tmp_ptr = tmp_ptr2 + 1; + last_str = tmp_ptr - 1; + last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; break; } else if (!strncasecmp("cast_as_datetime", func_name, func_name_length)) @@ -6337,15 +6467,12 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } + if (str->reserve(SPIDER_SQL_CAST_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } last_str = SPIDER_SQL_AS_DATETIME_STR; last_str_length = SPIDER_SQL_AS_DATETIME_LEN; @@ -6363,41 +6490,32 @@ int spider_db_mbase_util::open_item_func( if ((error_num = spider_db_print_item_type(item_list[0], NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields))) DBUG_RETURN(error_num); - if (str) + if (item_date_add_interval->date_sub_interval) { - if (item_date_add_interval->date_sub_interval) - { - if (str->reserve(SPIDER_SQL_NEGINTERVAL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_NEGINTERVAL_STR, - SPIDER_SQL_NEGINTERVAL_LEN); - } else { - if (str->reserve(SPIDER_SQL_INTERVAL_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_INTERVAL_STR, SPIDER_SQL_INTERVAL_LEN); - } + if (str->reserve(SPIDER_SQL_NEGINTERVAL_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_NEGINTERVAL_STR, + SPIDER_SQL_NEGINTERVAL_LEN); + } else { + if (str->reserve(SPIDER_SQL_INTERVAL_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_INTERVAL_STR, SPIDER_SQL_INTERVAL_LEN); } if ((error_num = spider_db_print_item_type(item_list[1], NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields))) DBUG_RETURN(error_num); - if (str) - { - if (str->reserve(func_name_length + SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } + if (str->reserve(func_name_length + SPIDER_SQL_CLOSE_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, + SPIDER_SQL_CLOSE_PAREN_LEN); DBUG_RETURN(0); } } - if (str) - { - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } + if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); func_name = SPIDER_SQL_COMMA_STR; func_name_length = SPIDER_SQL_COMMA_LEN; separator_str = SPIDER_SQL_COMMA_STR; @@ -6406,8 +6524,7 @@ int spider_db_mbase_util::open_item_func( last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; break; case Item_func::NOW_FUNC: - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields)); case Item_func::CHAR_TYPECAST_FUNC: @@ -6436,99 +6553,48 @@ int spider_db_mbase_util::open_item_func( } } - if (str) + char *tmp_ptr, *tmp_ptr2; + DBUG_ASSERT(tmp_str.length() == 0); + tmp_str.set_charset(str->charset()); + tmp_str.init_calc_mem(125); + tmp_str.reserve(MAX_FIELD_WIDTH); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + if (!merge_func) { - char *tmp_ptr, *tmp_ptr2; - DBUG_ASSERT(tmp_str.length() == 0); - tmp_str.set_charset(str->charset()); - tmp_str.init_calc_mem(125); - tmp_str.reserve(MAX_FIELD_WIDTH); - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); - if (!merge_func) - { - if (str->reserve(SPIDER_SQL_CAST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); - } -#if MYSQL_VERSION_ID < 50500 - item_func->print(tmp_str.get_str(), QT_IS); -#else - item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); -#endif - tmp_str.mem_calc(); - if (tmp_str.reserve(1)) + if (str->reserve(SPIDER_SQL_CAST_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); - tmp_ptr = tmp_str.c_ptr_quick(); - DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); - while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_CHAR_STR))) - tmp_ptr = tmp_ptr2 + 1; - last_str = tmp_ptr - 1; - last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; + str->q_append(SPIDER_SQL_CAST_STR, SPIDER_SQL_CAST_LEN); } + item_func->print(tmp_str.get_str(), QT_TO_SYSTEM_CHARSET); + tmp_str.mem_calc(); + if (tmp_str.reserve(1)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + tmp_ptr = tmp_str.c_ptr_quick(); + DBUG_PRINT("info",("spider tmp_ptr = %s", tmp_ptr)); + while ((tmp_ptr2 = strstr(tmp_ptr, SPIDER_SQL_AS_CHAR_STR))) + tmp_ptr = tmp_ptr2 + 1; + last_str = tmp_ptr - 1; + last_str_length = strlen(last_str) - SPIDER_SQL_CLOSE_PAREN_LEN; } break; case Item_func::NOT_FUNC: DBUG_PRINT("info",("spider NOT_FUNC")); - if (item_list[0]->type() == Item::COND_ITEM) - { - DBUG_PRINT("info",("spider item_list[0] is COND_ITEM")); - Item_cond *item_cond = (Item_cond *) item_list[0]; - if (item_cond->functype() == Item_func::COND_AND_FUNC) - { - DBUG_PRINT("info",("spider item_cond is COND_AND_FUNC")); - List_iterator_fast lif(*(item_cond->argument_list())); - bool has_expr_cache_item = FALSE; - bool has_isnotnull_func = FALSE; - 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 ( - item->type() == Item::FUNC_ITEM && - ((Item_func *) item)->functype() == Item_func::ISNOTNULL_FUNC - ) { - DBUG_PRINT("info",("spider ISNOTNULL_FUNC")); - has_isnotnull_func = TRUE; - } else { - DBUG_PRINT("info",("spider has other item")); - DBUG_PRINT("info",("spider COND type=%d", item->type())); - has_other_item = TRUE; - } - } - if (has_expr_cache_item && has_isnotnull_func && !has_other_item) - { - DBUG_PRINT("info",("spider NOT EXISTS skip")); - DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - } - } - } - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } + if (not_func_should_be_skipped(item_func)) + DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); + func_name = (char*) item_func->func_name(); + func_name_length = strlen(func_name); + if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); break; case Item_func::NEG_FUNC: - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } + func_name = (char*) item_func->func_name(); + func_name_length = strlen(func_name); + if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); break; case Item_func::IN_FUNC: if (((Item_func_opt_neg *) item_func)->negated) @@ -6574,17 +6640,14 @@ int spider_db_mbase_util::open_item_func( definition). Users can turn it on if they know what they are doing. */ DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } + func_name = (char*) item_func->func_name(); + func_name_length = strlen(func_name); + DBUG_PRINT("info",("spider func_name = %s", func_name)); + DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); + if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); func_name = SPIDER_SQL_COMMA_STR; func_name_length = SPIDER_SQL_COMMA_LEN; separator_str = SPIDER_SQL_COMMA_STR; @@ -6595,8 +6658,7 @@ int spider_db_mbase_util::open_item_func( case Item_func::TRIG_COND_FUNC: DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); case Item_func::GUSERVAR_FUNC: - if (str) - str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); + str->length(str->length() - SPIDER_SQL_OPEN_PAREN_LEN); if (item_func->result_type() == STRING_RESULT) DBUG_RETURN(spider_db_open_item_string(item_func, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields)); @@ -6607,28 +6669,22 @@ int spider_db_mbase_util::open_item_func( if (spider_db_check_ft_idx(item_func, spider) == MAX_KEY) DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); start_item = 1; - if (str) - { - if (str->reserve(SPIDER_SQL_MATCH_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_MATCH_STR, SPIDER_SQL_MATCH_LEN); - } + if (str->reserve(SPIDER_SQL_MATCH_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_MATCH_STR, SPIDER_SQL_MATCH_LEN); separator_str = SPIDER_SQL_COMMA_STR; separator_str_length = SPIDER_SQL_COMMA_LEN; last_str = SPIDER_SQL_CLOSE_PAREN_STR; last_str_length = SPIDER_SQL_CLOSE_PAREN_LEN; break; case Item_func::SP_EQUALS_FUNC: - if (str) - { - func_name = SPIDER_SQL_MBR_EQUAL_STR; - func_name_length = SPIDER_SQL_MBR_EQUAL_LEN; - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - if (str->reserve(func_name_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - } + func_name = SPIDER_SQL_MBR_EQUAL_STR; + func_name_length = SPIDER_SQL_MBR_EQUAL_LEN; + DBUG_PRINT("info",("spider func_name = %s", func_name)); + DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); + if (str->reserve(func_name_length)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); func_name = SPIDER_SQL_COMMA_STR; func_name_length = SPIDER_SQL_COMMA_LEN; separator_str = SPIDER_SQL_COMMA_STR; @@ -6643,24 +6699,14 @@ int spider_db_mbase_util::open_item_func( case Item_func::SP_WITHIN_FUNC: case Item_func::SP_CONTAINS_FUNC: case Item_func::SP_OVERLAPS_FUNC: - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - DBUG_PRINT("info",("spider func_name = %s", func_name)); - DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); - if (str->reserve( -#ifndef SPIDER_ITEM_GEOFUNC_NAME_HAS_MBR - SPIDER_SQL_MBR_LEN + -#endif - func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) + func_name = (char*) item_func->func_name(); + func_name_length = strlen(func_name); + DBUG_PRINT("info",("spider func_name = %s", func_name)); + DBUG_PRINT("info",("spider func_name_length = %d", func_name_length)); + if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) DBUG_RETURN(HA_ERR_OUT_OF_MEM); -#ifndef SPIDER_ITEM_GEOFUNC_NAME_HAS_MBR - str->q_append(SPIDER_SQL_MBR_STR, SPIDER_SQL_MBR_LEN); -#endif - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); func_name = SPIDER_SQL_COMMA_STR; func_name_length = SPIDER_SQL_COMMA_LEN; separator_str = SPIDER_SQL_COMMA_STR; @@ -6676,107 +6722,32 @@ int spider_db_mbase_util::open_item_func( case Item_func::GE_FUNC: case Item_func::GT_FUNC: case Item_func::XOR_FUNC: - if (str) + func_name = (char*) item_func->func_name(); + func_name_length = strlen(func_name); + break; + case Item_func::LIKE_FUNC: + if (((Item_func_like *)item_func)->get_negated()) { - func_name = (char*) item_func->func_name(); + func_name = SPIDER_SQL_NOT_LIKE_STR; + func_name_length = SPIDER_SQL_NOT_LIKE_LEN; + } + else + { + func_name = (char*)item_func->func_name(); func_name_length = strlen(func_name); } break; - case Item_func::LIKE_FUNC: -#ifdef SPIDER_LIKE_FUNC_HAS_GET_NEGATED - if (str) - { - if (((Item_func_like *)item_func)->get_negated()) - { - func_name = SPIDER_SQL_NOT_LIKE_STR; - func_name_length = SPIDER_SQL_NOT_LIKE_LEN; - } - else - { - func_name = (char*)item_func->func_name(); - func_name_length = strlen(func_name); - } - } - 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 - Item_func_case *item_func_case = (Item_func_case *) item_func; - if (str) - { - if (str->reserve(SPIDER_SQL_CASE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_CASE_STR, SPIDER_SQL_CASE_LEN); - } - if (item_func_case->first_expr_num != -1) - { - if ((error_num = spider_db_print_item_type( - item_list[item_func_case->first_expr_num], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - for (roop_count = 0; roop_count < item_func_case->ncases; - roop_count += 2) - { - if (str) - { - if (str->reserve(SPIDER_SQL_WHEN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_WHEN_STR, SPIDER_SQL_WHEN_LEN); - } - if ((error_num = spider_db_print_item_type( - item_list[roop_count], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - if (str) - { - if (str->reserve(SPIDER_SQL_THEN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_THEN_STR, SPIDER_SQL_THEN_LEN); - } - if ((error_num = spider_db_print_item_type( - item_list[roop_count + 1], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - if (item_func_case->else_expr_num != -1) - { - if (str) - { - if (str->reserve(SPIDER_SQL_ELSE_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_ELSE_STR, SPIDER_SQL_ELSE_LEN); - } - if ((error_num = spider_db_print_item_type( - item_list[item_func_case->else_expr_num], NULL, spider, str, - alias, alias_length, dbton_id, use_fields, fields))) - DBUG_RETURN(error_num); - } - if (str) - { - if (str->reserve(SPIDER_SQL_END_LEN + SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_END_STR, SPIDER_SQL_END_LEN); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, - SPIDER_SQL_CLOSE_PAREN_LEN); - } - DBUG_RETURN(0); -#else DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); -#endif case Item_func::JSON_EXTRACT_FUNC: func_name = (char*) item_func->func_name(); func_name_length = strlen(func_name); - if (str) - { - if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); - } + if (str->reserve(func_name_length + SPIDER_SQL_OPEN_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_OPEN_PAREN_STR, SPIDER_SQL_OPEN_PAREN_LEN); func_name = SPIDER_SQL_COMMA_STR; func_name_length = SPIDER_SQL_COMMA_LEN; separator_str = SPIDER_SQL_COMMA_STR; @@ -6790,11 +6761,8 @@ int spider_db_mbase_util::open_item_func( if (spider_param_skip_default_condition(thd, share->skip_default_condition)) DBUG_RETURN(ER_SPIDER_COND_SKIP_NUM); - if (str) - { - func_name = (char*) item_func->func_name(); - func_name_length = strlen(func_name); - } + func_name = (char*) item_func->func_name(); + func_name_length = strlen(func_name); break; } DBUG_PRINT("info",("spider func_name = %s", func_name)); @@ -6827,14 +6795,11 @@ int spider_db_mbase_util::open_item_func( func_name = separator_str; func_name_length = separator_str_length; } - if (str) - { - if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN * 2)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - str->q_append(func_name, func_name_length); - str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); - } + if (str->reserve(func_name_length + SPIDER_SQL_SPACE_LEN * 2)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); + str->q_append(func_name, func_name_length); + str->q_append(SPIDER_SQL_SPACE_STR, SPIDER_SQL_SPACE_LEN); } /* Print the last operand value */ @@ -6847,61 +6812,49 @@ int spider_db_mbase_util::open_item_func( if (item_func->functype() == Item_func::FT_FUNC) { Item_func_match *item_func_match = (Item_func_match *)item_func; - if (str) - { - if (str->reserve(SPIDER_SQL_AGAINST_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_AGAINST_STR, SPIDER_SQL_AGAINST_LEN); - } + if (str->reserve(SPIDER_SQL_AGAINST_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_AGAINST_STR, SPIDER_SQL_AGAINST_LEN); item = item_list[0]; if ((error_num = spider_db_print_item_type(item, NULL, spider, str, alias, alias_length, dbton_id, use_fields, fields))) DBUG_RETURN(error_num); - if (str) - { - if (str->reserve( - ((item_func_match->flags & FT_BOOL) ? - SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) + - ((item_func_match->flags & FT_EXPAND) ? - SPIDER_SQL_WITH_QUERY_EXPANSION_LEN : 0) - )) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - if (item_func_match->flags & FT_BOOL) - str->q_append(SPIDER_SQL_IN_BOOLEAN_MODE_STR, - SPIDER_SQL_IN_BOOLEAN_MODE_LEN); - if (item_func_match->flags & FT_EXPAND) - str->q_append(SPIDER_SQL_WITH_QUERY_EXPANSION_STR, - SPIDER_SQL_WITH_QUERY_EXPANSION_LEN); - } + if (str->reserve( + ((item_func_match->flags & FT_BOOL) ? + SPIDER_SQL_IN_BOOLEAN_MODE_LEN : 0) + + ((item_func_match->flags & FT_EXPAND) ? + SPIDER_SQL_WITH_QUERY_EXPANSION_LEN : 0) + )) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + if (item_func_match->flags & FT_BOOL) + str->q_append(SPIDER_SQL_IN_BOOLEAN_MODE_STR, + SPIDER_SQL_IN_BOOLEAN_MODE_LEN); + if (item_func_match->flags & FT_EXPAND) + str->q_append(SPIDER_SQL_WITH_QUERY_EXPANSION_STR, + SPIDER_SQL_WITH_QUERY_EXPANSION_LEN); } else if (item_func->functype() == Item_func::UNKNOWN_FUNC) { if ( func_name_length == 7 && !strncasecmp("convert", func_name, func_name_length) ) { - if (str) - { - Item_func_conv_charset *item_func_conv_charset = - (Item_func_conv_charset *)item_func; - CHARSET_INFO *conv_charset = - item_func_conv_charset->SPIDER_Item_func_conv_charset_conv_charset; - uint cset_length = strlen(conv_charset->csname); - if (str->reserve(SPIDER_SQL_USING_LEN + cset_length)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(SPIDER_SQL_USING_STR, SPIDER_SQL_USING_LEN); - str->q_append(conv_charset->csname, cset_length); - } + Item_func_conv_charset *item_func_conv_charset = + (Item_func_conv_charset *)item_func; + CHARSET_INFO *conv_charset = + item_func_conv_charset->SPIDER_Item_func_conv_charset_conv_charset; + uint cset_length = strlen(conv_charset->csname); + if (str->reserve(SPIDER_SQL_USING_LEN + cset_length)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(SPIDER_SQL_USING_STR, SPIDER_SQL_USING_LEN); + str->q_append(conv_charset->csname, cset_length); } } - if (str) - { - if (merge_func) - str->length(str->length() - SPIDER_SQL_CLOSE_PAREN_LEN); - if (str->reserve(last_str_length + SPIDER_SQL_CLOSE_PAREN_LEN)) - DBUG_RETURN(HA_ERR_OUT_OF_MEM); - str->q_append(last_str, last_str_length); - str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); - } + if (merge_func) + str->length(str->length() - SPIDER_SQL_CLOSE_PAREN_LEN); + if (str->reserve(last_str_length + SPIDER_SQL_CLOSE_PAREN_LEN)) + DBUG_RETURN(HA_ERR_OUT_OF_MEM); + str->q_append(last_str, last_str_length); + str->q_append(SPIDER_SQL_CLOSE_PAREN_STR, SPIDER_SQL_CLOSE_PAREN_LEN); DBUG_RETURN(0); } diff --git a/storage/spider/spd_db_mysql.h b/storage/spider/spd_db_mysql.h index a8eada5a62e..c2ce2825578 100644 --- a/storage/spider/spd_db_mysql.h +++ b/storage/spider/spd_db_mysql.h @@ -126,6 +126,25 @@ public: bool use_fields, spider_fields *fields ) override; +protected: + int check_item_func( + Item_func *item_func, + ha_spider *spider, + const char *alias, + uint alias_length, + bool use_fields, + spider_fields *fields + ); + int print_item_func( + Item_func *item_func, + ha_spider *spider, + spider_string *str, + const char *alias, + uint alias_length, + bool use_fields, + spider_fields *fields + ); +public: #ifdef HANDLER_HAS_DIRECT_AGGREGATE int open_item_sum_func( Item_sum *item_sum, diff --git a/storage/spider/spd_trx.cc b/storage/spider/spd_trx.cc index b00a7262230..65e71f7fcff 100644 --- a/storage/spider/spd_trx.cc +++ b/storage/spider/spd_trx.cc @@ -409,12 +409,28 @@ int spider_free_trx_alter_table( DBUG_RETURN(0); } +/** Copy a string from one array to another */ +static inline void spider_maybe_memcpy_indexed_string( + char **dests, + char **srcs, + const uint* lengths, + const int idx, + char *&ptr) +{ + if (size_t len= sizeof(char) * lengths[idx]) + { + dests[idx]= ptr; + memcpy(ptr, srcs[idx], len); + ptr+= len + 1; + } +} + int spider_create_trx_alter_table( SPIDER_TRX *trx, SPIDER_SHARE *share, bool now_create ) { - int error_num, roop_count; + int error_num, link_idx; SPIDER_ALTER_TABLE *alter_table, *share_alter; char *tmp_name; char **tmp_server_names; @@ -627,151 +643,76 @@ int spider_create_trx_alter_table( alter_table->tmp_tgt_dsns_lengths = tmp_tgt_dsns_lengths; alter_table->tmp_static_link_ids_lengths = tmp_static_link_ids_lengths; - size_t len; - for(roop_count = 0; roop_count < (int) share->all_link_count; roop_count++) + for(link_idx = 0; link_idx < (int) share->all_link_count; link_idx++) { - if ((len= - sizeof(char) * share_alter->tmp_server_names_lengths[roop_count])) - { - tmp_server_names[roop_count]= tmp_server_names_char; - memcpy(tmp_server_names_char, share_alter->tmp_server_names[roop_count], - len); - tmp_server_names_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_server_names, share_alter->tmp_server_names, + share_alter->tmp_server_names_lengths, link_idx, tmp_server_names_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_table_names_lengths[roop_count])) - { - tmp_tgt_table_names[roop_count]= tmp_tgt_table_names_char; - memcpy(tmp_tgt_table_names_char, - share_alter->tmp_tgt_table_names[roop_count], len); - tmp_tgt_table_names_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_table_names, share_alter->tmp_tgt_table_names, + share_alter->tmp_tgt_table_names_lengths, link_idx, tmp_tgt_table_names_char); - if ((len= sizeof(char) * share_alter->tmp_tgt_dbs_lengths[roop_count])) - { - tmp_tgt_dbs[roop_count]= tmp_tgt_dbs_char; - memcpy(tmp_tgt_dbs_char, share_alter->tmp_tgt_dbs[roop_count], len); - tmp_tgt_dbs_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_dbs, share_alter->tmp_tgt_dbs, + share_alter->tmp_tgt_dbs_lengths, link_idx, tmp_tgt_dbs_char); - if ((len= sizeof(char) * share_alter->tmp_tgt_hosts_lengths[roop_count])) - { - tmp_tgt_hosts[roop_count]= tmp_tgt_hosts_char; - memcpy(tmp_tgt_hosts_char, share_alter->tmp_tgt_hosts[roop_count], len); - tmp_tgt_hosts_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_hosts, share_alter->tmp_tgt_hosts, + share_alter->tmp_tgt_hosts_lengths, link_idx, tmp_tgt_hosts_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_usernames_lengths[roop_count])) - { - tmp_tgt_usernames[roop_count]= tmp_tgt_usernames_char; - memcpy(tmp_tgt_usernames_char, - share_alter->tmp_tgt_usernames[roop_count], len); - tmp_tgt_usernames_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_usernames, share_alter->tmp_tgt_usernames, + share_alter->tmp_tgt_usernames_lengths, link_idx, tmp_tgt_usernames_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_passwords_lengths[roop_count])) - { - tmp_tgt_passwords[roop_count]= tmp_tgt_passwords_char; - memcpy(tmp_tgt_passwords_char, - share_alter->tmp_tgt_passwords[roop_count], len); - tmp_tgt_passwords_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_passwords, share_alter->tmp_tgt_passwords, + share_alter->tmp_tgt_passwords_lengths, link_idx, tmp_tgt_passwords_char); - if ((len= sizeof(char) * share_alter->tmp_tgt_sockets_lengths[roop_count])) - { - tmp_tgt_sockets[roop_count]= tmp_tgt_sockets_char; - memcpy(tmp_tgt_sockets_char, share_alter->tmp_tgt_sockets[roop_count], - len); - tmp_tgt_sockets_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_sockets, share_alter->tmp_tgt_sockets, + share_alter->tmp_tgt_sockets_lengths, link_idx, tmp_tgt_sockets_char); - if ((len= - sizeof(char) * share_alter->tmp_tgt_wrappers_lengths[roop_count])) - { - tmp_tgt_wrappers[roop_count]= tmp_tgt_wrappers_char; - memcpy(tmp_tgt_wrappers_char, share_alter->tmp_tgt_wrappers[roop_count], - len); - tmp_tgt_wrappers_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_wrappers, share_alter->tmp_tgt_wrappers, + share_alter->tmp_tgt_wrappers_lengths, link_idx, tmp_tgt_wrappers_char); - if ((len= sizeof(char) * share_alter->tmp_tgt_ssl_cas_lengths[roop_count])) - { - tmp_tgt_ssl_cas[roop_count]= tmp_tgt_ssl_cas_char; - memcpy(tmp_tgt_ssl_cas_char, share_alter->tmp_tgt_ssl_cas[roop_count], - len); - tmp_tgt_ssl_cas_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_ssl_cas, share_alter->tmp_tgt_ssl_cas, + share_alter->tmp_tgt_ssl_cas_lengths, link_idx, tmp_tgt_ssl_cas_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_ssl_capaths_lengths[roop_count])) - { - tmp_tgt_ssl_capaths[roop_count]= tmp_tgt_ssl_capaths_char; - memcpy(tmp_tgt_ssl_capaths_char, - share_alter->tmp_tgt_ssl_capaths[roop_count], len); - tmp_tgt_ssl_capaths_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_ssl_capaths, share_alter->tmp_tgt_ssl_capaths, + share_alter->tmp_tgt_ssl_capaths_lengths, link_idx, tmp_tgt_ssl_capaths_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_ssl_certs_lengths[roop_count])) - { - tmp_tgt_ssl_certs[roop_count]= tmp_tgt_ssl_certs_char; - memcpy(tmp_tgt_ssl_certs_char, - share_alter->tmp_tgt_ssl_certs[roop_count], len); - tmp_tgt_ssl_certs_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_ssl_certs, share_alter->tmp_tgt_ssl_certs, + share_alter->tmp_tgt_ssl_certs_lengths, link_idx, tmp_tgt_ssl_certs_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_ssl_ciphers_lengths[roop_count])) - { - tmp_tgt_ssl_ciphers[roop_count]= tmp_tgt_ssl_ciphers_char; - memcpy(tmp_tgt_ssl_ciphers_char, - share_alter->tmp_tgt_ssl_ciphers[roop_count], len); - tmp_tgt_ssl_ciphers_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_ssl_ciphers, share_alter->tmp_tgt_ssl_ciphers, + share_alter->tmp_tgt_ssl_ciphers_lengths, link_idx, tmp_tgt_ssl_ciphers_char); - if ((len= sizeof(char) * share_alter->tmp_tgt_ssl_keys_lengths[roop_count])) - { - tmp_tgt_ssl_keys[roop_count]= tmp_tgt_ssl_keys_char; - memcpy(tmp_tgt_ssl_keys_char, share_alter->tmp_tgt_ssl_keys[roop_count], - len); - tmp_tgt_ssl_keys_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_ssl_keys, share_alter->tmp_tgt_ssl_keys, + share_alter->tmp_tgt_ssl_keys_lengths, link_idx, tmp_tgt_ssl_keys_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_default_files_lengths[roop_count])) - { - tmp_tgt_default_files[roop_count]= tmp_tgt_default_files_char; - memcpy(tmp_tgt_default_files_char, - share_alter->tmp_tgt_default_files[roop_count], len); - tmp_tgt_default_files_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_default_files, share_alter->tmp_tgt_default_files, + share_alter->tmp_tgt_default_files_lengths, link_idx, tmp_tgt_default_files_char); - if ((len= sizeof(char) * - share_alter->tmp_tgt_default_groups_lengths[roop_count])) - { - tmp_tgt_default_groups[roop_count]= tmp_tgt_default_groups_char; - memcpy(tmp_tgt_default_groups_char, - share_alter->tmp_tgt_default_groups[roop_count], len); - tmp_tgt_default_groups_char+= len + 1; - } + spider_maybe_memcpy_indexed_string( + tmp_tgt_default_groups, share_alter->tmp_tgt_default_groups, + share_alter->tmp_tgt_default_groups_lengths, link_idx, tmp_tgt_default_groups_char); - tmp_tgt_dsns[roop_count] = tmp_tgt_dsns_char; - memcpy(tmp_tgt_dsns_char, share_alter->tmp_tgt_dsns[roop_count], - sizeof(char) * share_alter->tmp_tgt_dsns_lengths[roop_count]); - tmp_tgt_dsns_char += - share_alter->tmp_tgt_dsns_lengths[roop_count] + 1; - - if ((len= sizeof(char) * - share_alter->tmp_static_link_ids_lengths[roop_count])) - { - tmp_static_link_ids[roop_count] = tmp_static_link_ids_char; - memcpy(tmp_static_link_ids_char, - share_alter->tmp_static_link_ids[roop_count], len); - tmp_static_link_ids_char += len + 1; - } + /* Notes on merge conflicts (remove this comment after merging): + for 10.6+ see d74103292c7be236f3da71c86249d37295f57bbc */ + spider_maybe_memcpy_indexed_string( + tmp_tgt_dsns, share_alter->tmp_tgt_dsns, + share_alter->tmp_tgt_dsns_lengths, link_idx, tmp_tgt_dsns_char); + spider_maybe_memcpy_indexed_string( + tmp_static_link_ids, share_alter->tmp_static_link_ids, + share_alter->tmp_static_link_ids_lengths, link_idx, tmp_static_link_ids_char); } memcpy(tmp_tgt_ports, share_alter->tmp_tgt_ports, diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt index 6de57cd6a97..b88fad4c244 100644 --- a/storage/tokudb/CMakeLists.txt +++ b/storage/tokudb/CMakeLists.txt @@ -1,8 +1,12 @@ -SET(CPACK_RPM_tokudb-engine_PACKAGE_SUMMARY "TokuDB storage engine for MariaDB" PARENT_SCOPE) +SET(CPACK_RPM_tokudb-engine_PACKAGE_SUMMARY "TokuDB storage engine for MariaDB server" PARENT_SCOPE) SET(CPACK_RPM_tokudb-engine_PACKAGE_DESCRIPTION "The TokuDB storage engine is for use in high-performance and write-intensive environments, offering increased compression and better performance based on fractal indexes." PARENT_SCOPE) +IF(POLICY CMP0115) + CMAKE_POLICY(SET CMP0115 OLD) +ENDIF() + SET(TOKUDB_VERSION 5.6.49-89.0) # PerconaFT only supports x86-64 and cmake-2.8.9+ IF(WIN32) diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c index 74ac4fc1494..7089f095193 100644 --- a/strings/ctype-czech.c +++ b/strings/ctype-czech.c @@ -23,13 +23,13 @@ solution was needed than the one-to-one conversion table. To note a few, here is an example of a Czech sorting sequence: - co < hlaska < hláska < hlava < chlapec < krtek + co < hlaska < hlĂĄska < hlava < chlapec < krtek It because some of the rules are: double char 'ch' is sorted - between 'h' and 'i'. Accented character 'á' (a with acute) is + between 'h' and 'i'. Accented character 'ĂĄ' (a with acute) is sorted after 'a' and before 'b', but only if the word is otherwise the same. However, because 's' is sorted before 'v' - in hlava, the accentness of 'á' is overridden. There are many + in hlava, the accentness of 'ĂĄ' is overridden. There are many more rules. This file defines functions my_strxfrm and my_strcoll for @@ -42,8 +42,9 @@ passes, that's why we need four times more space for expanded string. - This file also contains the ISO-Latin-2 definitions of - characters. + The non-ASCII literal strings in this file are encoded + in the iso-8859-2 / latin-2 character set + (https://en.wikipedia.org/wiki/ISO/IEC_8859-2) Author: (c) 1997--1998 Jan Pazdziora, adelton@fi.muni.cz Jan Pazdziora has a shared copyright for this code @@ -111,7 +112,7 @@ static const struct wordvalue doubles[] = { }; /* - Unformal description of the algorithm: + Informal description of the algorithm: We walk the string left to right. @@ -126,7 +127,7 @@ static const struct wordvalue doubles[] = { End of pass is marked with value 1 on the output. - For each character, we read it's value from the table. + For each character, we read its value from the table. If the value is ignore (0), we go straight to the next character. @@ -138,31 +139,6 @@ static const struct wordvalue doubles[] = { exists behind it, find its value. We append 0 to the end. ---- - Neformální popis algoritmu: - - Procházíme řetězec zleva doprava. - - Konec řetězce je předán buď jako parametr, nebo je to *p == 0. - Toto je ošetřeno makrem IS_END. - - Pokud jsme došli na konec řetězce při průchodu 0, nejdeme na - začátek, ale na uloženou pozici, protože první a druhý průchod - běží současně. - - Konec vstupu (průchodu) označíme na výstupu hodnotou 1. - - Pro každý znak řetězce načteme hodnotu z třídící tabulky. - - Jde-li o hodnotu ignorovat (0), skočíme ihned na další znak.. - - Jde-li o hodnotu konec slova (2) a je to průchod 0 nebo 1, - přeskočíme všechny další 0 -- 2 a prohodíme průchody. - - Jde-li o kompozitní znak (255), otestujeme, zda následuje - správný do dvojice, dohledáme správnou hodnotu. - - Na konci připojíme znak 0 */ #define ADD_TO_RESULT(dest, len, totlen, value) \ @@ -335,24 +311,23 @@ my_strnxfrm_czech(CHARSET_INFO *cs __attribute__((unused)), /* - Neformální popis algoritmu: + Informal description of the algorithm: - procházíme řetězec zleva doprava - konec řetězce poznáme podle *p == 0 - pokud jsme došli na konec řetězce při průchodu 0, nejdeme na - začátek, ale na uloženou pozici, protože první a druhý - průchod běží současně - konec vstupu (průchodu) označíme na výstupu hodnotou 1 + we pass the chain from left to right + we know the end of the string by *p == 0 + if we reached the end of the string on transition 0, then we don't go to + start, but to the saved position, because the first and second + the passage runs concurrently + we mark the end of the input (transition) with the value 1 on the output - načteme hodnotu z třídící tabulky - jde-li o hodnotu ignorovat (0), skočíme na další průchod - jde-li o hodnotu konec slova (2) a je to průchod 0 nebo 1, - přeskočíme všechny další 0 -- 2 a prohodíme - průchody - jde-li o kompozitní znak (255), otestujeme, zda následuje - správný do dvojice, dohledáme správnou hodnotu + then we load the value from the sorting table + if the value is ignore (0), we jump to the next pass + if the value is the end of the word (2) and it is a 0 or 1 transition, + we skip all the other 0 -- 2 and switch transitions + if it is a composite character (255), we test whether it follows + correct to the pair, we find the correct value - na konci připojíme znak 0 + then we add the character 0 at the end */ diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c index eeb00d29592..d76a4928030 100644 --- a/strings/ctype-latin1.c +++ b/strings/ctype-latin1.c @@ -502,19 +502,19 @@ struct charset_info_st my_charset_latin1_nopad= * * The modern sort order is used, where: * - * 'ä' -> "ae" - * 'ö' -> "oe" - * 'ü' -> "ue" - * 'ß' -> "ss" + * 'ä' -> "ae" + * 'Ăś' -> "oe" + * 'Ăź' -> "ue" + * 'ß' -> "ss" */ /* * This is a simple latin1 mapping table, which maps all accented * characters to their non-accented equivalents. Note: in this - * table, 'ä' is mapped to 'A', '˙' is mapped to 'Y', etc. - all + * table, 'ä' is mapped to 'A', 'Ăż' is mapped to 'Y', etc. - all * accented characters except the following are treated the same way. - * Ü, ü, Ö, ö, Ä, ä + * Ü, Ăź, Ö, Ăś, Ä, ä */ static const uchar sort_order_latin1_de[] = { @@ -580,7 +580,7 @@ static const uchar combo2map[]={ my_strnxfrm_latin_de() on both strings and compared the result strings. This means that: - Ä must also matches ÁE and Ač, because my_strxn_frm_latin_de() will convert + Ä must also matches ÁE and Aè, because my_strxn_frm_latin_de() will convert both to AE. The other option would be to not do any accent removal in @@ -706,7 +706,7 @@ void my_hash_sort_latin1_de(CHARSET_INFO *cs __attribute__((unused)), /* Remove end space. We have to do this to be able to compare - 'AE' and 'Ä' as identical + 'AE' and 'Ä' as identical */ end= skip_trailing_space(key, len); diff --git a/strings/json_lib.c b/strings/json_lib.c index bb60df589c3..05d57ffee24 100644 --- a/strings/json_lib.c +++ b/strings/json_lib.c @@ -416,7 +416,7 @@ static int read_strn(json_engine_t *j) return 1; j->state= j->stack[j->stack_p]; - j->value_len= (int)(j->s.c_str - j->value) - 1; + j->value_len= (int)(j->s.c_str - j->value) - j->s.c_next_len; return 0; } diff --git a/tests/async_queries.c b/tests/async_queries.c index 3f4a16da1e6..8509b414f6e 100644 --- a/tests/async_queries.c +++ b/tests/async_queries.c @@ -371,7 +371,7 @@ main(int argc, char *argv[]) if (err) exit(err); if (tty_password) - opt_password= get_tty_password(NullS); + opt_password= my_get_tty_password(NullS); if (opt_query_file) { diff --git a/tests/code_quality/cppcheck_ignorelist.txt b/tests/code_quality/cppcheck_ignorelist.txt new file mode 100644 index 00000000000..268bf8108d4 --- /dev/null +++ b/tests/code_quality/cppcheck_ignorelist.txt @@ -0,0 +1,251 @@ +client/mysql.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +client/mysql_upgrade.c: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +client/mysqladmin.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +client/mysqlbinlog.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +client/mysqlcheck.c: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +client/mysqlimport.c: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +client/mysqlshow.c: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +client/mysqltest.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +dbug/tests.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +lexyy.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +mysql-test/lib/My/SafeProcess/safe_process_win.cc: error: Uninitialized variable: message_text +mysys/mf_keycache.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +mysys/my_delete.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +mysys/my_fopen.c: error: Return value of allocation function 'freopen' is not stored. +mysys/my_getsystime.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +mysys/my_pread.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +mysys/my_rename.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +mysys/my_winfile.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +mysys/my_write.c: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +mysys/thr_lock.c: error: There is an unknown macro here somewhere. Configuration is required. If MYSQL_TABLE_WAIT_VARIABLES is a macro then please configure it. +mysys/tree.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +pcre/pcrecpp.cc: warning: Uninitialized variable: kmat +pcre/pcrecpp.h: error: syntax error +pcre/pcregrep.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/audit_null/audit_null.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_ed25519/server_ed25519.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_examples/auth_0x0100.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_examples/dialog_examples.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_examples/qa_auth_interface.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_examples/qa_auth_server.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_examples/test_plugin.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_gssapi/server_plugin.cc: error: syntax error +plugin/auth_gssapi/sspi.h: error: #include nested too deeply +plugin/auth_pam/auth_pam.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_pam/auth_pam_v1.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_pipe/auth_pipe.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/auth_socket/auth_socket.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/aws_key_management/aws_key_management_plugin.cc: error: syntax error +plugin/cracklib_password_check/cracklib_password_check.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/daemon_example/daemon_example.cc: error: syntax error +plugin/debug_key_management/debug_key_management_plugin.cc: error: syntax error +plugin/disks/information_schema_disks.cc: error: syntax error +plugin/example_key_management/example_key_management_plugin.cc: error: syntax error +plugin/feedback/feedback.cc: error: syntax error +plugin/file_key_management/file_key_management_plugin.cc: error: syntax error +plugin/fulltext/plugin_example.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/handler_socket/handlersocket/handlersocket.cpp: error: syntax error +plugin/locale_info/locale_info.cc: error: syntax error +plugin/metadata_lock_info/metadata_lock_info.cc: error: syntax error +plugin/metadata_lock_info/metadata_lock_info.cc: error: syntax error +plugin/qc_info/qc_info.cc: error: syntax error +plugin/query_response_time/plugin.cc: error: syntax error +plugin/query_response_time/query_response_time.cc: error: Array 'm_count[41]' accessed at index 43, which is out of bounds. +plugin/query_response_time/query_response_time.cc: error: Array 'm_total[41]' accessed at index 43, which is out of bounds. +plugin/server_audit/server_audit.c: error: Uninitialized variable: &tm_time +plugin/server_audit/server_audit.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/server_audit/server_audit.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/server_audit/server_audit.c: error: Uninitialized variable: &tm_time +plugin/simple_password_check/simple_password_check.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/sql_errlog/sql_errlog.c: error: Found a exit path from function with non-void return type that has missing return statement +plugin/sql_errlog/sql_errlog.c: error: Uninitialized variable: &t +plugin/user_variables/user_variables.cc: error: syntax error +plugin/userstat/userstat.cc: error: syntax error +plugin/versioning/versioning.cc: error: syntax error +plugin/wsrep_info/plugin.cc: error: syntax error +sql-common/client.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +sql-common/client_plugin.c: error: va_list 'unused' used before va_start() was called. +sql-common/client_plugin.c: error: va_list 'unused' used before va_start() was called. +sql-common/client_plugin.c: error: va_list 'unused' used before va_start() was called. +sql-common/client_plugin.c: error: va_list 'unused' used before va_start() was called. +sql/debug_sync.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE is a macro then please configure it. +sql/gcalc_slicescan.cc: warning: Possible null pointer dereference: first_bottom_point +sql/gen_lex_hash.cc: error: Common realloc mistake: 'hash_map' nulled but not freed upon failure +sql/handler.h: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +sql/log.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +sql/log_event.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +sql/log_event_old.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +sql/net_serv.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +sql/protocol.h: error: syntax error +sql/rpl_utility.h: error: There is an unknown macro here somewhere. Configuration is required. If CPP_UNNAMED_NS_START is a macro then please configure it. +sql/semisync_slave.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +sql/sql_select.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +sql/sql_string.cc: warning: Iterators to containers from different expressions 'to' and 'from' are used together. +sql/table.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +sql/winservice.c: error: Resource leak: mysql_upgrade_info +sql/wsrep_thd.h: error: failed to expand 'wsrep_create_appliers', Wrong number of parameters for macro 'wsrep_create_appliers'. +storage/archive/azio.c: error: Syntax Error: AST broken, 'if' doesn't have two operands. +storage/archive/ha_archive.cc: error: syntax error +storage/blackhole/ha_blackhole.cc: error: syntax error +storage/cassandra/gen-cpp/Cassandra_server.skeleton.cpp: error: Found a exit path from function with non-void return type that has missing return statement +storage/cassandra/ha_cassandra.cc: error: syntax error +storage/connect/connect.cc: error: Uninitialized variable: lg +storage/connect/domdoc.cpp: error: syntax error +storage/connect/ha_connect.cc: error: syntax error +storage/connect/myconn.cpp: error: Unmatched '{'. Configuration: 'ALPHA;MYSQL_PREPARED_STATEMENTS'. +storage/connect/myconn.cpp: error: Unmatched '{'. Configuration: 'MYSQL_PREPARED_STATEMENTS'. +storage/connect/odbconn.cpp: warning: Uninitialized variable: b +storage/connect/odbconn.cpp: warning: Uninitialized variable: b +storage/connect/odbconn.cpp: warning: Uninitialized variable: b +storage/connect/plugutil.cpp: error: Width 255 given in format string (no. 2) is larger than destination buffer 'stmsg[200]', use %199[^\"] to prevent overflowing it. +storage/connect/plugutil.cpp: error: Width 255 given in format string (no. 1) is larger than destination buffer 'stmsg[200]', use %199[^\"] to prevent overflowing it. +storage/connect/tabjson.cpp: warning: Possible null pointer dereference: Val +storage/connect/tabmul.cpp: error: Uninitialized variable: buf +storage/connect/tabmul.cpp: error: Uninitialized variable: buf +storage/connect/tabmul.cpp: error: Uninitialized variable: buf +storage/connect/taboccur.cpp: warning: Uninitialized variable: *pcrp +storage/connect/unzip.c: warning: Uninitialized variable: *pzlib_filefunc64_32_def.zopen32_file +storage/connect/value.cpp: error: Signed integer overflow for expression 'n*126230400'. +storage/connect/zip.c: warning: Uninitialized variable: *pzlib_filefunc64_32_def.zopen32_file +storage/csv/ha_tina.cc: error: syntax error +storage/example/ha_example.cc: error: syntax error +storage/federated/ha_federated.cc: error: syntax error +storage/heap/ha_heap.cc: error: syntax error +storage/innobase/btr/btr0btr.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/btr/btr0cur.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/btr/btr0defragment.cc: error: There is an unknown macro here somewhere. Configuration is required. If DECLARE_THREAD is a macro then please configure it. +storage/innobase/btr/btr0sea.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/buf/buf0buf.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/buf/buf0dump.cc: error: There is an unknown macro here somewhere. Configuration is required. If DECLARE_THREAD is a macro then please configure it. +storage/innobase/buf/buf0flu.cc: error: There is an unknown macro here somewhere. Configuration is required. If DECLARE_THREAD is a macro then please configure it. +storage/innobase/buf/buf0lru.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/dict/dict0crea.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/dict/dict0dict.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/dict/dict0load.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/dict/dict0stats.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/dict/dict0stats_bg.cc: error: There is an unknown macro here somewhere. Configuration is required. If DECLARE_THREAD is a macro then please configure it. +storage/innobase/fil/fil0crypt.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/fil/fil0fil.cc: error: syntax error +storage/innobase/fsp/fsp0file.cc: error: Resource leak: file +storage/innobase/fsp/fsp0fsp.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/fts/fts0fts.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/fts/fts0opt.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/fts/fts0que.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/gis/gis0rtree.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/gis/gis0sea.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/handler/ha_innodb.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/handler/handler0alter.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/handler/i_s.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/ibuf/ibuf0ibuf.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/ibuf/ibuf0ibuf.cc: error: failed to expand 'ibuf_bitmap_page_get_bits', Wrong number of parameters for macro 'ibuf_bitmap_page_get_bits'. +storage/innobase/lock/lock0lock.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/lock/lock0wait.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/lock/lock0wait.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/log/log0log.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/log/log0recv.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/os/os0file.cc: error: syntax error +storage/innobase/page/page0page.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/page/page0zip.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/pars/pars0pars.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/row/row0ftsort.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/row/row0import.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/row/row0ins.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/row/row0log.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/row/row0merge.cc: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/innobase/row/row0mysql.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/row/row0quiesce.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/row/row0sel.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/row/row0umod.cc: error: There is an unknown macro here somewhere. Configuration is required. If ut_d is a macro then please configure it. +storage/innobase/row/row0upd.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/row/row0vers.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/srv/srv0conc.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ALIGNED is a macro then please configure it. +storage/innobase/srv/srv0srv.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/srv/srv0start.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ATTRIBUTE is a macro then please configure it. +storage/innobase/trx/trx0i_s.cc: error: Array 'table_cache->chunks[39]' accessed at index 39, which is out of bounds. +storage/innobase/trx/trx0i_s.cc: error: Array 'table_cache->chunks[39]' accessed at index 39, which is out of bounds. +storage/innobase/trx/trx0purge.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/trx/trx0rec.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/trx/trx0roll.cc: error: There is an unknown macro here somewhere. Configuration is required. If DECLARE_THREAD is a macro then please configure it. +storage/innobase/trx/trx0trx.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/innobase/trx/trx0undo.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ha_maria.cc: error: syntax error +storage/maria/ma_bitmap.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_blockrec.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_check.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_checkpoint.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_delete.c: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/maria/ma_delete.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_ft_parser.c: error: Address of local auto-variable assigned to a function parameter. +storage/maria/ma_key.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_loghandler.c: warning: Uninitialized variable: data->current_offset +storage/maria/ma_open.c: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/maria/ma_pagecache.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_pagecache.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_range.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_recovery_util.c: error: va_start() or va_copy() called subsequently on 'args' without va_end() in between. +storage/maria/ma_rkey.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_rt_index.c: error: failed to expand 'rt_PAGE_END', Wrong number of parameters for macro 'rt_PAGE_END'. +storage/maria/ma_search.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_sp_key.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_update.c: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/maria/ma_update.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/ma_write.c: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/maria/ma_write.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/maria/maria_pack.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/ft_parser.c: error: Address of local auto-variable assigned to a function parameter. +storage/myisam/ha_myisam.cc: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_check.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_close.c: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/myisam/mi_delete.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_key.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_locking.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_open.c: error: There is an unknown macro here somewhere. Configuration is required. If DBUG_EXECUTE_IF is a macro then please configure it. +storage/myisam/mi_range.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_rkey.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_search.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_update.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/mi_write.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisam/myisampack.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +storage/myisammrg/ha_myisammrg.cc: error: syntax error +storage/oqgraph/ha_oqgraph.cc: error: syntax error +storage/perfschema/ha_perfschema.cc: error: syntax error +storage/perfschema/pfs_instr.h: error: Uninitialized variable: m_has_io_stats +storage/perfschema/pfs_instr.h: error: Uninitialized variable: m_has_lock_stats +storage/perfschema/pfs_instr_class.cc: error: There is an unknown macro here somewhere. Configuration is required. If MY_ALIGNED is a macro then please configure it. +storage/perfschema/table_accounts.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_esgs_by_account_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_esgs_by_host_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_esgs_by_user_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_esms_by_account_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_esms_by_host_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_esms_by_user_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_events_waits.cc: error: Uninitialized struct member: wait.m_wait_class +storage/perfschema/table_events_waits.cc: error: Uninitialized variable: wait +storage/perfschema/table_events_waits.cc: error: Uninitialized struct member: wait.m_wait_class +storage/perfschema/table_ews_by_account_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_ews_by_host_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_ews_by_user_by_event_name.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_hosts.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_setup_actors.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_threads.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/perfschema/table_users.cc: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +storage/sequence/sequence.cc: error: syntax error +storage/test_sql_discovery/test_sql_discovery.cc: error: syntax error +strings/decimal.c: warning: Possible null pointer dereference: to +strings/dump_map.c: error: Array 'fromstat[256]' accessed at index 256, which is out of bounds. +tests/mysql_client_fw.c: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +tests/thread_test.c: error: There is an unknown macro here somewhere. Configuration is required. If STRINGIFY_ARG is a macro then please configure it. +unittest/mysys/dynstring-t.c: error: syntax error +unittest/mysys/queues-t.c: error: Uninitialized variable: i +unittest/mysys/waiting_threads-t.c: error: Uninitialized variable: m +unittest/mytap/tap.c: error: va_list 'ap' used before va_start() was called. +unittest/mytap/tap.c: error: va_list 'ap' used before va_start() was called. +unittest/mytap/tap.c: error: va_list 'ap' used before va_start() was called. +unittest/mytap/tap.c: error: va_list 'ap' used before va_start() was called. +vio/viosocket.c: error: There is an unknown macro here somewhere. Configuration is required. If MYSQL_SOCKET_WAIT_VARIABLES is a macro then please configure it. +vio/viosocket.c: error: There is an unknown macro here somewhere. Configuration is required. If MYSQL_SOCKET_WAIT_VARIABLES is a macro then please configure it. +vio/viosslfactories.c: error: There is an unknown macro here somewhere. Configuration is required. If ; is a macro then please configure it. +vio/viotest-sslconnect.cc: error: Memory pointed to by 'vio' is freed twice. +vio/viotest-sslconnect.cc: error: Memory pointed to by 'ssl_connector' is freed twice. +wsrep-lib/src/server_state.cpp: error: syntax error: keyword 'try' is not allowed in global scope +wsrep-lib/src/thread_service_v1.cpp: error: Rethrowing current exception with 'throw;', it seems there is no current exception to rethrow. If there is no current exception this calls std::terminate(). More: https://isocpp.org/wiki/faq/exceptions#throw-without-an-object diff --git a/tests/code_quality/flawfinder_ignorelist.json b/tests/code_quality/flawfinder_ignorelist.json new file mode 100644 index 00000000000..7b598689693 --- /dev/null +++ b/tests/code_quality/flawfinder_ignorelist.json @@ -0,0 +1,622 @@ +{ + "$schema": "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json", + "version": "2.1.0", + "runs": [ + { + "tool": { + "driver": { + "name": "Flawfinder", + "version": "2.0.19", + "informationUri": "https://dwheeler.com/flawfinder/", + "supportedTaxonomies": [ + { + "name": "CWE", + "guid": "FFC64C90-42B6-44CE-8BEB-F6B7DAE649E5" + } + ] + } + }, + "columnKind": "utf16CodeUnits", + "results": [ + { + "ruleId": "FF1010", + "level": "error", + "message": { + "text": "buffer/strncat:Easily used incorrectly (e.g., incorrectly computing the correct maximum size to add) [MS-banned] (CWE-120)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/portability/file.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 5, + "endColumn": 39, + "snippet": { + "text": " strncat(buf, path, TOKU_PATH_MAX);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "02af921b7054342955d8e30b196aa5ffdc3b1ac019e26c92823a7ab171d2b1fa" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/ft/logger/logformat.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 5, + "endColumn": 40, + "snippet": { + "text": " chmod(headerpath, S_IRUSR|S_IWUSR);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "085f579f942967e5c81fff75af832721b7b9bc59e54a7a9ebc086065cf56be13" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1035", + "level": "error", + "message": { + "text": "race/readlink:This accepts filename arguments; if an attacker can move those files or change the link content, a race condition results. Also, it does not terminate with ASCII NUL. (CWE-362, CWE-20)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/portability/file.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 25, + "endColumn": 63, + "snippet": { + "text": " ssize_t s = readlink(fdname, lname, sizeof lname);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "0dba1d2cdc995ccf30ad8fe5ce3ccf8795bd4f5a207f65c627affa2ef388496c" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1035", + "level": "error", + "message": { + "text": "race/readlink:This accepts filename arguments; if an attacker can move those files or change the link content, a race condition results. Also, it does not terminate with ASCII NUL. (CWE-362, CWE-20)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./extra/mariabackup/xtrabackup.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 17, + "endColumn": 57, + "snippet": { + "text": " ssize_t ret = readlink(\"/proc/self/exe\", buf, size-1);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "11523490c7f8cba115bce125bbce94de5cd5e7f66d4dd07a391aac70fbbdd353" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./client/mysqltest.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 13, + "endColumn": 38, + "snippet": { + "text": " err_code= chmod(ds_file.str, mode);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "12a7fa6bbd4c81be975838bae2b7b26fe841acaf9804e6d0299188683e230908" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/ft/logger/logformat.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 5, + "endColumn": 38, + "snippet": { + "text": " chmod(codepath, S_IRUSR|S_IWUSR);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "2827dedcdf10af2bf4105f3d48e30575238fa2552603cdcb09d536b288808f0e" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1014", + "level": "error", + "message": { + "text": "buffer/gets:Does not check for buffer overflows (CWE-120, CWE-20)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./extra/readline/tilde.c", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 12, + "endColumn": 24, + "snippet": { + "text": " if (!gets (line))" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "34a940ccc6e0248a2cf725e8a0c3f808d1f36d47fc814bd9daadb17f5563d357" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./sql/sql_class.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 10, + "endColumn": 28, + "snippet": { + "text": " (void) chmod(path, 0644);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "3f97fd0452062ab69db87a04222a17c37c216c4e28e2ae3622730da8dd070d2e" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./mysys/my_chmod.c", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 7, + "endColumn": 25, + "snippet": { + "text": " if (chmod(name, mode))" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "46805eec1d288b072d4edb3214822220d394307195be79a33ec3bce455d14750" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1010", + "level": "error", + "message": { + "text": "buffer/strncat:Easily used incorrectly (e.g., incorrectly computing the correct maximum size to add) [MS-banned] (CWE-120)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/ft/tests/recovery-datadir-is-file.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 9, + "endColumn": 47, + "snippet": { + "text": " strncat(buf, testfile, TOKU_PATH_MAX);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "4ca2dff1e35445f7997a9979cdd006d89befcc89922cf5d4a60bc9c07126a78d" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1035", + "level": "error", + "message": { + "text": "race/readlink:This accepts filename arguments; if an attacker can move those files or change the link content, a race condition results. Also, it does not terminate with ASCII NUL. (CWE-362, CWE-20)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./mysys/my_symlink.c", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 15, + "endColumn": 56, + "snippet": { + "text": " if ((length=readlink(filename, to, FN_REFLEN-1)) < 0)" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "7da5207ac0f5baba73c026472a2d3805eed92931852575db64f513702977dd70" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1031", + "level": "error", + "message": { + "text": "race/chown:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./mysys/my_redel.c", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 7, + "endColumn": 49, + "snippet": { + "text": " if (chown(to, statbuf.st_uid, statbuf.st_gid))" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "97d2cfe4cb9428e812b796eb39c27f28dc8b198ab9655c2aff8c442de39bdcfe" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/ft/logger/logformat.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 9, + "endColumn": 50, + "snippet": { + "text": " chmod(codepath, S_IRUSR|S_IRGRP|S_IROTH);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "a62b28fca5c6218ee4731e78bb3eacb93604fae20c91c69cccad3834973e70d5" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1035", + "level": "error", + "message": { + "text": "race/readlink:This accepts filename arguments; if an attacker can move those files or change the link content, a race condition results. Also, it does not terminate with ASCII NUL. (CWE-362, CWE-20)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/rocksdb/rocksdb/port/stack_trace.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 15, + "endColumn": 54, + "snippet": { + "text": " auto read = readlink(link, name, sizeof(name) - 1);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "acb399f2a4a15ef8da36c47631bc4ee4bcc1bb0577dfbda141d2eb5d7723af40" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1035", + "level": "error", + "message": { + "text": "race/readlink:This accepts filename arguments; if an attacker can move those files or change the link content, a race condition results. Also, it does not terminate with ASCII NUL. (CWE-362, CWE-20)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./sql/signal_handler.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 13, + "endColumn": 66, + "snippet": { + "text": " if ((len= readlink(\"/proc/self/cwd\", buff, sizeof(buff))) >= 0)" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "b55a5f3db29b1ce25e12f94e4ea344ed7fb0e63a230cf6b6deb42c28de924457" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./mysys/my_copy.c", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 9, + "endColumn": 46, + "snippet": { + "text": " if (chmod(to, stat_buff.st_mode & 07777))" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "bddb795a7efbd73a4387bbd33fd4f9e505b4f759d784e5d51f60cc43011ee610" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1031", + "level": "error", + "message": { + "text": "race/chown:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./mysys/my_copy.c", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 9, + "endColumn": 55, + "snippet": { + "text": " if (chown(to, stat_buff.st_uid, stat_buff.st_gid))" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "c63a81105d753de4762cbcab48d9700f7069da3cd9d57bf4329a6d20fad288aa" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/ft/logger/logformat.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 9, + "endColumn": 52, + "snippet": { + "text": " chmod(headerpath, S_IRUSR|S_IRGRP|S_IROTH);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "cc51b21d9b803a08b6c619b63abf77f4ca9ce247db0ef1b81f4bd83dfb95f3d8" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./sql/mysqld.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 12, + "endColumn": 71, + "snippet": { + "text": " (void) chmod(mysqld_unix_port,S_IFSOCK);\t/* Fix solaris 2.6 bug */" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "d0c4f1302290e2367e246ef7c8d3ea69589cbc4bc148e0efdd4c283fa03cbe01" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1033", + "level": "error", + "message": { + "text": "race/chmod:This accepts filename arguments; if an attacker can move those files, a race condition results. (CWE-362)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./mysys/my_redel.c", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 7, + "endColumn": 42, + "snippet": { + "text": " if (chmod(to, statbuf.st_mode & 07777))" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "e11b8df9cbb9e459e4d67a0af5e627b6b1285c78fe23f5a1c823285da96495a8" + }, + "rank": 1.0 + }, + { + "ruleId": "FF1035", + "level": "error", + "message": { + "text": "race/readlink:This accepts filename arguments; if an attacker can move those files or change the link content, a race condition results. Also, it does not terminate with ASCII NUL. (CWE-362, CWE-20)." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "./storage/tokudb/PerconaFT/portability/file.cc", + "uriBaseId": "SRCROOT" + }, + "region": { + "startColumn": 29, + "endColumn": 67, + "snippet": { + "text": " ssize_t n = readlink(fname, symname, MY_MAX_PATH);" + } + } + } + } + ], + "fingerprints": { + "contextHash/v1": "e307b1923cc852324e3050b3e4423be7ac4d1d64af274b70b897a85b1cde815f" + }, + "rank": 1.0 + } + ], + "externalPropertyFileReferences": { + "taxonomies": [ + { + "location": { + "uri": "https://raw.githubusercontent.com/sarif-standard/taxonomies/main/CWE_v4.4.sarif" + }, + "guid": "FFC64C90-42B6-44CE-8BEB-F6B7DAE649E5" + } + ] + } + } + ] +} diff --git a/tests/mysql_client_fw.c b/tests/mysql_client_fw.c index 9e9788258a7..9b9b919b4e9 100644 --- a/tests/mysql_client_fw.c +++ b/tests/mysql_client_fw.c @@ -1367,7 +1367,7 @@ static void get_options(int *argc, char ***argv) exit(ho_error); if (tty_password) - opt_password= get_tty_password(NullS); + opt_password= my_get_tty_password(NullS); return; } diff --git a/tests/thread_test.c b/tests/thread_test.c index 0fa92d505a3..d0c33b47b9c 100644 --- a/tests/thread_test.c +++ b/tests/thread_test.c @@ -174,7 +174,7 @@ static void get_options(int argc, char **argv) free_defaults(argv); if (tty_password) - password=get_tty_password(NullS); + password=my_get_tty_password(NullS); return; } diff --git a/wsrep-lib b/wsrep-lib index e238c0d240c..7dafce8403d 160000 --- a/wsrep-lib +++ b/wsrep-lib @@ -1 +1 @@ -Subproject commit e238c0d240c2557229b0523a4a032f3cf8b41639 +Subproject commit 7dafce8403d4088ddc8748f2e08eae13b1f225b6