在编写mysql存储引擎时如何使用Field类型?

时间:2011-09-21 18:36:21

标签: c++ mysql

我正在研究MySQL的存储引擎。但我一直在努力解决数据问题。例如,有一个方法具有以下签名:

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();

不起作用,或者我不知道从哪一行得到第一列。那怎么办呢?

感谢任何帮助!

1 个答案:

答案 0 :(得分: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类中创建一个方法,以按字段索引获取记录中的数据。