跳到主要内容

升级

准备工作

在升级之前,您需要做如下的准备工作。

检查更新日志

在更新前,请阅读更新日志 并检查重大变更是否会影响你的 Luwak 实例。

检查过期的配置项

一些配置项可能会在后续版本中过期。如果不解决过期的配置项, Luwak 也许会在升级后无法重启。

备份

Luwak 遵循语义化版本控制规范,版本格式:主版本号.次版本号.修订号。

新版 Luwak 通常会保持向下兼容的情况下增加新功能。

为防止意外,你应该备份 luwak 和 asm.so 插件。

从二进制升级

  • 下载最新的 Luwak 二进制文件和插件 .so 文件到临时文件夹中。
  • 停止运行中的 Luwak 实例,备份。
  • 覆盖旧的 Luwak 二进制文件和插件 .so 文件。
  • 启动 Luwak 实例。

从 v1/v2 升级到 v3

API method 后缀

v1/v2v3description
addadd创建单条
addListaddBatch创建多条
detailget获取单条
detailByUKgetByUK获取单条
detailBy$getBy$获取单条
listAllselectAll获取全部
listBy$selectBy$获取一页
listByIdListgetBatchById获取所有
searchselect获取一页,分页过滤排序
updataset更新单条
update$set$By$更新单条,一个字段
updateByIdListsetBatchById更新多条
deletedel删除单条
deleteByIdListdelBatchById删除多条

请求参数 params

基本不变,以下除外

update --> set

  • 原始 { id: number|string, ...data } 是一个对象,对象中包含主键信息
  • 变更 [ id, data ] 数组第一个是id,第二个是数据对象

响应结果 result

基本不变

Create

  • 创建单条返回 {} 其中有ID
  • 创建多条返回 number 受影响行数

Read

  • 获取单条返回 {}
  • 获取多条返回 { data:[], total: number }

Update

  • 更新单条返回 number 受影响行数
  • 更新多条返回 number 受影响行数

Delete

  • 删除单条返回 number 受影响行数
  • 删除多条返回 number 受影响行数

脚本内置方法

luwak.returnResult 标记为弃用,改用 globalThis.output = result;

luwak.runSql() 增加了 entity 参数,用于在多数据库实例场景时定位到具体的库。

declare namespace luwak {
function begin(entity: string): void;
function commit(entity: string): void;
function rollback(entity: string): void;
function dao(method: string, params: string|number|object): any;
function runSql(entity: string, query: string, params?: object): any;
function returnResult(result: any): void;
function returnError(code: string, message: string): void;
function setSession(id: string, data: object): void;
function sendMessage(subject: string, id: string, additionalData: any): void;
function cache(cmd: 'get'|'set'|'del'|'exists'|'expire', key: string, value?: any, expire?: number): void;

namespace crypto {
function aesEncrypt(secretKey: string, plaintext: string): string;
function aesDecrypt(secretKey: string, encryptedString: string): string;
}

namespace hash {
function md5(text: string): string;
function sha1(text: string): string;
function sha256(text: string): string;
function passwordHash(password: string): string;
function passwordVerify(password: string, cipherPassword: string): boolean;
}

namespace http {
function get(url: string, config?: object): { data: any };
function post(url: string, data: any, config?: object): { data: any };
function apiCall(apiName: string, params: any, metas: object): { data: any };
}

namespace random {
function guid(): string;
function uuid(): string;
function integer(from: number, to: number): number;
function secret(length: number): string;
function numeric(length: number): string;
function alphanumeric(length: number): string;
}
}

declare namespace log {
function debug(...data: any[]): void;
function info(...data: any[]): void;
function warn(...data: any[]): void;
function error(...data: any[]): void;
}