此包为Node.js连接达梦8数据库的原生驱动,API详见安装目录下的《DM8程序员手册》
仅支持Node.js 12 及以上
- 支持 typeorm 框架,详情见 typeorm-dm
- 支持 knex 框架,详情见 knex-dm
- 第三方依赖包snappy改为可选,安装和使用驱动时不再强制要求安装snappy依赖。若数据库服务器和数据库驱动通信开启了snappy压缩,则要求必须安装snappy依赖
- snappy依赖现提供两种选择:snappy 和 snappyjs
- snappy 性能好,兼容性差,大多数情况下优先考虑snappy
- snappyjs 纯JavaScript实现的库,兼容性好,国产CPU和操作系统建议用snappyjs
- 优化自动提交配置策略,优先级顺序从高到低如下:
- 执行选项
ExecuteOptions.autoCommit
/ExecuteManyOptions.autoCommit
- 驱动全局配置
dmdb.autoCommit
- 连接串属性/连接属性
localhost:5236?autoCommit=true
/ConnectionAttributes.autoCommit
- 执行选项
- 修复一些绑出参数问题
- 连接串参数switchInterval默认值从1000改为200
- 因影响typeorm-dm,回滚v1.0.31017部分修改,不再支持通过执行选项
ExecuteOptions.outFormat
设置执行结果中的绑出参数Result.outBinds
的返回格式为数组或对象,绑出参数固定为数组
- *修复了日期时间类型在不同时区下转换错误的问题
- 修复了查询小于公元100年的年份数值错误的问题
- 连接串参数localTimezone的取值范围从-720
720调整为-779840
- 修复了游标类型的绑出参数始终为null的问题,游标类型的绑出参数会根据执行选项
ExecuteOptions.resultSet
返回ResultSet对象或所有数据行 - 支持通过执行选项
ExecuteOptions.outFormat
设置执行结果中的绑出参数Result.outBinds
的返回格式为数组或对象
- 查询结果集中,JSON或JSONB类型的数据,自动解析成JSON对象返回(需服务器执行码也支持区分JSON/JSONB和CLOB),该特性控制开关见index.d.ts文件中的
- parseJson: boolean
- 新增以流的方式读取结果集,详情查看index.d.ts文件中的API:
- Connection.queryStream(sql: string, bindParams: BindParameters, options: ExecuteOptions): Readable
- ResultSet.toQueryStream(): Readable
- 修复了以服务名方式连接数据库时,因设置了错误的通信协议版本号导致解析服务器返回的消息Buffer失败的问题
- 修复了连接串属性schema在连接池中失效的问题
- 修复了连接池加服务名方式连接数据库导致的资源泄露问题
- 新增连接串参数: language。指定客户端语言,将报错信息按照指定语言返回,目前支持简体中文,英文和繁体中文。详情查看index.d.ts文件中ConnectionAttributes.language
- 新增连接串参数: injectArray。绑定参数为数组时,是否直接注入到SQL语句中,非数组类型的参数不受影响。详情查看index.d.ts文件中ConnectionAttributes.injectArray
- 支持在连接串上直接配置动态服务名,使用示例:dm://user:password@GroupName?GroupName=(host1:port1,host2:port2,...)
- *从数据库中查询BIGINT列,结果集中该列数据的类型从js的bigint类型修改为了js的number类型 注:如果数据库中该列的值超过js number的安全范围,即-(2^53 - 1) 到 2^53 - 1,则不能保证数据正确性!可以参考dm.fetchAsString和dm.ExecuteOptions.fetchInfo将数值转为字符串来解决
- *修复了字符大字段(CLOB/TEXT)中存在乱码字符时,读取结果不正确的问题
- *修复了连接串属性doSwitch=1时,(服务名中的)连接不会自动切换和自动重连的问题
- 与数据库服务器的内部通信协议版本从v2升级到v8
- 修复了在极低概率下(约1/65536),因加解密逻辑的缺陷,创建连接时报错:[-2501] 用户名或密码错误
- 修复了Node.js v14中关闭数据库连接后,Socket占用内存无法被回收的问题
- 修复了Node.js v16及以上版本使用驱动时出现的意外报错:[-4058] ENOENT
- *第三方依赖snappy从v6升级到v7以支持ARM平台安装和使用驱动
- 修复了当语句或参数长度超过64K字节导致的Buffer写入越界的问题
- *连接池新增等待队列功能。当连接池中连接数达到上限,后续的
getConnection()
获取连接请求可以被加入到等待队列中,直到连接池内有可用连接,而不是像原来那样直接报错。相关配置参数如下:- queueRequests:连接池达到最大连接数后,后续获取连接请求是否进入等待队列,默认true
- queueMax:获取连接请求等待队列最大长度,-1表示无限制,默认500
- queueTimeout:进入等待队列的获取连接请求在等待多少毫秒后,认为请求失败,单位毫秒,0表示永久等待,默认60000
- *从数据库中查询NUMBER/NUMERIC列,结果集中该列数据的类型从js的string类型修改为了js的number类型 注:如果数据库中该列的值超过js number的安全范围,即-(2^53 - 1) 到 2^53 - 1,则不能保证数据正确性!可以参考dm.fetchAsString和dm.ExecuteOptions.fetchInfo将数值转为字符串来解决
- *修复了在获取连接池连接时,当连接已失效且池中连接数小于poolMin阈值时,连接没有自动重连的问题
- 修复了存储过程绑入boolean类型的参数到其他数据类型导致执行失败的问题
- *缓存Buffer改进,对于批量执行的大数据量操作有极大的性能提升,建议老版本驱动更新到此版本
- 对数据库集群的连接做了一些优化处理和功能新增
- 日期时间的返回格式更精确
- 支持更多连接串属性,详情查看index.d.ts文件中的API