mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
169 lines
5.6 KiB
C++
169 lines
5.6 KiB
C++
//
|
|
// $Id: ha_sphinx.h 4818 2014-09-24 08:53:38Z tomat $
|
|
//
|
|
|
|
#ifdef USE_PRAGMA_INTERFACE
|
|
#pragma interface // gcc class implementation
|
|
#endif
|
|
|
|
|
|
#if MYSQL_VERSION_ID>=50515
|
|
#define TABLE_ARG TABLE_SHARE
|
|
#elif MYSQL_VERSION_ID>50100
|
|
#define TABLE_ARG st_table_share
|
|
#else
|
|
#define TABLE_ARG st_table
|
|
#endif
|
|
|
|
|
|
#if MYSQL_VERSION_ID>=50120
|
|
typedef uchar byte;
|
|
#endif
|
|
|
|
|
|
/// forward decls
|
|
class THD;
|
|
struct CSphReqQuery;
|
|
struct CSphSEShare;
|
|
struct CSphSEAttr;
|
|
struct CSphSEStats;
|
|
struct CSphSEThreadTable;
|
|
|
|
/// Sphinx SE handler class
|
|
class ha_sphinx final : public handler
|
|
{
|
|
protected:
|
|
THR_LOCK_DATA m_tLock; ///< MySQL lock
|
|
|
|
CSphSEShare * m_pShare; ///< shared lock info
|
|
|
|
uint m_iMatchesTotal;
|
|
uint m_iCurrentPos;
|
|
const byte * m_pCurrentKey;
|
|
uint m_iCurrentKeyLen;
|
|
|
|
char * m_pResponse; ///< searchd response storage
|
|
char * m_pResponseEnd; ///< searchd response storage end (points to wilderness!)
|
|
char * m_pCur; ///< current position into response
|
|
bool m_bUnpackError; ///< any errors while unpacking response
|
|
|
|
public:
|
|
#if MYSQL_VERSION_ID<50100
|
|
ha_sphinx ( TABLE_ARG * table_arg ); // NOLINT
|
|
#else
|
|
ha_sphinx ( handlerton * hton, TABLE_ARG * table_arg );
|
|
#endif
|
|
~ha_sphinx ();
|
|
|
|
const char * table_type () const override { return "SPHINX"; } ///< SE name for display purposes
|
|
const char * index_type ( uint ) override { return "HASH"; } ///< index type name for display purposes
|
|
|
|
#if MYSQL_VERSION_ID>50100
|
|
ulonglong table_flags () const override { return HA_CAN_INDEX_BLOBS |
|
|
HA_CAN_TABLE_CONDITION_PUSHDOWN; } ///< bitmap of implemented flags (see handler.h for more info)
|
|
#else
|
|
ulong table_flags () const { return HA_CAN_INDEX_BLOBS; } ///< bitmap of implemented flags (see handler.h for more info)
|
|
#endif
|
|
|
|
ulong index_flags ( uint, uint, bool ) const override { return 0; } ///< bitmap of flags that says how SE implements indexes
|
|
uint max_supported_record_length () const override { return HA_MAX_REC_LENGTH; }
|
|
uint max_supported_keys () const override { return 1; }
|
|
uint max_supported_key_parts () const override { return 1; }
|
|
uint max_supported_key_length () const override { return MAX_KEY_LENGTH; }
|
|
uint max_supported_key_part_length () const override { return MAX_KEY_LENGTH; }
|
|
|
|
#if MYSQL_VERSION_ID>50100
|
|
double scan_time () override { return (double)( stats.records+stats.deleted )/20.0 + 10; } ///< called in test_quick_select to determine if indexes should be used
|
|
#else
|
|
virtual double scan_time () { return (double)( records+deleted )/20.0 + 10; } ///< called in test_quick_select to determine if indexes should be used
|
|
#endif
|
|
|
|
double read_time(uint index, uint ranges, ha_rows rows) override
|
|
{ return ranges + (double)rows/20.0 + 1; } ///< index read time estimate
|
|
|
|
public:
|
|
int open ( const char * name, int mode, uint test_if_locked ) override;
|
|
int close () override;
|
|
|
|
int write_row ( const byte * buf ) override;
|
|
int update_row ( const byte * old_data, const byte * new_data ) override;
|
|
int delete_row ( const byte * buf ) override;
|
|
int extra ( enum ha_extra_function op ) override;
|
|
|
|
int index_init ( uint keynr, bool sorted ) override; // 5.1.x
|
|
int index_init ( uint keynr ) { return index_init ( keynr, false ); } // 5.0.x
|
|
|
|
int index_end () override;
|
|
int index_read ( byte * buf, const byte * key, uint key_len, enum ha_rkey_function find_flag ) override;
|
|
int index_read_idx ( byte * buf, uint idx, const byte * key, uint key_len, enum ha_rkey_function find_flag );
|
|
int index_next ( byte * buf ) override;
|
|
int index_next_same ( byte * buf, const byte * key, uint keylen ) override;
|
|
int index_prev ( byte * buf ) override;
|
|
int index_first ( byte * buf ) override;
|
|
int index_last ( byte * buf ) override;
|
|
|
|
int get_rec ( byte * buf, const byte * key, uint keylen );
|
|
|
|
int rnd_init ( bool scan ) override;
|
|
int rnd_end () override;
|
|
int rnd_next ( byte * buf ) override;
|
|
int rnd_pos ( byte * buf, byte * pos ) override;
|
|
void position ( const byte * record ) override;
|
|
|
|
#if MYSQL_VERSION_ID>=50030
|
|
int info ( uint ) override;
|
|
#else
|
|
void info ( uint );
|
|
#endif
|
|
|
|
int reset() override;
|
|
int external_lock ( THD * thd, int lock_type ) override;
|
|
int delete_all_rows () override;
|
|
ha_rows records_in_range ( uint inx, const key_range * min_key, const key_range * max_key, page_range *pages) override;
|
|
|
|
int delete_table ( const char * from ) override;
|
|
int rename_table ( const char * from, const char * to ) override;
|
|
int create ( const char * name, TABLE * form, HA_CREATE_INFO * create_info ) override;
|
|
|
|
THR_LOCK_DATA ** store_lock ( THD * thd, THR_LOCK_DATA ** to, enum thr_lock_type lock_type ) override;
|
|
|
|
public:
|
|
#if MYSQL_VERSION_ID<50610
|
|
virtual const COND * cond_push ( const COND *cond );
|
|
#else
|
|
const Item * cond_push ( const Item *cond ) override;
|
|
#endif
|
|
void cond_pop () override;
|
|
|
|
private:
|
|
uint32 m_iFields;
|
|
char ** m_dFields;
|
|
|
|
uint32 m_iAttrs;
|
|
CSphSEAttr * m_dAttrs;
|
|
int m_bId64;
|
|
|
|
int * m_dUnboundFields;
|
|
|
|
private:
|
|
int Connect ( const char * sQueryHost, ushort uPort );
|
|
int ConnectAPI ( const char * sQueryHost, int iQueryPort );
|
|
int HandleMysqlError ( struct st_mysql * pConn, int iErrCode );
|
|
|
|
uint32 UnpackDword ();
|
|
char * UnpackString ();
|
|
bool UnpackSchema ();
|
|
bool UnpackStats ( CSphSEStats * pStats );
|
|
bool CheckResponcePtr ( int iLen );
|
|
|
|
CSphSEThreadTable * GetTls ();
|
|
};
|
|
|
|
|
|
#if MYSQL_VERSION_ID < 50100
|
|
bool sphinx_show_status ( THD * thd );
|
|
#endif
|
|
|
|
//
|
|
// $Id: ha_sphinx.h 4818 2014-09-24 08:53:38Z tomat $
|
|
//
|