鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

offlineCalculate

服务端生成分桶数据,方便线上查询时快速查询结果。

int offlineCalculate(
    DG_TeeCtx *dgTeeCtx,
    DG_TeeInput *input,
    DG_Buckets **buckets
)

参数

参数名

描述

取值范围

输入/输出

dgTeeCtx

MPC上下文信息

DG_InitPsmOpts成功初始化的结果

输入

input

输入数据

-

输入

buckets

生成的分桶数据

-

输出

表1 DG_TeeInput结构体

名称

类型

说明

data

DG_MpcDataUnion

输入数据strings的类型为DG_String *,doubleNumbers为double *, u64Numbers类型为u64 *

size

uint64_t

数据量

dataType

DG_MpcDataType

数据类型枚举有:

MPC_STRING(PSM查询)

表2 DG_MpcDataUnion联合体

名称

类型

说明

strings

DG_String

字符串数组类型

u64Numbers

u64

u64数组

doubleNumbers

double

double数组

返回值

  • 成功:返回0。
  • 失败:返回错误码。

错误码

错误码

错误码值

描述

特殊说明

DG_SUCCESS

0

成功

DG_FAILURE

1

失败

向桶内添加数据失败

DG_ERR_MALLOC_FAIL

51

申请内存失败

DG_ERR_MPC_TEE_INVALID_NODE_INFO

4503

无效的tee节点信息

DG_ERR_MPC_TEE_INVALID_PARAM

4501

参数校验失败

DgCfg为NULL或dgTeeCtx二级指针为空

依赖

  • dgCfg依赖DataGuard操作集设置类接口设置MPC配置信息成功,用设定好的dgCfg作为此接口的入参。
  • psmOpts依赖DG_InitPsmOpts的成功初始化PSM类算子函数组。
  • 依赖的头文件为 #include "data_guard_mpc.h"。

示例

#include  "data_guard_mpc.h"
void BuildDgString(std::vector<std::string> &strings, DG_String **dg, unsigned int &size)
{
    size = strings.size();
    DG_String *dgString = new DG_String[strings.size()];
    for (size_t i = 0; i < strings.size(); i++) {
        dgString[i].str = strdup(strings[i].c_str());
        dgString[i].size = strings[i].size() + 1;
    }
    *dg = dgString;
}
DG_TeeInput BuildTeeInput(std::vector<std::string> inputData)
{
    DG_String *dgInput;
    unsigned int size;
    BuildDgString(inputData, &dgInput, size);
    DG_TeeInput dgTeeInput = {};
    dgTeeInput.dataType = MPC_STRING;
    dgTeeInput.data.strings = dgInput;
    dgTeeInput.size = size;
    return dgTeeInput;
}
DG_Buckets *buckets = nullptr;
DG_TeeInput dgTeeInput = BuildTeeInput("name", "age", "a");
// psmOpts为DG_InitPsmOpts成功后的结果,dgTee为initTeeMpcSql成功后的结果
rv = psmOpts.OfflineCalculate(nodeCtx, &dgTeeInput, &buckets);
if (rv != 0) {
    return rv;
}

调用DG_InitPsmOpts成功后的psmOpts来调用initTeeCtx接口。