Merge 10.4 into 10.5

This commit is contained in:
Marko Mäkelä 2020-02-07 08:51:20 +02:00
commit 8b6cfda631
69 changed files with 587 additions and 294 deletions

View file

@ -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 */

View file

@ -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

View file

@ -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
}

View file

@ -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;
}

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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:

View file

@ -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';

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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>

View file

@ -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;

View file

@ -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;

View file

@ -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))
{

View file

@ -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; }

View file

@ -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

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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)
{

View file

@ -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 )

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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 */

View file

@ -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) {

View file

@ -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()) {

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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");

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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"

View file

@ -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;
}

View file

@ -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);

View file

@ -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)));

View file

@ -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 */
/*@{*/

View file

@ -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)
{

View file

@ -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)
@ -6462,38 +6462,6 @@ static my_bool maria_too_big_key_for_sort(MARIA_KEYDEF *key, ha_rows rows)
(ulonglong) maria_max_temp_length));
}
/*
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

View file

@ -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;
}

View file

@ -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

View file

@ -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)
@ -4681,38 +4681,6 @@ static my_bool mi_too_big_key_for_sort(MI_KEYDEF *key, ha_rows rows)
((ulonglong) rows * key_maxlength > myisam_max_temp_length));
}
/*
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

View file

@ -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);

View file

@ -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");

View file

@ -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) {

View file

@ -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);

View file

@ -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;

View file

@ -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;
}

View file

@ -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,

View file

@ -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();

View file

@ -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 */

View file

@ -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;