运行函数

DBConnection::run 方法除了运行脚本之外,还提供了一个同名重载方法来执行 DolphinDB 内置或用户自定义函数。该方法声明如下:

ConstantSP run(const string& funcName, vector<ConstantSP>& args, int priority=4, int parallelism=2, int fetchSize=0, bool clearMemory = false);

参数

  • funcName:表示待执行的函数名。

  • args:表示该函数的参数。

  • priority:表示优先级,默认是4。

  • parallelism:表示并行度,默认是2。

  • fetchSize:对于大数据量的表,为防止内存占用过多,API 提供了分段读取方法,默认值是0。

  • clearMemory:表示是否在执行结束后清理内存,默认为 false。

返回值

返回脚本执行结果。

使用示例

以下 2 个示例程序将展示通过 run 方法来调用 DolphinDB 内置 add 函数,其中 add 函数需要两个参数:x 和 y。

例子1:当参数 x 和 y 都只存在于 C++应用中时,用法如下:

vector<ConstantSP> args;
ConstantSP x = Util::createVector(DT_DOUBLE, 3); //构造参数x
double array_x[] = {1.5, 2.5, 7}; 
x->setDouble(0, 3, array_x);
args.push_back(x);

ConstantSP y = Util::createVector(DT_DOUBLE, 3); //构造参数y 
double array_y[] = {8.5, 7.5, 3}; 
y->setDouble(0, 3, array_y); 
args.push_back(y);
    
ConstantSP result = conn.run("add", args);  //执行函数add
    
std::cout << result->getString() << std::endl;  //输出结果[10, 10, 10]

例子2:当参数 y 存在于 server 端,参数 x 存在于 C++应用中时,此时需要使用“部分应用”方式,把参数 y 固化在 add 函数内。具体请参考:部分应用

conn.run("y = [1, 3, 5]"); //在server端定义向量y
    
vector<ConstantSP> args;
ConstantSP x = Util::createVector(DT_DOUBLE, 3); //在C++应用中构造参数x
double array_x[] = {9, 7, 5};
x->setDouble(0, 3, array_x);
args.push_back(x);

ConstantSP result = conn.run("add{,y}", args);   //执行函数add

std::cout << result->getString() << std::endl;   //输出结果[10, 10, 10]