2011-09-21 83 views
1

我正在使用MySQL的存儲引擎。但我已經在簡單地解析數據了。例如,有以下簽名的方法:如何在編寫mysql存儲引擎時使用Field類型?

int ha_engine::update_row(const uchar *old_data, uchar *new_data); 

所以數據存儲在old_data和new_data數組中。但是爲了從這個數組中獲取數據,應該使用Field類來訪問這些行中的數據。

現在的問題是,我不知道該怎麼做。例如,此代碼:

longlong val = table_share->field[0]->val_int(); 

將不起作用,或者我不知道從哪一行開始我會得到第一列。那麼應該怎麼做呢?

非常感謝您的幫助!

回答

0

您可以使用字段類型信息來確定保存數據的變量類型以及用於獲取數據的函數。

在我的數據庫應用程序中,字段的類型總是已知的,因爲程序創建表並填充它們。

我有從Field類派生的類層次結構:

class Field 
{ 
    public: 
    virtual std::string get_field_name(void) const = 0; 
    virtual std::string get_value_as_string(void) const = 0; 
    virtual void   load_from_mysql_record(const MySQLRecord& r) = 0; 
}; 

class Field_Integer : public Field 
{ 
    public: 
    int m_value; 
    std::string get_value_as_string(void) const 
    { 
     std::ostringstream oss; 
     oss << m_value; 
     return oss.str(); 
    } 
}; 

class Field_String : public Field 
{ 
    public: 
    std::string m_value; 
    std::string get_value_as_string(void) const 
    { 
     return m_value; 
    } 
}; 

每個字段葉類將使用get_field_name功能從MySQL記錄獲取數據。或者,可以在Field類中創建一個方法,以按字段索引獲取記錄中的數據。