mirror of
https://github.com/MariaDB/server.git
synced 2025-04-21 06:35:31 +02:00
Merge 10.4 into 10.5
This commit is contained in:
commit
8b6cfda631
69 changed files with 587 additions and 294 deletions
include
mysql-test
lib/My/SafeProcess
main
suite
mysys
plugin/auth_pam
sql
storage
connect
colblk.cppconnect.ccfilamap.cppfilamdbf.cppfilamgz.cppfilamvct.cppfilamzip.cppfilter.cppfmdlex.cjson.cppjsonudf.cpplibdoc.cppmyutil.cppplugutil.cppreldef.cpptabdos.cpptabfmt.cpptabjson.cpptaboccur.cpptabpivot.cpptabvir.cpptabxml.cppxindex.cppzip.c
innobase
maria
mroonga/vendor/groonga/lib
myisam
rocksdb
strings
unittest/mysys
zlib
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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';
|
||||
|
|
5
mysql-test/suite/wsrep/r/MDEV-20625.result
Normal file
5
mysql-test/suite/wsrep/r/MDEV-20625.result
Normal 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;
|
8
mysql-test/suite/wsrep/t/MDEV-20625.cnf
Normal file
8
mysql-test/suite/wsrep/t/MDEV-20625.cnf
Normal 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
|
10
mysql-test/suite/wsrep/t/MDEV-20625.test
Normal file
10
mysql-test/suite/wsrep/t/MDEV-20625.test
Normal 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;
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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, <ime, 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
|
||||
|
|
121
sql/wsrep_var.cc
121
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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)));
|
||||
|
|
|
@ -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 */
|
||||
/*@{*/
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
48
storage/mroonga/vendor/groonga/lib/ii.c
vendored
48
storage/mroonga/vendor/groonga/lib/ii.c
vendored
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue