summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-02-07 08:51:20 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2020-02-07 08:51:20 +0200
commit8b6cfda631253c805687d94f2f1aaa17fd2ef0e2 (patch)
tree9460953eeb7967bc56383bccc8c7af2adf81a694
parent8b97eba31ba3b8af6a93b4836b14d52e1c377900 (diff)
parentc1eaa385ffb44bdf6264d2cc4b4cc0e10284c88a (diff)
downloadmariadb-git-8b6cfda631253c805687d94f2f1aaa17fd2ef0e2.tar.gz
Merge 10.4 into 10.5
-rw-r--r--include/maria.h1
-rw-r--r--include/my_cpu.h9
-rw-r--r--include/myisam.h1
-rw-r--r--mysql-test/lib/My/SafeProcess/wsrep_check_version.c21
-rw-r--r--mysql-test/main/long_unique_bugs.result5
-rw-r--r--mysql-test/main/long_unique_bugs.test23
-rw-r--r--mysql-test/main/parser.result10
-rw-r--r--mysql-test/main/parser.test10
-rw-r--r--mysql-test/suite/innodb/r/instant_alter_bugs.result9
-rw-r--r--mysql-test/suite/innodb/r/instant_alter_debug.result24
-rw-r--r--mysql-test/suite/innodb/t/instant_alter_bugs.test10
-rw-r--r--mysql-test/suite/innodb/t/instant_alter_debug.test26
-rw-r--r--mysql-test/suite/versioning/r/sysvars.result16
-rw-r--r--mysql-test/suite/versioning/t/sysvars.test16
-rw-r--r--mysql-test/suite/wsrep/r/MDEV-20625.result5
-rw-r--r--mysql-test/suite/wsrep/t/MDEV-20625.cnf8
-rw-r--r--mysql-test/suite/wsrep/t/MDEV-20625.test10
-rw-r--r--mysys/my_cpu.c3
-rw-r--r--plugin/auth_pam/auth_pam_tool.c6
-rw-r--r--plugin/auth_pam/testing/pam_mariadb_mtr.c8
-rw-r--r--sql/sql_class.cc2
-rw-r--r--sql/sql_yacc.yy6
-rw-r--r--sql/sys_vars.ic9
-rw-r--r--sql/wsrep_var.cc121
-rw-r--r--storage/connect/colblk.cpp3
-rw-r--r--storage/connect/connect.cc3
-rw-r--r--storage/connect/filamap.cpp3
-rw-r--r--storage/connect/filamdbf.cpp4
-rw-r--r--storage/connect/filamgz.cpp1
-rw-r--r--storage/connect/filamvct.cpp4
-rw-r--r--storage/connect/filamzip.cpp3
-rw-r--r--storage/connect/filter.cpp2
-rw-r--r--storage/connect/fmdlex.c8
-rw-r--r--storage/connect/json.cpp2
-rw-r--r--storage/connect/jsonudf.cpp17
-rw-r--r--storage/connect/libdoc.cpp66
-rw-r--r--storage/connect/myutil.cpp4
-rw-r--r--storage/connect/plugutil.cpp38
-rw-r--r--storage/connect/reldef.cpp4
-rw-r--r--storage/connect/tabdos.cpp4
-rw-r--r--storage/connect/tabfmt.cpp3
-rw-r--r--storage/connect/tabjson.cpp6
-rw-r--r--storage/connect/taboccur.cpp5
-rw-r--r--storage/connect/tabpivot.cpp6
-rw-r--r--storage/connect/tabvir.cpp19
-rw-r--r--storage/connect/tabxml.cpp30
-rw-r--r--storage/connect/xindex.cpp6
-rw-r--r--storage/connect/zip.c3
-rw-r--r--storage/innobase/handler/handler0alter.cc5
-rw-r--r--storage/innobase/include/ib0mutex.h3
-rw-r--r--storage/innobase/include/ut0rnd.h9
-rw-r--r--storage/innobase/row/row0log.cc15
-rw-r--r--storage/innobase/row/row0umod.cc15
-rw-r--r--storage/innobase/ut/ut0rnd.cc4
-rw-r--r--storage/maria/ha_maria.cc32
-rw-r--r--storage/maria/ma_check.c34
-rw-r--r--storage/mroonga/vendor/groonga/lib/ii.c48
-rw-r--r--storage/myisam/ha_myisam.cc30
-rw-r--r--storage/myisam/mi_check.c34
-rw-r--r--storage/myisam/myisamdef.h2
-rw-r--r--storage/myisam/myisamlog.c3
-rw-r--r--storage/rocksdb/rdb_datadic.cc3
-rw-r--r--strings/ctype-bin.c2
-rw-r--r--strings/ctype-simple.c4
-rw-r--r--strings/json_lib.c10
-rw-r--r--strings/strcoll.ic4
-rw-r--r--unittest/mysys/byte_order-t.c2
-rw-r--r--zlib/infback.c1
-rw-r--r--zlib/inflate.c18
69 files changed, 587 insertions, 294 deletions
diff --git a/include/maria.h b/include/maria.h
index 5ff76391270..2c711b0d31d 100644
--- a/include/maria.h
+++ b/include/maria.h
@@ -400,6 +400,7 @@ int maria_preload(MARIA_HA *info, ulonglong key_map, my_bool ignore_leaves);
void maria_versioning(MARIA_HA *info, my_bool versioning);
void maria_ignore_trids(MARIA_HA *info);
uint maria_max_key_length(void);
+my_bool maria_too_big_key_for_sort(MARIA_KEYDEF *key, ha_rows rows);
#define maria_max_key_segments() HA_MAX_KEY_SEG
/* fulltext functions */
diff --git a/include/my_cpu.h b/include/my_cpu.h
index 0e37eafe60e..b7d7008a8e3 100644
--- a/include/my_cpu.h
+++ b/include/my_cpu.h
@@ -1,6 +1,6 @@
#ifndef MY_CPU_INCLUDED
#define MY_CPU_INCLUDED
-/* Copyright (c) 2013, MariaDB foundation Ab and SkySQL
+/* Copyright (c) 2013, 2020, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -50,6 +50,13 @@
# define HAVE_PAUSE_INSTRUCTION /* added in Intel Pentium 4 */
#endif
+#ifdef _WIN32
+#elif defined HAVE_PAUSE_INSTRUCTION
+#elif defined(_ARCH_PWR8)
+#else
+# include "my_atomic.h"
+#endif
+
static inline void MY_RELAX_CPU(void)
{
#ifdef _WIN32
diff --git a/include/myisam.h b/include/myisam.h
index d283712a1e0..dfd5676a4d8 100644
--- a/include/myisam.h
+++ b/include/myisam.h
@@ -432,6 +432,7 @@ int sort_ft_buf_flush(MI_SORT_PARAM *sort_param);
int thr_write_keys(MI_SORT_PARAM *sort_param);
int sort_write_record(MI_SORT_PARAM *sort_param);
int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages, ulonglong);
+my_bool mi_too_big_key_for_sort(MI_KEYDEF *key, ha_rows rows);
#ifdef __cplusplus
}
diff --git a/mysql-test/lib/My/SafeProcess/wsrep_check_version.c b/mysql-test/lib/My/SafeProcess/wsrep_check_version.c
index 616548d4f2d..91098be882a 100644
--- a/mysql-test/lib/My/SafeProcess/wsrep_check_version.c
+++ b/mysql-test/lib/My/SafeProcess/wsrep_check_version.c
@@ -1,5 +1,4 @@
-/* Copyright (c) 2009, 2019, MariaDB
-
+/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
@@ -86,12 +85,24 @@ int main(int argc, char **argv)
int rc = EINVAL;
void *dlh;
wsrep_loader_fun dlfun;
+ const char *provider= getenv("WSREP_PROVIDER");
- if (!(dlh = dlopen(getenv("WSREP_PROVIDER"), RTLD_NOW | RTLD_LOCAL))) {
- goto err;
+ if (!provider)
+ {
+ fprintf(stderr, "WSREP_PROVIDER is not set\n");
+ return 1;
+ }
+ if (!(dlh = dlopen(provider, RTLD_NOW | RTLD_LOCAL)))
+ {
+ fprintf(stderr, "Can't open WSREP_PROVIDER (%s) library, error: %s\n",
+ provider, dlerror());
+ goto err;
}
- if (!(dlfun = wsrep_dlf(dlh, "wsrep_loader"))) {
+ if (!(dlfun = wsrep_dlf(dlh, "wsrep_loader")))
+ {
+ fprintf(stderr, "Can't find 'wsrep_loader' symbol in %s\n",
+ provider);
goto err;
}
diff --git a/mysql-test/main/long_unique_bugs.result b/mysql-test/main/long_unique_bugs.result
index 33496c4e20d..9aca32c24eb 100644
--- a/mysql-test/main/long_unique_bugs.result
+++ b/mysql-test/main/long_unique_bugs.result
@@ -265,3 +265,8 @@ ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
disconnect con1;
connection default;
DROP TABLE t1, t2;
+CREATE TABLE t1 (a TEXT, UNIQUE(a)) ENGINE=Aria;
+ERROR 42000: Specified key was too long; max key length is 2000 bytes
+create table t1(a int, unique(a) using hash);
+#BULK insert > 100 rows (MI_MIN_ROWS_TO_DISABLE_INDEXES)
+drop table t1;
diff --git a/mysql-test/main/long_unique_bugs.test b/mysql-test/main/long_unique_bugs.test
index dc78f6c7067..13a4e1367a0 100644
--- a/mysql-test/main/long_unique_bugs.test
+++ b/mysql-test/main/long_unique_bugs.test
@@ -317,3 +317,26 @@ INSERT IGNORE INTO t1 VALUES (4, 1)/*4*/;
--disconnect con1
--connection default
DROP TABLE t1, t2;
+
+#
+# MDEV-18791 Wrong error upon creating Aria table with long index on BLOB
+#
+--error ER_TOO_LONG_KEY
+CREATE TABLE t1 (a TEXT, UNIQUE(a)) ENGINE=Aria;
+
+#
+# MDEV-20001 Potential dangerous regression: INSERT INTO >=100 rows fail for myisam table with HASH indexes
+#
+create table t1(a int, unique(a) using hash);
+--let $count=150
+--let insert_stmt= insert into t1 values(200)
+while ($count)
+{
+ --let $insert_stmt=$insert_stmt,($count)
+ --dec $count
+}
+--disable_query_log
+--echo #BULK insert > 100 rows (MI_MIN_ROWS_TO_DISABLE_INDEXES)
+--eval $insert_stmt
+--enable_query_log
+drop table t1;
diff --git a/mysql-test/main/parser.result b/mysql-test/main/parser.result
index fa40ffa6942..6c895f0b184 100644
--- a/mysql-test/main/parser.result
+++ b/mysql-test/main/parser.result
@@ -1797,6 +1797,16 @@ select * from t2;
ERROR HY000: Table 't2' was not locked with LOCK TABLES
SET STATEMENT max_statement_time=900 FOR unlock tables;
drop table t1, t2;
+#
+# MDEV-21616: Server crash when using
+# "SET STATEMENT max_statement_time=0 FOR desc xxx" lead to collapse
+#
+create table t1 (a int);
+SET STATEMENT max_statement_time=0 FOR desc t1;
+Field Type Null Key Default Extra
+a int(11) YES NULL
+drop table t1;
+SET STATEMENT max_statement_time=0 FOR do 1;
# End of 10.4 tests
#
# Start of 10.5 tests
diff --git a/mysql-test/main/parser.test b/mysql-test/main/parser.test
index 006f409e6b7..7fe870722a2 100644
--- a/mysql-test/main/parser.test
+++ b/mysql-test/main/parser.test
@@ -1565,6 +1565,16 @@ select * from t2;
SET STATEMENT max_statement_time=900 FOR unlock tables;
drop table t1, t2;
+--echo #
+--echo # MDEV-21616: Server crash when using
+--echo # "SET STATEMENT max_statement_time=0 FOR desc xxx" lead to collapse
+--echo #
+
+create table t1 (a int);
+SET STATEMENT max_statement_time=0 FOR desc t1;
+drop table t1;
+SET STATEMENT max_statement_time=0 FOR do 1;
+
--echo # End of 10.4 tests
diff --git a/mysql-test/suite/innodb/r/instant_alter_bugs.result b/mysql-test/suite/innodb/r/instant_alter_bugs.result
index 4512542f612..53f2d4f1c60 100644
--- a/mysql-test/suite/innodb/r/instant_alter_bugs.result
+++ b/mysql-test/suite/innodb/r/instant_alter_bugs.result
@@ -358,4 +358,13 @@ t1 CREATE TABLE `t1` (
`a` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin2 ROW_FORMAT=REDUNDANT
DROP TABLE t1;
+#
+# MDEV-21645 SIGSEGV in innobase_get_computed_value
+#
+CREATE TABLE t1 (a INT PRIMARY KEY, b INT, va INTEGER GENERATED ALWAYS AS (a))
+ENGINE=InnoDB;
+INSERT INTO t1 SET a=1, b=NULL;
+ALTER TABLE t1 MODIFY COLUMN b INT FIRST;
+ALTER TABLE t1 ADD UNIQUE INDEX (va);
+DROP TABLE t1;
SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency;
diff --git a/mysql-test/suite/innodb/r/instant_alter_debug.result b/mysql-test/suite/innodb/r/instant_alter_debug.result
index 72c9a85e369..9fcb8b05a34 100644
--- a/mysql-test/suite/innodb/r/instant_alter_debug.result
+++ b/mysql-test/suite/innodb/r/instant_alter_debug.result
@@ -343,6 +343,30 @@ UPDATE t1 SET b = 1;
SET DEBUG_SYNC='now SIGNAL update';
connection con2;
connection default;
+DROP TABLE t1;
+#
+# MDEV-21658 Error on online ADD PRIMARY KEY after instant DROP/reorder
+#
+CREATE TABLE t1 (a INT, b INT, c INT, col INT) ENGINE=InnoDB;
+INSERT INTO t1 () VALUES ();
+ALTER TABLE t1 DROP b, DROP c, DROP col;
+ALTER TABLE t1 ADD COLUMN col INT;
+ALTER TABLE t1 DROP a, DROP col, ADD COLUMN b INT;
+connection con2;
+SET SQL_MODE= '';
+SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR dml';
+ALTER TABLE t1 ADD PRIMARY KEY(b);
+connection default;
+SET DEBUG_SYNC = 'now WAIT_FOR scanned';
+UPDATE t1 SET b = 1;
+SET DEBUG_SYNC = 'now SIGNAL dml';
+connection con2;
+Warnings:
+Warning 1265 Data truncated for column 'b' at row 1
+connection default;
+SELECT * FROM t1;
+b
+1
SET DEBUG_SYNC='RESET';
disconnect con2;
DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/t/instant_alter_bugs.test b/mysql-test/suite/innodb/t/instant_alter_bugs.test
index 0a1de256b6a..d76a586cfa1 100644
--- a/mysql-test/suite/innodb/t/instant_alter_bugs.test
+++ b/mysql-test/suite/innodb/t/instant_alter_bugs.test
@@ -374,4 +374,14 @@ ALTER TABLE t1 MODIFY a CHAR, ALGORITHM=INSTANT;
SHOW CREATE TABLE t1;
DROP TABLE t1;
+--echo #
+--echo # MDEV-21645 SIGSEGV in innobase_get_computed_value
+--echo #
+CREATE TABLE t1 (a INT PRIMARY KEY, b INT, va INTEGER GENERATED ALWAYS AS (a))
+ENGINE=InnoDB;
+INSERT INTO t1 SET a=1, b=NULL;
+ALTER TABLE t1 MODIFY COLUMN b INT FIRST;
+ALTER TABLE t1 ADD UNIQUE INDEX (va);
+DROP TABLE t1;
+
SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency;
diff --git a/mysql-test/suite/innodb/t/instant_alter_debug.test b/mysql-test/suite/innodb/t/instant_alter_debug.test
index 22452c78f4d..fe80de2ca51 100644
--- a/mysql-test/suite/innodb/t/instant_alter_debug.test
+++ b/mysql-test/suite/innodb/t/instant_alter_debug.test
@@ -385,6 +385,32 @@ SET DEBUG_SYNC='now SIGNAL update';
--reap
--connection default
+DROP TABLE t1;
+
+--echo #
+--echo # MDEV-21658 Error on online ADD PRIMARY KEY after instant DROP/reorder
+--echo #
+
+CREATE TABLE t1 (a INT, b INT, c INT, col INT) ENGINE=InnoDB;
+INSERT INTO t1 () VALUES ();
+ALTER TABLE t1 DROP b, DROP c, DROP col;
+ALTER TABLE t1 ADD COLUMN col INT;
+ALTER TABLE t1 DROP a, DROP col, ADD COLUMN b INT;
+
+--connection con2
+SET SQL_MODE= '';
+SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR dml';
+send ALTER TABLE t1 ADD PRIMARY KEY(b);
+
+--connection default
+SET DEBUG_SYNC = 'now WAIT_FOR scanned';
+UPDATE t1 SET b = 1;
+SET DEBUG_SYNC = 'now SIGNAL dml';
+--connection con2
+reap;
+--connection default
+SELECT * FROM t1;
+
SET DEBUG_SYNC='RESET';
--disconnect con2
DROP TABLE t1;
diff --git a/mysql-test/suite/versioning/r/sysvars.result b/mysql-test/suite/versioning/r/sysvars.result
index 79aa8fce746..165458ef170 100644
--- a/mysql-test/suite/versioning/r/sysvars.result
+++ b/mysql-test/suite/versioning/r/sysvars.result
@@ -31,6 +31,14 @@ set global system_versioning_asof= 1;
ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
set global system_versioning_asof= 1.1;
ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
+set global system_versioning_asof= '2011-02-29 00:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-29 00:00'
+set global system_versioning_asof= '2011-02-28 24:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-28 24:00'
+set global system_versioning_asof= '2011-00-28 00:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-00-28 00:00'
+set global system_versioning_asof= '0000-00-00 00:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '0000-00-00 00:00'
set system_versioning_asof= 'alley';
ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of 'alley'
set system_versioning_asof= null;
@@ -39,6 +47,14 @@ set system_versioning_asof= 1;
ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
set system_versioning_asof= 1.1;
ERROR 42000: Incorrect argument type to variable 'system_versioning_asof'
+set system_versioning_asof= '2011-02-29 00:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-29 00:00'
+set system_versioning_asof= '2011-02-28 24:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-02-28 24:00'
+set system_versioning_asof= '2011-00-28 00:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '2011-00-28 00:00'
+set system_versioning_asof= '0000-00-00 00:00';
+ERROR 42000: Variable 'system_versioning_asof' can't be set to the value of '0000-00-00 00:00'
# GLOBAL @@system_versioning_asof
set global system_versioning_asof= '1911-11-11 11:11:11.1111119';
Warnings:
diff --git a/mysql-test/suite/versioning/t/sysvars.test b/mysql-test/suite/versioning/t/sysvars.test
index 52fab81b8e6..e82a116f30e 100644
--- a/mysql-test/suite/versioning/t/sysvars.test
+++ b/mysql-test/suite/versioning/t/sysvars.test
@@ -23,6 +23,14 @@ set global system_versioning_asof= null;
set global system_versioning_asof= 1;
--error ER_WRONG_TYPE_FOR_VAR
set global system_versioning_asof= 1.1;
+--error ER_WRONG_VALUE_FOR_VAR
+set global system_versioning_asof= '2011-02-29 00:00';
+--error ER_WRONG_VALUE_FOR_VAR
+set global system_versioning_asof= '2011-02-28 24:00';
+--error ER_WRONG_VALUE_FOR_VAR
+set global system_versioning_asof= '2011-00-28 00:00';
+--error ER_WRONG_VALUE_FOR_VAR
+set global system_versioning_asof= '0000-00-00 00:00';
# session
--error ER_WRONG_VALUE_FOR_VAR
@@ -33,6 +41,14 @@ set system_versioning_asof= null;
set system_versioning_asof= 1;
--error ER_WRONG_TYPE_FOR_VAR
set system_versioning_asof= 1.1;
+--error ER_WRONG_VALUE_FOR_VAR
+set system_versioning_asof= '2011-02-29 00:00';
+--error ER_WRONG_VALUE_FOR_VAR
+set system_versioning_asof= '2011-02-28 24:00';
+--error ER_WRONG_VALUE_FOR_VAR
+set system_versioning_asof= '2011-00-28 00:00';
+--error ER_WRONG_VALUE_FOR_VAR
+set system_versioning_asof= '0000-00-00 00:00';
--echo # GLOBAL @@system_versioning_asof
set global system_versioning_asof= '1911-11-11 11:11:11.1111119';
diff --git a/mysql-test/suite/wsrep/r/MDEV-20625.result b/mysql-test/suite/wsrep/r/MDEV-20625.result
new file mode 100644
index 00000000000..3e2b621c8f9
--- /dev/null
+++ b/mysql-test/suite/wsrep/r/MDEV-20625.result
@@ -0,0 +1,5 @@
+SET GLOBAL wsrep_on=ON;
+SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';
+Variable_name Value
+wsrep_cluster_size 0
+SET GLOBAL wsrep_on=OFF;
diff --git a/mysql-test/suite/wsrep/t/MDEV-20625.cnf b/mysql-test/suite/wsrep/t/MDEV-20625.cnf
new file mode 100644
index 00000000000..75f8a25caff
--- /dev/null
+++ b/mysql-test/suite/wsrep/t/MDEV-20625.cnf
@@ -0,0 +1,8 @@
+!include ../my.cnf
+
+[mysqld.1]
+wsrep-on=OFF
+binlog-format=ROW
+wsrep-provider=@ENV.WSREP_PROVIDER
+wsrep-cluster-address='gcomm://'
+innodb_autoinc_lock_mode=2
diff --git a/mysql-test/suite/wsrep/t/MDEV-20625.test b/mysql-test/suite/wsrep/t/MDEV-20625.test
new file mode 100644
index 00000000000..2a537fe432e
--- /dev/null
+++ b/mysql-test/suite/wsrep/t/MDEV-20625.test
@@ -0,0 +1,10 @@
+#
+# Check SHOW GLOBAL STATUS after dynamic setting WSREP=ON
+#
+--source include/have_innodb.inc
+--source include/have_wsrep_provider.inc
+--source include/have_binlog_format_row.inc
+
+SET GLOBAL wsrep_on=ON;
+SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';
+SET GLOBAL wsrep_on=OFF;
diff --git a/mysys/my_cpu.c b/mysys/my_cpu.c
index 72705263aae..52500d78ef7 100644
--- a/mysys/my_cpu.c
+++ b/mysys/my_cpu.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2019, MariaDB Corporation.
+/* Copyright (c) 2019, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -14,7 +14,6 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#include <my_global.h>
-#include <my_atomic.h>
#include <my_cpu.h>
#include <my_rdtsc.h>
diff --git a/plugin/auth_pam/auth_pam_tool.c b/plugin/auth_pam/auth_pam_tool.c
index 624b6880933..225f35a6624 100644
--- a/plugin/auth_pam/auth_pam_tool.c
+++ b/plugin/auth_pam/auth_pam_tool.c
@@ -16,6 +16,7 @@
#include <stdlib.h>
#include <unistd.h>
+#include <errno.h>
#include <mysql/plugin_auth_common.h>
struct param {
@@ -62,7 +63,7 @@ typedef struct st_mysql_server_auth_info
#include "auth_pam_base.c"
-int main(int argc, char **argv)
+int main(int argc __attribute__((unused)), char **argv __attribute__((unused)))
{
struct param param;
MYSQL_SERVER_AUTH_INFO info;
@@ -70,7 +71,8 @@ int main(int argc, char **argv)
int res;
char a_buf[MYSQL_USERNAME_LENGTH + 1 + 1024];
- (void) setreuid(0, 0);
+ if ((res= setreuid(0, 0)))
+ fprintf(stderr, "Got error %d from setreuid()\n", (int) errno);
if (read(0, &field, 1) < 1)
return -1;
diff --git a/plugin/auth_pam/testing/pam_mariadb_mtr.c b/plugin/auth_pam/testing/pam_mariadb_mtr.c
index c0e07232027..2075d5fdbf3 100644
--- a/plugin/auth_pam/testing/pam_mariadb_mtr.c
+++ b/plugin/auth_pam/testing/pam_mariadb_mtr.c
@@ -15,7 +15,7 @@
#define N 3
-int pam_sm_authenticate(pam_handle_t *pamh, int flags,
+int pam_sm_authenticate(pam_handle_t *pamh, int flags __attribute__((unused)),
int argc, const char *argv[])
{
struct pam_conv *conv;
@@ -72,8 +72,10 @@ ret:
return retval;
}
-int pam_sm_setcred(pam_handle_t *pamh, int flags,
- int argc, const char *argv[])
+int pam_sm_setcred(pam_handle_t *pamh __attribute__((unused)),
+ int flags __attribute__((unused)),
+ int argc __attribute__((unused)),
+ const char *argv[] __attribute__((unused)))
{
return PAM_SUCCESS;
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index b5054557c46..a0d2924009f 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -6226,7 +6226,7 @@ int THD::decide_logging_format(TABLE_LIST *tables)
/* As all updated tables are temporary, nothing will be logged */
set_current_stmt_binlog_format_row();
}
- else if (IF_WSREP((!WSREP(this) ||
+ else if (IF_WSREP((!WSREP_NNULL(this) ||
wsrep_cs().mode() ==
wsrep::client_state::m_local),1))
{
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index c00ba42846a..332ef6c8aca 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -12507,11 +12507,14 @@ do:
{
LEX *lex=Lex;
lex->sql_command = SQLCOM_DO;
+ if (lex->main_select_push())
+ MYSQL_YYABORT;
mysql_init_select(lex);
}
expr_list
{
Lex->insert_list= $3;
+ Lex->pop_select(); //main select
}
;
@@ -13812,6 +13815,8 @@ describe:
describe_command table_ident
{
LEX *lex= Lex;
+ if (lex->main_select_push())
+ MYSQL_YYABORT;
mysql_init_select(lex);
lex->current_select->parsing_place= SELECT_LIST;
lex->sql_command= SQLCOM_SHOW_FIELDS;
@@ -13823,6 +13828,7 @@ describe:
opt_describe_column
{
Select->parsing_place= NO_MATTER;
+ Lex->pop_select(); //main select
}
| describe_command opt_extended_describe
{ Lex->describe|= DESCRIBE_NORMAL; }
diff --git a/sql/sys_vars.ic b/sql/sys_vars.ic
index 6862dcfde6f..e983347f4ce 100644
--- a/sql/sys_vars.ic
+++ b/sql/sys_vars.ic
@@ -2634,7 +2634,10 @@ public:
if (!Sys_var_enum::do_check(thd, var))
return false;
MYSQL_TIME ltime;
- Datetime::Options opt(TIME_CONV_NONE, thd);
+ // FIXME: please resolve both conflicts to "old" and remove this comment
+ Datetime::Options opt(TIME_CONV_NONE |
+ TIME_NO_ZERO_IN_DATE |
+ TIME_NO_ZERO_DATE, thd);
bool res= var->value->get_date(thd, &ltime, opt);
if (!res)
{
@@ -2653,7 +2656,9 @@ private:
if (var->value)
{
THD *thd= current_thd;
- Datetime::Options opt(TIME_CONV_NONE, thd);
+ Datetime::Options opt(TIME_CONV_NONE |
+ TIME_NO_ZERO_IN_DATE |
+ TIME_NO_ZERO_DATE, thd);
res= var->value->get_date(thd, &out.ltime, opt);
}
else // set DEFAULT from global var
diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc
index daf12f94fb9..950e4aae34d 100644
--- a/sql/wsrep_var.cc
+++ b/sql/wsrep_var.cc
@@ -44,6 +44,53 @@ int wsrep_init_vars()
return 0;
}
+static int get_provider_option_value(const char* opts,
+ const char* opt_name,
+ ulong* opt_value)
+{
+ int ret= 1;
+ ulong opt_value_tmp;
+ char *opt_value_str, *s, *opts_copy= my_strdup(opts, MYF(MY_WME));
+
+ if ((opt_value_str= strstr(opts_copy, opt_name)) == NULL)
+ goto end;
+ opt_value_str= strtok_r(opt_value_str, "=", &s);
+ if (opt_value_str == NULL) goto end;
+ opt_value_str= strtok_r(NULL, ";", &s);
+ if (opt_value_str == NULL) goto end;
+
+ opt_value_tmp= strtoul(opt_value_str, NULL, 10);
+ if (errno == ERANGE) goto end;
+
+ *opt_value= opt_value_tmp;
+ ret= 0;
+
+end:
+ my_free(opts_copy);
+ return ret;
+}
+
+static bool refresh_provider_options()
+{
+ WSREP_DEBUG("refresh_provider_options: %s",
+ (wsrep_provider_options) ? wsrep_provider_options : "null");
+
+ try
+ {
+ std::string opts= Wsrep_server_state::instance().provider().options();
+ wsrep_provider_options_init(opts.c_str());
+ get_provider_option_value(wsrep_provider_options,
+ (char*)"repl.max_ws_size",
+ &wsrep_max_ws_size);
+ return false;
+ }
+ catch (...)
+ {
+ WSREP_ERROR("Failed to get provider options");
+ return true;
+ }
+}
+
/* This is intentionally declared as a weak global symbol, so that
linking will succeed even if the server is built with a dynamically
linked InnoDB. */
@@ -53,8 +100,29 @@ struct handlerton* innodb_hton_ptr __attribute__((weak));
bool wsrep_on_update (sys_var *self, THD* thd, enum_var_type var_type)
{
if (var_type == OPT_GLOBAL) {
- // FIXME: this variable probably should be changed only per session
+ my_bool saved_wsrep_on= global_system_variables.wsrep_on;
+
thd->variables.wsrep_on= global_system_variables.wsrep_on;
+
+ // If wsrep has not been inited we need to do it now
+ if (global_system_variables.wsrep_on && wsrep_provider && !wsrep_inited)
+ {
+ char* tmp= strdup(wsrep_provider); // wsrep_init() rewrites provider
+ //when fails
+
+ mysql_mutex_unlock(&LOCK_global_system_variables);
+
+ if (wsrep_init())
+ {
+ my_error(ER_CANT_OPEN_LIBRARY, MYF(0), tmp, my_error, "wsrep_init failed");
+ //rcode= true;
+ }
+
+ free(tmp);
+ mysql_mutex_lock(&LOCK_global_system_variables);
+ }
+
+ thd->variables.wsrep_on= global_system_variables.wsrep_on= saved_wsrep_on;
}
return false;
@@ -264,53 +332,6 @@ bool wsrep_start_position_init (const char* val)
return false;
}
-static int get_provider_option_value(const char* opts,
- const char* opt_name,
- ulong* opt_value)
-{
- int ret= 1;
- ulong opt_value_tmp;
- char *opt_value_str, *s, *opts_copy= my_strdup(opts, MYF(MY_WME));
-
- if ((opt_value_str= strstr(opts_copy, opt_name)) == NULL)
- goto end;
- opt_value_str= strtok_r(opt_value_str, "=", &s);
- if (opt_value_str == NULL) goto end;
- opt_value_str= strtok_r(NULL, ";", &s);
- if (opt_value_str == NULL) goto end;
-
- opt_value_tmp= strtoul(opt_value_str, NULL, 10);
- if (errno == ERANGE) goto end;
-
- *opt_value= opt_value_tmp;
- ret= 0;
-
-end:
- my_free(opts_copy);
- return ret;
-}
-
-static bool refresh_provider_options()
-{
- WSREP_DEBUG("refresh_provider_options: %s",
- (wsrep_provider_options) ? wsrep_provider_options : "null");
-
- try
- {
- std::string opts= Wsrep_server_state::instance().provider().options();
- wsrep_provider_options_init(opts.c_str());
- get_provider_option_value(wsrep_provider_options,
- (char*)"repl.max_ws_size",
- &wsrep_max_ws_size);
- return false;
- }
- catch (...)
- {
- WSREP_ERROR("Failed to get provider options");
- return true;
- }
-}
-
static int wsrep_provider_verify (const char* provider_str)
{
MY_STAT f_stat;
@@ -362,11 +383,11 @@ bool wsrep_provider_update (sys_var *self, THD* thd, enum_var_type type)
WSREP_DEBUG("wsrep_provider_update: %s", wsrep_provider);
- /* stop replication is heavy operation, and includes closing all client
+ /* stop replication is heavy operation, and includes closing all client
connections. Closing clients may need to get LOCK_global_system_variables
at least in MariaDB.
- Note: releasing LOCK_global_system_variables may cause race condition, if
+ Note: releasing LOCK_global_system_variables may cause race condition, if
there can be several concurrent clients changing wsrep_provider
*/
mysql_mutex_unlock(&LOCK_global_system_variables);
diff --git a/storage/connect/colblk.cpp b/storage/connect/colblk.cpp
index 44383d584a8..5690062be47 100644
--- a/storage/connect/colblk.cpp
+++ b/storage/connect/colblk.cpp
@@ -79,7 +79,8 @@ COLBLK::COLBLK(PCOL col1, PTDB tdbp)
if (trace(2))
htrc(" copying COLBLK %s from %p to %p\n", Name, col1, this);
- if (tdbp) {
+ if (tdbp)
+ {
// Attach the new column to the table block
if (!tdbp->GetColumns()) {
tdbp->SetColumns(this);
diff --git a/storage/connect/connect.cc b/storage/connect/connect.cc
index e7681c3bdab..60c10527fe9 100644
--- a/storage/connect/connect.cc
+++ b/storage/connect/connect.cc
@@ -645,7 +645,8 @@ int CntIndexInit(PGLOBAL g, PTDB ptdb, int id, bool sorted)
// This is a pseudo indexed sorted block optimized column
// return 0;
- if (tdbp->GetKindex()) {
+ if (tdbp->GetKindex())
+ {
if (((XXBASE*)tdbp->GetKindex())->GetID() == id) {
tdbp->GetKindex()->Reset(); // Same index
return (tdbp->GetKindex()->IsMul()) ? 2 : 1;
diff --git a/storage/connect/filamap.cpp b/storage/connect/filamap.cpp
index 6e71e1bf2cd..53150f9d8ae 100644
--- a/storage/connect/filamap.cpp
+++ b/storage/connect/filamap.cpp
@@ -349,7 +349,8 @@ int MAPFAM::ReadBuffer(PGLOBAL g)
if ((rc = GetNext(g)) != RC_OK)
return rc;
- case RC_NF:
+ /* falls through */
+ case RC_NF:
// Skip this record
if ((rc = SkipRecord(g, false)) != RC_OK)
return rc;
diff --git a/storage/connect/filamdbf.cpp b/storage/connect/filamdbf.cpp
index 253ed96a044..e48e40601e3 100644
--- a/storage/connect/filamdbf.cpp
+++ b/storage/connect/filamdbf.cpp
@@ -840,7 +840,8 @@ int DBFFAM::DeleteRecords(PGLOBAL g, int irc)
{
if (irc == RC_OK) {
// T_Stream is the temporary stream or the table file stream itself
- if (!T_Stream) {
+ if (!T_Stream)
+ {
if (UseTemp) {
if (OpenTempFile(g))
return RC_FX;
@@ -851,7 +852,6 @@ int DBFFAM::DeleteRecords(PGLOBAL g, int irc)
} else
T_Stream = Stream;
}
-
*Tdbp->GetLine() = '*';
Modif++; // Modified line in Delete mode
} // endif irc
diff --git a/storage/connect/filamgz.cpp b/storage/connect/filamgz.cpp
index f7517b53b8f..d694eab3845 100644
--- a/storage/connect/filamgz.cpp
+++ b/storage/connect/filamgz.cpp
@@ -1021,6 +1021,7 @@ bool ZLBFAM::AllocateBuffer(PGLOBAL g)
#else
sprintf(g->Message, MSG(READ_ERROR), To_File, _strerror(NULL));
#endif
+ /* falls through */
case RC_NF:
return TRUE;
} // endswitch
diff --git a/storage/connect/filamvct.cpp b/storage/connect/filamvct.cpp
index f8ae5930a60..20205e0a8cf 100644
--- a/storage/connect/filamvct.cpp
+++ b/storage/connect/filamvct.cpp
@@ -301,7 +301,8 @@ int VCTFAM::Cardinality(PGLOBAL g)
if (!g)
return 1;
- if (Block < 0) {
+ if (Block < 0)
+ {
if (Split) {
// Separate column files and no pre setting of Block and Last
// This allows to see a table modified externally, but Block
@@ -348,7 +349,6 @@ int VCTFAM::Cardinality(PGLOBAL g)
} // endif split
}
-
return (Block) ? ((Block - 1) * Nrec + Last) : 0;
} // end of Cardinality
diff --git a/storage/connect/filamzip.cpp b/storage/connect/filamzip.cpp
index e1f18b61ce1..fd1cf0ceff9 100644
--- a/storage/connect/filamzip.cpp
+++ b/storage/connect/filamzip.cpp
@@ -91,6 +91,7 @@ static bool ZipFile(PGLOBAL g, ZIPUTIL *zutp, PCSZ fn, PCSZ entry, char *buf)
static bool ZipFiles(PGLOBAL g, ZIPUTIL *zutp, PCSZ pat, char *buf)
{
char filename[_MAX_PATH];
+
/*********************************************************************/
/* pat is a multiple file name with wildcard characters */
/*********************************************************************/
@@ -98,9 +99,9 @@ static bool ZipFiles(PGLOBAL g, ZIPUTIL *zutp, PCSZ pat, char *buf)
#if defined(__WIN__)
char drive[_MAX_DRIVE], direc[_MAX_DIR];
- int rc;
WIN32_FIND_DATA FileData;
HANDLE hSearch;
+ int rc;
_splitpath(filename, drive, direc, NULL, NULL);
diff --git a/storage/connect/filter.cpp b/storage/connect/filter.cpp
index 5bd9fc08ac4..d776b403917 100644
--- a/storage/connect/filter.cpp
+++ b/storage/connect/filter.cpp
@@ -1220,7 +1220,7 @@ bool FILTER::Eval(PGLOBAL g)
int i; // n = 0;
//PSUBQ subp = NULL;
PARRAY ap = NULL;
- PDBUSER dup = PlgGetUser(g);
+ PDBUSER dup __attribute__((unused)) = PlgGetUser(g);
if (Opc <= OP_XX)
{
diff --git a/storage/connect/fmdlex.c b/storage/connect/fmdlex.c
index 2a1bd53f51b..28b71b95e4d 100644
--- a/storage/connect/fmdlex.c
+++ b/storage/connect/fmdlex.c
@@ -240,9 +240,11 @@ YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+#ifdef NOT_USED
static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
+#endif
static void *yy_flex_alloc YY_PROTO(( unsigned int ));
static void *yy_flex_realloc YY_PROTO(( void *, unsigned int ));
@@ -264,11 +266,13 @@ extern char *yytext;
static void yy_flex_strncpy YY_PROTO(( char *, const char *, int ));
#endif
+#ifdef NOT_USED
#ifdef __cplusplus
static int yyinput YY_PROTO(( void ));
#else
static int input YY_PROTO(( void ));
#endif
+#endif
static yy_state_type yy_get_previous_state YY_PROTO(( void ));
static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
@@ -1057,6 +1061,8 @@ register char *yy_bp;
}
+#ifdef NOT_USED
+
#ifdef __cplusplus
static int yyinput()
#else
@@ -1123,7 +1129,7 @@ static int input()
return c;
}
-
+#endif /* NOT_USED */
#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
diff --git a/storage/connect/json.cpp b/storage/connect/json.cpp
index 98a4659cea8..5d7d08285cf 100644
--- a/storage/connect/json.cpp
+++ b/storage/connect/json.cpp
@@ -154,7 +154,7 @@ PJSON ParseJson(PGLOBAL g, char *s, int len, int *ptyp, bool *comma)
b = false;
break;
} // endif b
-
+ /* falls through */
default:
if (jsp)
goto tryit;
diff --git a/storage/connect/jsonudf.cpp b/storage/connect/jsonudf.cpp
index b1e32394de0..edd596ea02e 100644
--- a/storage/connect/jsonudf.cpp
+++ b/storage/connect/jsonudf.cpp
@@ -379,6 +379,7 @@ void JSNX::SetJsonValue(PGLOBAL g, PVAL vp, PJVAL val, int n)
case TYPE_NULL:
vp->SetNull(true);
+ /* falls through */
default:
vp->Reset();
} // endswitch Type
@@ -1772,7 +1773,7 @@ static char *GetJsonFile(PGLOBAL g, char *fn)
#endif
if (h == -1) {
- sprintf(g->Message, "Error %d opening %s", errno, fn);
+ sprintf(g->Message, "Error %d opening %-.1024s", errno, fn);
return NULL;
} // endif h
@@ -1784,7 +1785,7 @@ static char *GetJsonFile(PGLOBAL g, char *fn)
if ((str = (char*)PlgDBSubAlloc(g, NULL, len + 1))) {
if ((n = read(h, str, len)) < 0) {
- sprintf(g->Message, "Error %d reading %d bytes from %s", errno, len, fn);
+ sprintf(g->Message, "Error %d reading %d bytes from %-.1024s", errno, len, fn);
return NULL;
} // endif n
@@ -3479,7 +3480,7 @@ char *jsonget_string(UDF_INIT *initid, UDF_ARGS *args, char *result,
} catch (int n) {
if (trace(1))
- htrc("Exception %d: %s\n", n, g->Message);
+ htrc("Exception %d: %-.256s\n", n, g->Message);
PUSH_WARNING(g->Message);
str = NULL;
@@ -3761,7 +3762,6 @@ my_bool jsonlocate_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
} else
more += (ulong)*(longlong*)args->args[2];
}
-
CalcLen(args, false, reslen, memlen);
// TODO: calculate this
@@ -3839,7 +3839,7 @@ char *jsonlocate(UDF_INIT *initid, UDF_ARGS *args, char *result,
} catch (int n) {
if (trace(1))
- htrc("Exception %d: %s\n", n, g->Message);
+ htrc("Exception %d: %-.256s\n", n, g->Message);
PUSH_WARNING(g->Message);
*error = 1;
@@ -3883,12 +3883,13 @@ my_bool json_locate_all_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
strcpy(message, "Third argument is not an integer (Depth)");
return true;
} else if (args->arg_count > 3)
+ {
if (args->arg_type[3] != INT_RESULT) {
strcpy(message, "Fourth argument is not an integer (memory)");
return true;
} else
more += (ulong)*(longlong*)args->args[2];
-
+ }
CalcLen(args, false, reslen, memlen);
// TODO: calculate this
@@ -3964,7 +3965,7 @@ char *json_locate_all(UDF_INIT *initid, UDF_ARGS *args, char *result,
} catch (int n) {
if (trace(1))
- htrc("Exception %d: %s\n", n, g->Message);
+ htrc("Exception %d: %-.256s\n", n, g->Message);
PUSH_WARNING(g->Message);
*error = 1;
@@ -4244,7 +4245,7 @@ char *handle_item(UDF_INIT *initid, UDF_ARGS *args, char *result,
} catch (int n) {
if (trace(1))
- htrc("Exception %d: %s\n", n, g->Message);
+ htrc("Exception %d: %-.256s\n", n, g->Message);
PUSH_WARNING(g->Message);
str = NULL;
diff --git a/storage/connect/libdoc.cpp b/storage/connect/libdoc.cpp
index c1eaa6766cc..3b2696b066d 100644
--- a/storage/connect/libdoc.cpp
+++ b/storage/connect/libdoc.cpp
@@ -211,7 +211,7 @@ static xmlStrdupFunc Strdup;
void xmlMyFree(void *mem)
{
if (trace(1)) {
- htrc("%.4d Freeing at %p %s\n", ++m, mem, s);
+ htrc("%.4d Freeing at %p %-.256s\n", ++m, mem, s);
*s = 0;
} // endif trace
Free(mem);
@@ -221,7 +221,7 @@ void *xmlMyMalloc(size_t size)
{
void *p = Malloc(size);
if (trace(1)) {
- htrc("%.4d Allocating %.5d at %p %s\n", ++m, size, p, s);
+ htrc("%.4d Allocating %.5d at %p %-.256s\n", ++m, size, p, s);
*s = 0;
} // endif trace
return p;
@@ -231,7 +231,7 @@ void *xmlMyMallocAtomic(size_t size)
{
void *p = MallocA(size);
if (trace(1)) {
- htrc("%.4d Atom alloc %.5d at %p %s\n", ++m, size, p, s);
+ htrc("%.4d Atom alloc %.5d at %p %-.256s\n", ++m, size, p, s);
*s = 0;
} // endif trace
return p;
@@ -241,7 +241,7 @@ void *xmlMyRealloc(void *mem, size_t size)
{
void *p = Realloc(mem, size);
if (trace(1)) {
- htrc("%.4d ReAlloc %.5d to %p from %p %s\n", ++m, size, p, mem, s);
+ htrc("%.4d ReAlloc %.5d to %p from %p %-.256s\n", ++m, size, p, mem, s);
*s = 0;
} // endif trace
return p;
@@ -251,7 +251,7 @@ char *xmlMyStrdup(const char *str)
{
char *p = Strdup(str);
if (trace(1)) {
- htrc("%.4d Duplicating to %p from %p %s %s\n", ++m, p, str, str, s);
+ htrc("%.4d Duplicating to %p from %p %-.256s %-.256s\n", ++m, p, str, str, s);
*s = 0;
} // endif trace
return p;
@@ -448,7 +448,7 @@ bool LIBXMLDOC::NewDoc(PGLOBAL g, PCSZ ver)
void LIBXMLDOC::AddComment(PGLOBAL g, char *txtp)
{
if (trace(1))
- htrc("AddComment: %s\n", txtp);
+ htrc("AddComment: %-.256s\n", txtp);
xmlNodePtr cp = xmlNewDocComment(Docp, BAD_CAST txtp);
xmlAddChild((xmlNodePtr)Docp, cp);
@@ -476,7 +476,7 @@ PXNODE LIBXMLDOC::GetRoot(PGLOBAL g)
PXNODE LIBXMLDOC::NewRoot(PGLOBAL g, char *name)
{
if (trace(1))
- htrc("NewRoot: %s\n", name);
+ htrc("NewRoot: %-.256s\n", name);
xmlNodePtr root = xmlNewDocNode(Docp, NULL, BAD_CAST name, NULL);
@@ -494,7 +494,7 @@ PXNODE LIBXMLDOC::NewRoot(PGLOBAL g, char *name)
PXNODE LIBXMLDOC::NewPnode(PGLOBAL g, char *name)
{
if (trace(1))
- htrc("NewNode: %s\n", name);
+ htrc("NewNode: %-.256s\n", name);
xmlNodePtr nop;
@@ -535,7 +535,7 @@ int LIBXMLDOC::DumpDoc(PGLOBAL g, char *ofn)
FILE *of;
if (trace(1))
- htrc("DumpDoc: %s\n", ofn);
+ htrc("DumpDoc: %-.256s\n", ofn);
if (!(of= global_fopen(g, MSGID_CANNOT_OPEN, ofn, "w")))
return -1;
@@ -554,8 +554,8 @@ int LIBXMLDOC::DumpDoc(PGLOBAL g, char *ofn)
xmlNodePtr Rootp;
// Save the modified document
- fprintf(of, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", Encoding);
- fprintf(of, "<!-- Created by CONNECT %s -->\n", version);
+ fprintf(of, "<?xml version=\"1.0\" encoding=\"%-.256s\"?>\n", Encoding);
+ fprintf(of, "<!-- Created by CONNECT %-.256s -->\n", version);
if (!(Rootp = xmlDocGetRootElement(Docp)))
return 1;
@@ -631,7 +631,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
xmlNodeSetPtr nl;
if (trace(1))
- htrc("GetNodeList: %s np=%p\n", xp, np);
+ htrc("GetNodeList: %-.256s np=%p\n", xp, np);
if (!Ctxp) {
// Init Xpath
@@ -648,7 +648,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
strcpy(g->Message, MSG(XPATH_CNTX_ERR));
if (trace(1))
- htrc("Context error: %s\n", g->Message);
+ htrc("Context error: %-.256s\n", g->Message);
return NULL;
} // endif xpathCtx
@@ -656,7 +656,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
// Register namespaces from list (if any)
for (PNS nsp = Namespaces; nsp; nsp = nsp->Next) {
if (trace(1))
- htrc("Calling xmlXPathRegisterNs Prefix=%s Uri=%s\n",
+ htrc("Calling xmlXPathRegisterNs Prefix=%-.256s Uri=%-.512s\n",
nsp->Prefix, nsp->Uri);
if (xmlXPathRegisterNs(Ctxp, BAD_CAST nsp->Prefix,
@@ -664,7 +664,7 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
sprintf(g->Message, MSG(REGISTER_ERR), nsp->Prefix, nsp->Uri);
if (trace(1))
- htrc("Ns error: %s\n", g->Message);
+ htrc("Ns error: %-.256s\n", g->Message);
return NULL;
} // endif Registering
@@ -699,14 +699,14 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
Ctxp->node = np;
if (trace(1))
- htrc("Calling xmlXPathEval %s Ctxp=%p\n", xp, Ctxp);
+ htrc("Calling xmlXPathEval %-.256s Ctxp=%p\n", xp, Ctxp);
// Evaluate table xpath
if (!(Xop = xmlXPathEval(BAD_CAST xp, Ctxp))) {
sprintf(g->Message, MSG(XPATH_EVAL_ERR), xp);
if (trace(1))
- htrc("Path error: %s\n", g->Message);
+ htrc("Path error: %-.256s\n", g->Message);
return NULL;
} else
@@ -882,14 +882,14 @@ RCODE XML2NODE::GetContent(PGLOBAL g, char *buf, int len)
} // endif p1
} else {
- sprintf(g->Message, "Truncated %s content", Nodep->name);
+ sprintf(g->Message, "Truncated %-.256s content", Nodep->name);
rc = RC_INFO;
} // endif len
*p2 = 0;
if (trace(1))
- htrc("GetText buf='%s' len=%d\n", buf, len);
+ htrc("GetText buf='%-.256s' len=%d\n", buf, len);
xmlFree(Content);
Content = NULL;
@@ -897,7 +897,7 @@ RCODE XML2NODE::GetContent(PGLOBAL g, char *buf, int len)
*buf = '\0';
if (trace(1))
- htrc("GetContent: %s\n", buf);
+ htrc("GetContent: %-.256s\n", buf);
return rc;
} // end of GetContent
@@ -908,12 +908,12 @@ RCODE XML2NODE::GetContent(PGLOBAL g, char *buf, int len)
bool XML2NODE::SetContent(PGLOBAL g, char *txtp, int len)
{
if (trace(1))
- htrc("SetContent: %s\n", txtp);
+ htrc("SetContent: %-.256s\n", txtp);
xmlChar *buf = xmlEncodeEntitiesReentrant(Docp, BAD_CAST txtp);
if (trace(1))
- htrc("SetContent: %s -> %s\n", txtp, buf);
+ htrc("SetContent: %-.256s -> %-.256s\n", txtp, buf);
xmlNodeSetContent(Nodep, buf);
xmlFree(buf);
@@ -942,7 +942,7 @@ PXNODE XML2NODE::Clone(PGLOBAL g, PXNODE np)
PXLIST XML2NODE::GetChildElements(PGLOBAL g, char *xp, PXLIST lp)
{
if (trace(1))
- htrc("GetChildElements: %s\n", xp);
+ htrc("GetChildElements: %-.256s\n", xp);
return SelectNodes(g, (xp) ? xp : (char*)"*", lp);
} // end of GetChildElements
@@ -953,7 +953,7 @@ PXLIST XML2NODE::GetChildElements(PGLOBAL g, char *xp, PXLIST lp)
PXLIST XML2NODE::SelectNodes(PGLOBAL g, char *xp, PXLIST lp)
{
if (trace(1))
- htrc("SelectNodes: %s\n", xp);
+ htrc("SelectNodes: %-.256s\n", xp);
xmlNodeSetPtr nl = ((PXDOC2)Doc)->GetNodeList(g, Nodep, xp);
@@ -971,7 +971,7 @@ PXLIST XML2NODE::SelectNodes(PGLOBAL g, char *xp, PXLIST lp)
PXNODE XML2NODE::SelectSingleNode(PGLOBAL g, char *xp, PXNODE np)
{
if (trace(1))
- htrc("SelectSingleNode: %s\n", xp);
+ htrc("SelectSingleNode: %-.256s\n", xp);
xmlNodeSetPtr nl = ((PXDOC2)Doc)->GetNodeList(g, Nodep, xp);
@@ -995,7 +995,7 @@ PXATTR XML2NODE::GetAttribute(PGLOBAL g, char *name, PXATTR ap)
xmlAttrPtr atp;
if (trace(1))
- htrc("GetAttribute: %s\n", SVP(name));
+ htrc("GetAttribute: %-.256s\n", SVP(name));
if (name)
atp = xmlHasProp(Nodep, BAD_CAST name);
@@ -1024,7 +1024,7 @@ PXNODE XML2NODE::AddChildNode(PGLOBAL g, PCSZ name, PXNODE np)
char *p, *pn, *pf = NULL, *nmp = PlugDup(g, name);
if (trace(1))
- htrc("AddChildNode: %s\n", name);
+ htrc("AddChildNode: %-.256s\n", name);
// Is a prefix specified
if ((pn = strchr(nmp, ':'))) {
@@ -1075,7 +1075,7 @@ PXNODE XML2NODE::AddChildNode(PGLOBAL g, PCSZ name, PXNODE np)
PXATTR XML2NODE::AddProperty(PGLOBAL g, char *name, PXATTR ap)
{
if (trace(1))
- htrc("AddProperty: %s\n", name);
+ htrc("AddProperty: %-.256s\n", name);
xmlAttrPtr atp = xmlNewProp(Nodep, BAD_CAST name, NULL);
@@ -1098,7 +1098,7 @@ PXATTR XML2NODE::AddProperty(PGLOBAL g, char *name, PXATTR ap)
void XML2NODE::AddText(PGLOBAL g, PCSZ txtp)
{
if (trace(1))
- htrc("AddText: %s\n", txtp);
+ htrc("AddText: %-.256s\n", txtp);
// This is to avoid a blank line when inserting a new line
xmlNodePtr np = xmlGetLastChild(Nodep);
@@ -1158,7 +1158,7 @@ void XML2NODE::DeleteChild(PGLOBAL g, PXNODE dnp)
err:
if (trace(1))
- htrc("DeleteChild: errmsg=%s\n", xerr->message);
+ htrc("DeleteChild: errmsg=%-.256s\n", xerr->message);
xmlResetError(xerr);
} // end of DeleteChild
@@ -1260,7 +1260,7 @@ RCODE XML2ATTR::GetText(PGLOBAL g, char *buf, int len)
if (strlen((char*)txt) >= (unsigned)len) {
memcpy(buf, txt, len - 1);
buf[len - 1] = 0;
- sprintf(g->Message, "Truncated %s content", Atrp->name);
+ sprintf(g->Message, "Truncated %-.256s content", Atrp->name);
rc = RC_INFO;
} else
strcpy(buf, (const char*)txt);
@@ -1270,7 +1270,7 @@ RCODE XML2ATTR::GetText(PGLOBAL g, char *buf, int len)
*buf = '\0';
if (trace(1))
- htrc("GetText: %s\n", buf);
+ htrc("GetText: %-.256s\n", buf);
return rc;
} // end of GetText
@@ -1281,7 +1281,7 @@ RCODE XML2ATTR::GetText(PGLOBAL g, char *buf, int len)
bool XML2ATTR::SetText(PGLOBAL g, char *txtp, int len)
{
if (trace(1))
- htrc("SetText: %s %d\n", txtp, len);
+ htrc("SetText: %-.256s %d\n", txtp, len);
xmlSetProp(Parent, Atrp->name, BAD_CAST txtp);
return false;
diff --git a/storage/connect/myutil.cpp b/storage/connect/myutil.cpp
index 338a79d9455..89b18f86323 100644
--- a/storage/connect/myutil.cpp
+++ b/storage/connect/myutil.cpp
@@ -66,6 +66,7 @@ int MYSQLtoPLG(char *typname, char *var)
break;
case TPC_SKIP:
*var = 'K';
+ /* falls through */
default: // TPC_NO
type = TYPE_ERROR;
} // endswitch xconv
@@ -237,13 +238,14 @@ int MYSQLtoPLG(int mytype, char *var)
break;
case TPC_SKIP:
*var = 'K'; // Skip
+ /* falls through */
default: // TPC_NO
type = TYPE_ERROR;
} // endswitch xconv
return type;
} // endif var
-
+ /* falls through */
default:
type = TYPE_ERROR;
} // endswitch mytype
diff --git a/storage/connect/plugutil.cpp b/storage/connect/plugutil.cpp
index e74937b942a..3899379ade2 100644
--- a/storage/connect/plugutil.cpp
+++ b/storage/connect/plugutil.cpp
@@ -147,7 +147,7 @@ PGLOBAL PlugInit(LPCSTR Language, uint worksize)
PGLOBAL g;
if (trace(2))
- htrc("PlugInit: Language='%s'\n",
+ htrc("PlugInit: Language='%-.256s'\n",
((!Language) ? "Null" : (char*)Language));
try {
@@ -216,15 +216,15 @@ LPSTR PlugRemoveType(LPSTR pBuff, LPCSTR FileName)
_splitpath(FileName, drive, direc, fname, ftype);
if (trace(2)) {
- htrc("after _splitpath: FileName=%s\n", FileName);
- htrc("drive=%s dir=%s fname=%s ext=%s\n",
+ htrc("after _splitpath: FileName=%-.256s\n", FileName);
+ htrc("drive=%-.256s dir=%-.256s fname=%-.256s ext=%-.256s\n",
SVP(drive), direc, fname, ftype);
} // endif trace
_makepath(pBuff, drive, direc, fname, "");
if (trace(2))
- htrc("buff='%s'\n", pBuff);
+ htrc("buff='%-.256s'\n", pBuff);
return pBuff;
} // end of PlugRemoveType
@@ -257,7 +257,7 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
#endif
if (trace(2))
- htrc("prefix=%s fn=%s path=%s\n", prefix, FileName, defpath);
+ htrc("prefix=%-.256s fn=%-.256s path=%-.256s\n", prefix, FileName, defpath);
if (!strncmp(FileName, "//", 2) || !strncmp(FileName, "\\\\", 2)) {
strcpy(pBuff, FileName); // Remote file
@@ -274,7 +274,7 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
if (*FileName == '~') {
if (_fullpath(pBuff, FileName, _MAX_PATH)) {
if (trace(2))
- htrc("pbuff='%s'\n", pBuff);
+ htrc("pbuff='%-.256s'\n", pBuff);
return pBuff;
} else
@@ -309,12 +309,12 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
_splitpath(tmpdir, defdrv, defdir, NULL, NULL);
if (trace(2)) {
- htrc("after _splitpath: FileName=%s\n", FileName);
+ htrc("after _splitpath: FileName=%-.256s\n", FileName);
#if defined(__WIN__)
- htrc("drive=%s dir=%s fname=%s ext=%s\n", drive, direc, fname, ftype);
- htrc("defdrv=%s defdir=%s\n", defdrv, defdir);
+ htrc("drive=%-.256s dir=%-.256s fname=%-.256s ext=%-.256s\n", drive, direc, fname, ftype);
+ htrc("defdrv=%-.256s defdir=%-.256s\n", defdrv, defdir);
#else
- htrc("dir=%s fname=%s ext=%s\n", direc, fname, ftype);
+ htrc("dir=%-.256s fname=%-.256s ext=%-.256s\n", direc, fname, ftype);
#endif
} // endif trace
@@ -336,11 +336,11 @@ LPCSTR PlugSetPath(LPSTR pBuff, LPCSTR prefix, LPCSTR FileName, LPCSTR defpath)
_makepath(newname, drive, direc, fname, ftype);
if (trace(2))
- htrc("newname='%s'\n", newname);
+ htrc("newname='%-.256s'\n", newname);
if (_fullpath(pBuff, newname, _MAX_PATH)) {
if (trace(2))
- htrc("pbuff='%s'\n", pBuff);
+ htrc("pbuff='%-.256s'\n", pBuff);
return pBuff;
} else
@@ -365,22 +365,22 @@ char *PlugReadMessage(PGLOBAL g, int mid, char *m)
PlugSetPath(msgfile, NULL, buff, msg_path);
if (!(mfile = fopen(msgfile, "rt"))) {
- sprintf(stmsg, "Fail to open message file %s", msgfile);
+ sprintf(stmsg, "Fail to open message file %-.256s", msgfile);
goto err;
} // endif mfile
for (;;)
if (!fgets(buff, 256, mfile)) {
- sprintf(stmsg, "Cannot get message %d %s", mid, SVP(m));
+ sprintf(stmsg, "Cannot get message %d %-.256s", mid, SVP(m));
goto fin;
} else
if (atoi(buff) == mid)
break;
- if (sscanf(buff, " %*d %s \"%[^\"]", msgid, stmsg) < 2) {
+ if (sscanf(buff, " %*d %-.256s \"%[^\"]", msgid, stmsg) < 2) {
// Old message file
if (!sscanf(buff, " %*d \"%[^\"]", stmsg)) {
- sprintf(stmsg, "Bad message file for %d %s", mid, SVP(m));
+ sprintf(stmsg, "Bad message file for %d %-.256s", mid, SVP(m));
goto fin;
} else
m = NULL;
@@ -485,7 +485,7 @@ bool AllocSarea(PGLOBAL g, uint size)
if (g->Sarea)
htrc("Work area of %u allocated at %p\n", size, g->Sarea);
else
- htrc("SareaAlloc: %s\n", g->Message);
+ htrc("SareaAlloc: %-.256s\n", g->Message);
} // endif trace
@@ -567,11 +567,11 @@ void *PlugSubAlloc(PGLOBAL g, void *memp, size_t size)
PCSZ pname = "Work";
sprintf(g->Message,
- "Not enough memory in %s area for request of %u (used=%d free=%d)",
+ "Not enough memory in %-.256s area for request of %u (used=%d free=%d)",
pname, (uint)size, pph->To_Free, pph->FreeBlk);
if (trace(1))
- htrc("PlugSubAlloc: %s\n", g->Message);
+ htrc("PlugSubAlloc: %-.256s\n", g->Message);
DoThrow(1234);
} /* endif size OS32 code */
diff --git a/storage/connect/reldef.cpp b/storage/connect/reldef.cpp
index 2d3c6a6aacd..5b97377db97 100644
--- a/storage/connect/reldef.cpp
+++ b/storage/connect/reldef.cpp
@@ -350,8 +350,6 @@ RECFM TABDEF::GetTableFormat(const char* type)
bool TABDEF::Define(PGLOBAL g, PCATLG cat,
LPCSTR name, LPCSTR schema, LPCSTR am)
{
- int poff = 0;
-
Hc = ((MYCAT*)cat)->GetHandler();
Name = (PSZ)name;
Schema = (PSZ)Hc->GetDBName(schema);
@@ -430,6 +428,7 @@ int TABDEF::GetColCatInfo(PGLOBAL g)
case RECFM_CSV:
case RECFM_FMT:
nlg+= nof;
+ /* falls through */
case RECFM_DIR:
case RECFM_XML:
poff= loff + (pcf->Flags & U_VIRTUAL ? 0 : 1);
@@ -472,6 +471,7 @@ int TABDEF::GetColCatInfo(PGLOBAL g)
switch (trf ) {
case RECFM_VCT:
cdp->SetOffset(0); // Not to have shift
+ /* falls through */
case RECFM_BIN:
// BIN/VEC are packed by default
if (nof) {
diff --git a/storage/connect/tabdos.cpp b/storage/connect/tabdos.cpp
index c979d86e9ae..32f549b0f79 100644
--- a/storage/connect/tabdos.cpp
+++ b/storage/connect/tabdos.cpp
@@ -1424,9 +1424,7 @@ PBF TDBDOS::CheckBlockFilari(PGLOBAL g, PXOB *arg, int op, bool *cnv)
bool conv = false, xdb2 = false;
PXOB xp[2];
PCOL colp;
-//LSTVAL *vlp = NULL;
-//SFROW *sfr[2];
- PBF bfp = NULL;
+ PBF bfp = NULL;
for (i = 0; i < 2; i++) {
switch (arg[i]->GetType()) {
diff --git a/storage/connect/tabfmt.cpp b/storage/connect/tabfmt.cpp
index 432e297e59a..759f84594b8 100644
--- a/storage/connect/tabfmt.cpp
+++ b/storage/connect/tabfmt.cpp
@@ -350,7 +350,6 @@ PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info)
} else
goto skip;
}
-
// isdigit cannot be used here because of debug assert
if (!strchr("0123456789", *p)) {
if (!digit && *p == dechar)
@@ -373,7 +372,6 @@ PQRYRES CSVColumns(PGLOBAL g, PCSZ dp, PTOS topt, bool info)
} else
goto skip;
}
-
if (n) {
len[i] = MY_MAX(len[i], n);
type = (digit || n == 0 || (dec && n == 1)) ? TYPE_STRING
@@ -761,7 +759,6 @@ bool TDBCSV::OpenDB(PGLOBAL g)
if (!cdp->IsSpecial() && !cdp->IsVirtual())
Fields++;
}
-
Offset = (int*)PlugSubAlloc(g, NULL, sizeof(int) * Fields);
Fldlen = (int*)PlugSubAlloc(g, NULL, sizeof(int) * Fields);
diff --git a/storage/connect/tabjson.cpp b/storage/connect/tabjson.cpp
index ca126d8c488..a8e96e2fe8d 100644
--- a/storage/connect/tabjson.cpp
+++ b/storage/connect/tabjson.cpp
@@ -1429,6 +1429,7 @@ PSZ JSONCOL::GetJpath(PGLOBAL g, bool proj)
return NULL;
for (p1 = p2 = mgopath; *p1; p1++)
+ {
if (i) { // Inside []
if (isdigit(*p1)) {
if (!proj)
@@ -1466,12 +1467,12 @@ PSZ JSONCOL::GetJpath(PGLOBAL g, bool proj)
p2--; // Suppress last :*
break;
} // endif p2
-
+ /* falls through */
default:
*p2++ = *p1;
break;
} // endswitch p1;
-
+ }
*p2 = 0;
return mgopath;
} else
@@ -2128,7 +2129,6 @@ int TDBJSON::Cardinality(PGLOBAL g)
} else
return 10;
}
-
return Cardinal;
} // end of Cardinality
diff --git a/storage/connect/taboccur.cpp b/storage/connect/taboccur.cpp
index 4bec25eeebc..20d4c0cb032 100644
--- a/storage/connect/taboccur.cpp
+++ b/storage/connect/taboccur.cpp
@@ -450,9 +450,8 @@ bool TDBOCCUR::OpenDB(PGLOBAL g)
N = M = 0;
RowFlag = 0;
- if (Xcolp) {
- Xcolp->Xreset();
- }
+ if (Xcolp)
+ Xcolp->Xreset();
return Tdbp->OpenDB(g);
} // endif use
diff --git a/storage/connect/tabpivot.cpp b/storage/connect/tabpivot.cpp
index 8aee9fbb10d..1ba36864005 100644
--- a/storage/connect/tabpivot.cpp
+++ b/storage/connect/tabpivot.cpp
@@ -747,7 +747,9 @@ int TDBPIVOT::ReadDB(PGLOBAL g)
colp->ReadColumn(g);
for (colp = Columns; colp; colp = colp->GetNext())
- if (colp->GetAmType() == TYPE_AM_SRC) {
+ {
+ if (colp->GetAmType() == TYPE_AM_SRC)
+ {
if (FileStatus) {
if (((PSRCCOL)colp)->CompareLast()) {
newrow = (RowFlag) ? TRUE : FALSE;
@@ -757,7 +759,7 @@ int TDBPIVOT::ReadDB(PGLOBAL g)
} else
((PSRCCOL)colp)->SetColumn();
}
-
+ }
FileStatus = 1;
} // endif RowFlag
diff --git a/storage/connect/tabvir.cpp b/storage/connect/tabvir.cpp
index c78a8f531f6..76d52e198e3 100644
--- a/storage/connect/tabvir.cpp
+++ b/storage/connect/tabvir.cpp
@@ -168,16 +168,17 @@ int TDBVIR::TestFilter(PFIL filp, bool nop)
} // endswitch op
if (!nop) switch (op) {
- case OP_LT: l1--;
- case OP_LE: limit = l1; break;
- default: ok = false;
- } // endswitch op
-
+ case OP_LT: l1--;
+ /* falls through */
+ case OP_LE: limit = l1; break;
+ default: ok = false;
+ } // endswitch op
else switch (op) {
- case OP_GE: l1--;
- case OP_GT: limit = l1; break;
- default: ok = false;
- } // endswitch op
+ case OP_GE: l1--;
+ /* falls through */
+ case OP_GT: limit = l1; break;
+ default: ok = false;
+ } // endswitch op
limit = MY_MIN(MY_MAX(0, limit), Size);
diff --git a/storage/connect/tabxml.cpp b/storage/connect/tabxml.cpp
index 062d52679f6..cc67f825b87 100644
--- a/storage/connect/tabxml.cpp
+++ b/storage/connect/tabxml.cpp
@@ -218,8 +218,10 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
while (true) {
if (!vp->atp &&
- !(node = (vp->nl) ? vp->nl->GetItem(g, vp->k++, tdp->Usedom ? node : NULL)
- : NULL)) {
+ !(node = (vp->nl) ? vp->nl->GetItem(g, vp->k++, tdp->Usedom ?
+ node : NULL)
+ : NULL))
+ {
if (j) {
vp = lvlp[--j];
@@ -235,7 +237,6 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
} else
break;
}
-
xcol->Name[vp->n] = 0;
fmt[vp->m] = 0;
@@ -249,6 +250,7 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
switch (vp->atp->GetText(g, buf, sizeof(buf))) {
case RC_INFO:
PushWarning(g, txmp);
+ /* falls through */
case RC_OK:
strncat(fmt, "@", XLEN(fmt));
break;
@@ -309,6 +311,7 @@ PQRYRES XMLColumns(PGLOBAL g, char *db, char *tab, PTOS topt, bool info)
switch (node->GetContent(g, buf, sizeof(buf))) {
case RC_INFO:
PushWarning(g, txmp);
+ /* falls through */
case RC_OK:
xcol->Cbn = !strlen(buf);
break;
@@ -1271,7 +1274,8 @@ int TDBXML::ReadDB(PGLOBAL g)
/***********************************************************************/
bool TDBXML::CheckRow(PGLOBAL g, bool b)
{
- if (NewRow && Mode == MODE_INSERT) {
+ if (NewRow && Mode == MODE_INSERT)
+ {
if (Rowname) {
TabNode->AddText(g, "\n\t");
RowNode = TabNode->AddChildNode(g, Rowname, RowNode);
@@ -1526,7 +1530,8 @@ bool XMLCOL::ParseXpath(PGLOBAL g, bool mode)
// Analyze the Xpath for this column
for (i = 0, p = pbuf; (p2 = strchr(p, '/')); i++, p = p2 + 1) {
- if (Tdbp->Mulnode && !strncmp(p, Tdbp->Mulnode, p2 - p)) {
+ if (Tdbp->Mulnode && !strncmp(p, Tdbp->Mulnode, p2 - p))
+ {
if (!Tdbp->Xpand && mode) {
strcpy(g->Message, MSG(CONCAT_SUBNODE));
return true;
@@ -1778,7 +1783,8 @@ void XMLCOL::WriteColumn(PGLOBAL g)
else
break;
- if (ColNode) {
+ if (ColNode)
+ {
if (Type)
ValNode = ColNode->SelectSingleNode(g, Xname, Vxnp);
else
@@ -1796,7 +1802,8 @@ void XMLCOL::WriteColumn(PGLOBAL g)
/* Create missing nodes. */
/*********************************************************************/
if (ColNode == NULL) {
- if (TopNode == NULL) {
+ if (TopNode == NULL)
+ {
if (Tdbp->Clist) {
Tdbp->RowNode->AddText(g, "\n\t\t");
ColNode = Tdbp->RowNode->AddChildNode(g, Tdbp->Colname);
@@ -2018,7 +2025,8 @@ void XMULCOL::WriteColumn(PGLOBAL g)
TopNode = ColNode;
} // endfor k
- if (ColNode) {
+ if (ColNode)
+ {
if (Inod == Nod) {
/***************************************************************/
/* The node value can be multiple. */
@@ -2036,10 +2044,12 @@ void XMULCOL::WriteColumn(PGLOBAL g)
ValNode = Nlx->GetItem(g, Tdbp->Nsub, Vxnp);
} else // Inod != Nod
+ {
if (Type)
ValNode = ColNode->SelectSingleNode(g, Xname, Vxnp);
else
AttNode = ColNode->GetAttribute(g, Xname, Vxap);
+ }
}
if (TopNode || ValNode || AttNode)
break; // We found the good column
@@ -2052,7 +2062,8 @@ void XMULCOL::WriteColumn(PGLOBAL g)
/* Create missing nodes. */
/*********************************************************************/
if (ColNode == NULL) {
- if (TopNode == NULL) {
+ if (TopNode == NULL)
+ {
if (Tdbp->Clist) {
Tdbp->RowNode->AddText(g, "\n\t\t");
ColNode = Tdbp->RowNode->AddChildNode(g, Tdbp->Colname);
@@ -2061,6 +2072,7 @@ void XMULCOL::WriteColumn(PGLOBAL g)
} else
TopNode = Tdbp->RowNode;
}
+
for (; k < Nod && TopNode; k++) {
if (!done) {
TopNode->AddText(g, "\n\t\t");
diff --git a/storage/connect/xindex.cpp b/storage/connect/xindex.cpp
index 2421aec9f67..1b3534b4f1b 100644
--- a/storage/connect/xindex.cpp
+++ b/storage/connect/xindex.cpp
@@ -558,7 +558,8 @@ bool XINDEX::Make(PGLOBAL g, PIXDEF sxp)
Nk, n, Num_K, Ndif, addcolp, Tdbp->To_BlkFil, X);
// Check whether the unique index is unique indeed
- if (!Mul) {
+ if (!Mul)
+ {
if (Ndif < Num_K) {
strcpy(g->Message, MSG(INDEX_NOT_UNIQ));
brc = true;
@@ -2042,7 +2043,8 @@ int XINDXS::Range(PGLOBAL g, int limit, bool incl)
kp->Valp->SetValue_pval(xp->GetValue(), !kp->Prefix);
k = FastFind();
- if (k < Num_K || Op != OP_EQ) {
+ if (k < Num_K || Op != OP_EQ)
+ {
if (limit)
n = (Mul) ? k : kp->Val_K;
else
diff --git a/storage/connect/zip.c b/storage/connect/zip.c
index 18614576ef4..52d63e108e7 100644
--- a/storage/connect/zip.c
+++ b/storage/connect/zip.c
@@ -28,6 +28,7 @@
#include <time.h>
#include "zlib.h"
#include "zip.h"
+#include "my_attribute.h"
#ifdef STDC
# include <stddef.h>
@@ -1057,7 +1058,7 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename,
const void* extrafield_global, uInt size_extrafield_global,
const char* comment, int method, int level, int raw,
int windowBits,int memLevel, int strategy,
- const char* password, uLong crcForCrypting,
+ const char* password, uLong crcForCrypting __attribute__((unused)),
uLong versionMadeBy, uLong flagBase, int zip64)
{
zip64_internal* zi;
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index e7f25a0063c..3634e372bd9 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -11083,7 +11083,10 @@ foreign_fail:
/* MDEV-17468: Avoid this at least when ctx->is_instant().
Currently dict_load_column_low() is the only place where
num_base for virtual columns is assigned to nonzero. */
- if (ctx0->num_to_drop_vcol || ctx0->num_to_add_vcol) {
+ if (ctx0->num_to_drop_vcol || ctx0->num_to_add_vcol
+ || (ctx0->is_instant()
+ && m_prebuilt->table->n_v_cols
+ && ha_alter_info->handler_flags & ALTER_STORED_COLUMN_ORDER)) {
DBUG_ASSERT(ctx0->old_table->get_ref_count() == 1);
trx_commit_for_mysql(m_prebuilt->trx);
diff --git a/storage/innobase/include/ib0mutex.h b/storage/innobase/include/ib0mutex.h
index 960cafe5cdb..ce0e911dbb4 100644
--- a/storage/innobase/include/ib0mutex.h
+++ b/storage/innobase/include/ib0mutex.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2013, 2015, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2017, 2019, MariaDB Corporation.
+Copyright (c) 2017, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -29,7 +29,6 @@ Created 2013-03-26 Sunny Bains.
#ifndef ib0mutex_h
#define ib0mutex_h
-#include "my_atomic.h"
#include "my_cpu.h"
#include "os0event.h"
#include "sync0arr.h"
diff --git a/storage/innobase/include/ut0rnd.h b/storage/innobase/include/ut0rnd.h
index 9af8687bfd0..5b1ae5bc0da 100644
--- a/storage/innobase/include/ut0rnd.h
+++ b/storage/innobase/include/ut0rnd.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2019, MariaDB Corporation.
+Copyright (c) 2019, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -32,7 +32,7 @@ Created 1/20/1994 Heikki Tuuri
#ifndef UNIV_INNOCHECKSUM
/** Seed value of ut_rnd_gen() */
-extern int32 ut_rnd_current;
+extern std::atomic<uint32_t> ut_rnd_current;
/** @return a pseudo-random 32-bit number */
inline uint32_t ut_rnd_gen()
@@ -45,8 +45,7 @@ inline uint32_t ut_rnd_gen()
x^19+x^18+x^14+x^13+x^11+x^10+x^9+x^8+x^6+1 */
const uint32_t crc32c= 0x1edc6f41;
- uint32_t rnd= my_atomic_load32_explicit(&ut_rnd_current,
- MY_MEMORY_ORDER_RELAXED);
+ uint32_t rnd= ut_rnd_current.load(std::memory_order_relaxed);
if (UNIV_UNLIKELY(rnd == 0))
{
@@ -61,7 +60,7 @@ inline uint32_t ut_rnd_gen()
rnd^= crc32c;
}
- my_atomic_store32_explicit(&ut_rnd_current, rnd, MY_MEMORY_ORDER_RELAXED);
+ ut_rnd_current.store(rnd, std::memory_order_relaxed);
return rnd;
}
diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc
index 91879068c17..0fd3f840fcf 100644
--- a/storage/innobase/row/row0log.cc
+++ b/storage/innobase/row/row0log.cc
@@ -1137,6 +1137,7 @@ row_log_table_get_pk_old_col(
/** Maps an old table column of a PRIMARY KEY column.
@param[in] ifield clustered index field in the new table (after
ALTER TABLE)
+@param[in] index the clustered index of ifield
@param[in,out] dfield clustered index tuple field in the new table
@param[in,out] heap memory heap for allocating dfield contents
@param[in] rec clustered index leaf page record in the old
@@ -1152,6 +1153,7 @@ static
dberr_t
row_log_table_get_pk_col(
const dict_field_t* ifield,
+ const dict_index_t* index,
dfield_t* dfield,
mem_heap_t* heap,
const rec_t* rec,
@@ -1175,14 +1177,19 @@ row_log_table_get_pk_col(
return(DB_INVALID_NULL);
}
- ulint n_default_cols = i - DATA_N_SYS_COLS;
+ ulint new_i = dict_col_get_clust_pos(ifield->col, index);
+
+ if (UNIV_UNLIKELY(new_i >= log->defaults->n_fields)) {
+ ut_ad(0);
+ return DB_INVALID_NULL;
+ }
field = static_cast<const byte*>(
- log->defaults->fields[n_default_cols].data);
+ log->defaults->fields[new_i].data);
if (!field) {
return(DB_INVALID_NULL);
}
- len = log->defaults->fields[i - DATA_N_SYS_COLS].len;
+ len = log->defaults->fields[new_i].len;
}
if (rec_offs_nth_extern(offsets, i)) {
@@ -1341,7 +1348,7 @@ row_log_table_get_pk(
}
log->error = row_log_table_get_pk_col(
- ifield, dfield, *heap,
+ ifield, new_index, dfield, *heap,
rec, offsets, i, zip_size, max_len,
log);
diff --git a/storage/innobase/row/row0umod.cc b/storage/innobase/row/row0umod.cc
index cbf3a9d1726..29ced04359f 100644
--- a/storage/innobase/row/row0umod.cc
+++ b/storage/innobase/row/row0umod.cc
@@ -458,6 +458,21 @@ row_undo_mod_clust(
2 columns so that we can access DB_TRX_ID, DB_ROLL_PTR. */
offset_t offsets_[REC_OFFS_HEADER_SIZE + MAX_REF_PARTS + 2];
if (trx_id_offset) {
+#ifdef UNIV_DEBUG
+ ut_ad(rec_offs_validate(NULL, index, offsets));
+ if (buf_block_get_page_zip(
+ btr_pcur_get_block(&node->pcur))) {
+ /* Below, page_zip_write_trx_id_and_roll_ptr()
+ needs offsets to access DB_TRX_ID,DB_ROLL_PTR.
+ We already computed offsets for possibly
+ another record in the clustered index.
+ Because the PRIMARY KEY is fixed-length,
+ the offsets for the PRIMARY KEY and
+ DB_TRX_ID,DB_ROLL_PTR are still valid.
+ Silence the rec_offs_validate() assertion. */
+ rec_offs_make_valid(rec, index, true, offsets);
+ }
+#endif
} else if (rec_is_metadata(rec, *index)) {
ut_ad(!buf_block_get_page_zip(btr_pcur_get_block(
pcur)));
diff --git a/storage/innobase/ut/ut0rnd.cc b/storage/innobase/ut/ut0rnd.cc
index 8265121ef2e..a2e569514cb 100644
--- a/storage/innobase/ut/ut0rnd.cc
+++ b/storage/innobase/ut/ut0rnd.cc
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2019, MariaDB Corporation.
+Copyright (c) 2019, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -27,7 +27,7 @@ Created 5/11/1994 Heikki Tuuri
#include "ut0rnd.h"
/** Seed value of ut_rnd_gen() */
-int32 ut_rnd_current;
+std::atomic<uint32_t> ut_rnd_current;
/** These random numbers are used in ut_find_prime */
/*@{*/
diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc
index d4153dd8ead..5351f6ea673 100644
--- a/storage/maria/ha_maria.cc
+++ b/storage/maria/ha_maria.cc
@@ -554,6 +554,11 @@ static int table2maria(TABLE *table_arg, data_file_type row_type,
if (!table_arg->field[field->field_index]->stored_in_db())
{
my_free(*recinfo_out);
+ if (table_arg->s->long_unique_table)
+ {
+ my_error(ER_TOO_LONG_KEY, MYF(0), table_arg->file->max_key_length());
+ DBUG_RETURN(HA_ERR_INDEX_COL_TOO_LONG);
+ }
my_error(ER_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN, MYF(0));
DBUG_RETURN(HA_ERR_UNSUPPORTED);
}
@@ -2150,7 +2155,32 @@ void ha_maria::start_bulk_insert(ha_rows rows, uint flags)
else
{
my_bool all_keys= MY_TEST(flags & HA_CREATE_UNIQUE_INDEX_BY_SORT);
- maria_disable_indexes_for_rebuild(file, rows, all_keys);
+ /*
+ Deactivate all indexes that can be recreated fast.
+ These include packed keys on which sorting will use more temporary
+ space than the max allowed file length or for which the unpacked keys
+ will take much more space than packed keys.
+ Note that 'rows' may be zero for the case when we don't know how many
+ rows we will put into the file.
+ */
+ MARIA_SHARE *share= file->s;
+ MARIA_KEYDEF *key=share->keyinfo;
+ uint i;
+
+ DBUG_ASSERT(share->state.state.records == 0 &&
+ (!rows || rows >= MARIA_MIN_ROWS_TO_DISABLE_INDEXES));
+ for (i=0 ; i < share->base.keys ; i++,key++)
+ {
+ if (!(key->flag & (HA_SPATIAL | HA_AUTO_KEY | HA_RTREE_INDEX)) &&
+ ! maria_too_big_key_for_sort(key,rows) && share->base.auto_key != i+1 &&
+ (all_keys || !(key->flag & HA_NOSAME)) &&
+ table->key_info[i].algorithm != HA_KEY_ALG_LONG_HASH)
+ {
+ maria_clear_key_active(share->state.key_map, i);
+ file->update|= HA_STATE_CHANGED;
+ file->create_unique_index_by_sort= all_keys;
+ }
+ }
}
if (share->now_transactional)
{
diff --git a/storage/maria/ma_check.c b/storage/maria/ma_check.c
index 79c78628065..8b4e34816d5 100644
--- a/storage/maria/ma_check.c
+++ b/storage/maria/ma_check.c
@@ -6447,7 +6447,7 @@ static ha_checksum maria_byte_checksum(const uchar *buf, uint length)
return crc;
}
-static my_bool maria_too_big_key_for_sort(MARIA_KEYDEF *key, ha_rows rows)
+my_bool maria_too_big_key_for_sort(MARIA_KEYDEF *key, ha_rows rows)
{
uint key_maxlength=key->maxlength;
if (key->flag & HA_FULLTEXT)
@@ -6463,38 +6463,6 @@ static my_bool maria_too_big_key_for_sort(MARIA_KEYDEF *key, ha_rows rows)
}
/*
- Deactivate all indexes that can be recreated fast.
- These include packed keys on which sorting will use more temporary
- space than the max allowed file length or for which the unpacked keys
- will take much more space than packed keys.
- Note that 'rows' may be zero for the case when we don't know how many
- rows we will put into the file.
- */
-
-void maria_disable_indexes_for_rebuild(MARIA_HA *info, ha_rows rows,
- my_bool all_keys)
-{
- MARIA_SHARE *share= info->s;
- MARIA_KEYDEF *key=share->keyinfo;
- uint i;
-
- DBUG_ASSERT(share->state.state.records == 0 &&
- (!rows || rows >= MARIA_MIN_ROWS_TO_DISABLE_INDEXES));
- for (i=0 ; i < share->base.keys ; i++,key++)
- {
- if (!(key->flag & (HA_SPATIAL | HA_AUTO_KEY | HA_RTREE_INDEX)) &&
- ! maria_too_big_key_for_sort(key,rows) && share->base.auto_key != i+1 &&
- (all_keys || !(key->flag & HA_NOSAME)))
- {
- maria_clear_key_active(share->state.key_map, i);
- info->update|= HA_STATE_CHANGED;
- info->create_unique_index_by_sort= all_keys;
- }
- }
-}
-
-
-/*
Return TRUE if we can use repair by sorting
One can set the force argument to force to use sorting
even if the temporary file would be quite big!
diff --git a/storage/mroonga/vendor/groonga/lib/ii.c b/storage/mroonga/vendor/groonga/lib/ii.c
index cd5559e6958..2abd074796c 100644
--- a/storage/mroonga/vendor/groonga/lib/ii.c
+++ b/storage/mroonga/vendor/groonga/lib/ii.c
@@ -4315,7 +4315,7 @@ grn_ii_remove(grn_ctx *ctx, const char *path)
if (!path || strlen(path) > PATH_MAX - 4) { return GRN_INVALID_ARGUMENT; }
if ((rc = grn_io_remove(ctx, path))) { goto exit; }
grn_snprintf(buffer, PATH_MAX, PATH_MAX,
- "%s.c", path);
+ "%-.256s.c", path);
rc = grn_io_remove(ctx, buffer);
exit :
return rc;
@@ -4331,12 +4331,12 @@ grn_ii_truncate(grn_ctx *ctx, grn_ii *ii)
uint32_t flags;
if ((io_segpath = grn_io_path(ii->seg)) && *io_segpath != '\0') {
if (!(segpath = GRN_STRDUP(io_segpath))) {
- ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_segpath);
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%-.256s>", io_segpath);
return GRN_NO_MEMORY_AVAILABLE;
}
if ((io_chunkpath = grn_io_path(ii->chunk)) && *io_chunkpath != '\0') {
if (!(chunkpath = GRN_STRDUP(io_chunkpath))) {
- ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%s>", io_chunkpath);
+ ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path: <%-.256s>", io_chunkpath);
return GRN_NO_MEMORY_AVAILABLE;
}
} else {
@@ -5144,7 +5144,7 @@ grn_ii_cursor_set_min(grn_ctx *ctx, grn_ii_cursor *c, grn_id min)
c->stat |= CHUNK_USED;
GRN_LOG(ctx, GRN_LOG_DEBUG,
"[ii][cursor][min] skip: %p: min(%u->%u): chunk(%u->%u): "
- "chunk-used(%s->%s)",
+ "chunk-used(%-.256s->%-.256s)",
c,
old_min, min,
old_chunk, c->curr_chunk,
@@ -5205,7 +5205,7 @@ grn_ii_cursor_next_internal(grn_ctx *ctx, grn_ii_cursor *c,
}
GRN_TEXT_PUTC(ctx, &buf, ')');
GRN_TEXT_PUTC(ctx, &buf, '\0');
- GRN_LOG(ctx, GRN_LOG_DEBUG, "posting(%d):%s", count, GRN_TEXT_VALUE(&buf));
+ GRN_LOG(ctx, GRN_LOG_DEBUG, "posting(%d):%-.256s", count, GRN_TEXT_VALUE(&buf));
GRN_OBJ_FIN(ctx, &buf);
}
*/
@@ -6451,7 +6451,7 @@ grn_ii_column_update(grn_ctx *ctx, grn_ii *ii, grn_id rid, unsigned int section,
ERR(GRN_INVALID_ARGUMENT,
"[ii][column][update][new] invalid object: "
"<%.*s>: "
- "<%s>(%#x)",
+ "<%-.256s>(%#x)",
name_size, name,
grn_obj_type_to_string(type),
type);
@@ -6564,7 +6564,7 @@ grn_ii_column_update(grn_ctx *ctx, grn_ii *ii, grn_id rid, unsigned int section,
ERR(GRN_INVALID_ARGUMENT,
"[ii][column][update][old] invalid object: "
"<%.*s>: "
- "<%s>(%#x)",
+ "<%-.256s>(%#x)",
name_size, name,
grn_obj_type_to_string(type),
type);
@@ -7833,7 +7833,7 @@ grn_ii_select_cursor_open(grn_ctx *ctx,
default :
ERR(GRN_INVALID_ARGUMENT,
"[ii][select][cursor][open] "
- "EXACT, FUZZY, NEAR and NEAR2 are only supported mode: %s",
+ "EXACT, FUZZY, NEAR and NEAR2 are only supported mode: %-.256s",
grn_operator_to_string(mode));
break;
}
@@ -7841,7 +7841,7 @@ grn_ii_select_cursor_open(grn_ctx *ctx,
cursor = GRN_CALLOC(sizeof(grn_ii_select_cursor));
if (!cursor) {
ERR(ctx->rc,
- "[ii][select][cursor][open] failed to allocate cursor: %s",
+ "[ii][select][cursor][open] failed to allocate cursor: %-.256s",
ctx->errbuf);
return NULL;
}
@@ -7851,7 +7851,7 @@ grn_ii_select_cursor_open(grn_ctx *ctx,
if (!(cursor->tis = GRN_MALLOC(sizeof(token_info *) * string_len * 2))) {
ERR(ctx->rc,
- "[ii][select][cursor][open] failed to allocate token info container: %s",
+ "[ii][select][cursor][open] failed to allocate token info container: %-.256s",
ctx->errbuf);
GRN_FREE(cursor);
return NULL;
@@ -7891,7 +7891,7 @@ grn_ii_select_cursor_open(grn_ctx *ctx,
case GRN_OP_NEAR :
if (!(cursor->bt = bt_open(ctx, cursor->n_tis))) {
ERR(ctx->rc,
- "[ii][select][cursor][open] failed to allocate btree: %s",
+ "[ii][select][cursor][open] failed to allocate btree: %-.256s",
ctx->errbuf);
grn_ii_select_cursor_close(ctx, cursor);
return NULL;
@@ -8114,7 +8114,7 @@ grn_ii_parse_regexp_query(grn_ctx *ctx,
if (char_len == 0) {
GRN_OBJ_FIN(ctx, &buffer);
ERR(GRN_INVALID_ARGUMENT,
- "%s invalid encoding character: <%.*s|%#x|>",
+ "%-.256s invalid encoding character: <%.*s|%#x|>",
log_tag,
(int)(current - string), string,
*current);
@@ -8515,7 +8515,7 @@ grn_ii_select_sequential_search(grn_ctx *ctx,
onig_error_code_to_str(message, onig_result, error_info);
GRN_LOG(ctx, GRN_LOG_WARNING,
"[ii][select][sequential] "
- "failed to create regular expression object: %s",
+ "failed to create regular expression object: %-.256s",
message);
processed = GRN_FALSE;
}
@@ -10148,7 +10148,7 @@ grn_ii_buffer_open(grn_ctx *ctx, grn_ii *ii,
ii_buffer->block_buf = GRN_MALLOCN(grn_id, II_BUFFER_BLOCK_SIZE);
if (ii_buffer->block_buf) {
grn_snprintf(ii_buffer->tmpfpath, PATH_MAX, PATH_MAX,
- "%sXXXXXX", grn_io_path(ii->seg));
+ "%-.256sXXXXXX", grn_io_path(ii->seg));
ii_buffer->block_buf_size = II_BUFFER_BLOCK_SIZE;
ii_buffer->tmpfd = grn_mkstemp(ii_buffer->tmpfpath);
if (ii_buffer->tmpfd != -1) {
@@ -10161,7 +10161,7 @@ grn_ii_buffer_open(grn_ctx *ctx, grn_ii *ii,
}
return ii_buffer;
} else {
- SERR("failed grn_mkstemp(%s)",
+ SERR("failed grn_mkstemp(%-.256s)",
ii_buffer->tmpfpath);
}
GRN_FREE(ii_buffer->block_buf);
@@ -10308,7 +10308,7 @@ grn_ii_buffer_commit(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
ii_buffer->tmpfpath,
O_RDONLY | GRN_OPEN_FLAG_BINARY);
if (ii_buffer->tmpfd == -1) {
- ERRNO_ERR("failed to open path: <%s>", ii_buffer->tmpfpath);
+ ERRNO_ERR("failed to open path: <%-.256s>", ii_buffer->tmpfpath);
return ctx->rc;
}
{
@@ -10358,10 +10358,10 @@ grn_ii_buffer_commit(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
grn_close(ii_buffer->tmpfd);
if (grn_unlink(ii_buffer->tmpfpath) == 0) {
GRN_LOG(ctx, GRN_LOG_INFO,
- "[ii][buffer][commit] removed temporary path: <%s>",
+ "[ii][buffer][commit] removed temporary path: <%-.256s>",
ii_buffer->tmpfpath);
} else {
- ERRNO_ERR("[ii][buffer][commit] failed to remove temporary path: <%s>",
+ ERRNO_ERR("[ii][buffer][commit] failed to remove temporary path: <%-.256s>",
ii_buffer->tmpfpath);
}
ii_buffer->tmpfd = -1;
@@ -10385,10 +10385,10 @@ grn_ii_buffer_close(grn_ctx *ctx, grn_ii_buffer *ii_buffer)
grn_close(ii_buffer->tmpfd);
if (grn_unlink(ii_buffer->tmpfpath) == 0) {
GRN_LOG(ctx, GRN_LOG_INFO,
- "[ii][buffer][close] removed temporary path: <%s>",
+ "[ii][buffer][close] removed temporary path: <%-.256s>",
ii_buffer->tmpfpath);
} else {
- ERRNO_ERR("[ii][buffer][close] failed to remove temporary path: <%s>",
+ ERRNO_ERR("[ii][buffer][close] failed to remove temporary path: <%-.256s>",
ii_buffer->tmpfpath);
}
}
@@ -11468,10 +11468,10 @@ grn_ii_builder_fin(grn_ctx *ctx, grn_ii_builder *builder)
grn_close(builder->fd);
if (grn_unlink(builder->path) == 0) {
GRN_LOG(ctx, GRN_LOG_INFO,
- "[ii][builder][fin] removed path: <%s>",
+ "[ii][builder][fin] removed path: <%-.256s>",
builder->path);
} else {
- ERRNO_ERR("[ii][builder][fin] failed to remove path: <%s>",
+ ERRNO_ERR("[ii][builder][fin] failed to remove path: <%-.256s>",
builder->path);
}
}
@@ -11779,10 +11779,10 @@ static grn_rc
grn_ii_builder_create_file(grn_ctx *ctx, grn_ii_builder *builder)
{
grn_snprintf(builder->path, PATH_MAX, PATH_MAX,
- "%sXXXXXX", grn_io_path(builder->ii->seg));
+ "%-.256sXXXXXX", grn_io_path(builder->ii->seg));
builder->fd = grn_mkstemp(builder->path);
if (builder->fd == -1) {
- SERR("failed to create a temporary file: path = \"%s\"",
+ SERR("failed to create a temporary file: path = \"%-.256s\"",
builder->path);
return ctx->rc;
}
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index 2b78efe2920..38091dae0ba 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -1751,7 +1751,35 @@ void ha_myisam::start_bulk_insert(ha_rows rows, uint flags)
else
{
my_bool all_keys= MY_TEST(flags & HA_CREATE_UNIQUE_INDEX_BY_SORT);
- mi_disable_indexes_for_rebuild(file, rows, all_keys);
+ MYISAM_SHARE *share=file->s;
+ MI_KEYDEF *key=share->keyinfo;
+ uint i;
+ /*
+ Deactivate all indexes that can be recreated fast.
+ These include packed keys on which sorting will use more temporary
+ space than the max allowed file length or for which the unpacked keys
+ will take much more space than packed keys.
+ Note that 'rows' may be zero for the case when we don't know how many
+ rows we will put into the file.
+ Long Unique Index (HA_KEY_ALG_LONG_HASH) will not be disabled because
+ there unique property is enforced at the time of ha_write_row
+ (check_duplicate_long_entries). So we need active index at the time of
+ insert.
+ */
+ DBUG_ASSERT(file->state->records == 0 &&
+ (!rows || rows >= MI_MIN_ROWS_TO_DISABLE_INDEXES));
+ for (i=0 ; i < share->base.keys ; i++,key++)
+ {
+ if (!(key->flag & (HA_SPATIAL | HA_AUTO_KEY)) &&
+ ! mi_too_big_key_for_sort(key,rows) && file->s->base.auto_key != i+1 &&
+ (all_keys || !(key->flag & HA_NOSAME)) &&
+ table->key_info[i].algorithm != HA_KEY_ALG_LONG_HASH)
+ {
+ mi_clear_key_active(share->state.key_map, i);
+ file->update|= HA_STATE_CHANGED;
+ file->create_unique_index_by_sort= all_keys;
+ }
+ }
}
}
else
diff --git a/storage/myisam/mi_check.c b/storage/myisam/mi_check.c
index f377028be52..3f3c60a4249 100644
--- a/storage/myisam/mi_check.c
+++ b/storage/myisam/mi_check.c
@@ -4667,7 +4667,7 @@ static ha_checksum mi_byte_checksum(const uchar *buf, uint length)
return crc;
}
-static my_bool mi_too_big_key_for_sort(MI_KEYDEF *key, ha_rows rows)
+my_bool mi_too_big_key_for_sort(MI_KEYDEF *key, ha_rows rows)
{
uint key_maxlength=key->maxlength;
if (key->flag & HA_FULLTEXT)
@@ -4682,38 +4682,6 @@ static my_bool mi_too_big_key_for_sort(MI_KEYDEF *key, ha_rows rows)
}
/*
- Deactivate all indexes that can be recreated fast.
- These include packed keys on which sorting will use more temporary
- space than the max allowed file length or for which the unpacked keys
- will take much more space than packed keys.
- Note that 'rows' may be zero for the case when we don't know how many
- rows we will put into the file.
- */
-
-void mi_disable_indexes_for_rebuild(MI_INFO *info, ha_rows rows,
- my_bool all_keys)
-{
- MYISAM_SHARE *share=info->s;
- MI_KEYDEF *key=share->keyinfo;
- uint i;
-
- DBUG_ASSERT(info->state->records == 0 &&
- (!rows || rows >= MI_MIN_ROWS_TO_DISABLE_INDEXES));
- for (i=0 ; i < share->base.keys ; i++,key++)
- {
- if (!(key->flag & (HA_SPATIAL | HA_AUTO_KEY)) &&
- ! mi_too_big_key_for_sort(key,rows) && info->s->base.auto_key != i+1 &&
- (all_keys || !(key->flag & HA_NOSAME)))
- {
- mi_clear_key_active(share->state.key_map, i);
- info->update|= HA_STATE_CHANGED;
- info->create_unique_index_by_sort= all_keys;
- }
- }
-}
-
-
-/*
Return TRUE if we can use repair by sorting
One can set the force argument to force to use sorting
even if the temporary file would be quite big!
diff --git a/storage/myisam/myisamdef.h b/storage/myisam/myisamdef.h
index 3b036b5f4a4..b92c012e5f4 100644
--- a/storage/myisam/myisamdef.h
+++ b/storage/myisam/myisamdef.h
@@ -732,8 +732,6 @@ void mi_restore_status(void *param);
void mi_copy_status(void *to, void *from);
my_bool mi_check_status(void *param);
void mi_fix_status(MI_INFO *org_table, MI_INFO *new_table);
-void mi_disable_indexes_for_rebuild(MI_INFO *info, ha_rows rows,
- my_bool all_keys);
extern MI_INFO *test_if_reopen(char *filename);
my_bool check_table_is_closed(const char *name, const char *where);
int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share);
diff --git a/storage/myisam/myisamlog.c b/storage/myisam/myisamlog.c
index 8e8b75817c0..9bef2be929f 100644
--- a/storage/myisam/myisamlog.c
+++ b/storage/myisam/myisamlog.c
@@ -750,7 +750,8 @@ static int test_when_accessed (struct file_info *key,
}
-static int file_info_free(void* arg, TREE_FREE mode, void *unused)
+static int file_info_free(void* arg, TREE_FREE mode __attribute__((unused)),
+ void *unused __attribute__((unused)))
{
struct file_info *fileinfo= arg;
DBUG_ENTER("file_info_free");
diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc
index d8b5b50b4c4..00e6b95a748 100644
--- a/storage/rocksdb/rdb_datadic.cc
+++ b/storage/rocksdb/rdb_datadic.cc
@@ -267,8 +267,9 @@ int Rdb_key_field_iterator::next() {
bool covered_column = true;
if (m_covered_bitmap != nullptr &&
m_field->real_type() == MYSQL_TYPE_VARCHAR && !m_fpi->m_covered) {
+ uint tmp= m_curr_bitmap_pos++;
covered_column = m_curr_bitmap_pos < MAX_REF_PARTS &&
- bitmap_is_set(m_covered_bitmap, m_curr_bitmap_pos++);
+ bitmap_is_set(m_covered_bitmap, tmp);
}
if (m_fpi->m_unpack_func && covered_column) {
diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c
index e4bd6d2b5c2..0324c0665e2 100644
--- a/strings/ctype-bin.c
+++ b/strings/ctype-bin.c
@@ -219,7 +219,7 @@ static size_t my_case_str_bin(CHARSET_INFO *cs __attribute__((unused)),
static size_t my_case_bin(CHARSET_INFO *cs __attribute__((unused)),
const char *src, size_t srclen,
- char *dst, size_t dstlen)
+ char *dst, size_t dstlen __attribute__((unused)))
{
DBUG_ASSERT(srclen <= dstlen);
memcpy(dst, src, srclen);
diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c
index ccf6f12b415..975cb503872 100644
--- a/strings/ctype-simple.c
+++ b/strings/ctype-simple.c
@@ -237,7 +237,7 @@ size_t my_casedn_str_8bit(CHARSET_INFO * cs,char *str)
size_t my_caseup_8bit(CHARSET_INFO * cs, const char *src, size_t srclen,
- char *dst, size_t dstlen)
+ char *dst, size_t dstlen __attribute__((unused)))
{
const char *end= src + srclen;
register const uchar *map= cs->to_upper;
@@ -249,7 +249,7 @@ size_t my_caseup_8bit(CHARSET_INFO * cs, const char *src, size_t srclen,
size_t my_casedn_8bit(CHARSET_INFO * cs, const char *src, size_t srclen,
- char *dst, size_t dstlen)
+ char *dst, size_t dstlen __attribute__((unused)))
{
const char *end= src + srclen;
register const uchar *map=cs->to_lower;
diff --git a/strings/json_lib.c b/strings/json_lib.c
index ea9961a15d0..1e9c947a85d 100644
--- a/strings/json_lib.c
+++ b/strings/json_lib.c
@@ -2008,9 +2008,13 @@ err_return:
}
-enum json_types json_get_object_nkey(const char *js,const char *js_end, int nkey,
- const char **keyname, const char **keyname_end,
- const char **value, int *value_len)
+enum json_types json_get_object_nkey(const char *js __attribute__((unused)),
+ const char *js_end __attribute__((unused)),
+ int nkey __attribute__((unused)),
+ const char **keyname __attribute__((unused)),
+ const char **keyname_end __attribute__((unused)),
+ const char **value __attribute__((unused)),
+ int *value_len __attribute__((unused)))
{
return JSV_NOTHING;
}
diff --git a/strings/strcoll.ic b/strings/strcoll.ic
index d30535de0d5..6aca0d0c460 100644
--- a/strings/strcoll.ic
+++ b/strings/strcoll.ic
@@ -368,7 +368,7 @@ MY_FUNCTION_NAME(strnxfrm)(CHARSET_INFO *cs,
static size_t
-MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs,
+MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)),
uchar *dst, uchar *de,
uint *nweights,
const uchar *src, const uchar *se)
@@ -490,7 +490,7 @@ MY_FUNCTION_NAME(strnxfrm_nopad)(CHARSET_INFO *cs,
static size_t
-MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs,
+MY_FUNCTION_NAME(strnxfrm_internal)(CHARSET_INFO *cs __attribute__((unused)),
uchar *dst, uchar *de,
uint *nweights,
const uchar *src,
diff --git a/unittest/mysys/byte_order-t.c b/unittest/mysys/byte_order-t.c
index e276e597fbf..d4481a4135b 100644
--- a/unittest/mysys/byte_order-t.c
+++ b/unittest/mysys/byte_order-t.c
@@ -94,7 +94,7 @@ void test_byte_order()
#undef TEST
}
-int main(int argc, char **argv)
+int main(int argc __attribute__((unused)), char **argv __attribute__((unused)))
{
plan(68);
test_byte_order();
diff --git a/zlib/infback.c b/zlib/infback.c
index 59679ecbfc5..4f79cead2a2 100644
--- a/zlib/infback.c
+++ b/zlib/infback.c
@@ -477,6 +477,7 @@ void FAR *out_desc;
}
Tracev((stderr, "inflate: codes ok\n"));
state->mode = LEN;
+ /* falls through */
case LEN:
/* use inflate_fast() if we have enough input and output */
diff --git a/zlib/inflate.c b/zlib/inflate.c
index ac333e8c2ed..c10064c7ee2 100644
--- a/zlib/inflate.c
+++ b/zlib/inflate.c
@@ -740,6 +740,7 @@ int flush;
CRC2(state->check, hold);
INITBITS();
state->mode = EXLEN;
+ /* falls through */
case EXLEN:
if (state->flags & 0x0400) {
NEEDBITS(16);
@@ -753,6 +754,7 @@ int flush;
else if (state->head != Z_NULL)
state->head->extra = Z_NULL;
state->mode = EXTRA;
+ /* falls through */
case EXTRA:
if (state->flags & 0x0400) {
copy = state->length;
@@ -775,6 +777,7 @@ int flush;
}
state->length = 0;
state->mode = NAME;
+ /* falls through */
case NAME:
if (state->flags & 0x0800) {
if (have == 0) goto inf_leave;
@@ -796,6 +799,7 @@ int flush;
state->head->name = Z_NULL;
state->length = 0;
state->mode = COMMENT;
+ /* falls through */
case COMMENT:
if (state->flags & 0x1000) {
if (have == 0) goto inf_leave;
@@ -816,6 +820,7 @@ int flush;
else if (state->head != Z_NULL)
state->head->comment = Z_NULL;
state->mode = HCRC;
+ /* falls through */
case HCRC:
if (state->flags & 0x0200) {
NEEDBITS(16);
@@ -839,6 +844,7 @@ int flush;
strm->adler = state->check = ZSWAP32(hold);
INITBITS();
state->mode = DICT;
+ /* falls through */
case DICT:
if (state->havedict == 0) {
RESTORE();
@@ -846,8 +852,10 @@ int flush;
}
strm->adler = state->check = adler32(0L, Z_NULL, 0);
state->mode = TYPE;
+ /* falls through */
case TYPE:
if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+ /* falls through */
case TYPEDO:
if (state->last) {
BYTEBITS();
@@ -898,8 +906,10 @@ int flush;
INITBITS();
state->mode = COPY_;
if (flush == Z_TREES) goto inf_leave;
+ /* falls through */
case COPY_:
state->mode = COPY;
+ /* falls through */
case COPY:
copy = state->length;
if (copy) {
@@ -1039,8 +1049,10 @@ int flush;
Tracev((stderr, "inflate: codes ok\n"));
state->mode = LEN_;
if (flush == Z_TREES) goto inf_leave;
+ /* falls through */
case LEN_:
state->mode = LEN;
+ /* falls through */
case LEN:
if (have >= 6 && left >= 258) {
RESTORE();
@@ -1090,6 +1102,7 @@ int flush;
}
state->extra = (unsigned)(here.op) & 15;
state->mode = LENEXT;
+ /* falls through */
case LENEXT:
if (state->extra) {
NEEDBITS(state->extra);
@@ -1100,6 +1113,7 @@ int flush;
Tracevv((stderr, "inflate: length %u\n", state->length));
state->was = state->length;
state->mode = DIST;
+ /* falls through */
case DIST:
for (;;) {
here = state->distcode[BITS(state->distbits)];
@@ -1127,6 +1141,7 @@ int flush;
state->offset = (unsigned)here.val;
state->extra = (unsigned)(here.op) & 15;
state->mode = DISTEXT;
+ /* falls through */
case DISTEXT:
if (state->extra) {
NEEDBITS(state->extra);
@@ -1143,6 +1158,7 @@ int flush;
#endif
Tracevv((stderr, "inflate: distance %u\n", state->offset));
state->mode = MATCH;
+ /* falls through */
case MATCH:
if (left == 0) goto inf_leave;
copy = out - left;
@@ -1218,6 +1234,7 @@ int flush;
}
#ifdef GUNZIP
state->mode = LENGTH;
+ /* falls through */
case LENGTH:
if (state->wrap && state->flags) {
NEEDBITS(32);
@@ -1231,6 +1248,7 @@ int flush;
}
#endif
state->mode = DONE;
+ /* falls through */
case DONE:
ret = Z_STREAM_END;
goto inf_leave;