mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/home/my/mysql-4.0
This commit is contained in:
@ -20,7 +20,7 @@ Protected by mem_hash_mutex above. */
|
|||||||
static ulint mem_n_created_heaps = 0;
|
static ulint mem_n_created_heaps = 0;
|
||||||
static ulint mem_n_allocations = 0;
|
static ulint mem_n_allocations = 0;
|
||||||
static ulint mem_total_allocated_memory = 0;
|
static ulint mem_total_allocated_memory = 0;
|
||||||
static ulint mem_current_allocated_memory = 0;
|
ulint mem_current_allocated_memory = 0;
|
||||||
static ulint mem_max_allocated_memory = 0;
|
static ulint mem_max_allocated_memory = 0;
|
||||||
|
|
||||||
/* Size of the hash table for memory management tracking */
|
/* Size of the hash table for memory management tracking */
|
||||||
|
@ -30,3 +30,10 @@ ChargeID ServiceID ChargeDate ChargeAmount FedTaxes ProvTaxes ChargeStatus Charg
|
|||||||
1 1 2001-03-01 1.00 1.00 1.00 New blablabla NULL now
|
1 1 2001-03-01 1.00 1.00 1.00 New blablabla NULL now
|
||||||
2 1 2001-03-01 1.00 1.00 1.00 New NULL NULL now
|
2 1 2001-03-01 1.00 1.00 1.00 New NULL NULL now
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int) engine=bdb;
|
||||||
|
set autocommit=0;
|
||||||
|
insert into t1 values(1);
|
||||||
|
analyze table t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 analyze status Operation need committed state
|
||||||
|
drop table t1;
|
||||||
|
@ -546,3 +546,11 @@ CREATE TABLE t1 (a INT, b INT);
|
|||||||
SET @id=0;
|
SET @id=0;
|
||||||
UPDATE t1 SET a=0 ORDER BY (a=@id), b;
|
UPDATE t1 SET a=0 ORDER BY (a=@id), b;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1(id int not null auto_increment primary key, t char(12));
|
||||||
|
explain select id,t from t1 order by id;
|
||||||
|
table type possible_keys key key_len ref rows Extra
|
||||||
|
t1 ALL NULL NULL NULL NULL 1000 Using filesort
|
||||||
|
explain select id,t from t1 force index (primary) order by id;
|
||||||
|
table type possible_keys key key_len ref rows Extra
|
||||||
|
t1 index NULL PRIMARY 4 NULL 1000
|
||||||
|
drop table t1;
|
||||||
|
@ -34,3 +34,15 @@ INSERT INTO t1
|
|||||||
VALUES(NULL,1,'2001-03-01',1,1,1,'New',NULL,NULL,'now');
|
VALUES(NULL,1,'2001-03-01',1,1,1,'New',NULL,NULL,'now');
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test for bug #2342 "Running ANALYZE TABLE on bdb table
|
||||||
|
# inside a transaction hangs server thread"
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a int) engine=bdb;
|
||||||
|
|
||||||
|
set autocommit=0;
|
||||||
|
insert into t1 values(1);
|
||||||
|
analyze table t1;
|
||||||
|
drop table t1;
|
||||||
|
@ -352,4 +352,15 @@ CREATE TABLE t1 (a INT, b INT);
|
|||||||
SET @id=0;
|
SET @id=0;
|
||||||
UPDATE t1 SET a=0 ORDER BY (a=@id), b;
|
UPDATE t1 SET a=0 ORDER BY (a=@id), b;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1(id int not null auto_increment primary key, t char(12));
|
||||||
|
disable_query_log;
|
||||||
|
let $1 = 1000;
|
||||||
|
while ($1)
|
||||||
|
{
|
||||||
|
eval insert into t1(t) values ('$1');
|
||||||
|
dec $1;
|
||||||
|
}
|
||||||
|
enable_query_log;
|
||||||
|
explain select id,t from t1 order by id;
|
||||||
|
explain select id,t from t1 force index (primary) order by id;
|
||||||
|
drop table t1;
|
@ -2099,6 +2099,53 @@ int ha_berkeley::analyze(THD* thd, HA_CHECK_OPT* check_opt)
|
|||||||
{
|
{
|
||||||
DB_BTREE_STAT *stat=0;
|
DB_BTREE_STAT *stat=0;
|
||||||
uint i;
|
uint i;
|
||||||
|
DB_TXN_STAT *txn_stat_ptr= 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Original bdb documentation says:
|
||||||
|
"The DB->stat method cannot be transaction-protected.
|
||||||
|
For this reason, it should be called in a thread of
|
||||||
|
control that has no open cursors or active transactions."
|
||||||
|
So, let's check if there are any changes have been done since
|
||||||
|
the beginning of the transaction..
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
If it's a merge conflict here (4.0->4.1), please ignore it!
|
||||||
|
|
||||||
|
The reason of the conflict is the difference between versions of bdb:
|
||||||
|
mysql-4.0 uses bdb 3.2.9
|
||||||
|
mysql-4.1 uses bdb 4.1.24
|
||||||
|
Older one has global functions txn_stat and txn_id but
|
||||||
|
newer one has DB_ENV->txn_stat and DB_TXN->id
|
||||||
|
*/
|
||||||
|
if (!txn_stat(db_env, &txn_stat_ptr, 0) &&
|
||||||
|
txn_stat_ptr && txn_stat_ptr->st_nactive>=2)
|
||||||
|
{
|
||||||
|
DB_TXN_ACTIVE *atxn_stmt= 0, *atxn_all= 0;
|
||||||
|
|
||||||
|
DB_TXN *txn_all= (DB_TXN*) thd->transaction.all.bdb_tid;
|
||||||
|
u_int32_t all_id= txn_id(txn_all);
|
||||||
|
|
||||||
|
DB_TXN *txn_stmt= (DB_TXN*) thd->transaction.stmt.bdb_tid;
|
||||||
|
u_int32_t stmt_id= txn_id(txn_stmt);
|
||||||
|
|
||||||
|
DB_TXN_ACTIVE *cur= txn_stat_ptr->st_txnarray;
|
||||||
|
DB_TXN_ACTIVE *end= cur + txn_stat_ptr->st_nactive;
|
||||||
|
for (; cur!=end && (!atxn_stmt || !atxn_all); cur++)
|
||||||
|
{
|
||||||
|
if (cur->txnid==all_id) atxn_all= cur;
|
||||||
|
if (cur->txnid==stmt_id) atxn_stmt= cur;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (atxn_stmt && atxn_all &&
|
||||||
|
log_compare(&atxn_stmt->lsn,&atxn_all->lsn))
|
||||||
|
{
|
||||||
|
free(txn_stat_ptr);
|
||||||
|
return HA_ADMIN_REJECT;
|
||||||
|
}
|
||||||
|
free(txn_stat_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0 ; i < table->keys ; i++)
|
for (i=0 ; i < table->keys ; i++)
|
||||||
{
|
{
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#define HA_ADMIN_CORRUPT -3
|
#define HA_ADMIN_CORRUPT -3
|
||||||
#define HA_ADMIN_INTERNAL_ERROR -4
|
#define HA_ADMIN_INTERNAL_ERROR -4
|
||||||
#define HA_ADMIN_INVALID -5
|
#define HA_ADMIN_INVALID -5
|
||||||
|
#define HA_ADMIN_REJECT -6
|
||||||
|
|
||||||
/* Bits in table_flags() to show what database can do */
|
/* Bits in table_flags() to show what database can do */
|
||||||
#define HA_READ_RND_SAME 1 /* Read RND-record to KEY-record
|
#define HA_READ_RND_SAME 1 /* Read RND-record to KEY-record
|
||||||
|
@ -6021,7 +6021,7 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
|
|||||||
/* check if we can use a key to resolve the group */
|
/* check if we can use a key to resolve the group */
|
||||||
/* Tables using JT_NEXT are handled here */
|
/* Tables using JT_NEXT are handled here */
|
||||||
uint nr;
|
uint nr;
|
||||||
key_map keys=usable_keys;
|
key_map keys_to_use=~0,keys=usable_keys;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If not used with LIMIT, only use keys if the whole query can be
|
If not used with LIMIT, only use keys if the whole query can be
|
||||||
@ -6029,7 +6029,17 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
|
|||||||
retrieving all rows through an index.
|
retrieving all rows through an index.
|
||||||
*/
|
*/
|
||||||
if (select_limit >= table->file->records)
|
if (select_limit >= table->file->records)
|
||||||
keys&= (table->used_keys | table->file->keys_to_use_for_scanning());
|
keys_to_use= (table->used_keys |table->file->keys_to_use_for_scanning());
|
||||||
|
|
||||||
|
/*
|
||||||
|
We are adding here also the index speified in FORCE INDEX clause,
|
||||||
|
if any.
|
||||||
|
This is to allow users to use index in ORDER BY.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (table->force_index)
|
||||||
|
keys_to_use|= table->keys_in_use_for_query;
|
||||||
|
keys&= keys_to_use;
|
||||||
|
|
||||||
for (nr=0; keys ; keys>>=1, nr++)
|
for (nr=0; keys ; keys>>=1, nr++)
|
||||||
{
|
{
|
||||||
|
@ -1330,6 +1330,12 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||||||
net_store_data(packet, "Operation failed");
|
net_store_data(packet, "Operation failed");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HA_ADMIN_REJECT:
|
||||||
|
net_store_data(packet,"status");
|
||||||
|
net_store_data(packet,"Operation need committed state");
|
||||||
|
open_for_modify= false;
|
||||||
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_ALREADY_DONE:
|
case HA_ADMIN_ALREADY_DONE:
|
||||||
net_store_data(packet, "status");
|
net_store_data(packet, "status");
|
||||||
net_store_data(packet, "Table is already up to date");
|
net_store_data(packet, "Table is already up to date");
|
||||||
|
Reference in New Issue
Block a user