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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
0e1819a4
Commit
0e1819a4
authored
13 years ago
by
Bjorn Munch
Browse files
Options
Browse Files
Download
Plain Diff
merge from 5.1 main
parents
91eebaae
54c1da00
Changes
34
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
697 additions
and
195 deletions
+697
-195
.bzrignore
.bzrignore
+9
-0
cmd-line-utils/libedit/vi.c
cmd-line-utils/libedit/vi.c
+10
-2
mysql-test/collections/default.experimental
mysql-test/collections/default.experimental
+2
-5
mysql-test/r/func_math.result
mysql-test/r/func_math.result
+22
-0
mysql-test/r/func_time.result
mysql-test/r/func_time.result
+12
-0
mysql-test/r/having.result
mysql-test/r/having.result
+22
-0
mysql-test/r/loaddata.result
mysql-test/r/loaddata.result
+9
-0
mysql-test/r/partition_myisam.result
mysql-test/r/partition_myisam.result
+9
-0
mysql-test/r/type_timestamp.result
mysql-test/r/type_timestamp.result
+63
-0
mysql-test/suite/binlog/r/binlog_bug23533.result
mysql-test/suite/binlog/r/binlog_bug23533.result
+1
-2
mysql-test/suite/binlog/t/binlog_bug23533.test
mysql-test/suite/binlog/t/binlog_bug23533.test
+15
-2
mysql-test/t/func_math.test
mysql-test/t/func_math.test
+16
-0
mysql-test/t/func_time.test
mysql-test/t/func_time.test
+8
-0
mysql-test/t/having.test
mysql-test/t/having.test
+26
-0
mysql-test/t/loaddata.test
mysql-test/t/loaddata.test
+15
-0
mysql-test/t/partition_myisam.test
mysql-test/t/partition_myisam.test
+10
-1
mysql-test/t/type_timestamp.test
mysql-test/t/type_timestamp.test
+47
-0
sql-common/my_time.c
sql-common/my_time.c
+2
-1
sql/ha_partition.cc
sql/ha_partition.cc
+295
-136
sql/ha_partition.h
sql/ha_partition.h
+27
-8
sql/handler.cc
sql/handler.cc
+17
-10
sql/handler.h
sql/handler.h
+1
-1
sql/hostname.cc
sql/hostname.cc
+2
-2
sql/item_func.cc
sql/item_func.cc
+0
-3
sql/item_timefunc.cc
sql/item_timefunc.cc
+3
-3
sql/opt_range.cc
sql/opt_range.cc
+1
-1
sql/sql_load.cc
sql/sql_load.cc
+4
-5
sql/sql_select.cc
sql/sql_select.cc
+37
-1
storage/heap/ha_heap.cc
storage/heap/ha_heap.cc
+2
-2
storage/heap/ha_heap.h
storage/heap/ha_heap.h
+1
-1
storage/myisam/ha_myisam.cc
storage/myisam/ha_myisam.cc
+3
-2
storage/myisam/ha_myisam.h
storage/myisam/ha_myisam.h
+1
-1
storage/myisammrg/ha_myisammrg.cc
storage/myisammrg/ha_myisammrg.cc
+4
-5
storage/myisammrg/ha_myisammrg.h
storage/myisammrg/ha_myisammrg.h
+1
-1
No files found.
.bzrignore
View file @
0e1819a4
...
...
@@ -42,6 +42,10 @@
*.vcxproj
*.vcxproj.filters
*/*.dir/*
*.dir
Debug
MySql.sdf
Win32
*/*_pure_*warnings
*/.deps
*/.libs/*
...
...
@@ -611,6 +615,7 @@ include/mysql_h.ic
include/mysql_version.h
include/mysqld_ername.h
include/mysqld_error.h
include/mysqld_error.h.rule
include/openssl
include/readline
include/readline/*.h
...
...
@@ -1883,7 +1888,9 @@ scripts/mysql_find_rows
scripts/mysql_fix_extensions
scripts/mysql_fix_privilege_tables
scripts/mysql_fix_privilege_tables.sql
scripts/mysql_fix_privilege_tables.sql.rule
scripts/mysql_fix_privilege_tables_sql.c
scripts/mysql_fix_privilege_tables_sql.c.rule
scripts/mysql_install_db
scripts/mysql_secure_installation
scripts/mysql_setpermission
...
...
@@ -2120,6 +2127,7 @@ sql/handlerton.cc
sql/html
sql/latex
sql/lex_hash.h
sql/lex_hash.h.rule
sql/link_sources
sql/max/*
sql/message.h
...
...
@@ -2151,6 +2159,7 @@ sql/sql_builtin.cc
sql/sql_select.cc.orig
sql/sql_yacc.cc
sql/sql_yacc.h
sql/sql_yacc.h.rule
sql/sql_yacc.output
sql/sql_yacc.yy.orig
sql/test_time
...
...
This diff is collapsed.
Click to expand it.
cmd-line-utils/libedit/vi.c
View file @
0e1819a4
...
...
@@ -1012,8 +1012,10 @@ vi_histedit(EditLine *el, int c __attribute__((__unused__)))
if
(
fd
<
0
)
return
CC_ERROR
;
cp
=
el
->
el_line
.
buffer
;
write
(
fd
,
cp
,
el
->
el_line
.
lastchar
-
cp
+
0u
);
write
(
fd
,
"
\n
"
,
1
);
if
(
write
(
fd
,
cp
,
el
->
el_line
.
lastchar
-
cp
+
0u
)
==
-
1
)
goto
error
;
if
(
write
(
fd
,
"
\n
"
,
1
)
==
-
1
)
goto
error
;
pid
=
fork
();
switch
(
pid
)
{
case
-
1
:
...
...
@@ -1041,6 +1043,12 @@ vi_histedit(EditLine *el, int c __attribute__((__unused__)))
unlink
(
tempfile
);
/* return CC_REFRESH; */
return
ed_newline
(
el
,
0
);
/* XXXMYSQL: Avoid compiler warnings. */
error:
close
(
fd
);
unlink
(
tempfile
);
return
CC_ERROR
;
}
/* vi_history_word():
...
...
This diff is collapsed.
Click to expand it.
mysql-test/collections/default.experimental
View file @
0e1819a4
...
...
@@ -2,8 +2,7 @@
# in alphabetical order. This also helps with merge conflict resolution.
binlog.binlog_multi_engine # joro : NDB tests marked as experimental as agreed with bochklin
binlog.binlog_bug23533 # WL#5867: skozlov: test case moved from unused bugs suite
binlog.binlog_bug36391 # WL#5867: skozlov: test case moved from unused bugs suite
binlog.binlog_bug23533 # skozlov: BUG#12371924
funcs_1.charset_collation_1 # depends on compile-time decisions
...
...
@@ -26,9 +25,7 @@ ndb.* # joro : NDB tests marked as experiment
rpl.rpl_innodb_bug28430 @solaris # Bug#46029
rpl.rpl_row_sp011 @solaris # Joro : Bug #45445
rpl.rpl_stop_slave @freebsd # Sven : BUG#12345981
rpl.rpl_bug37426 # WL#5867: skozlov: test case moved from unused bugs suite
rpl.rpl_stop_slave # Sven : BUG#12345981
rpl_ndb.* # joro : NDB tests marked as experimental as agreed with bochklin
rpl_ndb.rpl_ndb_log # Bug#38998
...
...
This diff is collapsed.
Click to expand it.
mysql-test/r/func_math.result
View file @
0e1819a4
...
...
@@ -518,4 +518,26 @@ CREATE TABLE t1 SELECT CEIL(LINESTRINGFROMWKB(1) DIV NULL);
DROP TABLE t1;
CREATE TABLE t1 SELECT FLOOR(LINESTRINGFROMWKB(1) DIV NULL);
DROP TABLE t1;
#
# Bug#11765923 58937: MANY VALGRIND ERRORS AFTER GROUPING BY RESULT OF DECIMAL COLUMN FUNCTION
#
CREATE TABLE t1(f1 DECIMAL(22,1));
INSERT INTO t1 VALUES (0),(1);
SELECT ROUND(f1, f1) FROM t1;
ROUND(f1, f1)
0.0
1.0
SELECT ROUND(f1, f1) FROM t1 GROUP BY 1;
ROUND(f1, f1)
0.0
1.0
DROP TABLE t1;
#
# Bug#11764671 57533: UNINITIALISED VALUES IN COPY_AND_CONVERT (SQL_STRING.CC) WITH CERTAIN CHA
#
SELECT ROUND(LEAST(15, -4939092, 0.2704), STDDEV('a'));
ROUND(LEAST(15, -4939092, 0.2704), STDDEV('a'))
-4939092.0000
Warnings:
Warning 1292 Truncated incorrect DOUBLE value: 'a'
End of 5.1 tests
This diff is collapsed.
Click to expand it.
mysql-test/r/func_time.result
View file @
0e1819a4
...
...
@@ -1405,4 +1405,16 @@ NULL
SELECT ADDDATE(MONTH(FROM_UNIXTIME(NULL)),INTERVAL 1 HOUR);
ADDDATE(MONTH(FROM_UNIXTIME(NULL)),INTERVAL 1 HOUR)
NULL
#
# Bug#11889186 60503: CRASH IN MAKE_DATE_TIME WITH DATE_FORMAT / STR_TO_DATE COMBINATION
#
SELECT DATE_FORMAT('0000-00-11', '%W');
DATE_FORMAT('0000-00-11', '%W')
NULL
SELECT DATE_FORMAT('0000-00-11', '%a');
DATE_FORMAT('0000-00-11', '%a')
NULL
SELECT DATE_FORMAT('0000-00-11', '%w');
DATE_FORMAT('0000-00-11', '%w')
NULL
End of 5.1 tests
This diff is collapsed.
Click to expand it.
mysql-test/r/having.result
View file @
0e1819a4
...
...
@@ -545,4 +545,26 @@ FROM t1 JOIN t2 ON t2.f2 LIKE 'x'
HAVING field1 < 7;
field1
DROP TABLE t1,t2;
#
# Bug#48916 Server incorrectly processing HAVING clauses with an ORDER BY clause
#
CREATE TABLE t1 (f1 INT, f2 INT);
INSERT INTO t1 VALUES (1, 0), (2, 1), (3, 2);
CREATE TABLE t2 (f1 INT, f2 INT);
SELECT t1.f1
FROM t1
HAVING (3, 2) IN (SELECT f1, f2 FROM t2) AND t1.f1 >= 0
ORDER BY t1.f1;
f1
SELECT t1.f1
FROM t1
HAVING (3, 2) IN (SELECT 4, 2) AND t1.f1 >= 0
ORDER BY t1.f1;
f1
SELECT t1.f1
FROM t1
HAVING 2 IN (SELECT f2 FROM t2) AND t1.f1 >= 0
ORDER BY t1.f1;
f1
DROP TABLE t1,t2;
End of 5.1 tests
This diff is collapsed.
Click to expand it.
mysql-test/r/loaddata.result
View file @
0e1819a4
...
...
@@ -539,4 +539,13 @@ CREATE TABLE t1(f1 INT);
SELECT 0xE1BB30 INTO OUTFILE 't1.dat';
LOAD DATA INFILE 't1.dat' IGNORE INTO TABLE t1 CHARACTER SET utf8;
DROP TABLE t1;
#
# Bug#11765141 - 58072: LOAD DATA INFILE: LEAKS IO CACHE MEMORY
# WHEN ERROR OCCURS
#
SELECT '1\n' INTO DUMPFILE 'MYSQLTEST_VARDIR/tmp/bug11735141.txt';
create table t1(a point);
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug11735141.txt' INTO TABLE t1;
ERROR 22003: Cannot get geometry object from data you send to the GEOMETRY field
drop table t1;
End of 5.1 tests
This diff is collapsed.
Click to expand it.
mysql-test/r/partition_
not_embedded
.result
→
mysql-test/r/partition_
myisam
.result
View file @
0e1819a4
...
...
@@ -79,3 +79,12 @@ a
DROP TABLE t1;
# Should not be any files left here
# End of bug#30102 test.
# Test of post-push fix for bug#11766249/59316
CREATE TABLE t1 (a INT, b VARCHAR(255), PRIMARY KEY (a))
ENGINE = MyISAM
PARTITION BY RANGE (a)
(PARTITION p0 VALUES LESS THAN (0) MAX_ROWS=100,
PARTITION p1 VALUES LESS THAN (100) MAX_ROWS=100,
PARTITION pMax VALUES LESS THAN MAXVALUE);
INSERT INTO t1 VALUES (1, "Partition p1, first row");
DROP TABLE t1;
This diff is collapsed.
Click to expand it.
mysql-test/r/type_timestamp.result
View file @
0e1819a4
...
...
@@ -547,4 +547,67 @@ a
2000-01-01 00:00:01
2000-01-01 00:00:01
DROP TABLE t1;
#
# Bug#50774: failed to get the correct resultset when timestamp values
# are appended with .0
#
CREATE TABLE t1 ( a TIMESTAMP, KEY ( a ) );
INSERT INTO t1 VALUES( '2010-02-01 09:31:01' );
INSERT INTO t1 VALUES( '2010-02-01 09:31:02' );
INSERT INTO t1 VALUES( '2010-02-01 09:31:03' );
INSERT INTO t1 VALUES( '2010-02-01 09:31:04' );
SELECT * FROM t1 WHERE a >= '2010-02-01 09:31:02.0';
a
2010-02-01 09:31:02
2010-02-01 09:31:03
2010-02-01 09:31:04
SELECT * FROM t1 WHERE '2010-02-01 09:31:02.0' <= a;
a
2010-02-01 09:31:02
2010-02-01 09:31:03
2010-02-01 09:31:04
SELECT * FROM t1 WHERE a <= '2010-02-01 09:31:02.0';
a
2010-02-01 09:31:01
2010-02-01 09:31:02
SELECT * FROM t1 WHERE '2010-02-01 09:31:02.0' >= a;
a
2010-02-01 09:31:01
2010-02-01 09:31:02
EXPLAIN
SELECT * FROM t1 WHERE a >= '2010-02-01 09:31:02.0';
id select_type table type possible_keys key key_len ref rows Extra
x x x range x x x x x x
SELECT * FROM t1 WHERE a >= '2010-02-01 09:31:02.0';
a
2010-02-01 09:31:02
2010-02-01 09:31:03
2010-02-01 09:31:04
CREATE TABLE t2 ( a TIMESTAMP, KEY ( a DESC ) );
INSERT INTO t2 VALUES( '2010-02-01 09:31:01' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:02' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:03' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:04' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:05' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:06' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:07' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:08' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:09' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:10' );
INSERT INTO t2 VALUES( '2010-02-01 09:31:11' );
# The bug would cause the range optimizer's comparison to use an open
# interval here. This reveals itself only in the number of reads
# performed.
FLUSH STATUS;
EXPLAIN
SELECT * FROM t2 WHERE a < '2010-02-01 09:31:02.0';
id select_type table type possible_keys key key_len ref rows Extra
x x x range x x x x x x
SELECT * FROM t2 WHERE a < '2010-02-01 09:31:02.0';
a
2010-02-01 09:31:01
SHOW STATUS LIKE 'Handler_read_next';
Variable_name Value
Handler_read_next 1
DROP TABLE t1, t2;
End of 5.1 tests
This diff is collapsed.
Click to expand it.
mysql-test/suite/binlog/r/binlog_bug23533.result
View file @
0e1819a4
...
...
@@ -3,7 +3,7 @@ CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b TEXT, PRIMARY KEY(a)) ENGINE=I
SELECT COUNT(*) FROM t1;
COUNT(*)
1000
SET
@saved_max_binlog_cache_size=@@max_binlog_cache_size
;
SET
GLOBAL binlog_cache_size=4096
;
SET GLOBAL max_binlog_cache_size=4096;
START TRANSACTION;
CREATE TABLE t2 SELECT * FROM t1;
...
...
@@ -12,5 +12,4 @@ COMMIT;
SHOW TABLES LIKE 't%';
Tables_in_test (t%)
t1
SET GLOBAL max_binlog_cache_size=@saved_max_binlog_cache_size;
DROP TABLE t1;
This diff is collapsed.
Click to expand it.
mysql-test/suite/binlog/t/binlog_bug23533.test
View file @
0e1819a4
...
...
@@ -15,16 +15,24 @@ CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b TEXT, PRIMARY KEY(a)) ENGINE=I
let
$i
=
1000
;
while
(
$i
)
{
BEGIN
;
eval
INSERT
INTO
t1
VALUES
(
$i
,
REPEAT
(
'x'
,
4096
));
COMMIT
;
dec
$i
;
}
--
enable_query_log
SELECT
COUNT
(
*
)
FROM
t1
;
# Set small value for max_binlog_cache_size
SET
@
saved_max_binlog_cache_size
=@@
max_binlog_cache_size
;
let
$saved_binlog_cache_size
=
query_get_value
(
SELECT
@@
binlog_cache_size
AS
Value
,
Value
,
1
);
let
$saved_max_binlog_cache_size
=
query_get_value
(
SELECT
@@
max_binlog_cache_size
AS
Value
,
Value
,
1
);
SET
GLOBAL
binlog_cache_size
=
4096
;
SET
GLOBAL
max_binlog_cache_size
=
4096
;
# New value of max_binlog_cache_size will apply to new session
disconnect
default
;
connect
(
default
,
localhost
,
root
,,
test
);
# Copied data from t1 into t2 large than max_binlog_cache_size
START
TRANSACTION
;
--
error
1197
...
...
@@ -33,5 +41,10 @@ COMMIT;
SHOW
TABLES
LIKE
't%'
;
# 5.1 End of Test
SET
GLOBAL
max_binlog_cache_size
=@
saved_max_binlog_cache_size
;
--
disable_query_log
eval
SET
GLOBAL
max_binlog_cache_size
=
$saved_max_binlog_cache_size
;
eval
SET
GLOBAL
binlog_cache_size
=
$saved_binlog_cache_size
;
--
enable_query_log
DROP
TABLE
t1
;
disconnect
default
;
connect
(
default
,
localhost
,
root
,,
test
);
This diff is collapsed.
Click to expand it.
mysql-test/t/func_math.test
View file @
0e1819a4
...
...
@@ -333,4 +333,20 @@ DROP TABLE t1;
CREATE
TABLE
t1
SELECT
FLOOR
(
LINESTRINGFROMWKB
(
1
)
DIV
NULL
);
DROP
TABLE
t1
;
--
echo
#
--
echo
# Bug#11765923 58937: MANY VALGRIND ERRORS AFTER GROUPING BY RESULT OF DECIMAL COLUMN FUNCTION
--
echo
#
CREATE
TABLE
t1
(
f1
DECIMAL
(
22
,
1
));
INSERT
INTO
t1
VALUES
(
0
),(
1
);
SELECT
ROUND
(
f1
,
f1
)
FROM
t1
;
SELECT
ROUND
(
f1
,
f1
)
FROM
t1
GROUP
BY
1
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# Bug#11764671 57533: UNINITIALISED VALUES IN COPY_AND_CONVERT (SQL_STRING.CC) WITH CERTAIN CHA
--
echo
#
SELECT
ROUND
(
LEAST
(
15
,
-
4939092
,
0.2704
),
STDDEV
(
'a'
));
--
echo
End
of
5.1
tests
This diff is collapsed.
Click to expand it.
mysql-test/t/func_time.test
View file @
0e1819a4
...
...
@@ -913,4 +913,12 @@ SELECT CAST((MONTH(FROM_UNIXTIME(@@GLOBAL.SQL_MODE))) AS BINARY(1025));
SELECT
ADDDATE
(
MONTH
(
FROM_UNIXTIME
(
NULL
)),
INTERVAL
1
HOUR
);
--
echo
#
--
echo
# Bug#11889186 60503: CRASH IN MAKE_DATE_TIME WITH DATE_FORMAT / STR_TO_DATE COMBINATION
--
echo
#
SELECT
DATE_FORMAT
(
'0000-00-11'
,
'%W'
);
SELECT
DATE_FORMAT
(
'0000-00-11'
,
'%a'
);
SELECT
DATE_FORMAT
(
'0000-00-11'
,
'%w'
);
--
echo
End
of
5.1
tests
This diff is collapsed.
Click to expand it.
mysql-test/t/having.test
View file @
0e1819a4
...
...
@@ -564,4 +564,30 @@ HAVING field1 < 7;
DROP
TABLE
t1
,
t2
;
--
echo
#
--
echo
# Bug#48916 Server incorrectly processing HAVING clauses with an ORDER BY clause
--
echo
#
CREATE
TABLE
t1
(
f1
INT
,
f2
INT
);
INSERT
INTO
t1
VALUES
(
1
,
0
),
(
2
,
1
),
(
3
,
2
);
CREATE
TABLE
t2
(
f1
INT
,
f2
INT
);
SELECT
t1
.
f1
FROM
t1
HAVING
(
3
,
2
)
IN
(
SELECT
f1
,
f2
FROM
t2
)
AND
t1
.
f1
>=
0
ORDER
BY
t1
.
f1
;
SELECT
t1
.
f1
FROM
t1
HAVING
(
3
,
2
)
IN
(
SELECT
4
,
2
)
AND
t1
.
f1
>=
0
ORDER
BY
t1
.
f1
;
SELECT
t1
.
f1
FROM
t1
HAVING
2
IN
(
SELECT
f2
FROM
t2
)
AND
t1
.
f1
>=
0
ORDER
BY
t1
.
f1
;
DROP
TABLE
t1
,
t2
;
--
echo
End
of
5.1
tests
This diff is collapsed.
Click to expand it.
mysql-test/t/loaddata.test
View file @
0e1819a4
...
...
@@ -625,4 +625,19 @@ DROP TABLE t1;
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
remove_file
$MYSQLD_DATADIR
/
test
/
t1
.
dat
;
--
echo
#
--
echo
# Bug#11765141 - 58072: LOAD DATA INFILE: LEAKS IO CACHE MEMORY
--
echo
# WHEN ERROR OCCURS
--
echo
#
--
let
$file
=
$MYSQLTEST_VARDIR
/
tmp
/
bug11735141
.
txt
--
replace_result
$MYSQLTEST_VARDIR
MYSQLTEST_VARDIR
--
eval
SELECT
'1\n'
INTO
DUMPFILE
'$file'
create
table
t1
(
a
point
);
--
replace_result
$MYSQLTEST_VARDIR
MYSQLTEST_VARDIR
--
error
ER_CANT_CREATE_GEOMETRY_OBJECT
--
eval
LOAD
DATA
INFILE
'$file'
INTO
TABLE
t1
drop
table
t1
;
--
echo
End
of
5.1
tests
This diff is collapsed.
Click to expand it.
mysql-test/t/partition_
not_embedded
.test
→
mysql-test/t/partition_
myisam
.test
View file @
0e1819a4
--
source
include
/
have_partition
.
inc
--
source
include
/
not_embedded
.
inc
--
disable_warnings
DROP
TABLE
IF
EXISTS
t1
,
t2
;
--
enable_warnings
...
...
@@ -51,3 +50,13 @@ DROP TABLE t1;
--
list_files
$MYSQLD_DATADIR
/
test
t1
*
--
list_files
$MYSQLD_DATADIR
/
test
t2
*
--
echo
# End of bug#30102 test.
--
echo
# Test of post-push fix for bug#11766249/59316
CREATE
TABLE
t1
(
a
INT
,
b
VARCHAR
(
255
),
PRIMARY
KEY
(
a
))
ENGINE
=
MyISAM
PARTITION
BY
RANGE
(
a
)
(
PARTITION
p0
VALUES
LESS
THAN
(
0
)
MAX_ROWS
=
100
,
PARTITION
p1
VALUES
LESS
THAN
(
100
)
MAX_ROWS
=
100
,
PARTITION
pMax
VALUES
LESS
THAN
MAXVALUE
);
INSERT
INTO
t1
VALUES
(
1
,
"Partition p1, first row"
);
DROP
TABLE
t1
;
This diff is collapsed.
Click to expand it.
mysql-test/t/type_timestamp.test
View file @
0e1819a4
...
...
@@ -373,4 +373,51 @@ SELECT a FROM t1 WHERE a >= '20000101000000';
DROP
TABLE
t1
;
--
echo
#
--
echo
# Bug#50774: failed to get the correct resultset when timestamp values
--
echo
# are appended with .0
--
echo
#
CREATE
TABLE
t1
(
a
TIMESTAMP
,
KEY
(
a
)
);
INSERT
INTO
t1
VALUES
(
'2010-02-01 09:31:01'
);
INSERT
INTO
t1
VALUES
(
'2010-02-01 09:31:02'
);
INSERT
INTO
t1
VALUES
(
'2010-02-01 09:31:03'
);
INSERT
INTO
t1
VALUES
(
'2010-02-01 09:31:04'
);
SELECT
*
FROM
t1
WHERE
a
>=
'2010-02-01 09:31:02.0'
;
SELECT
*
FROM
t1
WHERE
'2010-02-01 09:31:02.0'
<=
a
;
SELECT
*
FROM
t1
WHERE
a
<=
'2010-02-01 09:31:02.0'
;
SELECT
*
FROM
t1
WHERE
'2010-02-01 09:31:02.0'
>=
a
;
--
replace_column
1
x
2
x
3
x
5
x
6
x
7
x
8
x
9
x
10
x
EXPLAIN
SELECT
*
FROM
t1
WHERE
a
>=
'2010-02-01 09:31:02.0'
;
SELECT
*
FROM
t1
WHERE
a
>=
'2010-02-01 09:31:02.0'
;
CREATE
TABLE
t2
(
a
TIMESTAMP
,
KEY
(
a
DESC
)
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:01'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:02'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:03'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:04'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:05'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:06'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:07'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:08'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:09'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:10'
);
INSERT
INTO
t2
VALUES
(
'2010-02-01 09:31:11'
);
--
echo
# The bug would cause the range optimizer's comparison to use an open
--
echo
# interval here. This reveals itself only in the number of reads
--
echo
# performed.
FLUSH
STATUS
;
--
replace_column
1
x
2
x
3
x
5
x
6
x
7
x
8
x
9
x
10
x
EXPLAIN
SELECT
*
FROM
t2
WHERE
a
<
'2010-02-01 09:31:02.0'
;
SELECT
*
FROM
t2
WHERE
a
<
'2010-02-01 09:31:02.0'
;
SHOW
STATUS
LIKE
'Handler_read_next'
;
DROP
TABLE
t1
,
t2
;
--
echo
End
of
5.1
tests
This diff is collapsed.
Click to expand it.
sql-common/my_time.c
View file @
0e1819a4
...
...
@@ -772,7 +772,7 @@ long calc_daynr(uint year,uint month,uint day)
int
y
=
year
;
/* may be < 0 temporarily */
DBUG_ENTER
(
"calc_daynr"
);
if
(
y
==
0
&&
month
==
0
&&
day
==
0
)
if
(
y
==
0
&&
month
==
0
)
DBUG_RETURN
(
0
);
/* Skip errors */
/* Cast to int to be able to handle month == 0 */
delsum
=
(
long
)
(
365
*
y
+
31
*
((
int
)
month
-
1
)
+
(
int
)
day
);
...
...
@@ -783,6 +783,7 @@ long calc_daynr(uint year,uint month,uint day)
temp
=
(
int
)
((
y
/
100
+
1
)
*
3
)
/
4
;
DBUG_PRINT
(
"exit"
,(
"year: %d month: %d day: %d -> daynr: %ld"
,
y
+
(
month
<=
2
),
month
,
day
,
delsum
+
y
/
4
-
temp
));
DBUG_ASSERT
(
delsum
+
(
int
)
y
/
4
-
temp
>
0
);
DBUG_RETURN
(
delsum
+
(
int
)
y
/
4
-
temp
);
}
/* calc_daynr */
...
...
This diff is collapsed.
Click to expand it.
sql/ha_partition.cc
View file @
0e1819a4
This diff is collapsed.
Click to expand it.
sql/ha_partition.h
View file @
0e1819a4
...
...
@@ -55,6 +55,16 @@ typedef struct st_ha_data_partition
HA_DUPLICATE_POS | \
HA_CAN_SQL_HANDLER | \
HA_CAN_INSERT_DELAYED)
/* First 4 bytes in the .par file is the number of 32-bit words in the file */
#define PAR_WORD_SIZE 4
/* offset to the .par file checksum */
#define PAR_CHECKSUM_OFFSET 4
/* offset to the total number of partitions */
#define PAR_NUM_PARTS_OFFSET 8
/* offset to the engines array */
#define PAR_ENGINES_OFFSET 12
class
ha_partition
:
public
handler
{
private:
...
...
@@ -71,7 +81,7 @@ private:
/* Data for the partition handler */
int
m_mode
;
// Open mode
uint
m_open_test_lock
;
// Open test_if_locked
char
*
m_file_buffer
;
//
Buffer with names
char
*
m_file_buffer
;
//
Content of the .par file
char
*
m_name_buffer_ptr
;
// Pointer to first partition name
plugin_ref
*
m_engine_array
;
// Array of types of the handlers
handler
**
m_file
;
// Array of references to handler inst.
...
...
@@ -133,6 +143,13 @@ private:
bool
m_is_sub_partitioned
;
// Is subpartitioned
bool
m_ordered_scan_ongoing
;
/*
If set, this object was created with ha_partition::clone and doesn't
"own" the m_part_info structure.
*/
ha_partition
*
m_is_clone_of
;
MEM_ROOT
*
m_clone_mem_root
;
/*
We keep track if all underlying handlers are MyISAM since MyISAM has a
great number of extra flags not needed by other handlers.
...
...
@@ -169,11 +186,6 @@ private:
PARTITION_SHARE
*
share
;
/* Shared lock info */
#endif
/*
TRUE <=> this object was created with ha_partition::clone and doesn't
"own" the m_part_info structure.
*/
bool
is_clone
;
bool
auto_increment_lock
;
/**< lock reading/updating auto_inc */
/**
Flag to keep the auto_increment lock through out the statement.
...
...
@@ -186,7 +198,7 @@ private:
/** used for prediction of start_bulk_insert rows */
enum_monotonicity_info
m_part_func_monotonicity_info
;
public:
handler
*
clone
(
MEM_ROOT
*
mem_root
);
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
virtual
void
set_part_info
(
partition_info
*
part_info
)
{
m_part_info
=
part_info
;
...
...
@@ -205,6 +217,10 @@ public:
*/
ha_partition
(
handlerton
*
hton
,
TABLE_SHARE
*
table
);
ha_partition
(
handlerton
*
hton
,
partition_info
*
part_info
);
ha_partition
(
handlerton
*
hton
,
TABLE_SHARE
*
share
,
partition_info
*
part_info_arg
,
ha_partition
*
clone_arg
,
MEM_ROOT
*
clone_mem_root_arg
);
~
ha_partition
();
/*
A partition handler has no characteristics in itself. It only inherits
...
...
@@ -275,7 +291,10 @@ private:
And one method to read it in.
*/
bool
create_handler_file
(
const
char
*
name
);
bool
get_from_handler_file
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
bool
setup_engine_array
(
MEM_ROOT
*
mem_root
);
bool
read_par_file
(
const
char
*
name
);
bool
get_from_handler_file
(
const
char
*
name
,
MEM_ROOT
*
mem_root
,
bool
is_clone
);
bool
new_handlers_from_part_info
(
MEM_ROOT
*
mem_root
);
bool
create_handlers
(
MEM_ROOT
*
mem_root
);
void
clear_handler_file
();
...
...
This diff is collapsed.
Click to expand it.
sql/handler.cc
View file @
0e1819a4
...
...
@@ -2037,22 +2037,29 @@ int ha_delete_table(THD *thd, handlerton *table_type, const char *path,
/****************************************************************************
** General handler functions
****************************************************************************/
handler
*
handler
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
handler
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
handler
*
new_handler
=
get_new_handler
(
table
->
s
,
mem_root
,
table
->
s
->
db_type
()
);
handler
*
new_handler
=
get_new_handler
(
table
->
s
,
mem_root
,
ht
);
/*
Allocate handler->ref here because otherwise ha_open will allocate it
on this->table->mem_root and we will not be able to reclaim that memory
when the clone handler object is destroyed.
*/
if
(
!
(
new_handler
->
ref
=
(
uchar
*
)
alloc_root
(
mem_root
,
ALIGN_SIZE
(
ref_length
)
*
2
)))
return
NULL
;
if
(
new_handler
&&
!
new_handler
->
ha_open
(
table
,
table
->
s
->
normalized_path
.
str
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
return
new_handler
;
return
NULL
;
if
(
new_handler
&&
!
(
new_handler
->
ref
=
(
uchar
*
)
alloc_root
(
mem_root
,
ALIGN_SIZE
(
ref_length
)
*
2
)))
new_handler
=
NULL
;
/*
TODO: Implement a more efficient way to have more than one index open for
the same table instance. The ha_open call is not cachable for clone.
*/
if
(
new_handler
&&
new_handler
->
ha_open
(
table
,
name
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
new_handler
=
NULL
;
return
new_handler
;
}
...
...
This diff is collapsed.
Click to expand it.
sql/handler.h
View file @
0e1819a4
...
...
@@ -1165,7 +1165,7 @@ public:
DBUG_ASSERT
(
locked
==
FALSE
);
/* TODO: DBUG_ASSERT(inited == NONE); */
}
virtual
handler
*
clone
(
MEM_ROOT
*
mem_root
);
virtual
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
/** This is called after create to allow us to set up cached variables */
void
init
()
{
...
...
This diff is collapsed.
Click to expand it.
sql/hostname.cc
View file @
0e1819a4
/* Copyright (
C) 2000-2006 MySQL AB
/* Copyright (
c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -183,7 +183,7 @@ char * ip_to_hostname(struct in_addr *in, uint *errors)
&
tmp_hostent
,
buff
,
sizeof
(
buff
),
&
tmp_errno
)))
{
DBUG_PRINT
(
"error"
,(
"gethostbyaddr_r returned %d"
,
tmp_errno
));
return
0
;
DBUG_RETURN
(
0
)
;
}
if
(
!
(
check
=
my_gethostbyname_r
(
hp
->
h_name
,
&
tmp_hostent2
,
buff2
,
sizeof
(
buff2
),
&
tmp_errno
)))
...
...
This diff is collapsed.
Click to expand it.
sql/item_func.cc
View file @
0e1819a4
...
...
@@ -2122,10 +2122,7 @@ my_decimal *Item_func_round::decimal_op(my_decimal *decimal_value)
if
(
!
(
null_value
=
(
args
[
0
]
->
null_value
||
args
[
1
]
->
null_value
||
my_decimal_round
(
E_DEC_FATAL_ERROR
,
value
,
(
int
)
dec
,
truncate
,
decimal_value
)
>
1
)))
{
decimal_value
->
frac
=
decimals
;
return
decimal_value
;
}
return
0
;
}
...
...
This diff is collapsed.
Click to expand it.
sql/item_timefunc.cc
View file @
0e1819a4
...
...
@@ -648,7 +648,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
system_charset_info
);
break
;
case
'W'
:
if
(
type
==
MYSQL_TIMESTAMP_TIME
)
if
(
type
==
MYSQL_TIMESTAMP_TIME
||
!
(
l_time
->
month
||
l_time
->
year
)
)
return
1
;
weekday
=
calc_weekday
(
calc_daynr
(
l_time
->
year
,
l_time
->
month
,
l_time
->
day
),
0
);
...
...
@@ -657,7 +657,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
system_charset_info
);
break
;
case
'a'
:
if
(
type
==
MYSQL_TIMESTAMP_TIME
)
if
(
type
==
MYSQL_TIMESTAMP_TIME
||
!
(
l_time
->
month
||
l_time
->
year
)
)
return
1
;
weekday
=
calc_weekday
(
calc_daynr
(
l_time
->
year
,
l_time
->
month
,
l_time
->
day
),
0
);
...
...
@@ -816,7 +816,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
}
break
;
case
'w'
:
if
(
type
==
MYSQL_TIMESTAMP_TIME
)
if
(
type
==
MYSQL_TIMESTAMP_TIME
||
!
(
l_time
->
month
||
l_time
->
year
)
)
return
1
;
weekday
=
calc_weekday
(
calc_daynr
(
l_time
->
year
,
l_time
->
month
,
l_time
->
day
),
1
);
...
...
This diff is collapsed.
Click to expand it.
sql/opt_range.cc
View file @
0e1819a4
...
...
@@ -1335,7 +1335,7 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler)
}
thd
=
head
->
in_use
;
if
(
!
(
file
=
head
->
file
->
clone
(
thd
->
mem_root
)))
if
(
!
(
file
=
head
->
file
->
clone
(
head
->
s
->
normalized_path
.
str
,
thd
->
mem_root
)))
{
/*
Manually set the error flag. Note: there seems to be quite a few
...
...
This diff is collapsed.
Click to expand it.
sql/sql_load.cc
View file @
0e1819a4
...
...
@@ -1075,9 +1075,10 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
String
&
field_term
,
String
&
line_start
,
String
&
line_term
,
String
&
enclosed_par
,
int
escape
,
bool
get_it_from_net
,
bool
is_fifo
)
:
file
(
file_par
),
escape_char
(
escape
)
:
file
(
file_par
),
buff_length
(
tot_length
),
escape_char
(
escape
),
found_end_of_line
(
false
),
eof
(
false
),
need_end_io_cache
(
false
),
error
(
false
),
line_cuted
(
false
),
found_null
(
false
),
read_charset
(
cs
)
{
read_charset
=
cs
;
field_term_ptr
=
(
char
*
)
field_term
.
ptr
();
field_term_length
=
field_term
.
length
();
line_term_ptr
=
(
char
*
)
line_term
.
ptr
();
...
...
@@ -1104,8 +1105,6 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
(
uchar
)
enclosed_par
[
0
]
:
INT_MAX
;
field_term_char
=
field_term_length
?
(
uchar
)
field_term_ptr
[
0
]
:
INT_MAX
;
line_term_char
=
line_term_length
?
(
uchar
)
line_term_ptr
[
0
]
:
INT_MAX
;
error
=
eof
=
found_end_of_line
=
found_null
=
line_cuted
=
0
;
buff_length
=
tot_length
;
/* Set of a stack for unget if long terminators */
...
...
@@ -1151,7 +1150,7 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
READ_INFO
::~
READ_INFO
()
{
if
(
!
error
&&
need_end_io_cache
)
if
(
need_end_io_cache
)
::
end_io_cache
(
&
cache
);
my_free
(
buffer
,
MYF
(
MY_ALLOW_ZERO_PTR
));
...
...
This diff is collapsed.
Click to expand it.
sql/sql_select.cc
View file @
0e1819a4
...
...
@@ -2215,7 +2215,7 @@ JOIN::exec()
Item
*
sort_table_cond
=
make_cond_for_table
(
curr_join
->
tmp_having
,
used_tables
,
used_tables
);
(
table_map
)
0
);
if
(
sort_table_cond
)
{
if
(
!
curr_table
->
select
)
...
...
@@ -12852,6 +12852,42 @@ static bool test_if_ref(Item_field *left_item,Item *right_item)
return
0
;
// keep test
}
/**
Extract a condition that can be checked after reading given table
@param cond Condition to analyze
@param tables Tables for which "current field values" are available
@param used_table Table that we're extracting the condition for (may
also include PSEUDO_TABLE_BITS, and may be zero)
@param exclude_expensive_cond Do not push expensive conditions
@retval <>NULL Generated condition
@retval =NULL Already checked, OR error
@details
Extract the condition that can be checked after reading the table
specified in 'used_table', given that current-field values for tables
specified in 'tables' bitmap are available.
If 'used_table' is 0
- extract conditions for all tables in 'tables'.
- extract conditions are unrelated to any tables
in the same query block/level(i.e. conditions
which have used_tables == 0).
The function assumes that
- Constant parts of the condition has already been checked.
- Condition that could be checked for tables in 'tables' has already
been checked.
The function takes into account that some parts of the condition are
guaranteed to be true by employed 'ref' access methods (the code that
does this is located at the end, search down for "EQ_FUNC").
@note
Make sure to keep the implementations of make_cond_for_table() and
make_cond_after_sjm() synchronized.
make_cond_for_info_schema() uses similar algorithm as well.
*/
static
COND
*
make_cond_for_table
(
COND
*
cond
,
table_map
tables
,
table_map
used_table
)
...
...
This diff is collapsed.
Click to expand it.
storage/heap/ha_heap.cc
View file @
0e1819a4
...
...
@@ -142,11 +142,11 @@ int ha_heap::close(void)
DESCRIPTION
Do same as default implementation but use file->s->name instead of
table->s->path. This is needed by Windows where the clone() call sees
'/'-delimited path in table->s->path, while ha_
p
eap::open() was called
'/'-delimited path in table->s->path, while ha_
h
eap::open() was called
with '\'-delimited path.
*/
handler
*
ha_heap
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
ha_heap
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
handler
*
new_handler
=
get_new_handler
(
table
->
s
,
mem_root
,
table
->
s
->
db_type
());
if
(
new_handler
&&
!
new_handler
->
ha_open
(
table
,
file
->
s
->
name
,
table
->
db_stat
,
...
...
This diff is collapsed.
Click to expand it.
storage/heap/ha_heap.h
View file @
0e1819a4
...
...
@@ -34,7 +34,7 @@ class ha_heap: public handler
public:
ha_heap
(
handlerton
*
hton
,
TABLE_SHARE
*
table
);
~
ha_heap
()
{}
handler
*
clone
(
MEM_ROOT
*
mem_root
);
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
const
char
*
table_type
()
const
{
return
(
table
->
in_use
->
variables
.
sql_mode
&
MODE_MYSQL323
)
?
...
...
This diff is collapsed.
Click to expand it.
storage/myisam/ha_myisam.cc
View file @
0e1819a4
...
...
@@ -552,9 +552,10 @@ ha_myisam::ha_myisam(handlerton *hton, TABLE_SHARE *table_arg)
can_enable_indexes
(
1
)
{}
handler
*
ha_myisam
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
ha_myisam
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
ha_myisam
*
new_handler
=
static_cast
<
ha_myisam
*>
(
handler
::
clone
(
mem_root
));
ha_myisam
*
new_handler
=
static_cast
<
ha_myisam
*>
(
handler
::
clone
(
name
,
mem_root
));
if
(
new_handler
)
new_handler
->
file
->
state
=
file
->
state
;
return
new_handler
;
...
...
This diff is collapsed.
Click to expand it.
storage/myisam/ha_myisam.h
View file @
0e1819a4
...
...
@@ -44,7 +44,7 @@ class ha_myisam: public handler
public:
ha_myisam
(
handlerton
*
hton
,
TABLE_SHARE
*
table_arg
);
~
ha_myisam
()
{}
handler
*
clone
(
MEM_ROOT
*
mem_root
);
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
const
char
*
table_type
()
const
{
return
"MyISAM"
;
}
const
char
*
index_type
(
uint
key_number
);
const
char
**
bas_ext
()
const
;
...
...
This diff is collapsed.
Click to expand it.
storage/myisammrg/ha_myisammrg.cc
View file @
0e1819a4
...
...
@@ -459,8 +459,7 @@ int ha_myisammrg::open(const char *name, int mode __attribute__((unused)),
problem because all locking is handled by the original MERGE table
from which this is cloned of.
*/
if
(
!
(
file
=
myrg_open
(
table
->
s
->
normalized_path
.
str
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
)))
if
(
!
(
file
=
myrg_open
(
name
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
)))
{
DBUG_PRINT
(
"error"
,
(
"my_errno %d"
,
my_errno
));
DBUG_RETURN
(
my_errno
?
my_errno
:
-
1
);
...
...
@@ -484,7 +483,7 @@ int ha_myisammrg::open(const char *name, int mode __attribute__((unused)),
@return A cloned handler instance.
*/
handler
*
ha_myisammrg
::
clone
(
MEM_ROOT
*
mem_root
)
handler
*
ha_myisammrg
::
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
)
{
MYRG_TABLE
*
u_table
,
*
newu_table
;
ha_myisammrg
*
new_handler
=
...
...
@@ -505,8 +504,8 @@ handler *ha_myisammrg::clone(MEM_ROOT *mem_root)
return
NULL
;
}
if
(
new_handler
->
ha_open
(
table
,
table
->
s
->
normalized_path
.
str
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
if
(
new_handler
->
ha_open
(
table
,
name
,
table
->
db_stat
,
HA_OPEN_IGNORE_IF_LOCKED
))
{
delete
new_handler
;
return
NULL
;
...
...
This diff is collapsed.
Click to expand it.
storage/myisammrg/ha_myisammrg.h
View file @
0e1819a4
...
...
@@ -62,7 +62,7 @@ class ha_myisammrg: public handler
int
open
(
const
char
*
name
,
int
mode
,
uint
test_if_locked
);
int
attach_children
(
void
);
int
detach_children
(
void
);
virtual
handler
*
clone
(
MEM_ROOT
*
mem_root
);
virtual
handler
*
clone
(
const
char
*
name
,
MEM_ROOT
*
mem_root
);
int
close
(
void
);
int
write_row
(
uchar
*
buf
);
int
update_row
(
const
uchar
*
old_data
,
uchar
*
new_data
);
...
...
This diff is collapsed.
Click to expand it.
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