summaryrefslogtreecommitdiff
path: root/sql/ha_gemini.h
diff options
context:
space:
mode:
authorunknown <mikef@nslinux.bedford.progress.com>2001-05-29 09:29:08 -0400
committerunknown <mikef@nslinux.bedford.progress.com>2001-05-29 09:29:08 -0400
commit9d52381348a5ff15e856d3efc2004bbe36bb39bd (patch)
tree4f346bd1140daed312c2399909b0061ca3c6155d /sql/ha_gemini.h
parentf2c0436616634fc55613114a65e38eec1bfcc010 (diff)
downloadmariadb-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.h53
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;