Releases: sagframe/sagacity-sqltoy
4.9.6 增强sqlite 的支持,剔除sqlserver2008 的支持
1、强化了sqlite的支持
2、剔除sqlserver2008版本的支持,后面将废弃对sybase_iq的支持(已经没有用户)
3、针对batchUpdate方法增加了集合数据为空判断
4、对代码进行了部分优化,更加精炼
备注:
1、使用quickvo时,可以直接下载sqltoy-quickvo-all-4.11.jar 放于quickvo目录下面
2、quickvo里面已经包含了oracle、mysql、sqlserver、postgres、clickhouse的驱动,如db2、sqlite等则放于drivers目录下面。
3、注意修改quickvo.bat 文件执行对应的sqltoy-quickvo-xxx.jar文件名称
4.9.5 支持clickhouse列存储高性能查询数据库
1、支持clickhouse的增加、删除、查询功能(分页、取top和取随机记录),请参见:showcase 下面ClickHouseTest
2、修复beanutils类中引入LocalDate 错误(非java.time.LocalDate)
3、对方言版本进行了规整,如dialect 为oracle表示支持最新版本,针对过时版本如:oracle11g则单独增加一个方言版本,避免方言版本不断增加。(此改进跟开发者无关,sqltoy会跟进数据库连接自动判断版本)
备注:sagacity-quickvo-all-4.11.jar 里面包含了oracle、db2、mssql、postgresql、mysql、clickhouse的驱动,所以比较大
4.9.3 兼容es7+版本并修复不同数据库函数替换转义符问题等
1、日志框架改为slf4j 面向接口,便于用户选择不同的日志框架。
2、兼容elasticsearch7.x 版本,sql查询仍然基于elasticsearch-sql插件
(https://github.com/NLPchina/elasticsearch-sql),原因是es xpack sql 不支持分页。
参见:showcase项目test里面的ElasticCaseServiceTest类。sql定义在src\main
com.sagframe.sqltoy.showcase包下面sql.xml文件中定义
3、修复sqltoy同一个sql中的函数在不同类型数据库下执行替换过程因为' 和" 转义符合导致参数解析错误。
4、针对基于redis业务主键生成策略,增加了流水长度,如:订单号生成规则:
1位订单类型(采购P 销售:S)+6位日期(yyMMdd)+3位流水(超出自动扩展长度),之前只支持总长度定义(如10位,但规则改变后前面边长,则会导致流水位数变短),现在可以只定义流水位数。
5、一些错误提醒日志优化
6、部分代码风格优化和注释加强。
7、quickvo工具针对redis业务主键策略进行适配调整(参见showcase项目下面tools\quickvo 用法)
8、兼容了mysql8.0.19 和postgresql cte的新特性
4.8.10 修复updateAll 主键未赋值则不做变更处理,在剔除主键值为空记录时异常
1、修复updateAll 主键未赋值则不做变更处理,剔除主键值为空的记录时报异常(此错误只在主键未赋值且跳过变更发生,即在错误的赋值情况下发生错误,不影响实际功能)
2、优化debug执行sql日志输出为logger.debug模式
4.9.0 将变更日志为slf4j 便于开发者选择不同的日志框架(目前是log4j2)
4.8.9 优化load查询select * 为select field1,field2 完整字段模式
1、将load相关查询的生成SQL从原来的select * 转为select field1,field2 完整字段模式。
2、优化部分注释
本次变更的原因:
在mysql数据库场景下,连接参数使用:useServerPrepStmts=true;cachePrepStmts=true
当使用select * from tableA 过程中,增加tableA的字段,程序再次执行(保持之前会话)时会报:
java.sql.SQLException: java.lang.ArrayIndexOutOfBoundsException 异常!
因此,大家要注意查询时一定避免写select * 要写完整字段!
4.8.7 优化跨数据库函数替换增强对postgresql的支持
1、对sql中的函数增强不同数据库的方言解析替换能力,尤其增强对postgresql支持,增加了If、GroupConcat、decode 函数,函数替换的目的在于:用一种数据库方言写的查询,当换数据库时执行时自动替换成当前数据库的函数,实现跨数据库。
(通过一些性能对比,postgresql比mysql在查询方面性能高不少:postgre 11.5 vs mysql8.0.17 )
2、优化local-translate 缓存有效时间的处理,可以设置keep-alive<=0 表示缓永不过期
3、一些注释优化
4.8.2 修复sql语句中特殊用法 @if() 条件参数值为null判断的规则
版本说明:
1、修复#[@if(:param==null) and t.name=:name] 其中:param为null则剔除整个#[] 之间sql的不合理规则
2、开放TranslateCacheManager的扩展注入,便于可以替换目前的默认实现
3、增加了缓存更新检测的集群节点时间差异参数[sqltoy-translate.xml配置],保障集群环境下缓存更新检测的时效:
4.8.1 优化和修复方言优化导致的缺陷(建议升级)
1、优化将查询部分PreparedStatement 原: ResultSet.TYPE_SCROLL_INSENSITIVE 改为ResultSet.TYPE_FORWARD_ONLY,提升效率。
2、修复根据方言提取sql部分缺陷。
建议升级
4.8.0 优化跨数据库函数替换和对统一赋值增加强制修改功能
4.8.0 继4.6.x 完成缓存和sql更新检测机制后的又一个大幅优化版本,主要改进点:
1、调整了plugin包为plugins,下面的类目录做了适当调整,便于今后扩展
2、大幅优化改进跨数据库函数替换处理模式,将之前执行时函数替换改进为缓存模式,相同数据库类型的存在则直接提取,不存在则进行函数替换并放入缓存中,大幅提升效率
3、优化了IUnifyFieldsHandler接口,增加public IgnoreCaseSet forceUpdateFields()方法,便于提供统一公共字段强制修改策略,如最后修改时间
<-- spring sqltoy 配置 (参见sqltoy-showcase项目) --->
<!-- 提供项目对数据库新增、修改操作时完成诸如:创建人、创建时间、修改人、修改时间等关键字段统一赋
值,减轻开发者每次赋值操作 -->
<property name="unifyFieldsHandler">
<bean class="com.sagframe.sqltoy.plugins.SqlToyUnifyFieldsHandler" />
</property>
/* (non-Javadoc)
* @see org.sagacity.sqltoy.plugins.IUnifyFieldsHandler#forceUpdateFields()
*/
@Override
public IgnoreCaseSet forceUpdateFields() {
//强制updateTime 和 systemTime 进行修改
IgnoreCaseSet forceUpdates=new IgnoreCaseSet();
forceUpdates.add("updateTime");
forceUpdates.add("systemTime");
return forceUpdates;
}
4、修复函数替换sysdate 无括号匹配处理的缺陷
5、其他一些优化
4.6.4 改进缓存更新检测机制和一个极端特殊情况下反射bug
1、改进缓存更新检测机制由timer定时改为线程内循环检测。
2、改进shardingDataSource检测机制由Timer定时改为线程内循环检测
3、修复DTO 中当同时有 isName 和 Name (isXXXX 和 XXXX 字段)时映射错误,强化isXXXX形式是boolean类型判断。
4、增强函数to_char和date_format 跨数据库时自动替换,实现mysql和oracle等情况下sql的通用性
5、升级fastjson依赖版本
6、其他一些优化