Merge 10.4 into 10.5
@ -1686,7 +1686,7 @@ static struct my_option my_options[] =
|
|||||||
&stop_position, &stop_position, 0, GET_ULL,
|
&stop_position, &stop_position, 0, GET_ULL,
|
||||||
REQUIRED_ARG, (longlong)(~(my_off_t)0), BIN_LOG_HEADER_SIZE,
|
REQUIRED_ARG, (longlong)(~(my_off_t)0), BIN_LOG_HEADER_SIZE,
|
||||||
(ulonglong)(~(my_off_t)0), 0, 0, 0},
|
(ulonglong)(~(my_off_t)0), 0, 0, 0},
|
||||||
{"table", 'T', "List entries for just this table (local log only).",
|
{"table", 'T', "List entries for just this table (affects only row events).",
|
||||||
&table, &table, 0, GET_STR_ALLOC, REQUIRED_ARG,
|
&table, &table, 0, GET_STR_ALLOC, REQUIRED_ARG,
|
||||||
0, 0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0, 0},
|
||||||
{"to-last-log", 't', "Requires -R. Will not stop at the end of the \
|
{"to-last-log", 't', "Requires -R. Will not stop at the end of the \
|
||||||
|
@ -102,6 +102,9 @@ ${WOLFCRYPT_SRCDIR}/rsa.c
|
|||||||
${WOLFCRYPT_SRCDIR}/sha.c
|
${WOLFCRYPT_SRCDIR}/sha.c
|
||||||
${WOLFCRYPT_SRCDIR}/sha256.c
|
${WOLFCRYPT_SRCDIR}/sha256.c
|
||||||
${WOLFCRYPT_SRCDIR}/sha512.c
|
${WOLFCRYPT_SRCDIR}/sha512.c
|
||||||
|
${WOLFCRYPT_SRCDIR}/poly1305.c
|
||||||
|
${WOLFCRYPT_SRCDIR}/chacha.c
|
||||||
|
${WOLFCRYPT_SRCDIR}/chacha20_poly1305.c
|
||||||
${WOLFCRYPT_SRCDIR}/wc_port.c
|
${WOLFCRYPT_SRCDIR}/wc_port.c
|
||||||
${WOLFCRYPT_SRCDIR}/wc_encrypt.c
|
${WOLFCRYPT_SRCDIR}/wc_encrypt.c
|
||||||
${WOLFCRYPT_SRCDIR}/hash.c
|
${WOLFCRYPT_SRCDIR}/hash.c
|
||||||
@ -159,6 +162,8 @@ IF(WOLFSSL_X86_64_BUILD)
|
|||||||
LIST(APPEND WOLFCRYPT_SOURCES
|
LIST(APPEND WOLFCRYPT_SOURCES
|
||||||
${WOLFCRYPT_SRCDIR}/aes_asm.S
|
${WOLFCRYPT_SRCDIR}/aes_asm.S
|
||||||
${WOLFCRYPT_SRCDIR}/aes_gcm_asm.S
|
${WOLFCRYPT_SRCDIR}/aes_gcm_asm.S
|
||||||
|
${WOLFCRYPT_SRCDIR}/chacha_asm.S
|
||||||
|
${WOLFCRYPT_SRCDIR}/poly1305_asm.S
|
||||||
${WOLFCRYPT_SRCDIR}/sha512_asm.S
|
${WOLFCRYPT_SRCDIR}/sha512_asm.S
|
||||||
${WOLFCRYPT_SRCDIR}/sha256_asm.S)
|
${WOLFCRYPT_SRCDIR}/sha256_asm.S)
|
||||||
ADD_DEFINITIONS(-maes -msse4.2 -mpclmul)
|
ADD_DEFINITIONS(-maes -msse4.2 -mpclmul)
|
||||||
|
@ -19,11 +19,15 @@
|
|||||||
#define HAVE_TLS_EXTENSIONS
|
#define HAVE_TLS_EXTENSIONS
|
||||||
#define HAVE_AES_ECB
|
#define HAVE_AES_ECB
|
||||||
#define HAVE_AESGCM
|
#define HAVE_AESGCM
|
||||||
|
#define HAVE_CHACHA
|
||||||
|
#define HAVE_POLY1305
|
||||||
#define WOLFSSL_AES_COUNTER
|
#define WOLFSSL_AES_COUNTER
|
||||||
#define NO_WOLFSSL_STUB
|
#define NO_WOLFSSL_STUB
|
||||||
#define OPENSSL_ALL
|
#define OPENSSL_ALL
|
||||||
#define WOLFSSL_ALLOW_TLSV10
|
#define WOLFSSL_ALLOW_TLSV10
|
||||||
#define NO_OLD_TIMEVAL_NAME
|
#define NO_OLD_TIMEVAL_NAME
|
||||||
|
#define HAVE_SECURE_RENEGOTIATION
|
||||||
|
#define HAVE_EXTENDED_MASTER
|
||||||
|
|
||||||
/* TLSv1.3 definitions (all needed to build) */
|
/* TLSv1.3 definitions (all needed to build) */
|
||||||
#define WOLFSSL_TLS13
|
#define WOLFSSL_TLS13
|
||||||
|
@ -45,7 +45,7 @@ extern "C" {
|
|||||||
/* The max key length of all supported algorithms */
|
/* The max key length of all supported algorithms */
|
||||||
#define MY_AES_MAX_KEY_LENGTH 32
|
#define MY_AES_MAX_KEY_LENGTH 32
|
||||||
|
|
||||||
#define MY_AES_CTX_SIZE 672
|
#define MY_AES_CTX_SIZE 1024
|
||||||
|
|
||||||
enum my_aes_mode {
|
enum my_aes_mode {
|
||||||
MY_AES_ECB, MY_AES_CBC
|
MY_AES_ECB, MY_AES_CBC
|
||||||
|
1
mysql-test/include/have_innodb_16k.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--innodb-page-size=16k
|
1
mysql-test/include/have_innodb_32k.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--innodb-page-size=32k
|
1
mysql-test/include/have_innodb_4k.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--innodb-page-size=4k
|
1
mysql-test/include/have_innodb_64k.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--innodb-page-size=64k
|
1
mysql-test/include/have_innodb_8k.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--innodb-page-size=8k
|
@ -20,9 +20,10 @@ package My::Platform;
|
|||||||
use strict;
|
use strict;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
|
use Carp;
|
||||||
|
|
||||||
use base qw(Exporter);
|
use base qw(Exporter);
|
||||||
our @EXPORT= qw(IS_CYGWIN IS_WINDOWS IS_WIN32PERL IS_AIX
|
our @EXPORT= qw(IS_CYGWIN IS_MSYS IS_WINDOWS IS_WIN32PERL IS_AIX
|
||||||
native_path posix_path mixed_path
|
native_path posix_path mixed_path
|
||||||
check_socket_path_length process_alive open_for_append);
|
check_socket_path_length process_alive open_for_append);
|
||||||
|
|
||||||
@ -33,9 +34,15 @@ BEGIN {
|
|||||||
die "Could not execute 'cygpath': $!";
|
die "Could not execute 'cygpath': $!";
|
||||||
}
|
}
|
||||||
eval 'sub IS_CYGWIN { 1 }';
|
eval 'sub IS_CYGWIN { 1 }';
|
||||||
|
eval 'sub IS_MSYS { 0 }';
|
||||||
|
}
|
||||||
|
elsif ($^O eq "msys") {
|
||||||
|
eval 'sub IS_CYGWIN { 1 }';
|
||||||
|
eval 'sub IS_MSYS { 1 }';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
eval 'sub IS_CYGWIN { 0 }';
|
eval 'sub IS_CYGWIN { 0 }';
|
||||||
|
eval 'sub IS_MSYS { 0 }';
|
||||||
}
|
}
|
||||||
if ($^O eq "MSWin32") {
|
if ($^O eq "MSWin32") {
|
||||||
eval 'sub IS_WIN32PERL { 1 }';
|
eval 'sub IS_WIN32PERL { 1 }';
|
||||||
@ -95,8 +102,13 @@ sub mixed_path {
|
|||||||
|
|
||||||
sub native_path {
|
sub native_path {
|
||||||
my ($path)= @_;
|
my ($path)= @_;
|
||||||
$path=~ s/\//\\/g
|
if (IS_CYGWIN) {
|
||||||
if (IS_CYGWIN or IS_WIN32PERL);
|
# \\\\ protects against 2 expansions (just for the case)
|
||||||
|
$path=~ s/\/+|\\+/\\\\\\\\/g;
|
||||||
|
}
|
||||||
|
elsif (IS_WINDOWS) {
|
||||||
|
$path=~ s/\/+/\\/g;
|
||||||
|
}
|
||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -219,4 +231,69 @@ sub open_for_append
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub check_cygwin_subshell
|
||||||
|
{
|
||||||
|
# Only pipe (or sh-expansion) is fed to /bin/sh
|
||||||
|
my $out= `echo %comspec%|cat`;
|
||||||
|
return ($out =~ /\bcmd.exe\b/) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub install_shell_wrapper()
|
||||||
|
{
|
||||||
|
system("rm -f /bin/sh.exe") and die $!;
|
||||||
|
my $wrapper= <<'EOF';
|
||||||
|
#!/bin/bash
|
||||||
|
if [[ -n "$MTR_PERL" && "$1" = "-c" ]]; then
|
||||||
|
shift
|
||||||
|
exec $(cygpath -m "$COMSPEC") /C "$@"
|
||||||
|
fi
|
||||||
|
exec /bin/bash "$@"
|
||||||
|
EOF
|
||||||
|
open(OUT, '>', "/bin/sh") or die "/bin/sh: $!\n";
|
||||||
|
print OUT $wrapper;
|
||||||
|
close(OUT);
|
||||||
|
system("chmod +x /bin/sh") and die $!;
|
||||||
|
print "Cygwin subshell wrapper /bin/sh was installed, please restart MTR!\n";
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub uninstall_shell_wrapper()
|
||||||
|
{
|
||||||
|
system("rm -f /bin/sh") and die $!;
|
||||||
|
system("cp /bin/bash.exe /bin/sh.exe") and die $!;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cygwin_subshell_fix
|
||||||
|
{
|
||||||
|
my ($opt_name, $opt_value)= @_;
|
||||||
|
if ($opt_name ne "cygwin-subshell-fix") {
|
||||||
|
confess "Wrong option name: ${opt_name}";
|
||||||
|
}
|
||||||
|
if ($opt_value eq "do") {
|
||||||
|
if (check_cygwin_subshell()) {
|
||||||
|
install_shell_wrapper();
|
||||||
|
} else {
|
||||||
|
print "Cygwin subshell fix was already installed, skipping...\n";
|
||||||
|
}
|
||||||
|
} elsif ($opt_value eq "remove") {
|
||||||
|
if (check_cygwin_subshell()) {
|
||||||
|
print "Cygwin subshell fix was already uninstalled, skipping...\n";
|
||||||
|
} else {
|
||||||
|
uninstall_shell_wrapper();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
die "Wrong --cygwin-subshell-fix value: ${opt_value} (expected do/remove)";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub options
|
||||||
|
{
|
||||||
|
if (IS_CYGWIN) {
|
||||||
|
return ('cygwin-subshell-fix=s' => \&cygwin_subshell_fix);
|
||||||
|
} else {
|
||||||
|
return ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -102,7 +102,7 @@ else
|
|||||||
|
|
||||||
# Find the safe process binary or script
|
# Find the safe process binary or script
|
||||||
sub find_bin {
|
sub find_bin {
|
||||||
if (IS_WIN32PERL or IS_CYGWIN)
|
if (IS_WINDOWS)
|
||||||
{
|
{
|
||||||
# Use my_safe_process.exe
|
# Use my_safe_process.exe
|
||||||
my $exe= my_find_bin($bindir, ["lib/My/SafeProcess", "My/SafeProcess"],
|
my $exe= my_find_bin($bindir, ["lib/My/SafeProcess", "My/SafeProcess"],
|
||||||
|
@ -111,7 +111,7 @@ sub read_test {
|
|||||||
$serialized =~ s/\\([0-9a-fA-F]{2})/chr(hex($1))/eg;
|
$serialized =~ s/\\([0-9a-fA-F]{2})/chr(hex($1))/eg;
|
||||||
my $test= Storable::thaw($serialized);
|
my $test= Storable::thaw($serialized);
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
die "wrong class (hack attempt?): ".ref($test)."\n".Dumper(\$test, $serialized)
|
confess "Not My::Test: ". ref($test). "\n". Dumper(\$test, $serialized)
|
||||||
unless ref($test) eq 'My::Test';
|
unless ref($test) eq 'My::Test';
|
||||||
resfile_from_test($test) if $::opt_resfile;
|
resfile_from_test($test) if $::opt_resfile;
|
||||||
return $test;
|
return $test;
|
||||||
|
@ -48,6 +48,7 @@ our $timestamp= 0;
|
|||||||
our $timediff= 0;
|
our $timediff= 0;
|
||||||
our $name;
|
our $name;
|
||||||
our $verbose;
|
our $verbose;
|
||||||
|
# TODO: no option for that? Why is it different from $verbose?
|
||||||
our $verbose_restart= 0;
|
our $verbose_restart= 0;
|
||||||
our $timer= 1;
|
our $timer= 1;
|
||||||
our $tests_total;
|
our $tests_total;
|
||||||
|
@ -455,6 +455,41 @@ create table t1 (f text not null, unique (f));
|
|||||||
insert into t1 (f) select 'f';
|
insert into t1 (f) select 'f';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
#
|
#
|
||||||
|
# MDEV-32012 hash unique corrupts index on virtual blobs
|
||||||
|
#
|
||||||
|
create table t1 (
|
||||||
|
f1 varchar(25),
|
||||||
|
v1 mediumtext generated always as (concat('f1:', f1)) virtual,
|
||||||
|
unique key (f1) using hash,
|
||||||
|
key (v1(1000))
|
||||||
|
);
|
||||||
|
flush status;
|
||||||
|
insert ignore t1 (f1) values (9599),(94410);
|
||||||
|
show status like 'handler_read_next';
|
||||||
|
Variable_name Value
|
||||||
|
Handler_read_next 1
|
||||||
|
# the above MUST BE =1
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
update t1 set f1=100 where f1=9599;
|
||||||
|
update t1 set f1=9599 where f1=100;
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-32015 insert into an empty table fails with hash unique
|
||||||
|
#
|
||||||
|
create table t1 (f1 varchar(25), unique (f1) using hash);
|
||||||
|
insert ignore t1 (f1) values ('new york'),('virginia'),('spouse'),(null),('zqekmqpwutxnzddrbjycyo'),('nebraska'),('illinois'),('qe'),('ekmqpwut'),('arizona'),('arizona');
|
||||||
|
Warnings:
|
||||||
|
Warning 1062 Duplicate entry 'arizona' for key 'f1'
|
||||||
|
check table t1 extended;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
drop table t1;
|
||||||
|
#
|
||||||
# End of 10.4 tests
|
# End of 10.4 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -456,6 +456,38 @@ create table t1 (f text not null, unique (f));
|
|||||||
insert into t1 (f) select 'f';
|
insert into t1 (f) select 'f';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-32012 hash unique corrupts index on virtual blobs
|
||||||
|
--echo #
|
||||||
|
create table t1 (
|
||||||
|
f1 varchar(25),
|
||||||
|
v1 mediumtext generated always as (concat('f1:', f1)) virtual,
|
||||||
|
unique key (f1) using hash,
|
||||||
|
key (v1(1000))
|
||||||
|
);
|
||||||
|
flush status;
|
||||||
|
insert ignore t1 (f1) values (9599),(94410);
|
||||||
|
# handler_read_next must be 1 below, meaning there was a hash collision above.
|
||||||
|
# if a change in the hash function causes these values not to collide anymore,
|
||||||
|
# the test must be adjusted to use some other values that collide.
|
||||||
|
# to find a collision add an assert into check_duplicate_long_entry_key()
|
||||||
|
# and run, like, insert...select * seq_from_1_to_1000000000
|
||||||
|
show status like 'handler_read_next';
|
||||||
|
--echo # the above MUST BE =1
|
||||||
|
check table t1 extended;
|
||||||
|
update t1 set f1=100 where f1=9599;
|
||||||
|
update t1 set f1=9599 where f1=100;
|
||||||
|
check table t1 extended;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-32015 insert into an empty table fails with hash unique
|
||||||
|
--echo #
|
||||||
|
create table t1 (f1 varchar(25), unique (f1) using hash);
|
||||||
|
insert ignore t1 (f1) values ('new york'),('virginia'),('spouse'),(null),('zqekmqpwutxnzddrbjycyo'),('nebraska'),('illinois'),('qe'),('ekmqpwut'),('arizona'),('arizona');
|
||||||
|
check table t1 extended;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 10.4 tests
|
--echo # End of 10.4 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
#
|
||||||
|
# MDEV-22722 Assertion "inited==NONE" failed in handler::ha_index_init on the slave during UPDATE
|
||||||
|
#
|
||||||
include/master-slave.inc
|
include/master-slave.inc
|
||||||
[connection master]
|
[connection master]
|
||||||
create table t1 (i1 int, a1 text, unique key i1 (a1)) engine=myisam;
|
create table t1 (i1 int, a1 text, unique key i1 (a1)) engine=myisam;
|
||||||
@ -6,7 +9,21 @@ insert into t1 values (2,2);
|
|||||||
update t1 set a1 = 'd' limit 1;
|
update t1 set a1 = 'd' limit 1;
|
||||||
update t1 set a1 = 'd2' where i1= 2;
|
update t1 set a1 = 'd2' where i1= 2;
|
||||||
connection slave;
|
connection slave;
|
||||||
connection slave;
|
|
||||||
connection master;
|
connection master;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-32093 long uniques break old->new replication
|
||||||
|
#
|
||||||
|
connection slave;
|
||||||
|
create table t1 (id int not null, b1 varchar(255) not null, b2 varchar(2550) not null, unique (id), unique key (b1,b2) using hash) default charset utf8mb3;
|
||||||
|
set global slave_exec_mode=idempotent;
|
||||||
|
binlog 'aRf2ZA8BAAAA/AAAAAABAAAAAAQAMTAuNS4xNS1NYXJpYURCLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpF/ZkEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEwQADQgICAoKCgFRmTlk';
|
||||||
|
binlog 'bBf2ZBMBAAAANAAAAJgHAAAAAHEAAAAAAAEABHRlc3QAAnQxAAQDDw8IBP0C4h0AeqMD4A==bBf2ZBcBAAAANAAAAMwHAAAAAHEAAAAAAAEABP/wj6QAAAEAYgEAZa6/VU0JAAAANteqUw==';
|
||||||
|
binlog 'bBf2ZBMBAAAANAAAAJgHAAAAAHEAAAAAAAEABHRlc3QAAnQxAAQDDw8IBP0C4h0AeqMD4A==bBf2ZBcBAAAANAAAAMwHAAAAAHEAAAAAAAEABP/wj6QAAAEAYgEAZa6/VU0JAAAANteqUw==';
|
||||||
|
binlog 'bBf2ZBMBAAAANAAAAHUkAAAAAHEAAAAAAAEABHRlc3QAAnQxAAQDDw8IBP0C4h0AaTGFIg==bBf2ZBgBAAAASAAAAL0kAAAAAHEAAAAAAAEABP//8I+kAAABAGIBAGWuv1VNCQAAAPBuWwAAAQBiAQBlrr9VTQkAAADxS9Lu';
|
||||||
|
drop table t1;
|
||||||
|
set global slave_exec_mode=default;
|
||||||
|
#
|
||||||
|
# End of 10.4 tests
|
||||||
|
#
|
||||||
include/rpl_end.inc
|
include/rpl_end.inc
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
# Long unique bugs related to master slave replication
|
# Long unique bugs related to master slave replication
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
--echo #
|
||||||
# MDEV-22722 Assertion "inited==NONE" failed in handler::ha_index_init on the slave during UPDATE
|
--echo # MDEV-22722 Assertion "inited==NONE" failed in handler::ha_index_init on the slave during UPDATE
|
||||||
#
|
--echo #
|
||||||
|
|
||||||
--source include/have_binlog_format_row.inc
|
--source include/have_binlog_format_row.inc
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
@ -16,9 +16,34 @@ update t1 set a1 = 'd' limit 1;
|
|||||||
update t1 set a1 = 'd2' where i1= 2;
|
update t1 set a1 = 'd2' where i1= 2;
|
||||||
|
|
||||||
sync_slave_with_master;
|
sync_slave_with_master;
|
||||||
connection slave;
|
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-32093 long uniques break old->new replication
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# this is techically a bug in replication, but it needs an old master
|
||||||
|
# so we'll run it as a non-replicated test with BINLOG command
|
||||||
|
sync_slave_with_master;
|
||||||
|
create table t1 (id int not null, b1 varchar(255) not null, b2 varchar(2550) not null, unique (id), unique key (b1,b2) using hash) default charset utf8mb3;
|
||||||
|
set global slave_exec_mode=idempotent;
|
||||||
|
|
||||||
|
# Format_description_log_event, MariaDB-10.5.15
|
||||||
|
binlog 'aRf2ZA8BAAAA/AAAAAABAAAAAAQAMTAuNS4xNS1NYXJpYURCLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpF/ZkEzgNAAgAEgAEBAQEEgAA5AAEGggAAAAICAgCAAAACgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEwQADQgICAoKCgFRmTlk';
|
||||||
|
|
||||||
|
### INSERT t1 VALUES (42127, 'b', 'e', 39952170926)
|
||||||
|
binlog 'bBf2ZBMBAAAANAAAAJgHAAAAAHEAAAAAAAEABHRlc3QAAnQxAAQDDw8IBP0C4h0AeqMD4A==bBf2ZBcBAAAANAAAAMwHAAAAAHEAAAAAAAEABP/wj6QAAAEAYgEAZa6/VU0JAAAANteqUw==';
|
||||||
|
binlog 'bBf2ZBMBAAAANAAAAJgHAAAAAHEAAAAAAAEABHRlc3QAAnQxAAQDDw8IBP0C4h0AeqMD4A==bBf2ZBcBAAAANAAAAMwHAAAAAHEAAAAAAAEABP/wj6QAAAEAYgEAZa6/VU0JAAAANteqUw==';
|
||||||
|
|
||||||
|
### UPDATE t1 WHERE (42127, 'b', 'e', 39952170926) SET (23406, 'b', 'e', 39952170926)
|
||||||
|
binlog 'bBf2ZBMBAAAANAAAAHUkAAAAAHEAAAAAAAEABHRlc3QAAnQxAAQDDw8IBP0C4h0AaTGFIg==bBf2ZBgBAAAASAAAAL0kAAAAAHEAAAAAAAEABP//8I+kAAABAGIBAGWuv1VNCQAAAPBuWwAAAQBiAQBlrr9VTQkAAADxS9Lu';
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
set global slave_exec_mode=default;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 10.4 tests
|
||||||
|
--echo #
|
||||||
--source include/rpl_end.inc
|
--source include/rpl_end.inc
|
||||||
|
@ -1271,4 +1271,16 @@ SET sql_mode=ORACLE;
|
|||||||
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';
|
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';
|
||||||
SET sql_mode=default;
|
SET sql_mode=default;
|
||||||
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';
|
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';
|
||||||
|
#
|
||||||
|
# MDEV-17711 Assertion `arena_for_set_stmt== 0' failed in LEX::set_arena_for_set_stmt upon SET STATEMENT
|
||||||
|
#
|
||||||
|
set rand_seed1=1, rand_seed2=2;
|
||||||
|
set statement rand_seed1=4 for select 2, @@rand_seed1, @@rand_seed2;
|
||||||
|
set statement rand_seed2=5 for select 3, @@rand_seed1, @@rand_seed2 $
|
||||||
|
2 @@rand_seed1 @@rand_seed2
|
||||||
|
2 4 2
|
||||||
|
3 @@rand_seed1 @@rand_seed2
|
||||||
|
3 1 5
|
||||||
|
#
|
||||||
# End of 10.4 tests
|
# End of 10.4 tests
|
||||||
|
#
|
||||||
|
@ -1191,4 +1191,16 @@ SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unk
|
|||||||
SET sql_mode=default;
|
SET sql_mode=default;
|
||||||
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';
|
SET STATEMENT max_statement_time=30 FOR DELETE FROM mysql.user where user = 'unknown';
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-17711 Assertion `arena_for_set_stmt== 0' failed in LEX::set_arena_for_set_stmt upon SET STATEMENT
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--delimiter $
|
||||||
|
set rand_seed1=1, rand_seed2=2;
|
||||||
|
set statement rand_seed1=4 for select 2, @@rand_seed1, @@rand_seed2;
|
||||||
|
set statement rand_seed2=5 for select 3, @@rand_seed1, @@rand_seed2 $
|
||||||
|
--delimiter ;
|
||||||
|
|
||||||
|
--echo #
|
||||||
--echo # End of 10.4 tests
|
--echo # End of 10.4 tests
|
||||||
|
--echo #
|
||||||
|
@ -347,7 +347,7 @@ $| = 1; # Automatically flush STDOUT
|
|||||||
main();
|
main();
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
$ENV{MTR_PERL}=$^X;
|
$ENV{MTR_PERL}= mixed_path($^X);
|
||||||
|
|
||||||
# Default, verbosity on
|
# Default, verbosity on
|
||||||
report_option('verbose', 0);
|
report_option('verbose', 0);
|
||||||
@ -490,7 +490,7 @@ sub main {
|
|||||||
mark_time_used('init');
|
mark_time_used('init');
|
||||||
|
|
||||||
my ($prefix, $fail, $completed, $extra_warnings)=
|
my ($prefix, $fail, $completed, $extra_warnings)=
|
||||||
run_test_server($server, $tests, \%children);
|
Manager::run($server, $tests, \%children);
|
||||||
|
|
||||||
exit(0) if $opt_start_exit;
|
exit(0) if $opt_start_exit;
|
||||||
|
|
||||||
@ -569,23 +569,205 @@ sub main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub run_test_server ($$$) {
|
package Manager;
|
||||||
|
use POSIX ":sys_wait_h";
|
||||||
|
use File::Basename;
|
||||||
|
use File::Find;
|
||||||
|
use IO::Socket::INET;
|
||||||
|
use IO::Select;
|
||||||
|
use mtr_report;
|
||||||
|
use My::Platform;
|
||||||
|
|
||||||
|
my $num_saved_datadir; # Number of datadirs saved in vardir/log/ so far.
|
||||||
|
my $num_failed_test; # Number of tests failed so far
|
||||||
|
my $test_failure; # Set true if test suite failed
|
||||||
|
my $extra_warnings; # Warnings found during server shutdowns
|
||||||
|
|
||||||
|
my $completed;
|
||||||
|
my %running;
|
||||||
|
my $result;
|
||||||
|
my $exe_mysqld; # Used as hint to CoreDump
|
||||||
|
my %names;
|
||||||
|
|
||||||
|
sub parse_protocol($$) {
|
||||||
|
my $sock= shift;
|
||||||
|
my $line= shift;
|
||||||
|
|
||||||
|
if ($line eq 'TESTRESULT'){
|
||||||
|
mtr_verbose2("Got TESTRESULT from ". $names{$sock});
|
||||||
|
$result= My::Test::read_test($sock);
|
||||||
|
|
||||||
|
# Report test status
|
||||||
|
mtr_report_test($result);
|
||||||
|
|
||||||
|
if ( $result->is_failed() ) {
|
||||||
|
|
||||||
|
# Save the workers "savedir" in var/log
|
||||||
|
my $worker_savedir= $result->{savedir};
|
||||||
|
my $worker_savename= basename($worker_savedir);
|
||||||
|
my $savedir= "$opt_vardir/log/$worker_savename";
|
||||||
|
|
||||||
|
# Move any core files from e.g. mysqltest
|
||||||
|
foreach my $coref (glob("core*"), glob("*.dmp"))
|
||||||
|
{
|
||||||
|
mtr_report(" - found '$coref', moving it to '$worker_savedir'");
|
||||||
|
::move($coref, $worker_savedir);
|
||||||
|
}
|
||||||
|
|
||||||
|
find(
|
||||||
|
{
|
||||||
|
no_chdir => 1,
|
||||||
|
wanted => sub
|
||||||
|
{
|
||||||
|
My::CoreDump::core_wanted(\$num_saved_cores,
|
||||||
|
$opt_max_save_core,
|
||||||
|
@opt_cases == 0,
|
||||||
|
$exe_mysqld, $opt_parallel);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
$worker_savedir);
|
||||||
|
|
||||||
|
if ($num_saved_datadir >= $opt_max_save_datadir)
|
||||||
|
{
|
||||||
|
mtr_report(" - skipping '$worker_savedir/'");
|
||||||
|
main::rmtree($worker_savedir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtr_report(" - saving '$worker_savedir/' to '$savedir/'");
|
||||||
|
rename($worker_savedir, $savedir);
|
||||||
|
$num_saved_datadir++;
|
||||||
|
}
|
||||||
|
main::resfile_print_test();
|
||||||
|
$num_failed_test++ unless ($result->{retries} ||
|
||||||
|
$result->{exp_fail});
|
||||||
|
|
||||||
|
$test_failure= 1;
|
||||||
|
if ( !$opt_force ) {
|
||||||
|
# Test has failed, force is off
|
||||||
|
push(@$completed, $result);
|
||||||
|
if ($result->{'dont_kill_server'})
|
||||||
|
{
|
||||||
|
mtr_verbose2("${line}: saying BYE to ". $names{$sock});
|
||||||
|
print $sock "BYE\n";
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return ["Failure", 1, $completed, $extra_warnings];
|
||||||
|
}
|
||||||
|
elsif ($opt_max_test_fail > 0 and
|
||||||
|
$num_failed_test >= $opt_max_test_fail) {
|
||||||
|
push(@$completed, $result);
|
||||||
|
mtr_report("Too many tests($num_failed_test) failed!",
|
||||||
|
"Terminating...");
|
||||||
|
return ["Too many failed", 1, $completed, $extra_warnings];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main::resfile_print_test();
|
||||||
|
# Retry test run after test failure
|
||||||
|
my $retries= $result->{retries} || 2;
|
||||||
|
my $test_has_failed= $result->{failures} || 0;
|
||||||
|
if ($test_has_failed and $retries <= $opt_retry){
|
||||||
|
# Test should be run one more time unless it has failed
|
||||||
|
# too many times already
|
||||||
|
my $tname= $result->{name};
|
||||||
|
my $failures= $result->{failures};
|
||||||
|
if ($opt_retry > 1 and $failures >= $opt_retry_failure){
|
||||||
|
mtr_report("\nTest $tname has failed $failures times,",
|
||||||
|
"no more retries!\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mtr_report("\nRetrying test $tname, ".
|
||||||
|
"attempt($retries/$opt_retry)...\n");
|
||||||
|
#saving the log file as filename.failed in case of retry
|
||||||
|
if ( $result->is_failed() ) {
|
||||||
|
my $worker_logdir= $result->{savedir};
|
||||||
|
my $log_file_name=dirname($worker_logdir)."/".$result->{shortname}.".log";
|
||||||
|
|
||||||
|
if (-e $log_file_name) {
|
||||||
|
$result->{'logfile-failed'} = ::mtr_lastlinesfromfile($log_file_name, 20);
|
||||||
|
} else {
|
||||||
|
$result->{'logfile-failed'} = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
rename $log_file_name, $log_file_name.".failed";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
local @$result{'retries', 'result'};
|
||||||
|
delete $result->{result};
|
||||||
|
$result->{retries}= $retries+1;
|
||||||
|
$result->write_test($sock, 'TESTCASE');
|
||||||
|
}
|
||||||
|
push(@$completed, $result);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Repeat test $opt_repeat number of times
|
||||||
|
my $repeat= $result->{repeat} || 1;
|
||||||
|
if ($repeat < $opt_repeat)
|
||||||
|
{
|
||||||
|
$result->{retries}= 0;
|
||||||
|
$result->{rep_failures}++ if $result->{failures};
|
||||||
|
$result->{failures}= 0;
|
||||||
|
delete($result->{result});
|
||||||
|
$result->{repeat}= $repeat+1;
|
||||||
|
$result->write_test($sock, 'TESTCASE');
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove from list of running
|
||||||
|
mtr_error("'", $result->{name},"' is not known to be running")
|
||||||
|
unless delete $running{$result->key()};
|
||||||
|
|
||||||
|
# Save result in completed list
|
||||||
|
push(@$completed, $result);
|
||||||
|
|
||||||
|
} # if ($line eq 'TESTRESULT')
|
||||||
|
elsif ($line=~ /^START (.*)$/){
|
||||||
|
# Send first test
|
||||||
|
$names{$sock}= $1;
|
||||||
|
}
|
||||||
|
elsif ($line eq 'WARNINGS'){
|
||||||
|
my $fake_test= My::Test::read_test($sock);
|
||||||
|
my $test_list= join (" ", @{$fake_test->{testnames}});
|
||||||
|
push @$extra_warnings, $test_list;
|
||||||
|
my $report= $fake_test->{'warnings'};
|
||||||
|
mtr_report("***Warnings generated in error logs during shutdown ".
|
||||||
|
"after running tests: $test_list\n\n$report");
|
||||||
|
$test_failure= 1;
|
||||||
|
if ( !$opt_force ) {
|
||||||
|
# Test failure due to warnings, force is off
|
||||||
|
mtr_verbose2("Socket loop exiting 3");
|
||||||
|
return ["Warnings in log", 1, $completed, $extra_warnings];
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
elsif ($line =~ /^SPENT/) {
|
||||||
|
main::add_total_times($line);
|
||||||
|
}
|
||||||
|
elsif ($line eq 'VALGREP' && $opt_valgrind) {
|
||||||
|
$valgrind_reports= 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
mtr_error("Unknown response: '$line' from client");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub run ($$$) {
|
||||||
my ($server, $tests, $children) = @_;
|
my ($server, $tests, $children) = @_;
|
||||||
|
my $suite_timeout= main::start_timer(main::suite_timeout());
|
||||||
my $num_saved_datadir= 0; # Number of datadirs saved in vardir/log/ so far.
|
$exe_mysqld= main::find_mysqld($bindir) || ""; # Used as hint to CoreDump
|
||||||
my $num_failed_test= 0; # Number of tests failed so far
|
$num_saved_datadir= 0; # Number of datadirs saved in vardir/log/ so far.
|
||||||
my $test_failure= 0; # Set true if test suite failed
|
$num_failed_test= 0; # Number of tests failed so far
|
||||||
my $extra_warnings= []; # Warnings found during server shutdowns
|
$test_failure= 0; # Set true if test suite failed
|
||||||
|
$extra_warnings= []; # Warnings found during server shutdowns
|
||||||
my $completed= [];
|
$completed= [];
|
||||||
my %running;
|
|
||||||
my $result;
|
|
||||||
my $exe_mysqld= find_mysqld($bindir) || ""; # Used as hint to CoreDump
|
|
||||||
|
|
||||||
my $suite_timeout= start_timer(suite_timeout());
|
|
||||||
|
|
||||||
my $s= IO::Select->new();
|
my $s= IO::Select->new();
|
||||||
my $childs= 0;
|
my $childs= 0;
|
||||||
|
|
||||||
$s->add($server);
|
$s->add($server);
|
||||||
while (1) {
|
while (1) {
|
||||||
if ($opt_stop_file)
|
if ($opt_stop_file)
|
||||||
@ -593,190 +775,60 @@ sub run_test_server ($$$) {
|
|||||||
if (mtr_wait_lock_file($opt_stop_file, $opt_stop_keep_alive))
|
if (mtr_wait_lock_file($opt_stop_file, $opt_stop_keep_alive))
|
||||||
{
|
{
|
||||||
# We were waiting so restart timer process
|
# We were waiting so restart timer process
|
||||||
my $suite_timeout= start_timer(suite_timeout());
|
my $suite_timeout= main::start_timer(main::suite_timeout());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mark_time_used('admin');
|
main::mark_time_used('admin');
|
||||||
my @ready = $s->can_read(1); # Wake up once every second
|
my @ready = $s->can_read(1); # Wake up once every second
|
||||||
mtr_debug("Got ". (0 + @ready). " connection(s)");
|
if (@ready > 0) {
|
||||||
mark_time_idle();
|
mtr_verbose2("Got ". (0 + @ready). " connection(s)");
|
||||||
foreach my $sock (@ready) {
|
}
|
||||||
|
main::mark_time_idle();
|
||||||
|
my $i= 0;
|
||||||
|
sock_loop: foreach my $sock (@ready) {
|
||||||
|
++$i;
|
||||||
if ($sock == $server) {
|
if ($sock == $server) {
|
||||||
# New client connected
|
# New client connected
|
||||||
++$childs;
|
++$childs;
|
||||||
my $child= $sock->accept();
|
my $child= $sock->accept();
|
||||||
mtr_verbose2("Client connected (got ${childs} childs)");
|
mtr_verbose2("Connection ${i}: Worker connected (got ${childs} childs)");
|
||||||
$s->add($child);
|
$s->add($child);
|
||||||
print $child "HELLO\n";
|
print $child "HELLO\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my $line= <$sock>;
|
my $j= 0;
|
||||||
if (!defined $line) {
|
$sock->blocking(0);
|
||||||
# Client disconnected
|
while (my $line= <$sock>) {
|
||||||
--$childs;
|
++$j;
|
||||||
mtr_verbose2("Child closed socket (left ${childs} childs)");
|
chomp($line);
|
||||||
$s->remove($sock);
|
mtr_verbose2("Connection ${i}.${j}". (exists $names{$sock} ? " from $names{$sock}" : "") .": $line");
|
||||||
$sock->close;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
chomp($line);
|
|
||||||
|
|
||||||
if ($line eq 'TESTRESULT'){
|
$sock->blocking(1);
|
||||||
$result= My::Test::read_test($sock);
|
my $res= parse_protocol($sock, $line);
|
||||||
|
$sock->blocking(0);
|
||||||
# Report test status
|
if (ref $res eq 'ARRAY') {
|
||||||
mtr_report_test($result);
|
return @$res;
|
||||||
|
} elsif ($res == 1) {
|
||||||
if ( $result->is_failed() ) {
|
next;
|
||||||
|
} elsif ($res == 2) {
|
||||||
# Save the workers "savedir" in var/log
|
next sock_loop;
|
||||||
my $worker_savedir= $result->{savedir};
|
|
||||||
my $worker_savename= basename($worker_savedir);
|
|
||||||
my $savedir= "$opt_vardir/log/$worker_savename";
|
|
||||||
|
|
||||||
# Move any core files from e.g. mysqltest
|
|
||||||
foreach my $coref (glob("core*"), glob("*.dmp"))
|
|
||||||
{
|
|
||||||
mtr_report(" - found '$coref', moving it to '$worker_savedir'");
|
|
||||||
move($coref, $worker_savedir);
|
|
||||||
}
|
|
||||||
|
|
||||||
find(
|
|
||||||
{
|
|
||||||
no_chdir => 1,
|
|
||||||
wanted => sub
|
|
||||||
{
|
|
||||||
My::CoreDump::core_wanted(\$num_saved_cores,
|
|
||||||
$opt_max_save_core,
|
|
||||||
@opt_cases == 0,
|
|
||||||
$exe_mysqld, $opt_parallel);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
$worker_savedir);
|
|
||||||
|
|
||||||
if ($num_saved_datadir >= $opt_max_save_datadir)
|
|
||||||
{
|
|
||||||
mtr_report(" - skipping '$worker_savedir/'");
|
|
||||||
rmtree($worker_savedir);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mtr_report(" - saving '$worker_savedir/' to '$savedir/'");
|
|
||||||
rename($worker_savedir, $savedir);
|
|
||||||
$num_saved_datadir++;
|
|
||||||
}
|
|
||||||
resfile_print_test();
|
|
||||||
$num_failed_test++ unless ($result->{retries} ||
|
|
||||||
$result->{exp_fail});
|
|
||||||
|
|
||||||
$test_failure= 1;
|
|
||||||
if ( !$opt_force ) {
|
|
||||||
# Test has failed, force is off
|
|
||||||
push(@$completed, $result);
|
|
||||||
if ($result->{'dont_kill_server'})
|
|
||||||
{
|
|
||||||
print $sock "BYE\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
return ("Failure", 1, $completed, $extra_warnings);
|
|
||||||
}
|
|
||||||
elsif ($opt_max_test_fail > 0 and
|
|
||||||
$num_failed_test >= $opt_max_test_fail) {
|
|
||||||
push(@$completed, $result);
|
|
||||||
mtr_report("Too many tests($num_failed_test) failed!",
|
|
||||||
"Terminating...");
|
|
||||||
return ("Too many failed", 1, $completed, $extra_warnings);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resfile_print_test();
|
|
||||||
# Retry test run after test failure
|
|
||||||
my $retries= $result->{retries} || 2;
|
|
||||||
my $test_has_failed= $result->{failures} || 0;
|
|
||||||
if ($test_has_failed and $retries <= $opt_retry){
|
|
||||||
# Test should be run one more time unless it has failed
|
|
||||||
# too many times already
|
|
||||||
my $tname= $result->{name};
|
|
||||||
my $failures= $result->{failures};
|
|
||||||
if ($opt_retry > 1 and $failures >= $opt_retry_failure){
|
|
||||||
mtr_report("\nTest $tname has failed $failures times,",
|
|
||||||
"no more retries!\n");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mtr_report("\nRetrying test $tname, ".
|
|
||||||
"attempt($retries/$opt_retry)...\n");
|
|
||||||
#saving the log file as filename.failed in case of retry
|
|
||||||
if ( $result->is_failed() ) {
|
|
||||||
my $worker_logdir= $result->{savedir};
|
|
||||||
my $log_file_name=dirname($worker_logdir)."/".$result->{shortname}.".log";
|
|
||||||
|
|
||||||
if (-e $log_file_name) {
|
|
||||||
$result->{'logfile-failed'} = mtr_lastlinesfromfile($log_file_name, 20);
|
|
||||||
} else {
|
|
||||||
$result->{'logfile-failed'} = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
rename $log_file_name, $log_file_name.".failed";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
local @$result{'retries', 'result'};
|
|
||||||
delete $result->{result};
|
|
||||||
$result->{retries}= $retries+1;
|
|
||||||
$result->write_test($sock, 'TESTCASE');
|
|
||||||
}
|
|
||||||
push(@$completed, $result);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Repeat test $opt_repeat number of times
|
|
||||||
my $repeat= $result->{repeat} || 1;
|
|
||||||
if ($repeat < $opt_repeat)
|
|
||||||
{
|
|
||||||
$result->{retries}= 0;
|
|
||||||
$result->{rep_failures}++ if $result->{failures};
|
|
||||||
$result->{failures}= 0;
|
|
||||||
delete($result->{result});
|
|
||||||
$result->{repeat}= $repeat+1;
|
|
||||||
$result->write_test($sock, 'TESTCASE');
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Remove from list of running
|
|
||||||
mtr_error("'", $result->{name},"' is not known to be running")
|
|
||||||
unless delete $running{$result->key()};
|
|
||||||
|
|
||||||
# Save result in completed list
|
|
||||||
push(@$completed, $result);
|
|
||||||
|
|
||||||
}
|
|
||||||
elsif ($line eq 'START'){
|
|
||||||
; # Send first test
|
|
||||||
}
|
|
||||||
elsif ($line eq 'WARNINGS'){
|
|
||||||
my $fake_test= My::Test::read_test($sock);
|
|
||||||
my $test_list= join (" ", @{$fake_test->{testnames}});
|
|
||||||
push @$extra_warnings, $test_list;
|
|
||||||
my $report= $fake_test->{'warnings'};
|
|
||||||
mtr_report("***Warnings generated in error logs during shutdown ".
|
|
||||||
"after running tests: $test_list\n\n$report");
|
|
||||||
$test_failure= 1;
|
|
||||||
if ( !$opt_force ) {
|
|
||||||
# Test failure due to warnings, force is off
|
|
||||||
return ("Warnings in log", 1, $completed, $extra_warnings);
|
|
||||||
}
|
}
|
||||||
|
if (IS_WINDOWS and !IS_CYGWIN) {
|
||||||
|
# Strawberry and ActiveState don't support blocking(0), the next iteration will be blocked!
|
||||||
|
# If there is next response now in the buffer and it is TESTRESULT we are affected by MDEV-30836 and the manager will hang.
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$sock->blocking(1);
|
||||||
|
if ($j == 0) {
|
||||||
|
# Client disconnected
|
||||||
|
--$childs;
|
||||||
|
mtr_verbose2((exists $names{$sock} ? $names{$sock} : "Worker"). " closed socket (left ${childs} childs)");
|
||||||
|
$s->remove($sock);
|
||||||
|
$sock->close;
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
elsif ($line =~ /^SPENT/) {
|
|
||||||
add_total_times($line);
|
|
||||||
}
|
|
||||||
elsif ($line eq 'VALGREP' && $opt_valgrind) {
|
|
||||||
$valgrind_reports= 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mtr_error("Unknown response: '$line' from client");
|
|
||||||
}
|
|
||||||
|
|
||||||
# Find next test to schedule
|
# Find next test to schedule
|
||||||
# - Try to use same configuration as worker used last time
|
# - Try to use same configuration as worker used last time
|
||||||
@ -789,7 +841,7 @@ sub run_test_server ($$$) {
|
|||||||
|
|
||||||
last unless defined $t;
|
last unless defined $t;
|
||||||
|
|
||||||
if (run_testcase_check_skip_test($t)){
|
if (main::run_testcase_check_skip_test($t)){
|
||||||
# Move the test to completed list
|
# Move the test to completed list
|
||||||
#mtr_report("skip - Moving test $i to completed");
|
#mtr_report("skip - Moving test $i to completed");
|
||||||
push(@$completed, splice(@$tests, $i, 1));
|
push(@$completed, splice(@$tests, $i, 1));
|
||||||
@ -835,7 +887,7 @@ sub run_test_server ($$$) {
|
|||||||
# At this point we have found next suitable test
|
# At this point we have found next suitable test
|
||||||
$next= splice(@$tests, $i, 1);
|
$next= splice(@$tests, $i, 1);
|
||||||
last;
|
last;
|
||||||
}
|
} # for(my $i= 0; $i <= @$tests; $i++)
|
||||||
|
|
||||||
# Use second best choice if no other test has been found
|
# Use second best choice if no other test has been found
|
||||||
if (!$next and defined $second_best){
|
if (!$next and defined $second_best){
|
||||||
@ -854,11 +906,11 @@ sub run_test_server ($$$) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
# No more test, tell child to exit
|
# No more test, tell child to exit
|
||||||
#mtr_report("Saying BYE to child");
|
mtr_verbose2("Saying BYE to ". $names{$sock});
|
||||||
print $sock "BYE\n";
|
print $sock "BYE\n";
|
||||||
}
|
} # else (!$next)
|
||||||
}
|
} # else ($sock != $server)
|
||||||
}
|
} # foreach my $sock (@ready)
|
||||||
|
|
||||||
if (!IS_WINDOWS) {
|
if (!IS_WINDOWS) {
|
||||||
foreach my $pid (keys %$children)
|
foreach my $pid (keys %$children)
|
||||||
@ -890,7 +942,7 @@ sub run_test_server ($$$) {
|
|||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
# Check if test suite timer expired
|
# Check if test suite timer expired
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
if ( has_expired($suite_timeout) )
|
if ( main::has_expired($suite_timeout) )
|
||||||
{
|
{
|
||||||
mtr_report("Test suite timeout! Terminating...");
|
mtr_report("Test suite timeout! Terminating...");
|
||||||
return ("Timeout", 1, $completed, $extra_warnings);
|
return ("Timeout", 1, $completed, $extra_warnings);
|
||||||
@ -898,6 +950,9 @@ sub run_test_server ($$$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
package main;
|
||||||
|
|
||||||
sub run_worker ($) {
|
sub run_worker ($) {
|
||||||
my ($server_port, $thread_num)= @_;
|
my ($server_port, $thread_num)= @_;
|
||||||
@ -918,7 +973,10 @@ sub run_worker ($) {
|
|||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Set worker name
|
# Set worker name
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
report_option('name',"worker[$thread_num]");
|
report_option('name',"worker[". sprintf("%02d", $thread_num). "]");
|
||||||
|
my $proc_title= basename($0). " ${mtr_report::name} :". $server->sockport(). " -> :${server_port}";
|
||||||
|
$0= $proc_title;
|
||||||
|
mtr_verbose2("Running at PID $$");
|
||||||
|
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Set different ports per thread
|
# Set different ports per thread
|
||||||
@ -944,7 +1002,7 @@ sub run_worker ($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Ask server for first test
|
# Ask server for first test
|
||||||
print $server "START\n";
|
print $server "START ${mtr_report::name}\n";
|
||||||
|
|
||||||
mark_time_used('init');
|
mark_time_used('init');
|
||||||
|
|
||||||
@ -952,6 +1010,7 @@ sub run_worker ($) {
|
|||||||
chomp($line);
|
chomp($line);
|
||||||
if ($line eq 'TESTCASE'){
|
if ($line eq 'TESTCASE'){
|
||||||
my $test= My::Test::read_test($server);
|
my $test= My::Test::read_test($server);
|
||||||
|
$0= $proc_title. " ". $test->{name};
|
||||||
|
|
||||||
# Clear comment and logfile, to avoid
|
# Clear comment and logfile, to avoid
|
||||||
# reusing them from previous test
|
# reusing them from previous test
|
||||||
@ -968,11 +1027,12 @@ sub run_worker ($) {
|
|||||||
run_testcase($test, $server);
|
run_testcase($test, $server);
|
||||||
#$test->{result}= 'MTR_RES_PASSED';
|
#$test->{result}= 'MTR_RES_PASSED';
|
||||||
# Send it back, now with results set
|
# Send it back, now with results set
|
||||||
|
mtr_verbose2('Writing TESTRESULT');
|
||||||
$test->write_test($server, 'TESTRESULT');
|
$test->write_test($server, 'TESTRESULT');
|
||||||
mark_time_used('restart');
|
mark_time_used('restart');
|
||||||
}
|
}
|
||||||
elsif ($line eq 'BYE'){
|
elsif ($line eq 'BYE'){
|
||||||
mtr_report("Server said BYE");
|
mtr_verbose2("Manager said BYE");
|
||||||
# We need to gracefully shut down the servers to see any
|
# We need to gracefully shut down the servers to see any
|
||||||
# Valgrind memory leak errors etc. since last server restart.
|
# Valgrind memory leak errors etc. since last server restart.
|
||||||
if ($opt_warnings) {
|
if ($opt_warnings) {
|
||||||
@ -1198,7 +1258,8 @@ sub command_line_setup {
|
|||||||
'xml-report=s' => \$opt_xml_report,
|
'xml-report=s' => \$opt_xml_report,
|
||||||
|
|
||||||
My::Debugger::options(),
|
My::Debugger::options(),
|
||||||
My::CoreDump::options()
|
My::CoreDump::options(),
|
||||||
|
My::Platform::options()
|
||||||
);
|
);
|
||||||
|
|
||||||
# fix options (that take an optional argument and *only* after = sign
|
# fix options (that take an optional argument and *only* after = sign
|
||||||
@ -1234,6 +1295,9 @@ sub command_line_setup {
|
|||||||
}
|
}
|
||||||
if (IS_CYGWIN)
|
if (IS_CYGWIN)
|
||||||
{
|
{
|
||||||
|
if (My::Platform::check_cygwin_subshell()) {
|
||||||
|
die("Cygwin /bin/sh subshell requires fix with --cygwin-subshell-fix=do\n");
|
||||||
|
}
|
||||||
# Use mixed path format i.e c:/path/to/
|
# Use mixed path format i.e c:/path/to/
|
||||||
$glob_mysql_test_dir= mixed_path($glob_mysql_test_dir);
|
$glob_mysql_test_dir= mixed_path($glob_mysql_test_dir);
|
||||||
}
|
}
|
||||||
@ -1729,11 +1793,12 @@ sub collect_mysqld_features {
|
|||||||
# to simplify the parsing, we'll merge all nicely formatted --help texts
|
# to simplify the parsing, we'll merge all nicely formatted --help texts
|
||||||
$list =~ s/\n {22}(\S)/ $1/g;
|
$list =~ s/\n {22}(\S)/ $1/g;
|
||||||
|
|
||||||
my @list= split '\n', $list;
|
my @list= split '\R', $list;
|
||||||
|
|
||||||
$mysql_version_id= 0;
|
$mysql_version_id= 0;
|
||||||
|
my $exe= basename($exe_mysqld);
|
||||||
while (defined(my $line = shift @list)){
|
while (defined(my $line = shift @list)){
|
||||||
if ($line =~ /^\Q$exe_mysqld\E\s+Ver\s(\d+)\.(\d+)\.(\d+)(\S*)/ ) {
|
if ($line =~ /\W\Q$exe\E\s+Ver\s(\d+)\.(\d+)\.(\d+)(\S*)/ ) {
|
||||||
$mysql_version_id= $1*10000 + $2*100 + $3;
|
$mysql_version_id= $1*10000 + $2*100 + $3;
|
||||||
mtr_report("MariaDB Version $1.$2.$3$4");
|
mtr_report("MariaDB Version $1.$2.$3$4");
|
||||||
last;
|
last;
|
||||||
@ -1757,7 +1822,7 @@ sub collect_mysqld_features {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
last if /^$/; # then goes a list of variables, it ends with an empty line
|
last if /^\r?$/; # then goes a list of variables, it ends with an empty line
|
||||||
|
|
||||||
# Put a variable into hash
|
# Put a variable into hash
|
||||||
/^([\S]+)[ \t]+(.*?)\r?$/ or die "Could not parse mysqld --help: $_\n";
|
/^([\S]+)[ \t]+(.*?)\r?$/ or die "Could not parse mysqld --help: $_\n";
|
||||||
@ -1788,7 +1853,7 @@ sub collect_mysqld_features_from_running_server ()
|
|||||||
|
|
||||||
my $list = `$cmd` or
|
my $list = `$cmd` or
|
||||||
mtr_error("Could not connect to extern server using command: '$cmd'");
|
mtr_error("Could not connect to extern server using command: '$cmd'");
|
||||||
foreach my $line (split('\n', $list ))
|
foreach my $line (split('\R', $list ))
|
||||||
{
|
{
|
||||||
# Put variables into hash
|
# Put variables into hash
|
||||||
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
|
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
|
||||||
@ -1878,7 +1943,7 @@ sub client_debug_arg($$) {
|
|||||||
|
|
||||||
if ( $opt_debug ) {
|
if ( $opt_debug ) {
|
||||||
mtr_add_arg($args,
|
mtr_add_arg($args,
|
||||||
"--loose-debug=$debug_d:t:A,%s/log/%s.trace",
|
"--loose-debug=d,info,warning,warnings:t:A,%s/log/%s.trace",
|
||||||
$path_vardir_trace, $client_name)
|
$path_vardir_trace, $client_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2924,7 +2989,7 @@ sub initialize_servers {
|
|||||||
#
|
#
|
||||||
sub sql_to_bootstrap {
|
sub sql_to_bootstrap {
|
||||||
my ($sql) = @_;
|
my ($sql) = @_;
|
||||||
my @lines= split(/\n/, $sql);
|
my @lines= split(/\R/, $sql);
|
||||||
my $result= "\n";
|
my $result= "\n";
|
||||||
my $delimiter= ';';
|
my $delimiter= ';';
|
||||||
|
|
||||||
@ -4081,9 +4146,8 @@ sub run_testcase ($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return ($res == 62) ? 0 : $res;
|
return ($res == 62) ? 0 : $res;
|
||||||
}
|
} # if ($proc and $proc eq $test)
|
||||||
|
elsif ($proc)
|
||||||
if ($proc)
|
|
||||||
{
|
{
|
||||||
# It was not mysqltest that exited, add to a wait-to-be-started-again list.
|
# It was not mysqltest that exited, add to a wait-to-be-started-again list.
|
||||||
$keep_waiting_proc{$proc} = 1;
|
$keep_waiting_proc{$proc} = 1;
|
||||||
@ -4112,7 +4176,7 @@ sub run_testcase ($$) {
|
|||||||
{
|
{
|
||||||
# do nothing
|
# do nothing
|
||||||
}
|
}
|
||||||
}
|
} # foreach my $wait_for_proc
|
||||||
|
|
||||||
next;
|
next;
|
||||||
|
|
||||||
@ -5494,7 +5558,11 @@ sub start_mysqltest ($) {
|
|||||||
mtr_init_args(\$args);
|
mtr_init_args(\$args);
|
||||||
|
|
||||||
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
||||||
mtr_add_arg($args, "--silent");
|
if ($opt_verbose > 1) {
|
||||||
|
mtr_add_arg($args, "--verbose");
|
||||||
|
} else {
|
||||||
|
mtr_add_arg($args, "--silent");
|
||||||
|
}
|
||||||
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
|
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
|
||||||
mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir);
|
mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir);
|
||||||
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
|
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
|
||||||
|
@ -14,19 +14,19 @@ Table Create Table
|
|||||||
innodb_compact CREATE TABLE `innodb_compact` (
|
innodb_compact CREATE TABLE `innodb_compact` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT `encrypted`=yes `encryption_key_id`=1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPACT `encrypted`=yes `encryption_key_id`=1
|
||||||
show create table innodb_dynamic;
|
show create table innodb_dynamic;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
innodb_dynamic CREATE TABLE `innodb_dynamic` (
|
innodb_dynamic CREATE TABLE `innodb_dynamic` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC `encrypted`=yes `encryption_key_id`=33
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC `encrypted`=yes `encryption_key_id`=33
|
||||||
show create table innodb_redundant;
|
show create table innodb_redundant;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
innodb_redundant CREATE TABLE `innodb_redundant` (
|
innodb_redundant CREATE TABLE `innodb_redundant` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT `encrypted`=yes `encryption_key_id`=4
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=REDUNDANT `encrypted`=yes `encryption_key_id`=4
|
||||||
create procedure innodb_insert_proc (repeat_count int)
|
create procedure innodb_insert_proc (repeat_count int)
|
||||||
begin
|
begin
|
||||||
declare current_num int;
|
declare current_num int;
|
||||||
@ -56,6 +56,7 @@ count(*)
|
|||||||
select count(*) from innodb_redundant where c1 < 1500000;
|
select count(*) from innodb_redundant where c1 < 1500000;
|
||||||
count(*)
|
count(*)
|
||||||
5000
|
5000
|
||||||
|
# restart
|
||||||
update innodb_compact set c1 = c1 + 1;
|
update innodb_compact set c1 = c1 + 1;
|
||||||
update innodb_dynamic set c1 = c1 + 1;
|
update innodb_dynamic set c1 = c1 + 1;
|
||||||
update innodb_redundant set c1 = c1 + 1;
|
update innodb_redundant set c1 = c1 + 1;
|
||||||
@ -74,39 +75,40 @@ Table Create Table
|
|||||||
innodb_compact CREATE TABLE `innodb_compact` (
|
innodb_compact CREATE TABLE `innodb_compact` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPACT
|
||||||
alter table innodb_dynamic engine=innodb encrypted=DEFAULT encryption_key_id=DEFAULT;
|
alter table innodb_dynamic engine=innodb encrypted=DEFAULT encryption_key_id=DEFAULT;
|
||||||
show create table innodb_dynamic;
|
show create table innodb_dynamic;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
innodb_dynamic CREATE TABLE `innodb_dynamic` (
|
innodb_dynamic CREATE TABLE `innodb_dynamic` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC
|
||||||
alter table innodb_redundant engine=innodb encrypted=DEFAULT encryption_key_id=DEFAULT;
|
alter table innodb_redundant engine=innodb encrypted=DEFAULT encryption_key_id=DEFAULT;
|
||||||
show create table innodb_redundant;
|
show create table innodb_redundant;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
innodb_redundant CREATE TABLE `innodb_redundant` (
|
innodb_redundant CREATE TABLE `innodb_redundant` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=REDUNDANT
|
||||||
|
# restart
|
||||||
show create table innodb_compact;
|
show create table innodb_compact;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
innodb_compact CREATE TABLE `innodb_compact` (
|
innodb_compact CREATE TABLE `innodb_compact` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=COMPACT
|
||||||
show create table innodb_dynamic;
|
show create table innodb_dynamic;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
innodb_dynamic CREATE TABLE `innodb_dynamic` (
|
innodb_dynamic CREATE TABLE `innodb_dynamic` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC
|
||||||
show create table innodb_redundant;
|
show create table innodb_redundant;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
innodb_redundant CREATE TABLE `innodb_redundant` (
|
innodb_redundant CREATE TABLE `innodb_redundant` (
|
||||||
`c1` bigint(20) NOT NULL,
|
`c1` bigint(20) NOT NULL,
|
||||||
`b` char(200) DEFAULT NULL
|
`b` char(200) DEFAULT NULL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=REDUNDANT
|
||||||
update innodb_compact set c1 = c1 + 1;
|
update innodb_compact set c1 = c1 + 1;
|
||||||
update innodb_dynamic set c1 = c1 + 1;
|
update innodb_dynamic set c1 = c1 + 1;
|
||||||
update innodb_redundant set c1 = c1 + 1;
|
update innodb_redundant set c1 = c1 + 1;
|
||||||
|
@ -646,6 +646,8 @@ LIKE 'buffer_page_written_index_leaf';
|
|||||||
NAME COUNT > 0
|
NAME COUNT > 0
|
||||||
buffer_page_written_index_leaf 0
|
buffer_page_written_index_leaf 0
|
||||||
SET GLOBAL innodb_monitor_enable='%';
|
SET GLOBAL innodb_monitor_enable='%';
|
||||||
|
SET GLOBAL innodb_monitor_reset_all= '%', innodb_compression_algorithm= foo;
|
||||||
|
ERROR 42000: Variable 'innodb_compression_algorithm' can't be set to the value of 'foo'
|
||||||
INSERT INTO t1 VALUES (5), (6), (7), (8);
|
INSERT INTO t1 VALUES (5), (6), (7), (8);
|
||||||
FLUSH TABLES t1 FOR EXPORT;
|
FLUSH TABLES t1 FOR EXPORT;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
@ -396,3 +396,18 @@ set innodb_strict_mode = 1;
|
|||||||
alter table t1 engine=InnoDB;
|
alter table t1 engine=InnoDB;
|
||||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-32128 wrong table name in innodb's "row too big" errors
|
||||||
|
#
|
||||||
|
create temporary table t1 (
|
||||||
|
c1 char(255), c2 char(255), c3 char(255), c4 char(255),
|
||||||
|
c5 char(255), c6 char(255), c7 char(255), c8 char(255),
|
||||||
|
c9 char(255), c10 char(255), c11 char(255), c12 char(255),
|
||||||
|
c13 char(255), c14 char(255), c15 char(255), c16 char(255),
|
||||||
|
c17 char(255), c18 char(255), c19 char(255), c20 char(255),
|
||||||
|
c21 char(255), c22 char(255), c23 char(255), c24 char(255),
|
||||||
|
c25 char(255), c26 char(255), c27 char(255), c28 char(255),
|
||||||
|
c29 char(255), c30 char(255), c31 char(255), c32 char(255)
|
||||||
|
) engine=innodb;
|
||||||
|
ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||||
|
FOUND 1 /Cannot add field `c32` in table `test`.`t1` because/ in mysqld.1.err
|
||||||
|
@ -433,6 +433,8 @@ SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
|
|||||||
LIKE 'buffer_page_written_index_leaf';
|
LIKE 'buffer_page_written_index_leaf';
|
||||||
|
|
||||||
SET GLOBAL innodb_monitor_enable='%';
|
SET GLOBAL innodb_monitor_enable='%';
|
||||||
|
--error ER_WRONG_VALUE_FOR_VAR
|
||||||
|
SET GLOBAL innodb_monitor_reset_all= '%', innodb_compression_algorithm= foo;
|
||||||
INSERT INTO t1 VALUES (5), (6), (7), (8); FLUSH TABLES t1 FOR EXPORT;
|
INSERT INTO t1 VALUES (5), (6), (7), (8); FLUSH TABLES t1 FOR EXPORT;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
|
SELECT NAME, COUNT > 0 FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
|
--source include/not_embedded.inc
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN
|
--echo # Bug #17852083 PRINT A WARNING WHEN DDL HAS AN ERROR IN
|
||||||
@ -401,3 +402,21 @@ set innodb_strict_mode = 1;
|
|||||||
alter table t1 engine=InnoDB;
|
alter table t1 engine=InnoDB;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-32128 wrong table name in innodb's "row too big" errors
|
||||||
|
--echo #
|
||||||
|
--error ER_TOO_BIG_ROWSIZE
|
||||||
|
create temporary table t1 (
|
||||||
|
c1 char(255), c2 char(255), c3 char(255), c4 char(255),
|
||||||
|
c5 char(255), c6 char(255), c7 char(255), c8 char(255),
|
||||||
|
c9 char(255), c10 char(255), c11 char(255), c12 char(255),
|
||||||
|
c13 char(255), c14 char(255), c15 char(255), c16 char(255),
|
||||||
|
c17 char(255), c18 char(255), c19 char(255), c20 char(255),
|
||||||
|
c21 char(255), c22 char(255), c23 char(255), c24 char(255),
|
||||||
|
c25 char(255), c26 char(255), c27 char(255), c28 char(255),
|
||||||
|
c29 char(255), c30 char(255), c31 char(255), c32 char(255)
|
||||||
|
) engine=innodb;
|
||||||
|
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err;
|
||||||
|
let SEARCH_PATTERN=Cannot add field `c32` in table `test`.`t1` because;
|
||||||
|
source include/search_pattern_in_file.inc;
|
||||||
|
@ -20,12 +20,6 @@ INSERT INTO gis_point VALUES
|
|||||||
(108, ST_POINTFROMWKB(POINT(0,10))),
|
(108, ST_POINTFROMWKB(POINT(0,10))),
|
||||||
(109, ST_POINTFROMWKB(POINT(-10,0))),
|
(109, ST_POINTFROMWKB(POINT(-10,0))),
|
||||||
(110, ST_POINTFROMWKB(POINT(0,-10)));
|
(110, ST_POINTFROMWKB(POINT(0,-10)));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_point VALUES
|
INSERT INTO gis_point VALUES
|
||||||
(111, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1 1)')))),
|
(111, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1 1)')))),
|
||||||
(112, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 1e308)')))),
|
(112, ST_POINTFROMWKB(ST_ASWKB(ST_POINTFROMTEXT('POINT(1e308 1e308)')))),
|
||||||
@ -45,18 +39,10 @@ INSERT INTO gis_linestring VALUES
|
|||||||
(207, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
(207, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
||||||
(208, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,10)))),
|
(208, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(-5,-5), POINT(-10,10)))),
|
||||||
(209, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8))));
|
(209, ST_LINEFROMWKB(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6), POINT(8,8))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_linestring VALUES
|
INSERT INTO gis_linestring VALUES
|
||||||
(210, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
(210, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(5,5)))),
|
||||||
(211, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(-50,-50), POINT(10,-10)))),
|
(211, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(-50,-50), POINT(10,-10)))),
|
||||||
(212, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(1e308,1e308), POINT(1e308,-1e308))));
|
(212, ST_LINESTRINGFROMWKB(LINESTRING(POINT(0,0), POINT(1e308,1e308), POINT(1e308,-1e308))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_linestring VALUES
|
INSERT INTO gis_linestring VALUES
|
||||||
(213, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1e308 1e308,1e308 -1e308)')))),
|
(213, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1e308 1e308,1e308 -1e308)')))),
|
||||||
(214, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9)')))),
|
(214, ST_LINEFROMWKB(ST_ASWKB(ST_LINEFROMTEXT('LINESTRING(1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9)')))),
|
||||||
@ -75,19 +61,11 @@ INSERT INTO gis_polygon VALUES
|
|||||||
(308, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0))))),
|
(308, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,15), POINT(15,15), POINT(15,0), POINT(0,0))))),
|
||||||
(309, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
(309, ST_POLYFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))));
|
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_polygon VALUES
|
INSERT INTO gis_polygon VALUES
|
||||||
(310, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))),
|
(310, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(0,0), POINT(0,5), POINT(5,5), POINT(0,0))))),
|
||||||
(311, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,15), POINT(15,15), POINT(15,10), POINT(10,10))))),
|
(311, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,15), POINT(15,15), POINT(15,10), POINT(10,10))))),
|
||||||
(312, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,20), POINT(20,20), POINT(20,10), POINT(10,10)),
|
(312, ST_POLYGONFROMWKB(POLYGON(LINESTRING(POINT(10,10), POINT(10,20), POINT(20,20), POINT(20,10), POINT(10,10)),
|
||||||
LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14)))));
|
LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14)))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_polygon VALUES
|
INSERT INTO gis_polygon VALUES
|
||||||
(313, ST_POLYFROMWKB(ST_ASWKB(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,5 5,0 0))')))),
|
(313, ST_POLYFROMWKB(ST_ASWKB(ST_POLYFROMTEXT('POLYGON((0 0,0 10,10 10,10 0,0 0,0 0,5 5,0 0))')))),
|
||||||
(314, ST_POLYFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((10 0,10 10,0 10,-10 10,-10 0,-10 -10,0 10,10 -10,10 0))')))),
|
(314, ST_POLYFROMWKB(ST_ASWKB(ST_POLYGONFROMTEXT('POLYGON((10 0,10 10,0 10,-10 10,-10 0,-10 -10,0 10,10 -10,10 0))')))),
|
||||||
@ -105,18 +83,10 @@ INSERT INTO gis_multi_point VALUES
|
|||||||
(407, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
(407, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
||||||
(408, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(10,10)))),
|
(408, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(10,10)))),
|
||||||
(409, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6))));
|
(409, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(2,2), POINT(4,4), POINT(6,6))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_multi_point VALUES
|
INSERT INTO gis_multi_point VALUES
|
||||||
(410, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
(410, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0)))),
|
||||||
(411, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(1e308,1e308)))),
|
(411, ST_GEOMFROMWKB(MULTIPOINT(POINT(0,0), POINT(1e308,1e308)))),
|
||||||
(412, ST_GEOMFROMWKB(MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308), POINT(-1e308,-1e308))));
|
(412, ST_GEOMFROMWKB(MULTIPOINT(POINT(1e308,1e308), POINT(-1e308,1e308), POINT(1e308,-1e308), POINT(-1e308,-1e308))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_multi_point VALUES
|
INSERT INTO gis_multi_point VALUES
|
||||||
(413, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0)')))),
|
(413, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0)')))),
|
||||||
(414, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0,1e308 1e308,-1e308 -1e308)')))),
|
(414, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOINT(0 0,1e308 1e308,-1e308 -1e308)')))),
|
||||||
@ -135,19 +105,11 @@ INSERT INTO gis_multi_linestring VALUES
|
|||||||
(508, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24))))),
|
(508, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24))))),
|
||||||
(509, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4)),
|
(509, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4)),
|
||||||
LINESTRING(POINT(6,6), POINT(8,8), POINT(10,10)))));
|
LINESTRING(POINT(6,6), POINT(8,8), POINT(10,10)))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_multi_linestring VALUES
|
INSERT INTO gis_multi_linestring VALUES
|
||||||
(510, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4))))),
|
(510, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(2,2), POINT(4,4))))),
|
||||||
(511, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1,1), POINT(2,2))))),
|
(511, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(1,1), POINT(2,2))))),
|
||||||
(512, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24)),
|
(512, ST_GEOMFROMWKB(MULTILINESTRING(LINESTRING(POINT(0,0), POINT(12,12), POINT(24,24)),
|
||||||
LINESTRING(POINT(36,36), POINT(48,48), POINT(50,50)))));
|
LINESTRING(POINT(36,36), POINT(48,48), POINT(50,50)))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_multi_linestring VALUES
|
INSERT INTO gis_multi_linestring VALUES
|
||||||
(513, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(0 10,10 0))')))),
|
(513, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10),(0 10,10 0))')))),
|
||||||
(514, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10,-10 10,0 0),(0 0,-10 -10,10 -10,0 0))')))),
|
(514, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTILINESTRING((0 0,10 10,-10 10,0 0),(0 0,-10 -10,10 -10,0 0))')))),
|
||||||
@ -167,10 +129,6 @@ INSERT INTO gis_multi_polygon VALUES
|
|||||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4)))))),
|
||||||
(609, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0))),
|
(609, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(5,0), POINT(5,5), POINT(0,5), POINT(0,0))),
|
||||||
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_multi_polygon VALUES
|
INSERT INTO gis_multi_polygon VALUES
|
||||||
(610, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0)))))),
|
(610, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0)))))),
|
||||||
(611, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(10,10), POINT(20,10), POINT(20,20), POINT(10,20), POINT(10,10)),
|
(611, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(10,10), POINT(20,10), POINT(20,20), POINT(10,20), POINT(10,10)),
|
||||||
@ -178,10 +136,6 @@ LINESTRING(POINT(14,14), POINT(14,16), POINT(16,16), POINT(16,14), POINT(14,14))
|
|||||||
(612, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
(612, ST_GEOMFROMWKB(MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||||
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
POLYGON(LINESTRING(POINT(0,0), POINT(-5,0), POINT(-5,-5), POINT(0,-5), POINT(0,0))))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_multi_polygon VALUES
|
INSERT INTO gis_multi_polygon VALUES
|
||||||
(613, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,5 -5,0 0)),((0 0,-5 5,-5 -5,0 0)))')))),
|
(613, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,5 5,5 -5,0 0)),((0 0,-5 5,-5 -5,0 0)))')))),
|
||||||
(614, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))')))),
|
(614, ST_GEOMFROMWKB(ST_ASWKB(ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,10 10,-10 10,0 0)),((0 0,-10 -10,10 -10,0 0)))')))),
|
||||||
@ -212,10 +166,6 @@ LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))),
|
|||||||
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||||
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_geometrycollection VALUES
|
INSERT INTO gis_geometrycollection VALUES
|
||||||
(710, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(POINT(0,0),
|
(710, ST_GEOMETRYCOLLECTIONFROMWKB(GEOMETRYCOLLECTION(POINT(0,0),
|
||||||
LINESTRING(POINT(0,0), POINT(100,100))))),
|
LINESTRING(POINT(0,0), POINT(100,100))))),
|
||||||
@ -229,10 +179,6 @@ LINESTRING(POINT(10,10), POINT(5,5), POINT(0,10))),
|
|||||||
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
MULTIPOLYGON(POLYGON(LINESTRING(POINT(0,0), POINT(0,10), POINT(10,10), POINT(10,0), POINT(0,0)),
|
||||||
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
LINESTRING(POINT(4,4), POINT(4,6), POINT(6,6), POINT(6,4), POINT(4,4))),
|
||||||
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
POLYGON(LINESTRING(POINT(0,0), POINT(-10,0), POINT(-10,-10), POINT(0,0)))))));
|
||||||
Warnings:
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
Warning 3195 st_geometryfromwkb(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use st_geometryfromwkb(st_aswkb(geometry), 0) instead.
|
|
||||||
INSERT INTO gis_geometrycollection VALUES
|
INSERT INTO gis_geometrycollection VALUES
|
||||||
(713, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
(713, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
||||||
'POINT(0 0),'
|
'POINT(0 0),'
|
||||||
@ -240,33 +186,6 @@ INSERT INTO gis_geometrycollection VALUES
|
|||||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
||||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
||||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))')))),
|
|
||||||
(714, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'POINT(0 0)),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'LINESTRING(0 0,10 10)),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'POLYGON((0 0,0 10,10 10,10 0,0 0))),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10)),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0))),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5)))))')))),
|
|
||||||
(715, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION(),'
|
|
||||||
'POINT(0 0),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'LINESTRING(0 0,10 10),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION())),'
|
|
||||||
'GEOMETRYCOLLECTION(),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION()),'
|
|
||||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
|
||||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
|
||||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
|
||||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))'))));
|
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))'))));
|
||||||
# Creating a table with spatial index column
|
# Creating a table with spatial index column
|
||||||
CREATE TABLE geom_index (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY NOT NULL, SPATIAL INDEX(g));
|
CREATE TABLE geom_index (fid INTEGER NOT NULL PRIMARY KEY, g GEOMETRY NOT NULL, SPATIAL INDEX(g));
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/have_debug.inc
|
|
||||||
--source include/have_geometry.inc
|
--source include/have_geometry.inc
|
||||||
--source include/have_innodb_4k.inc
|
--source include/innodb_page_size.inc
|
||||||
|
|
||||||
############################################################################################
|
############################################################################################
|
||||||
# Creating the spatial objects #
|
# Creating the spatial objects #
|
||||||
@ -233,33 +232,6 @@ INSERT INTO gis_geometrycollection VALUES
|
|||||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
||||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
||||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
||||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))')))),
|
|
||||||
(714, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'POINT(0 0)),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'LINESTRING(0 0,10 10)),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'POLYGON((0 0,0 10,10 10,10 0,0 0))),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10)),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0))),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5)))))')))),
|
|
||||||
(715, ST_GEOMCOLLFROMWKB(ST_ASWKB(ST_GEOMCOLLFROMTEXT('GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION(),'
|
|
||||||
'POINT(0 0),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'LINESTRING(0 0,10 10),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION())),'
|
|
||||||
'GEOMETRYCOLLECTION(),'
|
|
||||||
'GEOMETRYCOLLECTION('
|
|
||||||
'GEOMETRYCOLLECTION()),'
|
|
||||||
'POLYGON((0 0,0 10,10 10,10 0,0 0)),'
|
|
||||||
'MULTIPOINT(0 0,2 2,4 4,6 6,8 8,10 10),'
|
|
||||||
'MULTILINESTRING((0 0,10 10),(0 10,10 0)),'
|
|
||||||
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))'))));
|
'MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),((5 5,5 10,10 10,10 5,5 5))))'))));
|
||||||
|
|
||||||
############################################################################################
|
############################################################################################
|
||||||
|
@ -8,11 +8,8 @@ insert into worklog5743 values(repeat("a", 20000));
|
|||||||
update worklog5743 set a = (repeat("b", 16000));
|
update worklog5743 set a = (repeat("b", 16000));
|
||||||
SET sql_mode= '';
|
SET sql_mode= '';
|
||||||
create index idx on worklog5743(a(900));
|
create index idx on worklog5743(a(900));
|
||||||
Warnings:
|
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
SET sql_mode= default;
|
SET sql_mode= default;
|
||||||
begin;
|
begin;
|
||||||
update worklog5743 set a = (repeat("x", 17000));
|
update worklog5743 set a = (repeat("x", 17000));
|
||||||
@ -101,7 +98,7 @@ create index idx1 on worklog5743_1(a2(4000));
|
|||||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
Note 1071 Specified key was too long; max key length is 1173 bytes
|
||||||
Error 1118 Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
Error 1118 Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||||
create index idx3 on worklog5743_1(a2(436));
|
create index idx3 on worklog5743_1(a2(436));
|
||||||
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 1982. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
|
||||||
@ -120,69 +117,54 @@ create index idx6 on worklog5743_1(a1, a2(428));
|
|||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
SET sql_mode= '';
|
SET sql_mode= '';
|
||||||
|
set innodb_strict_mode=off;
|
||||||
create index idx1 on worklog5743_2(a2(4000));
|
create index idx1 on worklog5743_2(a2(4000));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
Note 1071 Specified key was too long; max key length is 1173 bytes
|
||||||
|
Warning 139 Row size too large (> 1982). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||||
|
set innodb_strict_mode=on;
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
Note 1071 Specified key was too long; max key length is 1173 bytes
|
||||||
|
Warning 139 Row size too large (> 1982). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
|
||||||
show create table worklog5743_2;
|
show create table worklog5743_2;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
worklog5743_2 CREATE TABLE `worklog5743_2` (
|
worklog5743_2 CREATE TABLE `worklog5743_2` (
|
||||||
`a1` int(11) DEFAULT NULL,
|
`a1` int(11) DEFAULT NULL,
|
||||||
`a2` text NOT NULL,
|
`a2` text NOT NULL,
|
||||||
KEY `idx1` (`a2`(768))
|
KEY `idx1` (`a2`(1173))
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=2
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci KEY_BLOCK_SIZE=2
|
||||||
|
drop index idx1 on worklog5743_2;
|
||||||
create index idx3 on worklog5743_2(a2(769));
|
create index idx3 on worklog5743_2(a2(769));
|
||||||
Warnings:
|
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
create index idx4 on worklog5743_2(a2(768));
|
create index idx4 on worklog5743_2(a2(768));
|
||||||
Warnings:
|
|
||||||
Note 1831 Duplicate index `idx4`. This is deprecated and will be disallowed in a future release
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1831 Duplicate index `idx4`. This is deprecated and will be disallowed in a future release
|
create index idx6 on worklog5743_2(a1, a2(768));
|
||||||
create index idx5 on worklog5743_2(a1, a2(765));
|
|
||||||
ERROR 42000: Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
|
||||||
Level Code Message
|
|
||||||
Error 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
create index idx6 on worklog5743_2(a1, a2(764));
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
|
set innodb_strict_mode=off;
|
||||||
create index idx1 on worklog5743_4(a2(4000));
|
create index idx1 on worklog5743_4(a2(4000));
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
Note 1071 Specified key was too long; max key length is 1173 bytes
|
||||||
|
set innodb_strict_mode=on;
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
Note 1071 Specified key was too long; max key length is 1173 bytes
|
||||||
show create table worklog5743_4;
|
show create table worklog5743_4;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
worklog5743_4 CREATE TABLE `worklog5743_4` (
|
worklog5743_4 CREATE TABLE `worklog5743_4` (
|
||||||
`a1` int(11) DEFAULT NULL,
|
`a1` int(11) DEFAULT NULL,
|
||||||
`a2` text NOT NULL,
|
`a2` text NOT NULL,
|
||||||
KEY `idx1` (`a2`(768))
|
KEY `idx1` (`a2`(1173))
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 KEY_BLOCK_SIZE=4
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci KEY_BLOCK_SIZE=4
|
||||||
create index idx3 on worklog5743_4(a2(769));
|
create index idx3 on worklog5743_4(a2(769));
|
||||||
Warnings:
|
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
create index idx4 on worklog5743_4(a2(768));
|
create index idx4 on worklog5743_4(a2(768));
|
||||||
Warnings:
|
|
||||||
Note 1831 Duplicate index `idx4`. This is deprecated and will be disallowed in a future release
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1831 Duplicate index `idx4`. This is deprecated and will be disallowed in a future release
|
|
||||||
create index idx5 on worklog5743_4(a1, a2(765));
|
|
||||||
ERROR 42000: Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
|
||||||
Level Code Message
|
|
||||||
Error 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
create index idx6 on worklog5743_4(a1, a2(764));
|
create index idx6 on worklog5743_4(a1, a2(764));
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
@ -253,25 +235,23 @@ drop table worklog5743_4;
|
|||||||
### Test 5 ###
|
### Test 5 ###
|
||||||
create table worklog5743(a1 int, a2 varchar(20000)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(20000)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a2);
|
create index idx1 on worklog5743(a2);
|
||||||
ERROR 42000: Specified key was too long; max key length is 3072 bytes
|
ERROR 42000: Specified key was too long; max key length is 1173 bytes
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Error 1071 Specified key was too long; max key length is 3072 bytes
|
Note 1071 Specified key was too long; max key length is 3072 bytes
|
||||||
Error 1071 Specified key was too long; max key length is 768 bytes
|
Error 1071 Specified key was too long; max key length is 1173 bytes
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a1 int, a2 varchar(3072)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(3072)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a2);
|
create index idx1 on worklog5743(a2);
|
||||||
ERROR 42000: Specified key was too long; max key length is 768 bytes
|
ERROR 42000: Specified key was too long; max key length is 1173 bytes
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Error 1071 Specified key was too long; max key length is 768 bytes
|
Error 1071 Specified key was too long; max key length is 1173 bytes
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a1 int, a2 varchar(769)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(769)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a2);
|
create index idx1 on worklog5743(a2);
|
||||||
ERROR 42000: Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Error 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a1 int, a2 varchar(768)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(768)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a2);
|
create index idx1 on worklog5743(a2);
|
||||||
@ -282,10 +262,8 @@ update worklog5743 set a1 = 3333;
|
|||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a1 int, a2 varchar(765)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(765)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a1, a2);
|
create index idx1 on worklog5743(a1, a2);
|
||||||
ERROR 42000: Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Error 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a1 int, a2 varchar(764)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(764)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a1, a2);
|
create index idx1 on worklog5743(a1, a2);
|
||||||
@ -316,7 +294,7 @@ rollback;
|
|||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
### Test 6 ###
|
### Test 6 ###
|
||||||
create table worklog5743(a TEXT not null, primary key (a(1000)));
|
create table worklog5743(a TEXT not null, primary key (a(1000)));
|
||||||
ERROR 42000: Specified key was too long; max key length is 768 bytes
|
drop table worklog5743;
|
||||||
create table worklog5743(a TEXT) ROW_FORMAT=COMPACT;
|
create table worklog5743(a TEXT) ROW_FORMAT=COMPACT;
|
||||||
create index idx on worklog5743(a(768));
|
create index idx on worklog5743(a(768));
|
||||||
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
ERROR HY000: Index column size too large. The maximum column size is 767 bytes
|
||||||
@ -350,25 +328,19 @@ drop table worklog5743;
|
|||||||
create table worklog5743(a TEXT not null) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a TEXT not null) ROW_FORMAT=DYNAMIC;
|
||||||
SET sql_mode= '';
|
SET sql_mode= '';
|
||||||
create index idx1 on worklog5743(a(769));
|
create index idx1 on worklog5743(a(769));
|
||||||
Warnings:
|
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1071 Specified key was too long; max key length is 768 bytes
|
|
||||||
SET sql_mode= default;
|
SET sql_mode= default;
|
||||||
create index idx2 on worklog5743(a(768));
|
create index idx2 on worklog5743(a(768));
|
||||||
Warnings:
|
|
||||||
Note 1831 Duplicate index `idx2`. This is deprecated and will be disallowed in a future release
|
|
||||||
show warnings;
|
show warnings;
|
||||||
Level Code Message
|
Level Code Message
|
||||||
Note 1831 Duplicate index `idx2`. This is deprecated and will be disallowed in a future release
|
|
||||||
show create table worklog5743;
|
show create table worklog5743;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
worklog5743 CREATE TABLE `worklog5743` (
|
worklog5743 CREATE TABLE `worklog5743` (
|
||||||
`a` text NOT NULL,
|
`a` text NOT NULL,
|
||||||
KEY `idx1` (`a`(768)),
|
KEY `idx1` (`a`(769)),
|
||||||
KEY `idx2` (`a`(768))
|
KEY `idx2` (`a`(768))
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC
|
||||||
insert into worklog5743 values(repeat("a", 768));
|
insert into worklog5743 values(repeat("a", 768));
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT;
|
create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT;
|
||||||
|
@ -266,7 +266,7 @@ drop table worklog5743_8;
|
|||||||
### Test 5 ###
|
### Test 5 ###
|
||||||
create table worklog5743(a1 int, a2 varchar(20000)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(20000)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a2);
|
create index idx1 on worklog5743(a2);
|
||||||
ERROR 42000: Specified key was too long; max key length is 3072 bytes
|
ERROR 42000: Specified key was too long; max key length is 1536 bytes
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a1 int, a2 varchar(1537)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(1537)) ROW_FORMAT=DYNAMIC;
|
||||||
create index idx1 on worklog5743(a2);
|
create index idx1 on worklog5743(a2);
|
||||||
@ -362,7 +362,7 @@ worklog5743 CREATE TABLE `worklog5743` (
|
|||||||
`a` text NOT NULL,
|
`a` text NOT NULL,
|
||||||
KEY `idx1` (`a`(1536)),
|
KEY `idx1` (`a`(1536)),
|
||||||
KEY `idx2` (`a`(1536))
|
KEY `idx2` (`a`(1536))
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT;
|
create table worklog5743(a TEXT not null) ROW_FORMAT=REDUNDANT;
|
||||||
create index idx on worklog5743(a(768));
|
create index idx on worklog5743(a(768));
|
||||||
|
@ -154,29 +154,28 @@ show warnings;
|
|||||||
|
|
||||||
# Test edge cases for indexes using key_block_size=2
|
# Test edge cases for indexes using key_block_size=2
|
||||||
SET sql_mode= '';
|
SET sql_mode= '';
|
||||||
|
set innodb_strict_mode=off;
|
||||||
create index idx1 on worklog5743_2(a2(4000));
|
create index idx1 on worklog5743_2(a2(4000));
|
||||||
|
set innodb_strict_mode=on;
|
||||||
show warnings;
|
show warnings;
|
||||||
show create table worklog5743_2;
|
show create table worklog5743_2;
|
||||||
|
drop index idx1 on worklog5743_2;
|
||||||
create index idx3 on worklog5743_2(a2(769));
|
create index idx3 on worklog5743_2(a2(769));
|
||||||
show warnings;
|
show warnings;
|
||||||
create index idx4 on worklog5743_2(a2(768));
|
create index idx4 on worklog5743_2(a2(768));
|
||||||
show warnings;
|
show warnings;
|
||||||
-- error ER_TOO_LONG_KEY
|
create index idx6 on worklog5743_2(a1, a2(768));
|
||||||
create index idx5 on worklog5743_2(a1, a2(765));
|
|
||||||
show warnings;
|
|
||||||
create index idx6 on worklog5743_2(a1, a2(764));
|
|
||||||
show warnings;
|
show warnings;
|
||||||
# Test edge cases for indexes using key_block_size=4
|
# Test edge cases for indexes using key_block_size=4
|
||||||
|
set innodb_strict_mode=off;
|
||||||
create index idx1 on worklog5743_4(a2(4000));
|
create index idx1 on worklog5743_4(a2(4000));
|
||||||
|
set innodb_strict_mode=on;
|
||||||
show warnings;
|
show warnings;
|
||||||
show create table worklog5743_4;
|
show create table worklog5743_4;
|
||||||
create index idx3 on worklog5743_4(a2(769));
|
create index idx3 on worklog5743_4(a2(769));
|
||||||
show warnings;
|
show warnings;
|
||||||
create index idx4 on worklog5743_4(a2(768));
|
create index idx4 on worklog5743_4(a2(768));
|
||||||
show warnings;
|
show warnings;
|
||||||
-- error ER_TOO_LONG_KEY
|
|
||||||
create index idx5 on worklog5743_4(a1, a2(765));
|
|
||||||
show warnings;
|
|
||||||
create index idx6 on worklog5743_4(a1, a2(764));
|
create index idx6 on worklog5743_4(a1, a2(764));
|
||||||
show warnings;
|
show warnings;
|
||||||
SET sql_mode= default;
|
SET sql_mode= default;
|
||||||
@ -272,7 +271,6 @@ show warnings;
|
|||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
|
|
||||||
create table worklog5743(a1 int, a2 varchar(769)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(769)) ROW_FORMAT=DYNAMIC;
|
||||||
-- error ER_TOO_LONG_KEY
|
|
||||||
create index idx1 on worklog5743(a2);
|
create index idx1 on worklog5743(a2);
|
||||||
show warnings;
|
show warnings;
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
@ -285,7 +283,6 @@ update worklog5743 set a1 = 3333;
|
|||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
|
|
||||||
create table worklog5743(a1 int, a2 varchar(765)) ROW_FORMAT=DYNAMIC;
|
create table worklog5743(a1 int, a2 varchar(765)) ROW_FORMAT=DYNAMIC;
|
||||||
-- error ER_TOO_LONG_KEY
|
|
||||||
create index idx1 on worklog5743(a1, a2);
|
create index idx1 on worklog5743(a1, a2);
|
||||||
show warnings;
|
show warnings;
|
||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
@ -316,9 +313,8 @@ rollback;
|
|||||||
drop table worklog5743;
|
drop table worklog5743;
|
||||||
|
|
||||||
-- echo ### Test 6 ###
|
-- echo ### Test 6 ###
|
||||||
# Create a table with old format, and the limit is 768 bytes.
|
|
||||||
-- error ER_TOO_LONG_KEY
|
|
||||||
create table worklog5743(a TEXT not null, primary key (a(1000)));
|
create table worklog5743(a TEXT not null, primary key (a(1000)));
|
||||||
|
drop table worklog5743;
|
||||||
|
|
||||||
create table worklog5743(a TEXT) ROW_FORMAT=COMPACT;
|
create table worklog5743(a TEXT) ROW_FORMAT=COMPACT;
|
||||||
|
|
||||||
|
@ -42,9 +42,15 @@ IF(HAVE_PAM_APPL_H AND HAVE_GETGROUPLIST)
|
|||||||
IF (TARGET auth_pam)
|
IF (TARGET auth_pam)
|
||||||
MYSQL_ADD_EXECUTABLE(auth_pam_tool auth_pam_tool.c DESTINATION ${INSTALL_PLUGINDIR}/auth_pam_tool_dir COMPONENT Server)
|
MYSQL_ADD_EXECUTABLE(auth_pam_tool auth_pam_tool.c DESTINATION ${INSTALL_PLUGINDIR}/auth_pam_tool_dir COMPONENT Server)
|
||||||
TARGET_LINK_LIBRARIES(auth_pam_tool pam)
|
TARGET_LINK_LIBRARIES(auth_pam_tool pam)
|
||||||
|
IF (CMAKE_MAJOR_VERSION EQUAL 2)
|
||||||
|
# 2.8.12 bug (in CentOS 7)
|
||||||
|
SET(user mysql)
|
||||||
|
ELSE()
|
||||||
|
SET(user "%{mysqld_user}")
|
||||||
|
ENDIF()
|
||||||
SET(CPACK_RPM_server_USER_FILELIST ${CPACK_RPM_server_USER_FILELIST}
|
SET(CPACK_RPM_server_USER_FILELIST ${CPACK_RPM_server_USER_FILELIST}
|
||||||
"%attr(700,-,-) ${INSTALL_PLUGINDIRABS}/auth_pam_tool_dir"
|
"%attr(700,${user},-) ${INSTALL_PLUGINDIRABS}/auth_pam_tool_dir"
|
||||||
"%attr(4755,-,-) ${INSTALL_PLUGINDIRABS}/auth_pam_tool_dir/auth_pam_tool")
|
"%attr(4755,root,-) ${INSTALL_PLUGINDIRABS}/auth_pam_tool_dir/auth_pam_tool")
|
||||||
SET(CPACK_RPM_server_USER_FILELIST ${CPACK_RPM_server_USER_FILELIST} PARENT_SCOPE)
|
SET(CPACK_RPM_server_USER_FILELIST ${CPACK_RPM_server_USER_FILELIST} PARENT_SCOPE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
IF(TARGET auth_pam OR TARGET auth_pam_v1)
|
IF(TARGET auth_pam OR TARGET auth_pam_v1)
|
||||||
|
@ -6879,6 +6879,7 @@ int handler::check_duplicate_long_entry_key(const uchar *new_rec, uint key_no)
|
|||||||
KEY *key_info= table->key_info + key_no;
|
KEY *key_info= table->key_info + key_no;
|
||||||
Field *hash_field= key_info->key_part->field;
|
Field *hash_field= key_info->key_part->field;
|
||||||
uchar ptr[HA_HASH_KEY_LENGTH_WITH_NULL];
|
uchar ptr[HA_HASH_KEY_LENGTH_WITH_NULL];
|
||||||
|
String *blob_storage;
|
||||||
DBUG_ENTER("handler::check_duplicate_long_entry_key");
|
DBUG_ENTER("handler::check_duplicate_long_entry_key");
|
||||||
|
|
||||||
DBUG_ASSERT((key_info->flags & HA_NULL_PART_KEY &&
|
DBUG_ASSERT((key_info->flags & HA_NULL_PART_KEY &&
|
||||||
@ -6893,9 +6894,11 @@ int handler::check_duplicate_long_entry_key(const uchar *new_rec, uint key_no)
|
|||||||
result= lookup_handler->ha_index_init(key_no, 0);
|
result= lookup_handler->ha_index_init(key_no, 0);
|
||||||
if (result)
|
if (result)
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
|
blob_storage= (String*)alloca(sizeof(String)*table->s->virtual_not_stored_blob_fields);
|
||||||
|
table->remember_blob_values(blob_storage);
|
||||||
store_record(table, file->lookup_buffer);
|
store_record(table, file->lookup_buffer);
|
||||||
result= lookup_handler->ha_index_read_map(table->record[0],
|
result= lookup_handler->ha_index_read_map(table->record[0], ptr,
|
||||||
ptr, HA_WHOLE_KEY, HA_READ_KEY_EXACT);
|
HA_WHOLE_KEY, HA_READ_KEY_EXACT);
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
bool is_same;
|
bool is_same;
|
||||||
@ -6903,6 +6906,13 @@ int handler::check_duplicate_long_entry_key(const uchar *new_rec, uint key_no)
|
|||||||
Item_func_hash * temp= (Item_func_hash *)hash_field->vcol_info->expr;
|
Item_func_hash * temp= (Item_func_hash *)hash_field->vcol_info->expr;
|
||||||
Item ** arguments= temp->arguments();
|
Item ** arguments= temp->arguments();
|
||||||
uint arg_count= temp->argument_count();
|
uint arg_count= temp->argument_count();
|
||||||
|
// restore pointers after swap_values in TABLE::update_virtual_fields()
|
||||||
|
for (Field **vf= table->vfield; *vf; vf++)
|
||||||
|
{
|
||||||
|
if (!(*vf)->stored_in_db() && (*vf)->flags & BLOB_FLAG &&
|
||||||
|
bitmap_is_set(table->read_set, (*vf)->field_index))
|
||||||
|
((Field_blob*)*vf)->swap_value_and_read_value();
|
||||||
|
}
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
my_ptrdiff_t diff= table->file->lookup_buffer - new_rec;
|
my_ptrdiff_t diff= table->file->lookup_buffer - new_rec;
|
||||||
@ -6950,6 +6960,7 @@ exit:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
restore_record(table, file->lookup_buffer);
|
restore_record(table, file->lookup_buffer);
|
||||||
|
table->restore_blob_values(blob_storage);
|
||||||
lookup_handler->ha_index_end();
|
lookup_handler->ha_index_end();
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
@ -7260,7 +7260,7 @@ Rows_log_event::write_row(rpl_group_info *rgi,
|
|||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_curr_row == m_rows_buf && !invoke_triggers)
|
if (m_curr_row == m_rows_buf && !invoke_triggers && !table->s->long_unique_table)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
This table has no triggers so we can do bulk insert.
|
This table has no triggers so we can do bulk insert.
|
||||||
@ -7293,6 +7293,9 @@ Rows_log_event::write_row(rpl_group_info *rgi,
|
|||||||
DBUG_PRINT_BITSET("debug", "rpl_write_set: %s", table->rpl_write_set);
|
DBUG_PRINT_BITSET("debug", "rpl_write_set: %s", table->rpl_write_set);
|
||||||
DBUG_PRINT_BITSET("debug", "read_set: %s", table->read_set);
|
DBUG_PRINT_BITSET("debug", "read_set: %s", table->read_set);
|
||||||
|
|
||||||
|
if (table->s->long_unique_table)
|
||||||
|
table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_WRITE);
|
||||||
|
|
||||||
if (invoke_triggers &&
|
if (invoke_triggers &&
|
||||||
unlikely(process_triggers(TRG_EVENT_INSERT, TRG_ACTION_BEFORE, TRUE)))
|
unlikely(process_triggers(TRG_EVENT_INSERT, TRG_ACTION_BEFORE, TRUE)))
|
||||||
{
|
{
|
||||||
@ -7404,7 +7407,14 @@ Rows_log_event::write_row(rpl_group_info *rgi,
|
|||||||
Now, record[1] should contain the offending row. That
|
Now, record[1] should contain the offending row. That
|
||||||
will enable us to update it or, alternatively, delete it (so
|
will enable us to update it or, alternatively, delete it (so
|
||||||
that we can insert the new row afterwards).
|
that we can insert the new row afterwards).
|
||||||
*/
|
*/
|
||||||
|
if (table->s->long_unique_table)
|
||||||
|
{
|
||||||
|
/* same as for REPLACE/ODKU */
|
||||||
|
table->move_fields(table->field, table->record[1], table->record[0]);
|
||||||
|
table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_REPLACE);
|
||||||
|
table->move_fields(table->field, table->record[0], table->record[1]);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If row is incomplete we will use the record found to fill
|
If row is incomplete we will use the record found to fill
|
||||||
@ -7414,6 +7424,8 @@ Rows_log_event::write_row(rpl_group_info *rgi,
|
|||||||
{
|
{
|
||||||
restore_record(table,record[1]);
|
restore_record(table,record[1]);
|
||||||
error= unpack_current_row(rgi);
|
error= unpack_current_row(rgi);
|
||||||
|
if (table->s->long_unique_table)
|
||||||
|
table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_WRITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_PRINT("debug",("preparing for update: before and after image"));
|
DBUG_PRINT("debug",("preparing for update: before and after image"));
|
||||||
@ -8391,6 +8403,8 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
|
|||||||
thd_proc_info(thd, message);
|
thd_proc_info(thd, message);
|
||||||
if (unlikely((error= unpack_current_row(rgi, &m_cols_ai))))
|
if (unlikely((error= unpack_current_row(rgi, &m_cols_ai))))
|
||||||
goto err;
|
goto err;
|
||||||
|
if (m_table->s->long_unique_table)
|
||||||
|
m_table->update_virtual_fields(m_table->file, VCOL_UPDATE_FOR_WRITE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Now we have the right row to update. The old row (the one we're
|
Now we have the right row to update. The old row (the one we're
|
||||||
|
@ -8969,7 +8969,7 @@ static int test_if_case_insensitive(const char *dir_name)
|
|||||||
buff, 0666, O_RDWR, MYF(0))) < 0)
|
buff, 0666, O_RDWR, MYF(0))) < 0)
|
||||||
{
|
{
|
||||||
if (!opt_abort)
|
if (!opt_abort)
|
||||||
sql_print_warning("Can't create test file %s", buff);
|
sql_print_warning("Can't create test file '%s' (Errcode: %M)", buff, my_errno);
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
mysql_file_close(file, MYF(0));
|
mysql_file_close(file, MYF(0));
|
||||||
|
@ -218,6 +218,7 @@ finish_event_group(rpl_parallel_thread *rpt, uint64 sub_id,
|
|||||||
waiting for this). In most cases (normal DML), it will be a no-op.
|
waiting for this). In most cases (normal DML), it will be a no-op.
|
||||||
*/
|
*/
|
||||||
rgi->mark_start_commit_no_lock();
|
rgi->mark_start_commit_no_lock();
|
||||||
|
rgi->commit_orderer.wakeup_blocked= false;
|
||||||
|
|
||||||
if (entry->last_committed_sub_id < sub_id)
|
if (entry->last_committed_sub_id < sub_id)
|
||||||
{
|
{
|
||||||
@ -1427,7 +1428,22 @@ handle_rpl_parallel_thread(void *arg)
|
|||||||
if (!thd->killed)
|
if (!thd->killed)
|
||||||
{
|
{
|
||||||
DEBUG_SYNC(thd, "rpl_parallel_before_mark_start_commit");
|
DEBUG_SYNC(thd, "rpl_parallel_before_mark_start_commit");
|
||||||
rgi->mark_start_commit();
|
if (thd->lex->stmt_accessed_temp_table())
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Temporary tables are special, they require strict
|
||||||
|
single-threaded use as they have no locks protecting concurrent
|
||||||
|
access. Therefore, we cannot safely use the optimization of
|
||||||
|
overlapping the commit of this transaction with the start of the
|
||||||
|
following.
|
||||||
|
So we skip the early mark_start_commit() and also block any
|
||||||
|
wakeup_subsequent_commits() until this event group is fully
|
||||||
|
done, inside finish_event_group().
|
||||||
|
*/
|
||||||
|
rgi->commit_orderer.wakeup_blocked= true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rgi->mark_start_commit();
|
||||||
DEBUG_SYNC(thd, "rpl_parallel_after_mark_start_commit");
|
DEBUG_SYNC(thd, "rpl_parallel_after_mark_start_commit");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7874,6 +7874,7 @@ wait_for_commit::reinit()
|
|||||||
wakeup_error= 0;
|
wakeup_error= 0;
|
||||||
wakeup_subsequent_commits_running= false;
|
wakeup_subsequent_commits_running= false;
|
||||||
commit_started= false;
|
commit_started= false;
|
||||||
|
wakeup_blocked= false;
|
||||||
#ifdef SAFE_MUTEX
|
#ifdef SAFE_MUTEX
|
||||||
/*
|
/*
|
||||||
When using SAFE_MUTEX, the ordering between taking the LOCK_wait_commit
|
When using SAFE_MUTEX, the ordering between taking the LOCK_wait_commit
|
||||||
@ -8147,6 +8148,9 @@ wait_for_commit::wakeup_subsequent_commits2(int wakeup_error)
|
|||||||
{
|
{
|
||||||
wait_for_commit *waiter;
|
wait_for_commit *waiter;
|
||||||
|
|
||||||
|
if (unlikely(wakeup_blocked))
|
||||||
|
return;
|
||||||
|
|
||||||
mysql_mutex_lock(&LOCK_wait_commit);
|
mysql_mutex_lock(&LOCK_wait_commit);
|
||||||
wakeup_subsequent_commits_running= true;
|
wakeup_subsequent_commits_running= true;
|
||||||
waiter= subsequent_commits_list;
|
waiter= subsequent_commits_list;
|
||||||
|
@ -2240,6 +2240,19 @@ struct wait_for_commit
|
|||||||
group commit as T1.
|
group commit as T1.
|
||||||
*/
|
*/
|
||||||
bool commit_started;
|
bool commit_started;
|
||||||
|
/*
|
||||||
|
Set to temporarily ignore calls to wakeup_subsequent_commits(). The
|
||||||
|
caller must arrange that another wakeup_subsequent_commits() gets called
|
||||||
|
later after wakeup_blocked has been set back to false.
|
||||||
|
|
||||||
|
This is used for parallel replication with temporary tables.
|
||||||
|
Temporary tables require strict single-threaded operation. The normal
|
||||||
|
optimization, of doing wakeup_subsequent_commits early and overlapping
|
||||||
|
part of the commit with the following transaction, is not safe. Thus
|
||||||
|
when temporary tables are replicated, wakeup is blocked until the
|
||||||
|
event group is fully done.
|
||||||
|
*/
|
||||||
|
bool wakeup_blocked;
|
||||||
|
|
||||||
void register_wait_for_prior_commit(wait_for_commit *waitee);
|
void register_wait_for_prior_commit(wait_for_commit *waitee);
|
||||||
int wait_for_prior_commit(THD *thd, bool allow_kill=true)
|
int wait_for_prior_commit(THD *thd, bool allow_kill=true)
|
||||||
|
@ -931,7 +931,7 @@ bool mysql_insert(THD *thd, TABLE_LIST *table_list,
|
|||||||
same table in the same connection.
|
same table in the same connection.
|
||||||
*/
|
*/
|
||||||
if (thd->locked_tables_mode <= LTM_LOCK_TABLES &&
|
if (thd->locked_tables_mode <= LTM_LOCK_TABLES &&
|
||||||
values_list.elements > 1)
|
!table->s->long_unique_table && values_list.elements > 1)
|
||||||
{
|
{
|
||||||
using_bulk_insert= 1;
|
using_bulk_insert= 1;
|
||||||
table->file->ha_start_bulk_insert(values_list.elements);
|
table->file->ha_start_bulk_insert(values_list.elements);
|
||||||
@ -3516,7 +3516,7 @@ bool Delayed_insert::handle_inserts(void)
|
|||||||
we get a crash, then binary log will contain rows that are not yet
|
we get a crash, then binary log will contain rows that are not yet
|
||||||
written to disk, which will cause problems in replication.
|
written to disk, which will cause problems in replication.
|
||||||
*/
|
*/
|
||||||
if (!using_bin_log)
|
if (!using_bin_log && !table->s->long_unique_table)
|
||||||
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
||||||
|
|
||||||
mysql_mutex_lock(&mutex);
|
mysql_mutex_lock(&mutex);
|
||||||
@ -3676,7 +3676,7 @@ bool Delayed_insert::handle_inserts(void)
|
|||||||
table->s->table_name.str);
|
table->s->table_name.str);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (!using_bin_log)
|
if (!using_bin_log && !table->s->long_unique_table)
|
||||||
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
||||||
mysql_mutex_lock(&mutex);
|
mysql_mutex_lock(&mutex);
|
||||||
THD_STAGE_INFO(&thd, stage_insert);
|
THD_STAGE_INFO(&thd, stage_insert);
|
||||||
@ -4053,7 +4053,8 @@ int select_insert::prepare2(JOIN *)
|
|||||||
if (thd->lex->describe)
|
if (thd->lex->describe)
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
if (thd->lex->current_select->options & OPTION_BUFFER_RESULT &&
|
if (thd->lex->current_select->options & OPTION_BUFFER_RESULT &&
|
||||||
thd->locked_tables_mode <= LTM_LOCK_TABLES)
|
thd->locked_tables_mode <= LTM_LOCK_TABLES &&
|
||||||
|
!table->s->long_unique_table)
|
||||||
table->file->ha_start_bulk_insert((ha_rows) 0);
|
table->file->ha_start_bulk_insert((ha_rows) 0);
|
||||||
|
|
||||||
/* Same as the other variants of INSERT */
|
/* Same as the other variants of INSERT */
|
||||||
@ -4802,13 +4803,16 @@ select_create::prepare(List<Item> &_values, SELECT_LEX_UNIT *u)
|
|||||||
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
|
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
|
||||||
if (info.handle_duplicates == DUP_UPDATE)
|
if (info.handle_duplicates == DUP_UPDATE)
|
||||||
table->file->extra(HA_EXTRA_INSERT_WITH_UPDATE);
|
table->file->extra(HA_EXTRA_INSERT_WITH_UPDATE);
|
||||||
if (thd->locked_tables_mode <= LTM_LOCK_TABLES)
|
if (thd->locked_tables_mode <= LTM_LOCK_TABLES &&
|
||||||
|
!table->s->long_unique_table)
|
||||||
|
{
|
||||||
table->file->ha_start_bulk_insert((ha_rows) 0);
|
table->file->ha_start_bulk_insert((ha_rows) 0);
|
||||||
|
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
||||||
|
}
|
||||||
thd->abort_on_warning= !info.ignore && thd->is_strict_mode();
|
thd->abort_on_warning= !info.ignore && thd->is_strict_mode();
|
||||||
if (check_that_all_fields_are_given_values(thd, table, table_list))
|
if (check_that_all_fields_are_given_values(thd, table, table_list))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
table->mark_columns_needed_for_insert();
|
table->mark_columns_needed_for_insert();
|
||||||
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
|
||||||
// Mark table as used
|
// Mark table as used
|
||||||
table->query_id= thd->query_id;
|
table->query_id= thd->query_id;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
@ -645,7 +645,8 @@ int mysql_load(THD *thd, const sql_exchange *ex, TABLE_LIST *table_list,
|
|||||||
(!table->triggers ||
|
(!table->triggers ||
|
||||||
!table->triggers->has_delete_triggers()))
|
!table->triggers->has_delete_triggers()))
|
||||||
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
|
table->file->extra(HA_EXTRA_WRITE_CAN_REPLACE);
|
||||||
if (thd->locked_tables_mode <= LTM_LOCK_TABLES)
|
if (thd->locked_tables_mode <= LTM_LOCK_TABLES &&
|
||||||
|
!table->s->long_unique_table)
|
||||||
table->file->ha_start_bulk_insert((ha_rows) 0);
|
table->file->ha_start_bulk_insert((ha_rows) 0);
|
||||||
table->copy_blobs=1;
|
table->copy_blobs=1;
|
||||||
|
|
||||||
|
@ -1933,6 +1933,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||||||
MYSQL_QUERY_DONE(thd->is_error());
|
MYSQL_QUERY_DONE(thd->is_error());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
thd->lex->restore_set_statement_var();
|
||||||
|
|
||||||
#if defined(ENABLED_PROFILING)
|
#if defined(ENABLED_PROFILING)
|
||||||
thd->profiling.finish_current_query();
|
thd->profiling.finish_current_query();
|
||||||
thd->profiling.start_new_query("continuing");
|
thd->profiling.start_new_query("continuing");
|
||||||
|
@ -72,11 +72,9 @@ static bool make_unique_constraint_name(THD *, LEX_CSTRING *, const char *,
|
|||||||
List<Virtual_column_info> *, uint *);
|
List<Virtual_column_info> *, uint *);
|
||||||
static const char *make_unique_invisible_field_name(THD *, const char *,
|
static const char *make_unique_invisible_field_name(THD *, const char *,
|
||||||
List<Create_field> *);
|
List<Create_field> *);
|
||||||
static int copy_data_between_tables(THD *, TABLE *,TABLE *,
|
static int copy_data_between_tables(THD *, TABLE *,TABLE *, bool, uint,
|
||||||
List<Create_field> &, bool, uint, ORDER *,
|
ORDER *, ha_rows *, ha_rows *,
|
||||||
ha_rows *, ha_rows *,
|
Alter_info *, Alter_table_ctx *);
|
||||||
Alter_info::enum_enable_or_disable,
|
|
||||||
Alter_table_ctx *);
|
|
||||||
static int append_system_key_parts(THD *, HA_CREATE_INFO *, Key *);
|
static int append_system_key_parts(THD *, HA_CREATE_INFO *, Key *);
|
||||||
static int mysql_prepare_create_table(THD *, HA_CREATE_INFO *, Alter_info *,
|
static int mysql_prepare_create_table(THD *, HA_CREATE_INFO *, Alter_info *,
|
||||||
uint *, handler *, KEY **, uint *, int);
|
uint *, handler *, KEY **, uint *, int);
|
||||||
@ -11032,10 +11030,8 @@ do_continue:;
|
|||||||
new_table->mark_columns_needed_for_insert();
|
new_table->mark_columns_needed_for_insert();
|
||||||
thd->binlog_write_table_map(new_table, 1);
|
thd->binlog_write_table_map(new_table, 1);
|
||||||
}
|
}
|
||||||
if (copy_data_between_tables(thd, table, new_table,
|
if (copy_data_between_tables(thd, table, new_table, ignore, order_num,
|
||||||
alter_info->create_list, ignore,
|
order, &copied, &deleted, alter_info,
|
||||||
order_num, order, &copied, &deleted,
|
|
||||||
alter_info->keys_onoff,
|
|
||||||
&alter_ctx))
|
&alter_ctx))
|
||||||
goto err_new_table_cleanup;
|
goto err_new_table_cleanup;
|
||||||
}
|
}
|
||||||
@ -11434,11 +11430,9 @@ bool mysql_trans_commit_alter_copy_data(THD *thd)
|
|||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
copy_data_between_tables(THD *thd, TABLE *from, TABLE *to, bool ignore,
|
||||||
List<Create_field> &create, bool ignore,
|
uint order_num, ORDER *order, ha_rows *copied,
|
||||||
uint order_num, ORDER *order,
|
ha_rows *deleted, Alter_info *alter_info,
|
||||||
ha_rows *copied, ha_rows *deleted,
|
|
||||||
Alter_info::enum_enable_or_disable keys_onoff,
|
|
||||||
Alter_table_ctx *alter_ctx)
|
Alter_table_ctx *alter_ctx)
|
||||||
{
|
{
|
||||||
int error= 1;
|
int error= 1;
|
||||||
@ -11487,7 +11481,8 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
|||||||
|
|
||||||
backup_set_alter_copy_lock(thd, from);
|
backup_set_alter_copy_lock(thd, from);
|
||||||
|
|
||||||
alter_table_manage_keys(to, from->file->indexes_are_disabled(), keys_onoff);
|
alter_table_manage_keys(to, from->file->indexes_are_disabled(),
|
||||||
|
alter_info->keys_onoff);
|
||||||
|
|
||||||
from->default_column_bitmaps();
|
from->default_column_bitmaps();
|
||||||
|
|
||||||
@ -11496,12 +11491,14 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
|||||||
|
|
||||||
from->file->info(HA_STATUS_VARIABLE);
|
from->file->info(HA_STATUS_VARIABLE);
|
||||||
to->file->extra(HA_EXTRA_PREPARE_FOR_ALTER_TABLE);
|
to->file->extra(HA_EXTRA_PREPARE_FOR_ALTER_TABLE);
|
||||||
to->file->ha_start_bulk_insert(from->file->stats.records,
|
if (!to->s->long_unique_table)
|
||||||
ignore ? 0 : HA_CREATE_UNIQUE_INDEX_BY_SORT);
|
{
|
||||||
bulk_insert_started= 1;
|
to->file->ha_start_bulk_insert(from->file->stats.records,
|
||||||
|
ignore ? 0 : HA_CREATE_UNIQUE_INDEX_BY_SORT);
|
||||||
|
bulk_insert_started= 1;
|
||||||
|
}
|
||||||
mysql_stage_set_work_estimated(thd->m_stage_progress_psi, from->file->stats.records);
|
mysql_stage_set_work_estimated(thd->m_stage_progress_psi, from->file->stats.records);
|
||||||
|
List_iterator<Create_field> it(alter_info->create_list);
|
||||||
List_iterator<Create_field> it(create);
|
|
||||||
Create_field *def;
|
Create_field *def;
|
||||||
copy_end=copy;
|
copy_end=copy;
|
||||||
to->s->default_fields= 0;
|
to->s->default_fields= 0;
|
||||||
@ -11760,7 +11757,7 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
|||||||
/* We are going to drop the temporary table */
|
/* We are going to drop the temporary table */
|
||||||
to->file->extra(HA_EXTRA_PREPARE_FOR_DROP);
|
to->file->extra(HA_EXTRA_PREPARE_FOR_DROP);
|
||||||
}
|
}
|
||||||
if (unlikely(to->file->ha_end_bulk_insert()) && error <= 0)
|
if (bulk_insert_started && to->file->ha_end_bulk_insert() && error <= 0)
|
||||||
{
|
{
|
||||||
/* Give error, if not already given */
|
/* Give error, if not already given */
|
||||||
if (!thd->is_error())
|
if (!thd->is_error())
|
||||||
@ -11801,7 +11798,6 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to,
|
|||||||
{
|
{
|
||||||
/* This happens if we get an error during initialization of data */
|
/* This happens if we get an error during initialization of data */
|
||||||
DBUG_ASSERT(error);
|
DBUG_ASSERT(error);
|
||||||
to->file->ha_end_bulk_insert();
|
|
||||||
ha_enable_transaction(thd, TRUE);
|
ha_enable_transaction(thd, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12946,7 +12946,8 @@ bool create_table_info_t::row_size_is_acceptable(
|
|||||||
eow << "Cannot add field " << field->name << " in table ";
|
eow << "Cannot add field " << field->name << " in table ";
|
||||||
else
|
else
|
||||||
eow << "Cannot add an instantly dropped column in table ";
|
eow << "Cannot add an instantly dropped column in table ";
|
||||||
eow << index.table->name << " because after adding it, the row size is "
|
eow << "`" << m_form->s->db.str << "`.`" << m_form->s->table_name.str
|
||||||
|
<< "`" " because after adding it, the row size is "
|
||||||
<< info.get_overrun_size()
|
<< info.get_overrun_size()
|
||||||
<< " which is greater than maximum allowed size ("
|
<< " which is greater than maximum allowed size ("
|
||||||
<< info.max_leaf_size << " bytes) for a record on index leaf page.";
|
<< info.max_leaf_size << " bytes) for a record on index leaf page.";
|
||||||
@ -17788,13 +17789,7 @@ innodb_monitor_validate_wildcard_name(
|
|||||||
Validate the passed in monitor name, find and save the
|
Validate the passed in monitor name, find and save the
|
||||||
corresponding monitor name in the function parameter "save".
|
corresponding monitor name in the function parameter "save".
|
||||||
@return 0 if monitor name is valid */
|
@return 0 if monitor name is valid */
|
||||||
static
|
static int innodb_monitor_valid_byname(const char *name)
|
||||||
int
|
|
||||||
innodb_monitor_valid_byname(
|
|
||||||
/*========================*/
|
|
||||||
void* save, /*!< out: immediate result
|
|
||||||
for update function */
|
|
||||||
const char* name) /*!< in: incoming monitor name */
|
|
||||||
{
|
{
|
||||||
ulint use;
|
ulint use;
|
||||||
monitor_info_t* monitor_info;
|
monitor_info_t* monitor_info;
|
||||||
@ -17842,9 +17837,6 @@ innodb_monitor_valid_byname(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save the configure name for innodb_monitor_update() */
|
|
||||||
*static_cast<const char**>(save) = name;
|
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
/*************************************************************//**
|
/*************************************************************//**
|
||||||
@ -17860,41 +17852,18 @@ innodb_monitor_validate(
|
|||||||
for update function */
|
for update function */
|
||||||
struct st_mysql_value* value) /*!< in: incoming string */
|
struct st_mysql_value* value) /*!< in: incoming string */
|
||||||
{
|
{
|
||||||
const char* name;
|
int ret= 0;
|
||||||
char* monitor_name;
|
|
||||||
char buff[STRING_BUFFER_USUAL_SIZE];
|
|
||||||
int len = sizeof(buff);
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ut_a(save != NULL);
|
if (const char *name= value->val_str(value, nullptr, &ret))
|
||||||
ut_a(value != NULL);
|
{
|
||||||
|
ret= innodb_monitor_valid_byname(name);
|
||||||
|
if (!ret)
|
||||||
|
*static_cast<const char**>(save)= name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret= 1;
|
||||||
|
|
||||||
name = value->val_str(value, buff, &len);
|
return ret;
|
||||||
|
|
||||||
/* monitor_name could point to memory from MySQL
|
|
||||||
or buff[]. Always dup the name to memory allocated
|
|
||||||
by InnoDB, so we can access it in another callback
|
|
||||||
function innodb_monitor_update() and free it appropriately */
|
|
||||||
if (name) {
|
|
||||||
monitor_name = my_strdup(PSI_INSTRUMENT_ME,
|
|
||||||
name, MYF(0));
|
|
||||||
} else {
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = innodb_monitor_valid_byname(save, monitor_name);
|
|
||||||
|
|
||||||
if (ret) {
|
|
||||||
/* Validation failed */
|
|
||||||
my_free(monitor_name);
|
|
||||||
} else {
|
|
||||||
/* monitor_name will be freed in separate callback function
|
|
||||||
innodb_monitor_update(). Assert "save" point to
|
|
||||||
the "monitor_name" variable */
|
|
||||||
ut_ad(*static_cast<char**>(save) == monitor_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
@ -17910,11 +17879,9 @@ innodb_monitor_update(
|
|||||||
formal string goes */
|
formal string goes */
|
||||||
const void* save, /*!< in: immediate result
|
const void* save, /*!< in: immediate result
|
||||||
from check function */
|
from check function */
|
||||||
mon_option_t set_option, /*!< in: the set option,
|
mon_option_t set_option) /*!< in: the set option,
|
||||||
whether to turn on/off or
|
whether to turn on/off or
|
||||||
reset the counter */
|
reset the counter */
|
||||||
ibool free_mem) /*!< in: whether we will
|
|
||||||
need to free the memory */
|
|
||||||
{
|
{
|
||||||
monitor_info_t* monitor_info;
|
monitor_info_t* monitor_info;
|
||||||
ulint monitor_id;
|
ulint monitor_id;
|
||||||
@ -17998,12 +17965,6 @@ exit:
|
|||||||
sql_print_warning("InnoDB: Monitor %s is already enabled.",
|
sql_print_warning("InnoDB: Monitor %s is already enabled.",
|
||||||
srv_mon_get_name((monitor_id_t) err_monitor));
|
srv_mon_get_name((monitor_id_t) err_monitor));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (free_mem && name) {
|
|
||||||
my_free((void*) name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
@ -18086,7 +18047,7 @@ innodb_enable_monitor_update(
|
|||||||
const void* save) /*!< in: immediate result
|
const void* save) /*!< in: immediate result
|
||||||
from check function */
|
from check function */
|
||||||
{
|
{
|
||||||
innodb_monitor_update(thd, var_ptr, save, MONITOR_TURN_ON, TRUE);
|
innodb_monitor_update(thd, var_ptr, save, MONITOR_TURN_ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
@ -18103,7 +18064,7 @@ innodb_disable_monitor_update(
|
|||||||
const void* save) /*!< in: immediate result
|
const void* save) /*!< in: immediate result
|
||||||
from check function */
|
from check function */
|
||||||
{
|
{
|
||||||
innodb_monitor_update(thd, var_ptr, save, MONITOR_TURN_OFF, TRUE);
|
innodb_monitor_update(thd, var_ptr, save, MONITOR_TURN_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
@ -18121,7 +18082,7 @@ innodb_reset_monitor_update(
|
|||||||
const void* save) /*!< in: immediate result
|
const void* save) /*!< in: immediate result
|
||||||
from check function */
|
from check function */
|
||||||
{
|
{
|
||||||
innodb_monitor_update(thd, var_ptr, save, MONITOR_RESET_VALUE, TRUE);
|
innodb_monitor_update(thd, var_ptr, save, MONITOR_RESET_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
@ -18139,8 +18100,7 @@ innodb_reset_all_monitor_update(
|
|||||||
const void* save) /*!< in: immediate result
|
const void* save) /*!< in: immediate result
|
||||||
from check function */
|
from check function */
|
||||||
{
|
{
|
||||||
innodb_monitor_update(thd, var_ptr, save, MONITOR_RESET_ALL_VALUE,
|
innodb_monitor_update(thd, var_ptr, save, MONITOR_RESET_ALL_VALUE);
|
||||||
TRUE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
@ -18185,10 +18145,9 @@ innodb_enable_monitor_at_startup(
|
|||||||
for (char* option = my_strtok_r(str, sep, &last);
|
for (char* option = my_strtok_r(str, sep, &last);
|
||||||
option;
|
option;
|
||||||
option = my_strtok_r(NULL, sep, &last)) {
|
option = my_strtok_r(NULL, sep, &last)) {
|
||||||
char* option_name;
|
if (!innodb_monitor_valid_byname(option)) {
|
||||||
if (!innodb_monitor_valid_byname(&option_name, option)) {
|
|
||||||
innodb_monitor_update(NULL, NULL, &option,
|
innodb_monitor_update(NULL, NULL, &option,
|
||||||
MONITOR_TURN_ON, FALSE);
|
MONITOR_TURN_ON);
|
||||||
} else {
|
} else {
|
||||||
sql_print_warning("Invalid monitor counter"
|
sql_print_warning("Invalid monitor counter"
|
||||||
" name: '%s'", option);
|
" name: '%s'", option);
|
||||||
|
@ -10332,13 +10332,13 @@ int ha_mroonga::generic_store_bulk_variable_size_string(Field *field,
|
|||||||
{
|
{
|
||||||
MRN_DBUG_ENTER_METHOD();
|
MRN_DBUG_ENTER_METHOD();
|
||||||
int error = 0;
|
int error = 0;
|
||||||
String value;
|
StringBuffer<MAX_FIELD_WIDTH> buffer(field->charset());
|
||||||
field->val_str(NULL, &value);
|
auto value = field->val_str(&buffer, &buffer);
|
||||||
grn_obj_reinit(ctx, buf, GRN_DB_SHORT_TEXT, 0);
|
grn_obj_reinit(ctx, buf, GRN_DB_SHORT_TEXT, 0);
|
||||||
DBUG_PRINT("info", ("mroonga: length=%" MRN_FORMAT_STRING_LENGTH,
|
DBUG_PRINT("info", ("mroonga: length=%" MRN_FORMAT_STRING_LENGTH,
|
||||||
value.length()));
|
value->length()));
|
||||||
DBUG_PRINT("info", ("mroonga: value=%s", value.c_ptr_safe()));
|
DBUG_PRINT("info", ("mroonga: value=%s", value->c_ptr_safe()));
|
||||||
GRN_TEXT_SET(ctx, buf, value.ptr(), value.length());
|
GRN_TEXT_SET(ctx, buf, value->ptr(), value->length());
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10705,9 +10705,8 @@ int ha_mroonga::generic_store_bulk_blob(Field *field, grn_obj *buf)
|
|||||||
{
|
{
|
||||||
MRN_DBUG_ENTER_METHOD();
|
MRN_DBUG_ENTER_METHOD();
|
||||||
int error = 0;
|
int error = 0;
|
||||||
String buffer;
|
StringBuffer<MAX_FIELD_WIDTH> buffer(field->charset());
|
||||||
Field_blob *blob = (Field_blob *)field;
|
auto value = field->val_str(&buffer, &buffer);
|
||||||
String *value = blob->val_str(0, &buffer);
|
|
||||||
grn_obj_reinit(ctx, buf, GRN_DB_TEXT, 0);
|
grn_obj_reinit(ctx, buf, GRN_DB_TEXT, 0);
|
||||||
GRN_TEXT_SET(ctx, buf, value->ptr(), value->length());
|
GRN_TEXT_SET(ctx, buf, value->ptr(), value->length());
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
@ -14627,7 +14626,8 @@ enum_alter_inplace_result ha_mroonga::storage_check_if_supported_inplace_alter(
|
|||||||
ALTER_COLUMN_NAME;
|
ALTER_COLUMN_NAME;
|
||||||
if (ha_alter_info->handler_flags & explicitly_unsupported_flags) {
|
if (ha_alter_info->handler_flags & explicitly_unsupported_flags) {
|
||||||
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
||||||
} else if (ha_alter_info->handler_flags & supported_flags) {
|
} else if ((ha_alter_info->handler_flags & supported_flags) ==
|
||||||
|
ha_alter_info->handler_flags) {
|
||||||
DBUG_RETURN(HA_ALTER_INPLACE_EXCLUSIVE_LOCK);
|
DBUG_RETURN(HA_ALTER_INPLACE_EXCLUSIVE_LOCK);
|
||||||
} else {
|
} else {
|
||||||
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED);
|
||||||
|
@ -1 +0,0 @@
|
|||||||
SUBDIRS = dictionary
|
|
@ -1,34 +0,0 @@
|
|||||||
SUBDIRS = \
|
|
||||||
edict \
|
|
||||||
eijiro \
|
|
||||||
gene95 \
|
|
||||||
jmdict
|
|
||||||
|
|
||||||
dist_examples_dictionary_SCRIPTS = \
|
|
||||||
init-db.sh
|
|
||||||
|
|
||||||
nobase_dist_examples_dictionary_DATA = \
|
|
||||||
readme.txt \
|
|
||||||
$(html_files)
|
|
||||||
|
|
||||||
# find html -type f | sort | sed -e 's,^,\t,g'
|
|
||||||
html_files = \
|
|
||||||
html/css/dictionary.css \
|
|
||||||
html/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png \
|
|
||||||
html/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png \
|
|
||||||
html/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png \
|
|
||||||
html/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png \
|
|
||||||
html/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png \
|
|
||||||
html/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png \
|
|
||||||
html/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png \
|
|
||||||
html/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png \
|
|
||||||
html/css/smoothness/images/ui-icons_222222_256x240.png \
|
|
||||||
html/css/smoothness/images/ui-icons_2e83ff_256x240.png \
|
|
||||||
html/css/smoothness/images/ui-icons_454545_256x240.png \
|
|
||||||
html/css/smoothness/images/ui-icons_888888_256x240.png \
|
|
||||||
html/css/smoothness/images/ui-icons_cd0a0a_256x240.png \
|
|
||||||
html/css/smoothness/jquery-ui-1.8.12.custom.css \
|
|
||||||
html/index.html \
|
|
||||||
html/js/dictionary.js \
|
|
||||||
html/js/jquery-1.7.2.js \
|
|
||||||
html/js/jquery-ui-1.8.18.custom.js
|
|
@ -1,4 +0,0 @@
|
|||||||
edictdir = $(examples_dictionarydir)/edict
|
|
||||||
dist_edict_SCRIPTS = \
|
|
||||||
edict2grn.rb \
|
|
||||||
edict-import.sh
|
|
@ -1,27 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
base_dir=$(dirname $0)
|
|
||||||
|
|
||||||
if [ 1 != $# -a 2 != $# ]; then
|
|
||||||
echo "usage: $0 db_path [edict.gz_path]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $2 ]; then
|
|
||||||
edict_gz=edict.gz
|
|
||||||
if [ ! -f $edict_gz ]; then
|
|
||||||
wget -O $edict_gz http://ftp.monash.edu.au/pub/nihongo/edict.gz
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
edict_gz=$2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if type gzcat > /dev/null 2>&1; then
|
|
||||||
zcat="gzcat"
|
|
||||||
else
|
|
||||||
zcat="zcat"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $zcat $edict_gz | ${base_dir}/edict2grn.rb | groonga $1 > /dev/null; then
|
|
||||||
echo "edict data loaded."
|
|
||||||
fi
|
|
@ -1,34 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require "English"
|
|
||||||
require "nkf"
|
|
||||||
require "json"
|
|
||||||
|
|
||||||
print(<<HEADER.chomp)
|
|
||||||
column_create item_dictionary edict_desc COLUMN_SCALAR ShortText
|
|
||||||
column_create bigram item_dictionary_edict_desc COLUMN_INDEX|WITH_POSITION item_dictionary edict_desc
|
|
||||||
load --table item_dictionary
|
|
||||||
[
|
|
||||||
["_key","edict_desc","kana"]
|
|
||||||
HEADER
|
|
||||||
|
|
||||||
loop do
|
|
||||||
raw_line = gets
|
|
||||||
break if raw_line.nil?
|
|
||||||
|
|
||||||
line = raw_line.encode("UTF-8", "EUC-JP")
|
|
||||||
key, body = line.strip.split("/", 2)
|
|
||||||
key = key.strip
|
|
||||||
if /\s*\[(.+)\]\z/ =~ key
|
|
||||||
key = $PREMATCH
|
|
||||||
reading = $1
|
|
||||||
body = "[#{reading}] #{body}"
|
|
||||||
kana = NKF.nkf("-Ww --katakana", reading)
|
|
||||||
else
|
|
||||||
kana = NKF.nkf("-Ww --katakana", key)
|
|
||||||
end
|
|
||||||
puts(",")
|
|
||||||
puts([key, body, kana].to_json)
|
|
||||||
end
|
|
||||||
puts
|
|
||||||
puts("]")
|
|
@ -1,4 +0,0 @@
|
|||||||
eijirodir = $(examples_dictionarydir)/eijiro
|
|
||||||
dist_eijiro_SCRIPTS = \
|
|
||||||
eijiro2grn.rb \
|
|
||||||
eijiro-import.sh
|
|
@ -1,12 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
base_dir=$(dirname $0)
|
|
||||||
|
|
||||||
if [ 2 != $# ]; then
|
|
||||||
echo "usage: $0 db_path eijiro.csv_path"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if iconv -f UCS2 -t UTF8 $2 | ${base_dir}/eijiro2grn.rb | groonga $1 > /dev/null; then
|
|
||||||
echo "eijiro data loaded."
|
|
||||||
fi
|
|
@ -1,61 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
$KCODE = 'u'
|
|
||||||
|
|
||||||
require 'rubygems'
|
|
||||||
require 'fastercsv'
|
|
||||||
|
|
||||||
class String
|
|
||||||
def to_json
|
|
||||||
a = split(//).map {|char|
|
|
||||||
case char
|
|
||||||
when '"' then '\\"'
|
|
||||||
when '\\' then '\\\\'
|
|
||||||
when "\b" then '\b'
|
|
||||||
when "\f" then '\f'
|
|
||||||
when "\n" then '\n'
|
|
||||||
when "\r" then ''
|
|
||||||
when "\t" then '\t'
|
|
||||||
else char
|
|
||||||
end
|
|
||||||
}
|
|
||||||
"\"#{a.join('')}\""
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Array
|
|
||||||
def to_json
|
|
||||||
'[' + map {|element|
|
|
||||||
element.to_json
|
|
||||||
}.join(',') + ']'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
puts <<END
|
|
||||||
column_create item_dictionary eijiro_trans COLUMN_SCALAR ShortText
|
|
||||||
column_create item_dictionary eijiro_exp COLUMN_SCALAR ShortText
|
|
||||||
column_create item_dictionary eijiro_level COLUMN_SCALAR Int32
|
|
||||||
column_create item_dictionary eijiro_memory COLUMN_SCALAR Int32
|
|
||||||
column_create item_dictionary eijiro_modify COLUMN_SCALAR Int32
|
|
||||||
column_create item_dictionary eijiro_pron COLUMN_SCALAR ShortText
|
|
||||||
column_create item_dictionary eijiro_filelink COLUMN_SCALAR ShortText
|
|
||||||
column_create bigram item_dictionary_eijiro_trans COLUMN_INDEX|WITH_POSITION item_dictionary eijiro_trans
|
|
||||||
load --table item_dictionary
|
|
||||||
[["_key","norm","eijiro_trans","eijiro_exp","eijiro_level","eijiro_memory","eijiro_modify","eijiro_pron","eijiro_filelink","kana"],
|
|
||||||
END
|
|
||||||
|
|
||||||
n = 0
|
|
||||||
FasterCSV.new(ARGF, :row_sep => "\r\n").each {|l|
|
|
||||||
if n > 0
|
|
||||||
keyword,word,trans,exp,level,memory,modify,pron,filelink = l
|
|
||||||
kana = ''
|
|
||||||
if trans =~ /【@】(.*?)(【|$)/
|
|
||||||
kana = $1.split("、")
|
|
||||||
end
|
|
||||||
puts [word,keyword,trans,exp,level,memory,modify,pron,filelink,kana].map{|e| e || ''}.to_json
|
|
||||||
end
|
|
||||||
n += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
puts "]"
|
|
@ -1,4 +0,0 @@
|
|||||||
gene95dir = $(examples_dictionarydir)/gene95
|
|
||||||
dist_gene95_SCRIPTS = \
|
|
||||||
gene2grn.rb \
|
|
||||||
gene-import.sh
|
|
@ -1,26 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
base_dir=$(dirname $0)
|
|
||||||
|
|
||||||
if [ 1 != $# -a 2 != $# ]; then
|
|
||||||
echo "usage: $0 db_path [gene.txt_path]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $2 ]; then
|
|
||||||
dictionary_dir=gene95-dictionary
|
|
||||||
gene_txt=${dictionary_dir}/gene.txt
|
|
||||||
if [ ! -f $gene_txt ]; then
|
|
||||||
gene95_tar_gz=gene95.tar.gz
|
|
||||||
wget -O $gene95_tar_gz \
|
|
||||||
http://www.namazu.org/~tsuchiya/sdic/data/gene95.tar.gz
|
|
||||||
mkdir -p ${dictionary_dir}
|
|
||||||
tar xvzf ${gene95_tar_gz} -C ${dictionary_dir}
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
gene_txt=$2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if cat $gene_txt | ${base_dir}/gene2grn.rb | groonga $1 > /dev/null; then
|
|
||||||
echo "gene95 data loaded."
|
|
||||||
fi
|
|
@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require "json"
|
|
||||||
|
|
||||||
print(<<HEADER.chomp)
|
|
||||||
column_create item_dictionary gene95_desc COLUMN_SCALAR ShortText
|
|
||||||
column_create bigram item_dictionary_gene95_desc COLUMN_INDEX|WITH_POSITION item_dictionary gene95_desc
|
|
||||||
load --table item_dictionary
|
|
||||||
[
|
|
||||||
["_key","gene95_desc"]
|
|
||||||
HEADER
|
|
||||||
|
|
||||||
loop do
|
|
||||||
raw_key = gets
|
|
||||||
break if raw_key.nil?
|
|
||||||
raw_body = gets
|
|
||||||
|
|
||||||
key = nil
|
|
||||||
body = nil
|
|
||||||
begin
|
|
||||||
key = raw_key.encode("UTF-8", "Windows-31J").strip
|
|
||||||
body = raw_body.encode("UTF-8", "Windows-31J").strip
|
|
||||||
rescue EncodingError
|
|
||||||
$stderr.puts("Ignore:")
|
|
||||||
$stderr.puts(" key: <#{raw_key}>")
|
|
||||||
$stderr.puts(" body: <#{raw_body}>")
|
|
||||||
next
|
|
||||||
end
|
|
||||||
puts(",")
|
|
||||||
print([key, body].to_json)
|
|
||||||
end
|
|
||||||
puts
|
|
||||||
puts("]")
|
|
@ -1,3 +0,0 @@
|
|||||||
#result {
|
|
||||||
margin-top: 7em;
|
|
||||||
}
|
|
Before Width: | Height: | Size: 180 B |
Before Width: | Height: | Size: 178 B |
Before Width: | Height: | Size: 120 B |
Before Width: | Height: | Size: 105 B |
Before Width: | Height: | Size: 111 B |
Before Width: | Height: | Size: 110 B |
Before Width: | Height: | Size: 119 B |
Before Width: | Height: | Size: 101 B |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
@ -1,578 +0,0 @@
|
|||||||
/*
|
|
||||||
* jQuery UI CSS Framework 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Theming/API
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Layout helpers
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-helper-hidden { display: none; }
|
|
||||||
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
|
|
||||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
|
||||||
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
|
||||||
.ui-helper-clearfix { display: inline-block; }
|
|
||||||
/* required comment for clearfix to work in Opera \*/
|
|
||||||
* html .ui-helper-clearfix { height:1%; }
|
|
||||||
.ui-helper-clearfix { display:block; }
|
|
||||||
/* end clearfix */
|
|
||||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
|
||||||
|
|
||||||
|
|
||||||
/* Interaction Cues
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-state-disabled { cursor: default !important; }
|
|
||||||
|
|
||||||
|
|
||||||
/* Icons
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* states and images */
|
|
||||||
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
|
||||||
|
|
||||||
|
|
||||||
/* Misc visuals
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* Overlays */
|
|
||||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* jQuery UI CSS Framework 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Theming/API
|
|
||||||
*
|
|
||||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* Component containers
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
|
|
||||||
.ui-widget .ui-widget { font-size: 1em; }
|
|
||||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
|
|
||||||
.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
|
|
||||||
.ui-widget-content a { color: #222222; }
|
|
||||||
.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
|
|
||||||
.ui-widget-header a { color: #222222; }
|
|
||||||
|
|
||||||
/* Interaction states
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
|
|
||||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
|
|
||||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
|
|
||||||
.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
|
|
||||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
|
|
||||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
|
|
||||||
.ui-widget :active { outline: none; }
|
|
||||||
|
|
||||||
/* Interaction Cues
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
|
|
||||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
|
|
||||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
|
|
||||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
|
|
||||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
|
|
||||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
|
||||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
|
||||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
|
||||||
|
|
||||||
/* Icons
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* states and images */
|
|
||||||
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
|
||||||
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
|
||||||
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
|
||||||
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
|
|
||||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
|
|
||||||
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
|
|
||||||
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
|
|
||||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
|
|
||||||
|
|
||||||
/* positioning */
|
|
||||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
|
||||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
|
||||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
|
||||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
|
||||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
|
||||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
|
||||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
|
||||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
|
||||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
|
||||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
|
||||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
|
||||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
|
||||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
|
||||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
|
||||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
|
||||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
|
||||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
|
||||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
|
||||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
|
||||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
|
||||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
|
||||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
|
||||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
|
||||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
|
||||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
|
||||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
|
||||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
|
||||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
|
||||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
|
||||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
|
||||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
|
||||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
|
||||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
|
||||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
|
||||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
|
||||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
|
||||||
.ui-icon-extlink { background-position: -32px -80px; }
|
|
||||||
.ui-icon-newwin { background-position: -48px -80px; }
|
|
||||||
.ui-icon-refresh { background-position: -64px -80px; }
|
|
||||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
|
||||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
|
||||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
|
||||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
|
||||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
|
||||||
.ui-icon-document { background-position: -32px -96px; }
|
|
||||||
.ui-icon-document-b { background-position: -48px -96px; }
|
|
||||||
.ui-icon-note { background-position: -64px -96px; }
|
|
||||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
|
||||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
|
||||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
|
||||||
.ui-icon-comment { background-position: -128px -96px; }
|
|
||||||
.ui-icon-person { background-position: -144px -96px; }
|
|
||||||
.ui-icon-print { background-position: -160px -96px; }
|
|
||||||
.ui-icon-trash { background-position: -176px -96px; }
|
|
||||||
.ui-icon-locked { background-position: -192px -96px; }
|
|
||||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
|
||||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
|
||||||
.ui-icon-tag { background-position: -240px -96px; }
|
|
||||||
.ui-icon-home { background-position: 0 -112px; }
|
|
||||||
.ui-icon-flag { background-position: -16px -112px; }
|
|
||||||
.ui-icon-calendar { background-position: -32px -112px; }
|
|
||||||
.ui-icon-cart { background-position: -48px -112px; }
|
|
||||||
.ui-icon-pencil { background-position: -64px -112px; }
|
|
||||||
.ui-icon-clock { background-position: -80px -112px; }
|
|
||||||
.ui-icon-disk { background-position: -96px -112px; }
|
|
||||||
.ui-icon-calculator { background-position: -112px -112px; }
|
|
||||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
|
||||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
|
||||||
.ui-icon-search { background-position: -160px -112px; }
|
|
||||||
.ui-icon-wrench { background-position: -176px -112px; }
|
|
||||||
.ui-icon-gear { background-position: -192px -112px; }
|
|
||||||
.ui-icon-heart { background-position: -208px -112px; }
|
|
||||||
.ui-icon-star { background-position: -224px -112px; }
|
|
||||||
.ui-icon-link { background-position: -240px -112px; }
|
|
||||||
.ui-icon-cancel { background-position: 0 -128px; }
|
|
||||||
.ui-icon-plus { background-position: -16px -128px; }
|
|
||||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
|
||||||
.ui-icon-minus { background-position: -48px -128px; }
|
|
||||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
|
||||||
.ui-icon-close { background-position: -80px -128px; }
|
|
||||||
.ui-icon-closethick { background-position: -96px -128px; }
|
|
||||||
.ui-icon-key { background-position: -112px -128px; }
|
|
||||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
|
||||||
.ui-icon-scissors { background-position: -144px -128px; }
|
|
||||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
|
||||||
.ui-icon-copy { background-position: -176px -128px; }
|
|
||||||
.ui-icon-contact { background-position: -192px -128px; }
|
|
||||||
.ui-icon-image { background-position: -208px -128px; }
|
|
||||||
.ui-icon-video { background-position: -224px -128px; }
|
|
||||||
.ui-icon-script { background-position: -240px -128px; }
|
|
||||||
.ui-icon-alert { background-position: 0 -144px; }
|
|
||||||
.ui-icon-info { background-position: -16px -144px; }
|
|
||||||
.ui-icon-notice { background-position: -32px -144px; }
|
|
||||||
.ui-icon-help { background-position: -48px -144px; }
|
|
||||||
.ui-icon-check { background-position: -64px -144px; }
|
|
||||||
.ui-icon-bullet { background-position: -80px -144px; }
|
|
||||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
|
||||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
|
||||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
|
||||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
|
||||||
.ui-icon-play { background-position: 0 -160px; }
|
|
||||||
.ui-icon-pause { background-position: -16px -160px; }
|
|
||||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
|
||||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
|
||||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
|
||||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
|
||||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
|
||||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
|
||||||
.ui-icon-stop { background-position: -96px -160px; }
|
|
||||||
.ui-icon-eject { background-position: -112px -160px; }
|
|
||||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
|
||||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
|
||||||
.ui-icon-power { background-position: 0 -176px; }
|
|
||||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
|
||||||
.ui-icon-signal { background-position: -32px -176px; }
|
|
||||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
|
||||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
|
||||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
|
||||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
|
||||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
|
||||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
|
||||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
|
||||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
|
||||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
|
||||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
|
||||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
|
||||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
|
||||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
|
||||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
|
||||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
|
||||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
|
||||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
|
||||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
|
||||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
|
||||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
|
||||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
|
||||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
|
||||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
|
||||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
|
||||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
|
||||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
|
||||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
|
||||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
|
||||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
|
||||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
|
||||||
|
|
||||||
|
|
||||||
/* Misc visuals
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* Corner radius */
|
|
||||||
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
|
|
||||||
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
|
|
||||||
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
|
|
||||||
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
|
||||||
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
|
|
||||||
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
|
||||||
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
|
||||||
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
|
|
||||||
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
|
|
||||||
|
|
||||||
/* Overlays */
|
|
||||||
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
|
|
||||||
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
|
|
||||||
* jQuery UI Resizable 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Resizable#theming
|
|
||||||
*/
|
|
||||||
.ui-resizable { position: relative;}
|
|
||||||
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;
|
|
||||||
/* http://bugs.jqueryui.com/ticket/7233
|
|
||||||
- Resizable: resizable handles fail to work in IE if transparent and content overlaps
|
|
||||||
*/
|
|
||||||
background-image:url(data:);
|
|
||||||
}
|
|
||||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
|
||||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
|
||||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
|
||||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
|
||||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
|
||||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
|
||||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
|
||||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
|
||||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
|
|
||||||
* jQuery UI Selectable 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Selectable#theming
|
|
||||||
*/
|
|
||||||
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
|
|
||||||
/*
|
|
||||||
* jQuery UI Accordion 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Accordion#theming
|
|
||||||
*/
|
|
||||||
/* IE/Win - Fix animation bug - #4615 */
|
|
||||||
.ui-accordion { width: 100%; }
|
|
||||||
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
|
||||||
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
|
||||||
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
|
||||||
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
|
|
||||||
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
|
|
||||||
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
|
||||||
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
|
|
||||||
.ui-accordion .ui-accordion-content-active { display: block; }
|
|
||||||
/*
|
|
||||||
* jQuery UI Autocomplete 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Autocomplete#theming
|
|
||||||
*/
|
|
||||||
.ui-autocomplete { position: absolute; cursor: default; }
|
|
||||||
|
|
||||||
/* workarounds */
|
|
||||||
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* jQuery UI Menu 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Menu#theming
|
|
||||||
*/
|
|
||||||
.ui-menu {
|
|
||||||
list-style:none;
|
|
||||||
padding: 2px;
|
|
||||||
margin: 0;
|
|
||||||
display:block;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu {
|
|
||||||
margin-top: -3px;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu-item {
|
|
||||||
margin:0;
|
|
||||||
padding: 0;
|
|
||||||
zoom: 1;
|
|
||||||
float: left;
|
|
||||||
clear: left;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu-item a {
|
|
||||||
text-decoration:none;
|
|
||||||
display:block;
|
|
||||||
padding:.2em .4em;
|
|
||||||
line-height:1.5;
|
|
||||||
zoom:1;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu-item a.ui-state-hover,
|
|
||||||
.ui-menu .ui-menu-item a.ui-state-active {
|
|
||||||
font-weight: normal;
|
|
||||||
margin: -1px;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* jQuery UI Button 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Button#theming
|
|
||||||
*/
|
|
||||||
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
|
|
||||||
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
|
|
||||||
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
|
|
||||||
.ui-button-icons-only { width: 3.4em; }
|
|
||||||
button.ui-button-icons-only { width: 3.7em; }
|
|
||||||
|
|
||||||
/*button text element */
|
|
||||||
.ui-button .ui-button-text { display: block; line-height: 1.4; }
|
|
||||||
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
|
|
||||||
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
|
|
||||||
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
|
|
||||||
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
|
|
||||||
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
|
|
||||||
/* no icon support for input elements, provide padding by default */
|
|
||||||
input.ui-button { padding: .4em 1em; }
|
|
||||||
|
|
||||||
/*button icon element(s) */
|
|
||||||
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
|
|
||||||
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
|
|
||||||
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
|
|
||||||
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
|
||||||
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
|
||||||
|
|
||||||
/*button sets*/
|
|
||||||
.ui-buttonset { margin-right: 7px; }
|
|
||||||
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
|
|
||||||
|
|
||||||
/* workarounds */
|
|
||||||
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
|
||||||
/*
|
|
||||||
* jQuery UI Dialog 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Dialog#theming
|
|
||||||
*/
|
|
||||||
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
|
|
||||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
|
||||||
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
|
||||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
|
||||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
|
|
||||||
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
|
|
||||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
|
||||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
|
||||||
/*
|
|
||||||
* jQuery UI Slider 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Slider#theming
|
|
||||||
*/
|
|
||||||
.ui-slider { position: relative; text-align: left; }
|
|
||||||
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
|
||||||
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
|
|
||||||
|
|
||||||
.ui-slider-horizontal { height: .8em; }
|
|
||||||
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
|
||||||
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
|
||||||
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
|
||||||
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
|
||||||
|
|
||||||
.ui-slider-vertical { width: .8em; height: 100px; }
|
|
||||||
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
|
||||||
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
|
||||||
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
|
||||||
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
|
|
||||||
* jQuery UI Tabs 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Tabs#theming
|
|
||||||
*/
|
|
||||||
.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
|
||||||
.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
|
|
||||||
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
|
|
||||||
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
|
|
||||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
|
|
||||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
|
||||||
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
|
||||||
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
|
|
||||||
.ui-tabs .ui-tabs-hide { display: none !important; }
|
|
||||||
/*
|
|
||||||
* jQuery UI Datepicker 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Datepicker#theming
|
|
||||||
*/
|
|
||||||
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
|
|
||||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
|
||||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
|
||||||
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
|
||||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
|
||||||
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
|
||||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
|
||||||
.ui-datepicker select.ui-datepicker-month,
|
|
||||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
|
||||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
|
||||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
|
||||||
.ui-datepicker td { border: 0; padding: 1px; }
|
|
||||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
|
||||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
|
||||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
|
||||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
|
||||||
|
|
||||||
/* with multiple calendars */
|
|
||||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
|
||||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
|
||||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
|
||||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
|
||||||
.ui-datepicker-row-break { clear:both; width:100%; }
|
|
||||||
|
|
||||||
/* RTL support */
|
|
||||||
.ui-datepicker-rtl { direction: rtl; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
|
||||||
|
|
||||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
|
||||||
.ui-datepicker-cover {
|
|
||||||
display: none; /*sorry for IE5*/
|
|
||||||
display/**/: block; /*sorry for IE5*/
|
|
||||||
position: absolute; /*must have*/
|
|
||||||
z-index: -1; /*must have*/
|
|
||||||
filter: mask(); /*must have*/
|
|
||||||
top: -4px; /*must have*/
|
|
||||||
left: -4px; /*must have*/
|
|
||||||
width: 200px; /*must have*/
|
|
||||||
height: 200px; /*must have*/
|
|
||||||
}/*
|
|
||||||
* jQuery UI Progressbar 1.8.12
|
|
||||||
*
|
|
||||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Progressbar#theming
|
|
||||||
*/
|
|
||||||
.ui-progressbar { height:2em; text-align: left; }
|
|
||||||
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
|
|
@ -1,28 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Language" content="ja" />
|
|
||||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
|
||||||
<title>groonga dictionary search</title>
|
|
||||||
<meta http-equiv="content-style-type" content="text/css" />
|
|
||||||
<meta http-equiv="content-script-type" content="text/javascript" />
|
|
||||||
<link type="text/css" href="css/smoothness/jquery-ui-1.8.12.custom.css" rel="stylesheet" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="css/dictionary.css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<form action="javascript:(function(){$('.search').blur()})()" name="search" id="search">
|
|
||||||
<input type="text" size="60" maxlength="60" name="key" class="search" />
|
|
||||||
<input type="submit" value="検索"/>
|
|
||||||
</form>
|
|
||||||
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
|
|
||||||
<script type="text/javascript" src="js/jquery-ui-1.8.18.custom.js"></script>
|
|
||||||
<script type="text/javascript" src="js/dictionary.js"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function(){
|
|
||||||
$(".search").autocomplete({source: dictionarySource("http://" + location.host + "/d/suggest")});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<div id="result"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,82 +0,0 @@
|
|||||||
function dictionarySource(url) {
|
|
||||||
function displayItems(items) {
|
|
||||||
var results = $("<dl />");
|
|
||||||
$.each(items,
|
|
||||||
function(i, val) {
|
|
||||||
results.append($("<dt />")
|
|
||||||
.append($("<span />")
|
|
||||||
.text(val[0])
|
|
||||||
.click(function() {
|
|
||||||
$(".search").val($(this).text());
|
|
||||||
$("#search").submit();
|
|
||||||
})));
|
|
||||||
results.append($("<dd />")
|
|
||||||
.append($("<span />").text(val[1]))
|
|
||||||
.append($("<span />").text(val[2]))
|
|
||||||
);
|
|
||||||
});
|
|
||||||
$("#result")
|
|
||||||
.empty()
|
|
||||||
.append(results);
|
|
||||||
};
|
|
||||||
|
|
||||||
var request_index = 0;
|
|
||||||
var columns = "_key,gene95_desc,edict_desc";
|
|
||||||
var xhr;
|
|
||||||
function source(request, response) {
|
|
||||||
function onSuccess(data, status) {
|
|
||||||
if (this.autocomplete_request != request_index) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var completions = data[1]["complete"];
|
|
||||||
var items = [];
|
|
||||||
if (completions && completions.length > 2) {
|
|
||||||
completions.shift();
|
|
||||||
completions.shift();
|
|
||||||
$.each(completions,
|
|
||||||
function(i, item) {
|
|
||||||
var key = item[0];
|
|
||||||
items.push(key);
|
|
||||||
if (items.length >= 3) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (completions.length > 0) {
|
|
||||||
displayItems(completions);
|
|
||||||
}
|
|
||||||
response(items);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onError() {
|
|
||||||
if (this.autocomplete_request != request_index) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
response([]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (xhr) {
|
|
||||||
xhr.abort();
|
|
||||||
}
|
|
||||||
xhr = $.ajax(url,
|
|
||||||
{
|
|
||||||
data: {
|
|
||||||
query: request.term,
|
|
||||||
types: 'complete',
|
|
||||||
table: 'item_dictionary',
|
|
||||||
column: 'kana',
|
|
||||||
limit: 25,
|
|
||||||
output_columns: columns,
|
|
||||||
frequency_threshold: 1,
|
|
||||||
prefix_search: "yes"
|
|
||||||
},
|
|
||||||
dataType: "jsonp",
|
|
||||||
autocomplete_request: ++request_index,
|
|
||||||
success: onSuccess,
|
|
||||||
error: onError
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return source;
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ 1 != $# ]; then
|
|
||||||
echo "usage: $0 db_path"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if groonga-suggest-create-dataset $1 dictionary > /dev/null; then
|
|
||||||
echo "db initialized."
|
|
||||||
fi
|
|
@ -1,3 +0,0 @@
|
|||||||
jmdictdir = $(examples_dictionarydir)/jmdict
|
|
||||||
dist_jmdict_SCRIPTS = \
|
|
||||||
jmdict.rb
|
|
@ -1,42 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
require 'rexml/document'
|
|
||||||
require 'rexml/parsers/streamparser'
|
|
||||||
require 'rexml/parsers/baseparser'
|
|
||||||
require 'rexml/streamlistener'
|
|
||||||
|
|
||||||
#REXML::Document.new(STDIN)
|
|
||||||
|
|
||||||
class MyListener
|
|
||||||
include REXML::StreamListener
|
|
||||||
def tag_start(name, attrs)
|
|
||||||
# p name, attrs
|
|
||||||
case name
|
|
||||||
when 'entry'
|
|
||||||
@n = 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
def tag_end name
|
|
||||||
# p "tag_end: #{x}"
|
|
||||||
case name
|
|
||||||
when 'sense'
|
|
||||||
@n += 1
|
|
||||||
when 'entry'
|
|
||||||
@n_ents += 1
|
|
||||||
puts "#{@ent}:#{@n}" if (@n > 8)
|
|
||||||
when 'ent_seq'
|
|
||||||
@ent = @text
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def text(text)
|
|
||||||
@text = text
|
|
||||||
end
|
|
||||||
|
|
||||||
def xmldecl(version, encoding, standalone)
|
|
||||||
@n_ents = 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
REXML::Parsers::StreamParser.new(STDIN, MyListener.new).parse
|
|
@ -1,71 +0,0 @@
|
|||||||
.. highlightlang:: none
|
|
||||||
|
|
||||||
辞書検索ツール
|
|
||||||
==============
|
|
||||||
|
|
||||||
名前
|
|
||||||
----
|
|
||||||
|
|
||||||
groonga辞書検索ツール
|
|
||||||
|
|
||||||
説明
|
|
||||||
----
|
|
||||||
|
|
||||||
様々な商用・非商用の辞書ファイルをインポートしてgroongaで検索できるようにします。
|
|
||||||
|
|
||||||
対応している辞書
|
|
||||||
++++++++++++++++
|
|
||||||
|
|
||||||
現状では下記の辞書に対応しています。
|
|
||||||
|
|
||||||
* EDICT
|
|
||||||
|
|
||||||
EDICTは、Monash大学Jim Breen教授が提供している和英辞書です。下記から入手できます。
|
|
||||||
|
|
||||||
http://ftp.monash.edu.au/pub/nihongo/edict.gz
|
|
||||||
|
|
||||||
* GENE95
|
|
||||||
|
|
||||||
GENE95は、Kurumiさん(NiftyID: GGD00145)が作成された英和辞書です。下記から入手できます。
|
|
||||||
|
|
||||||
http://www.namazu.org/~tsuchiya/sdic/data/gene95.tar.gz
|
|
||||||
|
|
||||||
* 英辞郎
|
|
||||||
|
|
||||||
英辞郎は、EDPという団体によって編纂されている英和・和英辞書です。
|
|
||||||
|
|
||||||
http://www.eijiro.jp/
|
|
||||||
|
|
||||||
書店やオンラインショップなどで購入できます。
|
|
||||||
|
|
||||||
データベースの初期化
|
|
||||||
++++++++++++++++++++
|
|
||||||
|
|
||||||
本ディレクトリで下記のように実行し、辞書データを格納するデータベースファイルを下記のようにして初期化します。
|
|
||||||
|
|
||||||
./init-db.sh データベースパス名
|
|
||||||
|
|
||||||
このようにして作成したデータベースについて、様々な辞書のデータをインポートすることができます。
|
|
||||||
|
|
||||||
インポートの方法
|
|
||||||
++++++++++++++++
|
|
||||||
|
|
||||||
* EDICT
|
|
||||||
|
|
||||||
edictディレクトリ配下で以下のように実行します。 edict.gzは自動でダウンロードします。
|
|
||||||
|
|
||||||
./edict-import.sh データベースパス名
|
|
||||||
|
|
||||||
* GENE95
|
|
||||||
|
|
||||||
gene95ディレクトリ配下で下記のように実行します。 gene95.tar.gzは自動でダウンロードします。
|
|
||||||
|
|
||||||
./gene-import.sh データベースパス名
|
|
||||||
|
|
||||||
* 英辞郎
|
|
||||||
|
|
||||||
英辞郎に付属のPDICツールを用いてCSVファイル形式に辞書をエクスポートします。(このとき「登録項目」ですべての項目を出力するようにします) eijiroディレクトリ配下で下記のように実行します。
|
|
||||||
|
|
||||||
./eijiro-import.sh データベースパス名 出力したCSVファイルのパス名
|
|
||||||
|
|
||||||
(英辞郎第四版で動作を確認しています)
|
|
@ -146,17 +146,6 @@ namespace open_query
|
|||||||
HAVE_EDGE = 4,
|
HAVE_EDGE = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Force assignment operator, so we can trace through in the debugger
|
|
||||||
inline reference& operator=(const reference& ref)
|
|
||||||
{
|
|
||||||
m_flags = ref.m_flags;
|
|
||||||
m_sequence = ref.m_sequence;
|
|
||||||
m_vertex = ref.m_vertex;
|
|
||||||
m_edge = ref.m_edge;
|
|
||||||
m_weight = ref.m_weight;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline reference()
|
inline reference()
|
||||||
: m_flags(0), m_sequence(0),
|
: m_flags(0), m_sequence(0),
|
||||||
m_vertex(graph_traits<Graph>::null_vertex()),
|
m_vertex(graph_traits<Graph>::null_vertex()),
|
||||||
|
@ -107,7 +107,6 @@ namespace open_query
|
|||||||
size_type n;
|
size_type n;
|
||||||
};
|
};
|
||||||
|
|
||||||
reference operator[](size_type n) { return reference(*this, n); }
|
|
||||||
bool operator[](size_type n) const { return test(n); }
|
bool operator[](size_type n) const { return test(n); }
|
||||||
|
|
||||||
size_type find_first() const;
|
size_type find_first() const;
|
||||||
|
@ -60,9 +60,6 @@ namespace oqgraph3
|
|||||||
edge_iterator(const graph_ptr& graph, size_t offset=0)
|
edge_iterator(const graph_ptr& graph, size_t offset=0)
|
||||||
: _graph(graph)
|
: _graph(graph)
|
||||||
, _offset(offset) { }
|
, _offset(offset) { }
|
||||||
edge_iterator(const edge_iterator& pos)
|
|
||||||
: _graph(pos._graph)
|
|
||||||
, _offset(pos._offset) { }
|
|
||||||
value_type operator*();
|
value_type operator*();
|
||||||
self& operator+=(size_t n) { _offset+= n; return *this; }
|
self& operator+=(size_t n) { _offset+= n; return *this; }
|
||||||
self& operator++() { ++_offset; return *this; }
|
self& operator++() { ++_offset; return *this; }
|
||||||
|
@ -37,13 +37,6 @@ if [ $1 = 1 ] ; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create a MySQL user and group. Do not report any problems if it already
|
|
||||||
# exists.
|
|
||||||
groupadd -r %{mysqld_group} 2> /dev/null || true
|
|
||||||
useradd -M -r --home $datadir --shell /sbin/nologin --comment "MySQL server" --gid %{mysqld_group} %{mysqld_user} 2> /dev/null || true
|
|
||||||
# The user may already exist, make sure it has the proper group nevertheless (BUG#12823)
|
|
||||||
usermod --gid %{mysqld_group} %{mysqld_user} 2> /dev/null || true
|
|
||||||
|
|
||||||
# Temporary Workaround for MDEV-11386 - will be corrected in Advance Toolchain 10.0-3 and 8.0-8
|
# Temporary Workaround for MDEV-11386 - will be corrected in Advance Toolchain 10.0-3 and 8.0-8
|
||||||
for ldconfig in /opt/at*/sbin/ldconfig; do
|
for ldconfig in /opt/at*/sbin/ldconfig; do
|
||||||
test -x $ldconfig && $ldconfig
|
test -x $ldconfig && $ldconfig
|
||||||
@ -69,9 +62,6 @@ if [ $1 = 1 ] ; then
|
|||||||
chmod -R og-rw $datadir/mysql
|
chmod -R og-rw $datadir/mysql
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set the correct filesystem ownership for the PAM v2 plugin
|
|
||||||
chown %{mysqld_user} /usr/lib*/mysql/plugin/auth_pam_tool_dir
|
|
||||||
|
|
||||||
# install SELinux files - but don't override existing ones
|
# install SELinux files - but don't override existing ones
|
||||||
SETARGETDIR=/etc/selinux/targeted/src/policy
|
SETARGETDIR=/etc/selinux/targeted/src/policy
|
||||||
SEDOMPROG=$SETARGETDIR/domains/program
|
SEDOMPROG=$SETARGETDIR/domains/program
|
||||||
|
@ -65,3 +65,8 @@ HERE
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Create a MySQL user and group. Do not report any problems if it already exists.
|
||||||
|
groupadd -r %{mysqld_group} 2> /dev/null || true
|
||||||
|
useradd -M -r --home %{mysqldatadir} --shell /sbin/nologin --comment "MySQL server" --gid %{mysqld_group} %{mysqld_user} 2> /dev/null || true
|
||||||
|
# The user may already exist, make sure it has the proper group nevertheless (BUG#12823)
|
||||||
|
usermod --gid %{mysqld_group} %{mysqld_user} 2> /dev/null || true
|
||||||
|
@ -6305,6 +6305,318 @@ static void test_date_dt()
|
|||||||
test_bind_date_conv(2);
|
test_bind_date_conv(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_simple_temporal() {
|
||||||
|
|
||||||
|
MYSQL_STMT *stmt = NULL;
|
||||||
|
uint rc;
|
||||||
|
ulong length = 0;
|
||||||
|
MYSQL_BIND my_bind[4], my_bind2;
|
||||||
|
my_bool is_null = FALSE;
|
||||||
|
MYSQL_TIME tm;
|
||||||
|
char string[100];
|
||||||
|
MYSQL_RES *rs;
|
||||||
|
MYSQL_FIELD *field;
|
||||||
|
|
||||||
|
myheader("test_simple_temporal");
|
||||||
|
|
||||||
|
/* Initialize param/fetch buffers for data, null flags, lengths */
|
||||||
|
memset(&my_bind, 0, sizeof(my_bind));
|
||||||
|
memset(&my_bind2, 0, sizeof(my_bind2));
|
||||||
|
|
||||||
|
/* Initialize the first input parameter */
|
||||||
|
my_bind[0].buffer_type = MYSQL_TYPE_DATETIME;
|
||||||
|
my_bind[0].buffer = &tm;
|
||||||
|
my_bind[0].is_null = &is_null;
|
||||||
|
my_bind[0].length = &length;
|
||||||
|
my_bind[0].buffer_length = sizeof(tm);
|
||||||
|
|
||||||
|
/* Clone the other input parameters */
|
||||||
|
my_bind[3] = my_bind[2] = my_bind[1] = my_bind[0];
|
||||||
|
|
||||||
|
my_bind[1].buffer_type = MYSQL_TYPE_TIMESTAMP;
|
||||||
|
my_bind[2].buffer_type = MYSQL_TYPE_DATE;
|
||||||
|
my_bind[3].buffer_type = MYSQL_TYPE_TIME;
|
||||||
|
|
||||||
|
/* Initialize fetch parameter */
|
||||||
|
my_bind2.buffer_type = MYSQL_TYPE_STRING;
|
||||||
|
my_bind2.length = &length;
|
||||||
|
my_bind2.is_null = &is_null;
|
||||||
|
my_bind2.buffer_length = sizeof(string);
|
||||||
|
my_bind2.buffer = string;
|
||||||
|
|
||||||
|
/* Prepare and bind simple SELECT with DATETIME parameter */
|
||||||
|
stmt = mysql_simple_prepare(mysql, "SELECT ?");
|
||||||
|
check_stmt(stmt);
|
||||||
|
verify_param_count(stmt, 1);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_param(stmt, &my_bind[0]);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_result(stmt, &my_bind2);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
/* Initialize DATETIME value */
|
||||||
|
tm.neg = FALSE;
|
||||||
|
tm.time_type = MYSQL_TIMESTAMP_DATETIME;
|
||||||
|
tm.year = 2001;
|
||||||
|
tm.month = 10;
|
||||||
|
tm.day = 20;
|
||||||
|
tm.hour = 10;
|
||||||
|
tm.minute = 10;
|
||||||
|
tm.second = 59;
|
||||||
|
tm.second_part = 500000;
|
||||||
|
|
||||||
|
/* Execute and fetch */
|
||||||
|
rc = mysql_stmt_execute(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rs = mysql_stmt_result_metadata(stmt);
|
||||||
|
field = mysql_fetch_fields(rs);
|
||||||
|
|
||||||
|
rc = mysql_stmt_store_result(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_fetch(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
DIE_UNLESS(field->type == MYSQL_TYPE_DATETIME);
|
||||||
|
DIE_UNLESS(strcmp(string, "2001-10-20 10:10:59.500000") == 0);
|
||||||
|
|
||||||
|
mysql_free_result(rs);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
|
||||||
|
/* Same test with explicit CAST */
|
||||||
|
stmt = mysql_simple_prepare(mysql, "SELECT CAST(? AS DATETIME(6))");
|
||||||
|
check_stmt(stmt);
|
||||||
|
verify_param_count(stmt, 1);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_param(stmt, &my_bind[0]);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_result(stmt, &my_bind2);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
/* Execute and fetch */
|
||||||
|
rc = mysql_stmt_execute(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rs = mysql_stmt_result_metadata(stmt);
|
||||||
|
field = mysql_fetch_fields(rs);
|
||||||
|
|
||||||
|
rc = mysql_stmt_store_result(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_fetch(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
DIE_UNLESS(field->type == MYSQL_TYPE_DATETIME);
|
||||||
|
DIE_UNLESS(strcmp(string, "2001-10-20 10:10:59.500000") == 0);
|
||||||
|
|
||||||
|
mysql_free_result(rs);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
|
||||||
|
/* Prepare and bind simple SELECT with TIMESTAMP parameter */
|
||||||
|
stmt = mysql_simple_prepare(mysql, "SELECT ?");
|
||||||
|
check_stmt(stmt);
|
||||||
|
verify_param_count(stmt, 1);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_param(stmt, &my_bind[1]);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_result(stmt, &my_bind2);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
/* Initialize TIMESTAMP value */
|
||||||
|
tm.neg = FALSE;
|
||||||
|
tm.time_type = MYSQL_TIMESTAMP_DATETIME;
|
||||||
|
tm.year = 2001;
|
||||||
|
tm.month = 10;
|
||||||
|
tm.day = 20;
|
||||||
|
tm.hour = 10;
|
||||||
|
tm.minute = 10;
|
||||||
|
tm.second = 59;
|
||||||
|
tm.second_part = 500000;
|
||||||
|
|
||||||
|
/* Execute and fetch */
|
||||||
|
rc = mysql_stmt_execute(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rs = mysql_stmt_result_metadata(stmt);
|
||||||
|
field = mysql_fetch_fields(rs);
|
||||||
|
|
||||||
|
rc = mysql_stmt_store_result(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_fetch(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
DIE_UNLESS(field->type == MYSQL_TYPE_TIMESTAMP);
|
||||||
|
DIE_UNLESS(strcmp(string, "2001-10-20 10:10:59.500000") == 0);
|
||||||
|
|
||||||
|
mysql_free_result(rs);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
|
||||||
|
/* Prepare and bind simple SELECT with DATE parameter */
|
||||||
|
stmt = mysql_simple_prepare(mysql, "SELECT ?");
|
||||||
|
check_stmt(stmt);
|
||||||
|
verify_param_count(stmt, 1);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_param(stmt, &my_bind[2]);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_result(stmt, &my_bind2);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
/* Initialize DATE value */
|
||||||
|
tm.neg = FALSE;
|
||||||
|
tm.time_type = MYSQL_TIMESTAMP_DATE;
|
||||||
|
tm.year = 2001;
|
||||||
|
tm.month = 10;
|
||||||
|
tm.day = 20;
|
||||||
|
tm.hour = 0;
|
||||||
|
tm.minute = 0;
|
||||||
|
tm.second = 0;
|
||||||
|
tm.second_part = 0;
|
||||||
|
|
||||||
|
/* Execute and fetch */
|
||||||
|
rc = mysql_stmt_execute(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rs = mysql_stmt_result_metadata(stmt);
|
||||||
|
field = mysql_fetch_fields(rs);
|
||||||
|
|
||||||
|
rc = mysql_stmt_store_result(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_fetch(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
DIE_UNLESS(field->type == MYSQL_TYPE_DATE);
|
||||||
|
DIE_UNLESS(strcmp(string, "2001-10-20") == 0);
|
||||||
|
|
||||||
|
mysql_free_result(rs);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
|
||||||
|
/* Same test with explicit CAST */
|
||||||
|
stmt = mysql_simple_prepare(mysql, "SELECT CAST(? AS DATE)");
|
||||||
|
check_stmt(stmt);
|
||||||
|
verify_param_count(stmt, 1);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_param(stmt, &my_bind[2]);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_result(stmt, &my_bind2);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
/* Execute and fetch */
|
||||||
|
rc = mysql_stmt_execute(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rs = mysql_stmt_result_metadata(stmt);
|
||||||
|
field = mysql_fetch_fields(rs);
|
||||||
|
|
||||||
|
rc = mysql_stmt_store_result(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_fetch(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
DIE_UNLESS(field->type == MYSQL_TYPE_DATE);
|
||||||
|
DIE_UNLESS(strcmp(string, "2001-10-20") == 0);
|
||||||
|
|
||||||
|
mysql_free_result(rs);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
|
||||||
|
/* Prepare and bind simple SELECT with TIME parameter */
|
||||||
|
stmt = mysql_simple_prepare(mysql, "SELECT ?");
|
||||||
|
check_stmt(stmt);
|
||||||
|
verify_param_count(stmt, 1);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_param(stmt, &my_bind[3]);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_result(stmt, &my_bind2);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
/* Initialize TIME value */
|
||||||
|
tm.neg = FALSE;
|
||||||
|
tm.time_type = MYSQL_TIMESTAMP_TIME;
|
||||||
|
tm.year = 0;
|
||||||
|
tm.month = 0;
|
||||||
|
tm.day = 0;
|
||||||
|
tm.hour = 10;
|
||||||
|
tm.minute = 10;
|
||||||
|
tm.second = 59;
|
||||||
|
tm.second_part = 500000;
|
||||||
|
|
||||||
|
/* Execute and fetch */
|
||||||
|
rc = mysql_stmt_execute(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rs = mysql_stmt_result_metadata(stmt);
|
||||||
|
field = mysql_fetch_fields(rs);
|
||||||
|
|
||||||
|
rc = mysql_stmt_store_result(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_fetch(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
DIE_UNLESS(field->type == MYSQL_TYPE_TIME);
|
||||||
|
DIE_UNLESS(strcmp(string, "10:10:59.500000") == 0);
|
||||||
|
|
||||||
|
mysql_free_result(rs);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
|
||||||
|
/* Same test with explicit CAST */
|
||||||
|
stmt = mysql_simple_prepare(mysql, "SELECT CAST(? AS TIME(6))");
|
||||||
|
check_stmt(stmt);
|
||||||
|
verify_param_count(stmt, 1);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_param(stmt, &my_bind[3]);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_bind_result(stmt, &my_bind2);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
/* Initialize TIME value */
|
||||||
|
tm.neg = FALSE;
|
||||||
|
tm.time_type = MYSQL_TIMESTAMP_TIME;
|
||||||
|
tm.year = 0;
|
||||||
|
tm.month = 0;
|
||||||
|
tm.day = 0;
|
||||||
|
tm.hour = 10;
|
||||||
|
tm.minute = 10;
|
||||||
|
tm.second = 59;
|
||||||
|
tm.second_part = 500000;
|
||||||
|
|
||||||
|
/* Execute and fetch */
|
||||||
|
rc = mysql_stmt_execute(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rs = mysql_stmt_result_metadata(stmt);
|
||||||
|
field = mysql_fetch_fields(rs);
|
||||||
|
|
||||||
|
rc = mysql_stmt_store_result(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
rc = mysql_stmt_fetch(stmt);
|
||||||
|
check_execute(stmt, rc);
|
||||||
|
|
||||||
|
DIE_UNLESS(field->type == MYSQL_TYPE_TIME);
|
||||||
|
DIE_UNLESS(strcmp(string, "10:10:59.500000") == 0);
|
||||||
|
|
||||||
|
mysql_free_result(rs);
|
||||||
|
|
||||||
|
mysql_stmt_close(stmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Misc tests to keep pure coverage happy */
|
/* Misc tests to keep pure coverage happy */
|
||||||
|
|
||||||
@ -21698,6 +22010,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_store_result2", test_store_result2 },
|
{ "test_store_result2", test_store_result2 },
|
||||||
{ "test_subselect", test_subselect },
|
{ "test_subselect", test_subselect },
|
||||||
{ "test_date", test_date },
|
{ "test_date", test_date },
|
||||||
|
{ "test_simple_temporal", test_simple_temporal },
|
||||||
{ "test_date_date", test_date_date },
|
{ "test_date_date", test_date_date },
|
||||||
{ "test_date_time", test_date_time },
|
{ "test_date_time", test_date_time },
|
||||||
{ "test_date_ts", test_date_ts },
|
{ "test_date_ts", test_date_ts },
|
||||||
|