#ifndef CIVTABLETEMP_H
#define CIVTABLETEMP_H

#include<string>
#include<vector>
#include<map>

#include "CivTypes.h"

typedef struct FieldProperty
{
	std::string mFiledName; //字段名
	std::string mFieldType; // 字段类型
};

#define FiledPropertys std::vector<FieldProperty>

/**
*  数据库表模板
*/
class CivTableTemp
{
public:

	// 表类型
	enum TableType
	{
		NODE_TABLE, // 计算结果点表
		PIPE_TABLE, // 计算结果线表
		PATTERN_TABLE, // 模式表
		CURVE_TABLE, //曲线表
		PARAMETER_TABLE // 参数表
	};

	// 字段类型
	enum FieldType {
		FILED_INT,
		FILED_INTEGER,
		FILED_DOUBLE,
		FILED_VARCHAR,
		FILED_VARCHAR64,
		FILED_VARCHAR128,
		FILED_DATETIME,
		FILED_JSON,
		FILED_DATE
	};

	explicit CivTableTemp(Str tableName, TableType tableType);

	~CivTableTemp();

	/**
	*@brief 添加字段属性
	*@fileName：字段名
	*@filedType：字段类型
	*/
	void addProperty(std::string fileName, FieldType filedType);

	// 添加批量属性字段
	void addPropertys(FiledPropertys props);

	// 返回创建表的sql语句
	Str createSql();

private:
	Str mTableName; // 表明
	TableType mTableType; // 表类型

	FiledPropertys mPropertys; // 字段和字段属性
	std::map< FieldType, Str> mFieldTyepMap;
};

#endif // !CIVTABLETEMP_H



