diff options
author | unknown <monty@mysql.com> | 2004-04-05 13:56:05 +0300 |
---|---|---|
committer | unknown <monty@mysql.com> | 2004-04-05 13:56:05 +0300 |
commit | 7873b89fc50d420a5f538a5b60faf79131f86c4f (patch) | |
tree | 0bfd237ce668df7f8a361ddbc36762c5a16b2bae /myisam | |
parent | 9c2e4b0360600840efa1ac396aa2f398ee07f4da (diff) | |
download | mariadb-git-7873b89fc50d420a5f538a5b60faf79131f86c4f.tar.gz |
Fixed many compiler warnings
Fixed bugs in group_concat with ORDER BY and DISTINCT (Bugs #2695, #3381 and #3319)
Fixed crash when doing rollback in slave and the io thread catched up with the sql thread
Set locked_in_memory properly
include/mysql_com.h:
Fixed compiler warning
libmysqld/emb_qcache.cc:
Removed not used variable
libmysqld/lib_sql.cc:
Removed not used variable
myisam/mi_locking.c:
Added comment
myisam/mi_rnext.c:
Fixed bug in concurrent insert
myisam/mi_rprev.c:
Simple optimization
mysql-test/r/func_gconcat.result:
New tests
mysql-test/t/func_gconcat.test:
New tests
mysql-test/t/func_group.test:
Cleanup
sql-common/client.c:
Removed compiler warning
sql/derror.cc:
Better comments
sql/field.cc:
Removed not used function/variable
sql/field.h:
Removed not needed variable
sql/ha_innodb.cc:
Removed not used function
sql/item.cc:
Fixed compiler warning
sql/item_cmpfunc.cc:
Fixed compiler warning
sql/item_func.cc:
Fixed compiler warning
sql/item_geofunc.cc:
Fixed compiler warning
sql/item_sum.cc:
Fixed bugs in group_concat and added more comments
(Bugs #2695, #3381 and #3319)
- field->abs_offset was not needed
- Wrong assumption of field order in temporary table
- Some not used variables removed
- Added ORDER BY fields after argument fields so that code in sql_select.cc can move all fields to point to temporary tables, if needed.
- Optimized loops
sql/item_sum.h:
Bug fixing and cleanup of group_concat()
sql/log.cc:
Removed wrong comment
sql/log_event.cc:
Removed compiler warning
sql/mysqld.cc:
Set locked_in_memory properly
sql/protocol.cc:
Removed compiler warning
sql/set_var.cc:
Code cleanup
sql/slave.cc:
Fixed crash when doing rollback in slave and the io thread catched up with the sql thread
sql/sql_cache.cc:
Removed compiler warnings
sql/sql_derived.cc:
Removed not used variable
sql/sql_insert.cc:
Removed compiler warnings
sql/sql_lex.cc:
Removed not used lable
sql/sql_lex.h:
Removed compiler warnings
sql/sql_parse.cc:
Removed compiler warnings
sql/sql_prepare.cc:
Removed compiler warnings
sql/sql_select.cc:
Removed not used variables
Added function comments
sql/sql_show.cc:
Removed compiler warnings
sql/sql_yacc.yy:
Fix for ORDER BY handling in GROUP_CONCAT()
Diffstat (limited to 'myisam')
-rw-r--r-- | myisam/mi_locking.c | 15 | ||||
-rw-r--r-- | myisam/mi_rnext.c | 64 | ||||
-rw-r--r-- | myisam/mi_rprev.c | 23 |
3 files changed, 58 insertions, 44 deletions
diff --git a/myisam/mi_locking.c b/myisam/mi_locking.c index 816748d459a..b13ebfb4cad 100644 --- a/myisam/mi_locking.c +++ b/myisam/mi_locking.c @@ -286,6 +286,21 @@ void mi_copy_status(void* to,void *from) ((MI_INFO*) to)->state= &((MI_INFO*) from)->save_state; } + +/* + Check if should allow concurrent inserts + + IMPLEMENTATION + Don't allow concurrent inserts if we have a hole in the table. + + NOTES + Rtree indexes are disabled in mi_open() + + RETURN + 0 ok to use concurrent inserts + 1 not ok +*/ + my_bool mi_check_status(void* param) { MI_INFO *info=(MI_INFO*) param; diff --git a/myisam/mi_rnext.c b/myisam/mi_rnext.c index e1cf916d6d9..6e6056f98d9 100644 --- a/myisam/mi_rnext.c +++ b/myisam/mi_rnext.c @@ -57,47 +57,45 @@ int mi_rnext(MI_INFO *info, byte *buf, int inx) } else { - switch(info->s->keyinfo[inx].key_alg) - { - case HA_KEY_ALG_RTREE: + switch (info->s->keyinfo[inx].key_alg) { + case HA_KEY_ALG_RTREE: /* - Note that rtree doesn't support that the table - may be changed since last call, so we do need - to skip rows inserted by other threads like in btree + Note that rtree doesn't support that the table + may be changed since last call, so we do need + to skip rows inserted by other threads like in btree */ - error=rtree_get_next(info,inx,info->lastkey_length); - break; + error= rtree_get_next(info,inx,info->lastkey_length); + break; - case HA_KEY_ALG_BTREE: - default: - if (!changed) - { - error=_mi_search_next(info,info->s->keyinfo+inx,info->lastkey, - info->lastkey_length,flag, - info->s->state.key_root[inx]); - } - else - { - error=_mi_search(info,info->s->keyinfo+inx,info->lastkey, - USE_WHOLE_KEY,flag, info->s->state.key_root[inx]); - } - if (!error && info->s->concurrent_insert) - { - while (info->lastpos >= info->state->data_file_length) - { - /* Skip rows that are inserted by other threads since we got a lock */ - if ((error=_mi_search_next(info,info->s->keyinfo+inx,info->lastkey, - info->lastkey_length, - SEARCH_BIGGER, - info->s->state.key_root[inx]))) - break; - } - } + case HA_KEY_ALG_BTREE: + default: + if (!changed) + error= _mi_search_next(info,info->s->keyinfo+inx,info->lastkey, + info->lastkey_length,flag, + info->s->state.key_root[inx]); + else + error= _mi_search(info,info->s->keyinfo+inx,info->lastkey, + USE_WHOLE_KEY,flag, info->s->state.key_root[inx]); } } if (info->s->concurrent_insert) + { + if (!error) + { + while (info->lastpos >= info->state->data_file_length) + { + /* Skip rows inserted by other threads since we got a lock */ + if ((error=_mi_search_next(info,info->s->keyinfo+inx, + info->lastkey, + info->lastkey_length, + SEARCH_BIGGER, + info->s->state.key_root[inx]))) + break; + } + } rw_unlock(&info->s->key_root_lock[inx]); + } /* Don't clear if database-changed */ info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); info->update|= HA_STATE_NEXT_FOUND; diff --git a/myisam/mi_rprev.c b/myisam/mi_rprev.c index 4807e636252..b787210e037 100644 --- a/myisam/mi_rprev.c +++ b/myisam/mi_rprev.c @@ -52,21 +52,22 @@ int mi_rprev(MI_INFO *info, byte *buf, int inx) error=_mi_search(info,share->keyinfo+inx,info->lastkey, USE_WHOLE_KEY, flag, share->state.key_root[inx]); - if (!error) + if (share->concurrent_insert) { - while (info->lastpos >= info->state->data_file_length) + if (!error) { - /* Skip rows that are inserted by other threads since we got a lock */ - if ((error=_mi_search_next(info,share->keyinfo+inx,info->lastkey, - info->lastkey_length, - SEARCH_SMALLER, - share->state.key_root[inx]))) - break; + while (info->lastpos >= info->state->data_file_length) + { + /* Skip rows that are inserted by other threads since we got a lock */ + if ((error=_mi_search_next(info,share->keyinfo+inx,info->lastkey, + info->lastkey_length, + SEARCH_SMALLER, + share->state.key_root[inx]))) + break; + } } - } - - if (share->concurrent_insert) rw_unlock(&share->key_root_lock[inx]); + } info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED); info->update|= HA_STATE_PREV_FOUND; if (error) |