architecture
简介
功能说明
支持mysql和sqlite3
这是P02的ArchitectureD的gs移植版本 mysql/sql的格式化数据库,使用者需要根据规范提供数据库的描述文件(.xml格式)
载入数据库描述文件,能够自动生成数据库创建的SQL语句。 可以将完整映射根据描述文件分拆为数据库关系表的一行,也可以进行还原操作。
-
为什么保存为关系表数据时,抽出一个字段以后需要检查父节点? 这是为了使得保存的数据中更小,比如一个数据结构:
{ "location" : { "room" : ROOM, "pos" : POS ]), "me" : ME ])数据库描述文件要求抽出location/room & location/pos,然后将剩余的结果 保存为一个pack字段,这样,因为location在数据抽走必为空,如果保存的字 段中总有这个空映射,即浪费资源,也不利于阅读管理,所以抽走字段以后需 要进行检测,如果为空则不处理。 -
为什么还原为映射数据时,如果读出的值为UNDEFINED, 需要检查父节点是否 存在?并且在必要的时候设置为空映射? 以第一个例子而言,如果ROOM和POS字段均不存在, 即location字段为空映射 时,在保存的数据进行恢复时会略过设置值的操作,这样,因为location字段 在保存时已经被抽空不存在,最后还原的数据中location字段就会保持未定义。 所以,当我们发现一个字段为UNDEFINED时, 就核查其父节点保证存在。
-
采用上述方法,是否会造成保存数据时没有location字段,但是还原以后却多 了这个字段呢? 有可能。但是我们认为这是可以接受的的,因为如果location字段下的子字段 被数据库描述文件所定义,那么我们认为这为恒有字段,所以其父节点类型应 保持为映射。倘若我们认为,location还原以后必须保持存入时的状态,不允 许将之自动设置为映射,那么我们就不能在描述文件中定义location下的子字 段而是直接定义整个location字段。
组件接口
architecture.gs
| 函数原型 | 函数作用 |
|---|---|
| void disable_db_config_check() | 禁止数据库配置检查 |
| void enable_db_config_check() | 启用数据库配置检查,数据库配置不匹配时仅提示 |
| void enable_full_db_config_check() | 启用数据库配置检查,数据库配置不匹配时需要人工确认 |
| void load_databases(array xml_files) | 载入一组指定的数据库描述文件 |
| void reload_databases() | 重新加载所有数据库配置 |
| mixed derive_data_for_table(string path, mixed primary_value, map data, string databases = "") | 根据表名(路径),将映射类型的数据转换为数据库中的记录 |
| map get_tables(string databases = "") | 获取指定数据库群在描述文件中所配置的所有的表信息 |
| TableBase get_table_info(string path, string databases = "") | 获取指定数据库群在描述文件中所配置的指定的表信息 |
| map restore_data_from_table(string path, map row, string databases = "", bool verify_checksum = true) | 将数据库的行数据还原为映射数据 |
类
DatabaseSet
一组Database集合