Fastdb 之定义cli_autoincrement 自增变量报错

最近在尝试使用fastdb进行开发,c++版本下测试基本ok,由于项目组采用C#开发,所以转用C#开发fastdb,结果发现C#版本各种阉割,如果定义变量自增,则会发生类型定义错误报错,一番追查下来发现是在fastdb
取值时未定义cli_autoincrement造成的。

由于fastdb对cli_autoincrement的处理方式类似于int4,所以对其进行类似int4类型的类型转换

修改代码如下:

protected unsafe virtual Object getValue(Type t) {

switch((CLI.FieldType)((CLI.UnmanagedBuffer*)buffer.ToPointer())->type) {

case CLI.FieldType.cli_bool:

case CLI.FieldType.cli_int1:    return Convert.ChangeType(*(sbyte*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_int2:    return Convert.ChangeType(*(short*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_oid:     return Convert.ChangeType(*(uint*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_autoincrement: return Convert.ChangeType(*(int*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_int4:    return Convert.ChangeType(*(int*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_int8:    return Convert.ChangeType(*(Int64*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_real4:   return Convert.ChangeType(*(Single*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_datetime:

case CLI.FieldType.cli_real8:   return Convert.ChangeType(*(double*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer(), t);

case CLI.FieldType.cli_asciiz:

case CLI.FieldType.cli_pasciiz: return Convert.ChangeType(Marshal.PtrToStringAnsi(((CLI.UnmanagedBuffer*)buffer.ToPointer())->data), t);

case CLI.FieldType.cli_array_of_int1:

if (t == typeof(byte[])) {

int len = Size;

byte[] arr = new byte[len];

byte* src = (byte*)((CLI.UnmanagedBuffer*)buffer.ToPointer())->data.ToPointer();

for (int i = 0; i < len; i++) {

arr[i] = *src++;

}

return arr;

} else {

throw new CliError("getValue: Unsupported conversion type! "+Enum.GetName(typeof(CLI.FieldType), ((CLI.UnmanagedBuffer*)buffer.ToPointer())->type));

}

default:                        throw new CliError("getValue: Unsupported type!"+Enum.GetName(typeof(CLI.FieldType), ((CLI.UnmanagedBuffer*)buffer.ToPointer())->type));

}

}

再次运行,ok,运行通过

个人感觉

fastdb文献资料过少,社区不活跃,欢迎大家积极贡献。

fastdb的查询速度在同类数据库中处于前列。

fastdb的C#版本就是C++版本的封装,而且属于未完成版,进行商用开发请慎用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-30 20:37:44

Fastdb 之定义cli_autoincrement 自增变量报错的相关文章

定时器setTimeout/setInterval中变量报错:not defined 的解决方法

首先声明本人资质尚浅,如有错误,欢迎指正.共同提高. ----------------------------------------------------------------------------------- 首先声明:本文不重点讨论this作用域,而是讨论普通变量在定时器中容易报错的情况: setTimeout的基本用法不再重述, 详见:http://www.w3school.com.cn/htmldom/met_win_settimeout.asp bug: setTimeout

[沫沫金]JS匿名函数this调用变量报错

背景 今天使用Dcloud扫码功能,success成功方法设置data中的scanContext变量,报"undefined"! 思路 一.怀疑是扫码内容不是JSON对象,无法点属性报错.排除,使用JSON.parse转换成功后,依然报"undefined".二.怎么就"undefined"呢,百思不得其解.继续想办法 解决 突然,看到附件选择的方法,人家是设置的this.fileUrl成功的.比对下,什么区别.发现定义的匿名方法,写法不同.我的

Jmeter BeanShell 引用变量报错jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Parse error at line 14, column 181 : Error or number too big for integer

如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默认以String类型对数据进行读取的:范围-2147483648到2147483647,如果超出这个范围(例如2147483648这个数字):jmeter控制台则会抛出如下异常:jmeter.util.BeanShellInterpreter: Error invoking bsh method:

docker环境变量报错

1  TERM environment variable not set. docker exec -it  /bin/bash  进去执行clear,top,命令 出现 TERM environment variable not set. 说是环境变量没设置,source /root/.bash_profile不好使 需要定义TERM变量 TERM=linuxexport TERM  或者export TERM=vt100   环境变量TERM设置为终端机,这里的vt100,vt220等是说明

解决 python用 xlsxwrite 向excel 中写入中文字符串变量 报错

问题:  UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 7: ordinal not in range(128) 分析:在网上查找,原来python的str默认是ascii编码,和unicode编码冲突,所以无法 中文字符串变量写入excel. 解决:在代码中加入下面几行就可以了. import sys reload(sys) sys.setdefaultencoding('utf8')

dao 接口定义了一个方法,报错 The method xxx is undefined for the type xxx;

转自:https://blog.csdn.net/panshoujia/article/details/78203837 持久层(DAO层)下的一个接口 ,eclipse报了一个The method xxx  is undefined for the type xxxx,以为方法的参数类型有误,找来找去也没有发现参数或者参数类型错误,结果重新将整个project  clear一下,重新启动AliTomcat就可以. 原文地址:https://www.cnblogs.com/sharpest/p/

IDEA中thymeleaf变量报错

原文地址:https://www.cnblogs.com/wbyixx/p/12688620.html

全局变量报错:UnboundLocalError: local variable &#39;l&#39; referenced before assignment

总结: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError 在程序中设置的sum属于全局变量,而在函数中没有sum的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,如果在局部作用域没有找到那个变量,那样python就在全局变量中找这个变量,如果找不到抛出异常(NAMEE

redhat7安装jdk1.7报错/home/renqiwei/jdk1.7/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

本地下载解压安装到/home/renqiwei/jdk1.7目录下 root配置环境变量,报错: 原因:是因为64位系统中安装了32位程序 解决方法:yum install glibc.i686 重新安装,javac成功 如果还有如下类系错误 再继续安装包 error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory yum insta