EasySQL
EasySQL copied to clipboard
feat(table): 数据表结构优化与自动migrate
功能简述
我觉得 EasySQL 已经做的非常完善了,以下是我个人在开发过程中遇到的一些疑问,这些功能可能已经存在(?)。
- 获取数据库的全部(或者部分)表名(更进一步地,表的详细信息等等,如有可能)的方法。
- 数据表目前似乎没有自动合并功能,当后期修改表的定义(例如增添列、删除列或者改动列)时,数据表没有相应的反映。
需求来源
在执行 select、insert 等操作的时候,有时会遇到对许多表名的操作,例如 select * 或者 insert 一大堆表名,这个时候 setColumnNames 方法似乎就会有些繁琐。鉴于其参数是 String[],是否有方法可以获取到这样的 String[] 呢?
是否可以用 * 等等特殊符号来代替一个包含所有表名的数组呢?这个我并没有试过,或许是可以的。
⬆️这个想法可能不太好,因为 insert * 不符合经典 SQL 语法,所以...
我按照 https://github.com/CarmJos/EasySQL/blob/master/.documentation/USAGE-TABLE.md 这里给出的方式定义了数据表,按照我对 Enum 的语义理解,访问到这些表枚举项例如 DataTables.ExampleTable 时如果能够提供更多关于这张表的元信息是最好,但是目前并没有信息途径(除了,当特别约定数据表名就是枚举项 name 的 lowercase 时候,可以自行编写出 getTableName() 方法,但并没有广泛做法)。
关于第二点,维护的过程难免会出现数据表的微小变动,如果有 auto-migration 会使这个过程方便许多。对于用户端来说,如果没有 auto-migration 则需要自己编写 ALTER TABLE 语句并在合适的时机执行来避免新版本运行过程中出现问题。
功能参考(可选)
第一个功能是我自己脑补出来的,所以没啥参考。Enum 实现出来后的代码可能是这样的:
manager.createInsert(DataTables.ExampleTable.getTableName())
.setColumnNames(DataTables.ExampleTable.getTableColumnsAsStringArray())
// ...
问题在于这些方法的数据来源是否存在。
第二个功能是在一些其它的 ORM 中见到的功能,例如 GORM https://gorm.io/zh_CN/docs/index.html ,具体表现就是在每次 initialize 的时候先前对数据表定义的改动都会反映到数据表里,这个过程大概是在执行 createTable 的过程中,对 addColumn 添加的 column 的特殊处理吧(GORM 的设计是一个独立的 AutoMigrate 方法,传入的是数据表的结构,可以放在程序的任何位置)。
附加内容
😁
在 JavaDoc 里找到了 SQLTable 上有这个 getTableName 的方法。
非常感谢您的建议,此刻本项目正在重构中中,您的建议将会在新版本中被参考或(可能被)实现。
新版本中,表结构由现在的String组合语句(即包含了一列所有的信息)变更为独立数据结构,因此,您所提到的快速获取表结构中所有列名可以在新版本中轻松实现; 此外,基于本结构,我已在新版本中考虑支持“AutoMigrate”,但可能会再新版本后的几个版本中实现。
与此同时,非常欢迎您也参与本项目的开发与维护,感谢您对本项目的支持与厚爱!
OK,明白!期待新版本~ Carm 辛苦了~