返回首页

gbase数据、南大通用产品文档:GBase8sifx_int8cvlong() 函数

更新日期:2024年09月11日

ifx_int8cvlong() 函数将 C long 类型值转换为 int8 类型值。
语法
mint ifx_int8cvlong(lng_val, int8_val)
int4 lng_val;
ifx_int8_t *int8_val;
lng_val
ifx_int8cvlong() 将其转换为 int8 类型值的 int4 整数。
int8_val
指向 ifx_int8cvlong() 放置转换的结果处的 int8 结构的指针。

返回代码
0
转换成功。
<0
转换失败。

示例
demo 目录中的文件 int8cvlong.ec 包含下列样例程序。
/*
* ifx_int8cvlong.ec *

The following program converts two longs to INT8
types and displays the results.
*/


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 737 -
#include

EXEC SQL include "int8.h";

char result[41];

main()
{
mint x;
ifx_int8_t num;
int4 n;

printf("IFX_INT8CVLONG Sample ESQL Program running.\n\n");

printf("Long Integer 1 = 129449233\n");
if (x = ifx_int8cvlong(129449233L, #))
{
printf("Error %d in converting long to INT8\n", x);
exit(1);
}
if (x = ifx_int8soasc(#, result, sizeof(result)))
{
printf("Error %d in converting INT8 to string\n", x);
exit(1);
}
result[40] = '\0';
printf(" String for INT8 type value = %s\n", result);

n = 2147483646; /* set n */
printf("Long Integer 2 = %d\n", n);
if (x = ifx_int8cvlong(n, #))
{
printf("Error %d in converting long to INT8\n", x);

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 738 -
exit(1);
}
if (x = ifx_int8soasc(#, result, sizeof(result)))
{
printf("Error %d in converting INT8 to string\n", x);
exit(1);
}
result[40] = '\0';
printf(" String for INT8 type value = %s\n", result);

printf("\nIFX_INT8CVLONG Sample Program over.\n\n");
exit(0);
}
输出
IFX_INT8CVLONG Sample ESQL Program running.

Long Integer 1 = 129449233
String for INT8 type value = 129449233
Long Integer 2 = 2147483646
String for INT8 type value = 2147483646
IFX_INT8CVLONG Sample Program over.

当一个或多个监控指标所产生的报警信息长时间没有恢复时,我们不想再
看到此报警信息,可以通过点击超时忽略操作按钮进行设置,如图:

统一数据平台监控与运维系统用户手册
南大通用数据技术股份有限公司
- 109 -
图3.2-107 超时忽略
点击“是”,则设置所选监控指标产生的报警信息再超过忽略时间后不再
推送;点击“否”,则设置所选监控指标产生的报警信息一直推送。

GIN 索引的接口实现了一个高层次的抽象,
要求访问用户仅需要实现被访问数据类型的
语义。GIN 层自身可以处理并发操作、记录日志、搜索树结构的任务。
定义GIN 索引的访问方式所要做的事情就是实现多个用户定义的方法,这些方法定义
了键在树中的行为、
键与键之间的关系、
需要索引的item、
能够使用索引的查询。
简而言之,
GIN 索引将扩展性与普遍性、代码重用、清晰的接口结合在了一起。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1283
实现GIN 索引的操作符类有如下四个方法:
int compare(Datum a, Datum b)
比较两个key(不是索引的item)然后返回一个小于零、零或大于零的值,分别表示第
一个key 小于、等于或大于第二个key。NULL 不会被传入这个函数。
Datum *extractValue(Datum itemValue, int32 *nkeys, bool **nullFlags)
给定一个要被索引的item,
返回一个对应key 的数组。
返回key 的数目必须存储在*nkeys
中。如果任何key 都可能为NULL,还要分配包含*nkeys 个布尔元素的数组,将地址存储到
*nullFlags,并且根据需要设置NULL 值。如果所有key 都是非NULL,可以让*nullFlags
保持为NULL(他的初始值)。如果item 不包含任何key,返回值可以为NULL。
Datum *extractQuery(Datum query, int32 *nkeys, StrategyNumber n, bool **pmatch,
Pointer **extra_data, bool **nullFlags, int32 *searchMode)
给定一个被查询的值,返回一个对应的key 的数组。也就是说,query 是可索引操作符
右侧的值,而该操作符左侧是被索引的字段。n 是操作符类中操作符的策略号。通常,
extractQuery 需要参考n 来决定query 的数据类型以及抽取键值的方法。返回key 的个数必
须存放在*nkeys 中。
如果任何key 都可能为NULL,
还要分配包含*nkeys 个布尔元素的数组,
将地址存储到*nullFlags,并且根据需要设置NULL 值。如果所有key 都是非NULL 的,可
以让*nullFlags 保持为NULL(他的初始值)。如果query 不包含任何key,返回值可以为
NULL。
searchMode 是一个输出参数,他允许extractQuery 指定一些关于如何执行搜索的细节。
如果设置*searchMode 为GIN_SEARCH_MODE_DEFAULT(这也是调用函数前此参数的初
始化值),只有那些至少返回一个key 的item 才能被考虑作为候选匹配项。如果设置
*searchMode 为GIN_SEARCH_MODE_INCLUDE_EMPTY,除了包含至少一个匹配key 的
item 之外,根本不包含任何key 的item 也被考虑作为候选匹配项。(这个模式对于实现像
“是否是子集”
这样的操作是有用的)
如果设置*searchMode 为GIN_SEARCH_MODE_ALL,
索引中所有非NULL 的item 都被考虑作为候选匹配项,不管他们是否匹配返回key 中的任
何一个。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1284
pmatch 是一个允许支持部分匹配的输出参数。如果使用此参数,extractQuery 必须分配
有*nkeys 个布尔元素的数组,并把数组地址保存到*pmatch。如果需要部分匹配相应的key,
则数组的每个元素应该设置为TRUE;
如果不需要匹配,
则设置为FALSE。
如果设置*pmatch
为NULL,则假设GIN 不需要部分匹配。在函数调用前这个值被初始化为NULL,因此,
对于不支持部分匹配的操作符类,可以忽略这个参数。
extra_data 是一个允许extractQuery 以consistent 和comparePartial 的方式传递额外数据
的输出参数。如果使用他,extractQuery 必须分配一个包含*nkeys 个Pointer 元素的数组,并
把数组地址保存到*extra_data,然后把他想附加的东西存储到各个独立的指针中。在函数调
用前这个值初始化为NULL,因此,对于不需要附加数据的操作符类,可以忽略这个参数。
如果设置了*extra_data,那么以consistent 方式传递整个数组,使用comparePartial 方式传递
适当的元素。
bool consistent(bool check[], StrategyNumber n, Datum query, int32 nkeys, Pointer
extra_data[], bool *recheck, Datum queryKeys[], bool nullFlags[])
如果被索引项满足StrategyNumber 为n 的查询操作符则返回TRUE。
这个函数并不直接
访问被索引项的值,因为GIN 并没有精确的把项目保存下来,但是需要知道从查询中提取
的哪些键值出现在给定的被索引项中。check 数组的长度是nkeys,这个与query 调用
extractQuery 函数返回的键值的数目相同。
如果索引项包含了相应的查询键,
check 数组中对
应的元素值就是TRUE。比如,如果(check[i] == TRUE),那么意味着extractQuery 的结果数
组的第i 个键出现在索引项中。
考虑可能会用到consistent 方式,
原始的query 也被作为参数
传入进来。与此相同的还有extractQuery 函数返回的queryKeys[]和nullFlags[]。extra_data
是extractQuery 函数返回的额外数据数组,如果没有的话就是NULL。
当extractQuery 在queryKeys[]中返回一个NULL 的键值,如果被索引项包含NULL 键
值,相应的check[]中的元素是TRUE。也就是说,check[]的语义很像IS NOT DISTINCT
FROM。如果需要知道是通常值匹配还是NULL 匹配,consistent 函数可以检查相应的
nullFlags[]元素。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1285
成功执行后,如果堆元组需要针对查询运算符进行重新检查,*recheck 需要设置为
TRUE,如果索引测试已经是精确的了,则设为FALSE。也就是说,FALSE 的返回值确保
堆元组不匹配这个查询;设置*recheck 为FALSE 的TRUE 的返回值确保堆元组匹配这个查
询;设置*recheck 为TRUE 的TRUE 的返回值意味着堆元组可能匹配这个查询,因此需要
通过直接对照原始索引项对查询运算符进行获取和重新检查。
GIN 操作符类可以可选地提供第五个函数。
int comparePartial(Datum partial_key, Datum key, StrategyNumber n, Pointer extra_data)
比较一个部分匹配查询键和一个索引键。
返回一个整型值,
它的符号代表了不同的含义:
小于0 意味着索引键不匹配查询,但是索引扫描应该继续;0 意味着索引键匹配查询;大
于0 指示应该终止索引扫描,
因为不可能再有更多的匹配。
在需要确定何时结束扫描的语义
的情况下,这里提供了生成部分一致查询的操作符的策略号n。同样的,extra_data 是
extractQuery 生成的额外数据数组中的相应元素,
如果没有对应的元素,
则为NULL。NULL
的键永远不会被传入这个函数。
为了支持”部分匹配”查询,一个操作符类必须提供comparePartial 方法,并且当遇到
部分匹配查询时,他的extractQuery 方法必须设置pmatch 参数。详细信息请参考部分匹配
算法。
上面的各种Datum 值的实际数据类型根据操作符类的不同而不同。传入到extractValue
中的项目值总是操作符类的输入类型,所有的键值类型必须是这个类的STORAGE 类型。
传入到extractQuery 和consistent 的query 参数的类型是由策略号识别的类成员操作符的右操
作数的输入类型。他不需要和项目类型相同,只要可以从中抽取出正确类型的键值。