diff options
author | unknown <mikef@nslinux.bedford.progress.com> | 2001-05-29 09:29:08 -0400 |
---|---|---|
committer | unknown <mikef@nslinux.bedford.progress.com> | 2001-05-29 09:29:08 -0400 |
commit | 9d52381348a5ff15e856d3efc2004bbe36bb39bd (patch) | |
tree | 4f346bd1140daed312c2399909b0061ca3c6155d /sql/ha_gemini.h | |
parent | f2c0436616634fc55613114a65e38eec1bfcc010 (diff) | |
download | mariadb-git-9d52381348a5ff15e856d3efc2004bbe36bb39bd.tar.gz |
Pushing all the Gemini changes above the table handler.
BUILD/FINISH.sh:
Add Gemini to configure
Docs/manual.texi:
Added Gemini content to the manual.
acinclude.m4:
Add Gemini to configure
configure.in:
Add Gemini to configure
include/my_base.h:
transaction isolation level READ UNCOMMITTED does not allow updates
include/mysqld_error.h:
Added new messages for Lock related failures
sql/field.cc:
Gemini BLOB support -
sql/field.h:
Gemini BLOB Support
sql/ha_gemini.cc:
Gemini Table handler
sql/ha_gemini.h:
Gemini Table handler
sql/handler.cc:
Added new messages for Lock related failures
Provide the ability to turn off recovery for operations like
REPAIR TABLE ans ALTER TABLE
sql/handler.h:
Add a bit to have full text indexes as an option
and define the prototype to optionally turn on and off logging
sql/lock.cc:
Added new messages for Lock related failures
sql/share/czech/errmsg.txt:
Added new messages for Lock related failures
sql/share/danish/errmsg.txt:
Added new messages for Lock related failures
sql/share/dutch/errmsg.txt:
Added new messages for Lock related failures
sql/share/english/errmsg.txt:
Added new messages for Lock related failures
sql/share/estonian/errmsg.txt:
Added new messages for Lock related failures
sql/share/french/errmsg.txt:
Added new messages for Lock related failures
sql/share/german/errmsg.txt:
Added new messages for Lock related failures
sql/share/greek/errmsg.txt:
Added new messages for Lock related failures
sql/share/hungarian/errmsg.txt:
Added new messages for Lock related failures
sql/share/italian/errmsg.txt:
Added new messages for Lock related failures
sql/share/japanese/errmsg.txt:
Added new messages for Lock related failures
sql/share/korean/errmsg.txt:
Added new messages for Lock related failures
sql/share/norwegian-ny/errmsg.txt:
Added new messages for Lock related failures
sql/share/norwegian/errmsg.txt:
Added new messages for Lock related failures
sql/share/polish/errmsg.txt:
Added new messages for Lock related failures
sql/share/portuguese/errmsg.txt:
Added new messages for Lock related failures
sql/share/romanian/errmsg.txt:
Added new messages for Lock related failures
sql/share/russian/errmsg.txt:
Added new messages for Lock related failures
sql/share/slovak/errmsg.txt:
Added new messages for Lock related failures
sql/share/spanish/errmsg.txt:
Added new messages for Lock related failures
sql/share/swedish/errmsg.txt:
Added new messages for Lock related failures
sql/sql_base.cc:
Avoidlock table overflow issues when doing an alter table on Windows.
This is Gemini specific.
sql/sql_table.cc:
Add a bit to have full text indexes as an option
and define the prototype to optionally turn on and off logging
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
Diffstat (limited to 'sql/ha_gemini.h')
-rw-r--r-- | sql/ha_gemini.h | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/sql/ha_gemini.h b/sql/ha_gemini.h index 7e6e8f26588..495dc2fd1c9 100644 --- a/sql/ha_gemini.h +++ b/sql/ha_gemini.h @@ -19,17 +19,26 @@ #pragma interface /* gcc class implementation */ #endif +#include "gem_global.h" #include "dstd.h" #include "dsmpub.h" /* class for the the gemini handler */ enum enum_key_string_options{KEY_CREATE,KEY_DELETE,KEY_CHECK}; - -#define READ_UNCOMMITED 0 -#define READ_COMMITED 1 -#define REPEATABLE_READ 2 -#define SERIALIZEABLE 3 +typedef struct st_gemini_share { + ha_rows *rec_per_key; + THR_LOCK lock; + pthread_mutex_t mutex; + char *table_name; + uint table_name_length,use_count; +} GEM_SHARE; + +typedef struct gemBlobDesc +{ + dsmBlobId_t blobId; + dsmBuffer_t *pBlob; +} gemBlobDesc_t; class ha_gemini: public handler { @@ -38,7 +47,7 @@ class ha_gemini: public handler uint int_option_flag; int tableNumber; dsmIndex_t *pindexNumbers; // dsm object numbers for the indexes on this table - unsigned long lastRowid; + dsmRecid_t lastRowid; uint last_dup_key; bool fixed_length_row, key_read, using_ignore; byte *rec_buff; @@ -46,10 +55,12 @@ class ha_gemini: public handler dsmKey_t *pbracketLimit; dsmKey_t *pfoundKey; dsmMask_t tableStatus; // Crashed/repair status + gemBlobDesc_t *pBlobDescs; int index_open(char *tableName); - int pack_row(byte **prow, int *ppackedLength, const byte *record); - void unpack_row(char *record, char *prow); + int pack_row(byte **prow, int *ppackedLength, const byte *record, + bool update); + int unpack_row(char *record, char *prow); int findRow(THD *thd, dsmMask_t findMode, byte *buf); int fetch_row(void *gemini_context, const byte *buf); int handleIndexEntries(const byte * record, dsmRecid_t recid, @@ -70,24 +81,28 @@ class ha_gemini: public handler void unpack_key(char *record, dsmKey_t *key, uint index); int key_cmp(uint keynr, const byte * old_row, - const byte * new_row); + const byte * new_row, bool updateStats); + int saveKeyStats(THD *thd); + void get_index_stats(THD *thd); short cursorId; /* cursorId of active index cursor if any */ dsmMask_t lockMode; /* Shared or exclusive */ /* FIXFIX Don't know why we need this because I don't know what store_lock method does but we core dump without this */ - THR_LOCK alock; THR_LOCK_DATA lock; + GEM_SHARE *share; + public: ha_gemini(TABLE *table): handler(table), file(0), int_option_flag(HA_READ_NEXT | HA_READ_PREV | HA_REC_NOT_IN_SEQ | HA_KEYPOS_TO_RNDPOS | HA_READ_ORDER | HA_LASTKEY_ORDER | HA_LONGLONG_KEYS | HA_NULL_KEY | HA_HAVE_KEY_READ_ONLY | - HA_NO_BLOBS | HA_NO_TEMP_TABLES | - /* HA_BLOB_KEY | */ /*HA_NOT_EXACT_COUNT | */ + HA_BLOB_KEY | + HA_NO_TEMP_TABLES | HA_NO_FULLTEXT_KEY | + /*HA_NOT_EXACT_COUNT | */ /*HA_KEY_READ_WRONG_STR |*/ HA_DROP_BEFORE_CREATE), pbracketBase(0),pbracketLimit(0),pfoundKey(0), cursorId(0) @@ -100,7 +115,7 @@ class ha_gemini: public handler uint max_record_length() const { return MAXRECSZ; } uint max_keys() const { return MAX_KEY-1; } uint max_key_parts() const { return MAX_REF_PARTS; } - uint max_key_length() const { return MAXKEYSZ; } + uint max_key_length() const { return MAXKEYSZ / 2; } bool fast_key_read() { return 1;} bool has_transactions() { return 1;} @@ -129,8 +144,12 @@ class ha_gemini: public handler void info(uint); int extra(enum ha_extra_function operation); int reset(void); + int analyze(THD* thd, HA_CHECK_OPT* check_opt); int check(THD* thd, HA_CHECK_OPT* check_opt); int repair(THD* thd, HA_CHECK_OPT* check_opt); + int restore(THD* thd, HA_CHECK_OPT* check_opt); + int backup(THD* thd, HA_CHECK_OPT* check_opt); + int optimize(THD* thd, HA_CHECK_OPT* check_opt); int external_lock(THD *thd, int lock_type); virtual longlong get_auto_increment(); void position(byte *record); @@ -139,7 +158,7 @@ class ha_gemini: public handler enum ha_rkey_function start_search_flag, const byte *end_key,uint end_key_len, enum ha_rkey_function end_search_flag); - + void update_create_info(HA_CREATE_INFO *create_info); int create(const char *name, register TABLE *form, HA_CREATE_INFO *create_info); int delete_table(const char *name); @@ -167,6 +186,7 @@ extern long gemini_locktablesize; extern long gemini_lock_wait_timeout; extern long gemini_spin_retries; extern long gemini_connection_limit; +extern char *gemini_basedir; extern TYPELIB gemini_recovery_typelib; extern ulong gemini_recovery_options; @@ -175,12 +195,13 @@ bool gemini_end(void); bool gemini_flush_logs(void); int gemini_commit(THD *thd); int gemini_rollback(THD *thd); +int gemini_recovery_logging(THD *thd, bool on); void gemini_disconnect(THD *thd); int gemini_rollback_to_savepoint(THD *thd); int gemini_parse_table_name(const char *fullname, char *dbname, char *tabname); int gemini_is_vst(const char *pname); int gemini_set_option_long(int optid, long optval); -const int gemini_blocksize = 8192; -const int gemini_recbits = 7; +const int gemini_blocksize = BLKSIZE; +const int gemini_recbits = DEFAULT_RECBITS; |