SQLLib_Diagram
2016-06-28 14:34:17 0 举报
SQLLib_Diagram是一个用于创建和管理数据库结构的工具,它允许用户通过可视化的方式设计和编辑数据库表、关系和约束。这个工具可以帮助开发人员更有效地理解和操作数据库,提高开发效率。在SQLLib_Diagram中,用户可以创建表、添加字段、设置主键和外键等,还可以查看和修改表之间的关系。此外,SQLLib_Diagram还提供了一些高级功能,如数据模型验证、自动生成代码等,以满足不同用户的需求。总之,SQLLib_Diagram是一个功能强大、易于使用的数据库设计工具,适用于各种规模的项目和团队。
作者其他创作
大纲/内容
3.2.根据table名称从tables_拿出对应的SQLTable实例比如实际类型为子类StringHashTable
SQLDBSession
int _error;
SQLDBManager
MySQLDBSession
MYSQL mysql_; string db_name_;stru_conn_infos conn_info_;vector _multi_sqls;
被包含
MYSQL
- mysql_close()- mysql_init()- mysql_options()- mysql_read_connect()- mysql_next_result()- mysql_ping()
MySQLDBSessionBuilder
typedef vector stru_conn_infos;string db_name_;stru_conn_infos conn_info_;
2.8.父类的make_session里面调用子类make_session_internal拿到新的MySQLsession实例后调用其get_ready函数
被继承
global code
3.9.SQLTable的select内部调用了SQLObj的make_select_sql函数内部根据之前填充的items_里面的查询条件字段拼接一个查询SQL语句
StringHashTable/SingleDBTable/...
string db_base_name_;string table_base_name_;
3.11.execute()中,执行mysql_real_query
2.9.get_ready()中,通过先后执行mysql_next_result和mysql_ping先清空链接上遗留的query结果,再ping一下测试链接是否还有效如果ping失败则调用reconnect重试链接
SQLVariant
std::string *pvalue_;int type_;
- int set_int(int32_t v) ;- int set_string(const char *str);
被包含1.4.在table被创建时,被填充
SQLPrimaryKey
vector keys_;
3.10.SQLTable的select内部通过本线程中的某个sql_db_session对象(取决于操作的db)持有的MySQLSession对象进行execute和fetch_results操作
3.7.reader的select内部调用了自己持有的SQLTable的select函数
1.1.通过REGISTER_SQL_TABLE宏调用register_table,将table类型与该类型create函数对应放入table_map_
3.5..声明定义一个SQLObject对象作为查询条件和结果所存储的主体查询条件的字段都在查询前通过set_string类函数存在items_这个SQLVariant的map里面中(与字段的名字对应)
2.6.make_session_internal会new一个MySQLDBSession实例构造函数中会init内部MYSQL变量和multi_sqls这个vector并调用reconnect
2.2.通过SQLDBManager::make_session创建每个db名称(core_work_db)对应的session链接,不可重复(传入dsn文件内容:mysql://user@pwd)
2.1.每个线程的thread_data内部都维护一个db名称与对应session的map供该线程中各service class内部访问db使用,初始化各service class实例时调用fetch_db_session,根据core_work_db名称找到本线程thread_data实例内部维护的对应session如果还没有,则通过SQLDBManager::make_session创建2.10.每个新的session_db_session对象要进行set_mysql_read_write_timeout,然后加入session_这个map
被继承3.4.reader或writer被构造时,查询或插入的key和fields被存入SQLTableColumnBinder对应的成员变量的
typedef struct{string host;string user;string pass;string charset;u_int port;} stru_conn_info;
SQLTableCollection
3.12.SQLTable的select内部通过session进行实际查询后将结果存入了SQLObj对象
2.3.make_session内部调用make_builder(传入dsn文件内容:mysql://user@pwd)创建一个session builder然后使用它的make_session创建真正的SQLSession实例
SQLObject
1.3.create_table中依据要创建的table类型在table_map_中找到对应class的createa函数,创建table实例
SQLObjectReader/SQLObjectWriter
bool need_lock_;
thread_data
- sql_db_session* fetch_db_session(const ::std::string &db_name);
SQLTable
SQLPrimaryKey *primary_key_;
每一个sql_db_session对象的核心是它里面的SQLDBSession对象它只是一个供外部service class操作的wrapper
2.4.make_builder根据dsn中协议判断是MySQL数据库,调用MySQL对应子类的make_builder创建MySQL定制化的session builder(其实就是用dsn内容填充new出来的SesBldr的conn_info结构体)
sql_db_session
scoped_ptr session_;datetime current_time_;bool transaction_started_;bool is_ready_;
被持有
3.8.SQLTable的select函数内部调用了具体表类型对应的class的get_table_name函数来根据特定的规则获取将要访问的库表的具体名字(比如StringHashTable的get_table_name函数会根据自己存的db_name即bfb_db和table_name即t_trans,再根据查询key即单号,生成bfb_XX.t_trans_XX_X)
SQLDBSessionBuilder
1. sql_db_session::start_transaction()- MySQLDBSession::start_transaction()--- MySQLDBSession::get_ready()----- while (0 == mysql_next_result(&mysql_))----- if (0 == mysql_ping(&mysql_)) else----- MySQLDBSession::reconnect()------- mysql_close(&mysql_)------- mysql_init(&mysql_)------- mysql_options()------- mysql_real_connect()--- MySQLDBSession::roll_back()-----mysql_rollback()---mysql_query()2. void multi_commit()- sql_db_session::confirm_multi_query()--- MySQLDBSession::confirm_multi_query()----- mysql_real_query()----- mysql_next_result()3. void do_asyn()- sql_db_session::commit()--- MySQLDBSession::commit()----- mysql_commit()
1.2.为prodlib.conf每行,调用create_table,传入参数,创建SQLTable实实例,并与table名字对应放入table_
3.1.声明定义针对某个table的reader或者writer3.3.用从SQLDBManager出拿到的SQLTable,构造reader/writer构造时,要specify查询或插入的key和fields3.6.调用reader的select或者writer的insert/update操作数据库
SQLTableColumnBinder
scoped_ptr fields_;scoped_ptr real_key_;bool is_fixed_;const SQLPrimaryKey *key_; SQLTable *table_;
2.5.父类的make_session里面调用子类的make_session_internal
被持有3.5.查询前的查询条件和查询后的查询结果都通过SQLObj里面的set_XXX族函数存在items_里面的每个SQLVariant里面
2.11.sql_db_session的set_mysql_read_write_timeout函数内部,执行MySQLSession的set_mysql_read_write_timeout,然后reconnect
0 条评论
下一页
为你推荐
查看更多