Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
fd433cfb
Commit
fd433cfb
authored
Dec 08, 2009
by
Alexander Nozdrin
Browse files
Options
Browse Files
Download
Plain Diff
Auto-merge from mysql-next-mr.
parents
57fd1178
17fa6edf
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
275 additions
and
48 deletions
+275
-48
mysql-test/r/archive.result
mysql-test/r/archive.result
+10
-0
mysql-test/r/myisampack.result
mysql-test/r/myisampack.result
+33
-0
mysql-test/r/partition.result
mysql-test/r/partition.result
+0
-19
mysql-test/t/archive.test
mysql-test/t/archive.test
+12
-0
mysql-test/t/myisampack.test
mysql-test/t/myisampack.test
+114
-0
mysql-test/t/partition.test
mysql-test/t/partition.test
+20
-19
sql/sql_table.cc
sql/sql_table.cc
+36
-8
storage/archive/ha_archive.cc
storage/archive/ha_archive.cc
+4
-0
storage/myisam/myisampack.c
storage/myisam/myisampack.c
+46
-2
No files found.
mysql-test/r/archive.result
View file @
fd433cfb
...
...
@@ -12717,3 +12717,13 @@ COUNT(t1.a)
729
DROP TABLE t1;
SET @@join_buffer_size= @save_join_buffer_size;
End of 5.1 tests
CREATE TABLE t1(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id)) ENGINE=archive;
INSERT INTO t1 VALUES(NULL,'a'),(NULL,'a');
CREATE TABLE t2(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY(id)) ENGINE=archive;
INSERT INTO t2 VALUES(NULL,'b'),(NULL,'b');
SELECT t1.id, t2.id, t1.name, t2.name FROM t1,t2 WHERE t1.id = t2.id;
id id name name
1 1 a b
2 2 a b
DROP TABLE t1,t2;
mysql-test/r/myisampack.result
View file @
fd433cfb
DROP TABLE IF EXISTS t1,t2,t3;
CREATE TABLE t1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE,
c6 DOUBLE, c7 DOUBLE, c8 DOUBLE, c9 DOUBLE, a INT PRIMARY KEY);
INSERT INTO t1 VALUES
...
...
@@ -85,5 +86,37 @@ FLUSH TABLE mysql_db1.t1;
SELECT COUNT(*) FROM mysql_db1.t1 WHERE c2 < 5;
COUNT(*)
128
# ===== myisampack.1 =====
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES(20);
CREATE TABLE t2(a INT);
INSERT INTO t2 VALUES(40);
FLUSH TABLE t1,t2;
#If the myisampack --join operation is successful, we have table t3(.frm)
#so we should be able to query about the table from server.
SELECT COUNT(a) FROM t3;
COUNT(a)
1024
# ===== myisampack.2 =====
FLUSH TABLE t3;
#Tests the myisampack join operation with an existing destination .frm file,
#the command should return correct exit status(0) and
#we should be able to query the table.
SELECT COUNT(a) FROM t3;
COUNT(a)
1024
# ===== myisampack.3 =====
DROP TABLE t3;
#Tests the myisampack join operation without frm file for the first and second table
#No frm file is generated in this and we shouldn't be able to access the newly
#created table
SELECT COUNT(a) FROM t3;
ERROR 42S02: Table 'test.t3' doesn't exist
# ===== myisampack.4 =====
#Tests the myisampack join operation with an existing destination .frm,.MYI,.MDI
#the command should fail with exit status 2
myisampack: Can't create/write to file (Errcode: 17)
Aborted: file is not compressed
DROP TABLE t1,t2,t3;
DROP TABLE mysql_db1.t1;
DROP DATABASE mysql_db1;
mysql-test/r/partition.result
View file @
fd433cfb
...
...
@@ -2048,23 +2048,4 @@ CREATE TABLE t1(id INT,KEY(id)) ENGINE=MYISAM
PARTITION BY HASH(id) PARTITIONS 2;
DROP TABLE t1;
SET SESSION SQL_MODE=DEFAULT;
#
# BUG#45816 - assertion failure with index containing double
# column on partitioned table
#
CREATE TABLE t1 (
a INT DEFAULT NULL,
b DOUBLE DEFAULT NULL,
c INT DEFAULT NULL,
KEY idx2(b,a)
) PARTITION BY HASH(c) PARTITIONS 3;
INSERT INTO t1 VALUES (6,8,9);
INSERT INTO t1 VALUES (6,8,10);
SELECT 1 FROM t1 JOIN t1 AS t2 USING (a) FOR UPDATE;
1
1
1
1
1
DROP TABLE t1;
End of 5.1 tests
mysql-test/t/archive.test
View file @
fd433cfb
...
...
@@ -1623,3 +1623,15 @@ INSERT INTO t1 VALUES('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),
SELECT
COUNT
(
t1
.
a
)
FROM
t1
,
t1
a
,
t1
b
,
t1
c
,
t1
d
,
t1
e
;
DROP
TABLE
t1
;
SET
@@
join_buffer_size
=
@
save_join_buffer_size
;
--
echo
End
of
5.1
tests
#
# BUG#40677 - Archive tables joined on primary return no result
#
CREATE
TABLE
t1
(
id
INT
NOT
NULL
AUTO_INCREMENT
,
name
VARCHAR
(
128
)
NOT
NULL
,
PRIMARY
KEY
(
id
))
ENGINE
=
archive
;
INSERT
INTO
t1
VALUES
(
NULL
,
'a'
),(
NULL
,
'a'
);
CREATE
TABLE
t2
(
id
INT
NOT
NULL
AUTO_INCREMENT
,
name
VARCHAR
(
128
)
NOT
NULL
,
PRIMARY
KEY
(
id
))
ENGINE
=
archive
;
INSERT
INTO
t2
VALUES
(
NULL
,
'b'
),(
NULL
,
'b'
);
SELECT
t1
.
id
,
t2
.
id
,
t1
.
name
,
t2
.
name
FROM
t1
,
t2
WHERE
t1
.
id
=
t2
.
id
;
DROP
TABLE
t1
,
t2
;
mysql-test/t/myisampack.test
View file @
fd433cfb
--
disable_warnings
DROP
TABLE
IF
EXISTS
t1
,
t2
,
t3
;
--
enable_warnings
#
# BUG#31277 - myisamchk --unpack corrupts a table
#
...
...
@@ -105,5 +108,116 @@ let $MYSQLD_DATADIR= `select @@datadir`;
--
exec
$MYISAMCHK
-
srq
$MYSQLD_DATADIR
/
mysql_db1
/
t1
SELECT
COUNT
(
*
)
FROM
mysql_db1
.
t1
WHERE
c2
<
5
;
#
# Bug#36573 myisampack --join does not create destination table .frm file
#
#############################################################################
# Testcase myisampack.1: Positive test for myisampack --join
# To test myisampack --join operation creates .frm file
# If it creates .frm file, we will be able to access from mysql
# server
#############################################################################
--
echo
# ===== myisampack.1 =====
CREATE
TABLE
t1
(
a
INT
);
INSERT
INTO
t1
VALUES
(
20
);
let
$i
=
9
;
--
disable_query_log
while
(
$i
)
{
INSERT
INTO
t1
SELECT
a
from
t1
;
dec
$i
;
}
--
enable_query_log
CREATE
TABLE
t2
(
a
INT
);
INSERT
INTO
t2
VALUES
(
40
);
let
$i
=
9
;
--
disable_query_log
while
(
$i
)
{
INSERT
INTO
t2
SELECT
a
from
t2
;
dec
$i
;
}
--
enable_query_log
FLUSH
TABLE
t1
,
t2
;
--
exec
$MYISAMPACK
--
join
=
$MYSQLD_DATADIR
/
test
/
t3
$MYSQLD_DATADIR
/
test
/
t1
$MYSQLD_DATADIR
/
test
/
t2
2
>&
1
--
echo
#If the myisampack --join operation is successful, we have table t3(.frm)
--
echo
#so we should be able to query about the table from server.
SELECT
COUNT
(
a
)
FROM
t3
;
#############################################################################
# Testcase myisampack.2: 2nd Positive test for myisampack --join
# Test myisampack join operation with an existing destination frm file.
# It should finish the join operation successfully
#############################################################################
--
echo
# ===== myisampack.2 =====
FLUSH
TABLE
t3
;
--
remove_file
$MYSQLD_DATADIR
/
test
/
t3
.
MYI
--
remove_file
$MYSQLD_DATADIR
/
test
/
t3
.
MYD
--
exec
$MYISAMPACK
--
join
=
$MYSQLD_DATADIR
/
test
/
t3
$MYSQLD_DATADIR
/
test
/
t1
$MYSQLD_DATADIR
/
test
/
t2
2
>&
1
--
echo
#Tests the myisampack join operation with an existing destination .frm file,
--
echo
#the command should return correct exit status(0) and
--
echo
#we should be able to query the table.
SELECT
COUNT
(
a
)
FROM
t3
;
#############################################################################
# Testcase myisampack.3: 3rd Positive test for myisampack --join
# Test myisampack join operation without frm file for first table and second
# table. It should finish the join operation successfully
#############################################################################
--
echo
# ===== myisampack.3 =====
--
copy_file
$MYSQLD_DATADIR
/
test
/
t1
.
frm
$MYSQLTEST_VARDIR
/
tmp
/
bug36573
.
t1
.
frm
--
copy_file
$MYSQLD_DATADIR
/
test
/
t2
.
frm
$MYSQLTEST_VARDIR
/
tmp
/
bug36573
.
t2
.
frm
--
remove_file
$MYSQLD_DATADIR
/
test
/
t1
.
frm
--
remove_file
$MYSQLD_DATADIR
/
test
/
t2
.
frm
DROP
TABLE
t3
;
--
exec
$MYISAMPACK
--
join
=
$MYSQLD_DATADIR
/
test
/
t3
$MYSQLD_DATADIR
/
test
/
t1
$MYSQLD_DATADIR
/
test
/
t2
2
>&
1
--
echo
#Tests the myisampack join operation without frm file for the first and second table
--
echo
#No frm file is generated in this and we shouldn't be able to access the newly
--
echo
#created table
--
error
ER_NO_SUCH_TABLE
SELECT
COUNT
(
a
)
FROM
t3
;
--
copy_file
$MYSQLTEST_VARDIR
/
tmp
/
bug36573
.
t1
.
frm
$MYSQLD_DATADIR
/
test
/
t1
.
frm
--
copy_file
$MYSQLTEST_VARDIR
/
tmp
/
bug36573
.
t2
.
frm
$MYSQLD_DATADIR
/
test
/
t2
.
frm
--
copy_file
$MYSQLTEST_VARDIR
/
tmp
/
bug36573
.
t1
.
frm
$MYSQLD_DATADIR
/
test
/
t3
.
frm
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
bug36573
.
t1
.
frm
--
remove_file
$MYSQLTEST_VARDIR
/
tmp
/
bug36573
.
t2
.
frm
#############################################################################
# Testcase myisampack.4: Negative test for myisampack --join
# Test myisampack join operation with an existing .MYI,.MDI,.frm files
# the test should fail
#############################################################################
--
echo
# ===== myisampack.4 =====
--
echo
#Tests the myisampack join operation with an existing destination .frm,.MYI,.MDI
--
echo
#the command should fail with exit status 2
#
# Note: Use of regular expressions in this file is for output printed in result file
# The main purpose of this regular expression is to supress the filenames for
# error messages produced so that we can create a generic result file
#
#1. /.*myisampack(\.exe)?: Can't create\/write to file .*\(/myisampack: Can't create\/write to file (/
# Replace everything before "myisampack" or "myisampack.exe" and followed by
# ": Can't create\/write to file " until the first open paranthesis , with
# "myisampack: Can't create\/write to file ("
#
#2. /Aborted: .*is/Aborted: file is/
# Replace everything after starting with "Aborted: " until ending with "is" with
# "Aborted: file is/
#
--
replace_regex
/.*
myisampack
(
\
.
exe
)
?:
Can
't create\/write to file .*\(/myisampack: Can'
t
create
\
/
write
to
file
(
/
/
Aborted
:
.*
is
/
Aborted
:
file
is
/
--
error
2
--
exec
$MYISAMPACK
--
join
=
$MYSQLD_DATADIR
/
test
/
t3
$MYSQLD_DATADIR
/
test
/
t1
$MYSQLD_DATADIR
/
test
/
t2
2
>&
1
DROP
TABLE
t1
,
t2
,
t3
;
DROP
TABLE
mysql_db1
.
t1
;
DROP
DATABASE
mysql_db1
;
mysql-test/t/partition.test
View file @
fd433cfb
...
...
@@ -2039,23 +2039,24 @@ CREATE TABLE t1(id INT,KEY(id)) ENGINE=MYISAM
DROP
TABLE
t1
;
SET
SESSION
SQL_MODE
=
DEFAULT
;
--
echo
#
--
echo
# BUG#45816 - assertion failure with index containing double
--
echo
# column on partitioned table
--
echo
#
CREATE
TABLE
t1
(
a
INT
DEFAULT
NULL
,
b
DOUBLE
DEFAULT
NULL
,
c
INT
DEFAULT
NULL
,
KEY
idx2
(
b
,
a
)
)
PARTITION
BY
HASH
(
c
)
PARTITIONS
3
;
INSERT
INTO
t1
VALUES
(
6
,
8
,
9
);
INSERT
INTO
t1
VALUES
(
6
,
8
,
10
);
SELECT
1
FROM
t1
JOIN
t1
AS
t2
USING
(
a
)
FOR
UPDATE
;
DROP
TABLE
t1
;
# This testcase is commented due to the Bug #46853
# Should be uncommented after fixing Bug #46853
#--echo #
#--echo # BUG#45816 - assertion failure with index containing double
#--echo # column on partitioned table
#--echo #
#
#CREATE TABLE t1 (
# a INT DEFAULT NULL,
# b DOUBLE DEFAULT NULL,
# c INT DEFAULT NULL,
# KEY idx2(b,a)
#) PARTITION BY HASH(c) PARTITIONS 3;
#
#INSERT INTO t1 VALUES (6,8,9);
#INSERT INTO t1 VALUES (6,8,10);
#
#SELECT 1 FROM t1 JOIN t1 AS t2 USING (a) FOR UPDATE;
#
#DROP TABLE t1;
--
echo
End
of
5.1
tests
sql/sql_table.cc
View file @
fd433cfb
...
...
@@ -3934,16 +3934,44 @@ bool mysql_create_table_no_lock(THD *thd,
create_info
->
table_existed
=
0
;
// Mark that table is created
#ifdef HAVE_READLINK
if
(
test_if_data_home_dir
(
create_info
->
data_file_name
))
{
size_t
dirlen
;
char
dirpath
[
FN_REFLEN
];
/*
data_file_name and index_file_name include the table name without
extension. Mostly this does not refer to an existing file. When
comparing data_file_name or index_file_name against the data
directory, we try to resolve all symbolic links. On some systems,
we use realpath(3) for the resolution. This returns ENOENT if the
resolved path does not refer to an existing file. my_realpath()
does then copy the requested path verbatim, without symlink
resolution. Thereafter the comparison can fail even if the
requested path is within the data directory. E.g. if symlinks to
another file system are used. To make realpath(3) return the
resolved path, we strip the table name and compare the directory
path only. If the directory doesn't exist either, table creation
will fail anyway.
*/
if
(
create_info
->
data_file_name
)
{
dirname_part
(
dirpath
,
create_info
->
data_file_name
,
&
dirlen
);
if
(
test_if_data_home_dir
(
dirpath
))
{
my_error
(
ER_WRONG_ARGUMENTS
,
MYF
(
0
),
"DATA DIRECTORY"
);
goto
unlock_and_end
;
}
if
(
test_if_data_home_dir
(
create_info
->
index_file_name
))
}
if
(
create_info
->
index_file_name
)
{
dirname_part
(
dirpath
,
create_info
->
index_file_name
,
&
dirlen
);
if
(
test_if_data_home_dir
(
dirpath
))
{
my_error
(
ER_WRONG_ARGUMENTS
,
MYF
(
0
),
"INDEX DIRECTORY"
);
goto
unlock_and_end
;
}
}
}
#ifdef WITH_PARTITION_STORAGE_ENGINE
if
(
check_partition_dirs
(
thd
->
lex
->
part_info
))
...
...
storage/archive/ha_archive.cc
View file @
fd433cfb
...
...
@@ -981,7 +981,11 @@ int ha_archive::index_read_idx(uchar *buf, uint index, const uchar *key,
}
if
(
found
)
{
/* notify handler that a record has been found */
table
->
status
=
0
;
DBUG_RETURN
(
0
);
}
error:
DBUG_RETURN
(
rc
?
rc
:
HA_ERR_END_OF_FILE
);
...
...
storage/myisam/myisampack.c
View file @
fd433cfb
...
...
@@ -44,6 +44,7 @@
#define DATA_TMP_EXT ".TMD"
#define OLD_EXT ".OLD"
#define FRM_EXT ".frm"
#define WRITE_COUNT MY_HOW_OFTEN_TO_WRITE
struct
st_file_buffer
{
...
...
@@ -125,6 +126,7 @@ static void get_options(int *argc,char ***argv);
static
MI_INFO
*
open_isam_file
(
char
*
name
,
int
mode
);
static
my_bool
open_isam_files
(
PACK_MRG_INFO
*
mrg
,
char
**
names
,
uint
count
);
static
int
compress
(
PACK_MRG_INFO
*
file
,
char
*
join_name
);
static
int
create_dest_frm
(
char
*
source_table
,
char
*
dest_table
);
static
HUFF_COUNTS
*
init_huff_count
(
MI_INFO
*
info
,
my_off_t
records
);
static
void
free_counts_and_tree_and_queue
(
HUFF_TREE
*
huff_trees
,
uint
trees
,
...
...
@@ -214,9 +216,13 @@ int main(int argc, char **argv)
error
=
ok
=
isamchk_neaded
=
0
;
if
(
join_table
)
{
/* Join files into one */
{
/*
Join files into one and create FRM file for the compressed table only if
the compression succeeds
*/
if
(
open_isam_files
(
&
merge
,
argv
,(
uint
)
argc
)
||
compress
(
&
merge
,
join_table
))
compress
(
&
merge
,
join_table
)
||
create_dest_frm
(
argv
[
0
],
join_table
))
error
=
1
;
}
else
while
(
argc
--
)
...
...
@@ -757,6 +763,44 @@ static int compress(PACK_MRG_INFO *mrg,char *result_table)
DBUG_RETURN
(
-
1
);
}
/**
Create FRM for the destination table for --join operation
Copy the first table FRM as the destination table FRM file. Doing so
will help the mysql server to recognize the newly created table.
See Bug#36573.
@param source_table Name of the source table
@param dest_table Name of the destination table
@retval 0 Successful copy operation
@note We always return 0 because we don't want myisampack to report error
even if the copy operation fails.
*/
static
int
create_dest_frm
(
char
*
source_table
,
char
*
dest_table
)
{
char
source_name
[
FN_REFLEN
],
dest_name
[
FN_REFLEN
];
DBUG_ENTER
(
"create_dest_frm"
);
(
void
)
fn_format
(
source_name
,
source_table
,
""
,
FRM_EXT
,
MY_UNPACK_FILENAME
|
MY_RESOLVE_SYMLINKS
);
(
void
)
fn_format
(
dest_name
,
dest_table
,
""
,
FRM_EXT
,
MY_UNPACK_FILENAME
|
MY_RESOLVE_SYMLINKS
);
/*
Error messages produced by my_copy() are suppressed as this
is not vital for --join operation. User shouldn't see any error messages
like "source file frm not found" and "unable to create destination frm
file. So we don't pass the flag MY_WME -Write Message on Error to
my_copy()
*/
(
void
)
my_copy
(
source_name
,
dest_name
,
MYF
(
MY_DONT_OVERWRITE_FILE
));
return
0
;
}
/* Init a huff_count-struct for each field and init it */
static
HUFF_COUNTS
*
init_huff_count
(
MI_INFO
*
info
,
my_off_t
records
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment