关于表达式和数据提供程序

多数表达式函数在所有数据提供程序中运行方式相同,但是也有一些例外情况。

不支持的函数

创建过滤器或已计算的特性时,可以使用任意函数。这些结果不会保存回数据存储。然而,在 AutoCAD Map 3D 工具集 中,如果使用会返回不受支持的数据类型的函数将值插入“数据表”,会出现异常结果。该操作对数据提供程序无效。例如,SHP 文件不支持 FdoInt16FdoDouble 数据类型。如果试图将此数据类型的值保存回 SHP 数据存储,将出现错误。

ODBC 提供程序

AutoCAD Map 3D 工具集 中,可以先应用表达式,再真正连接到数据存储。例如,您可以使用查询来向地图添加要素。这种情况对 ODBC 提供程序来说可能存在问题,其可能连接到多个数据源。并非所有 ODBC 源都支持表达式函数。因此,在所有情况下均将函数计算为表达式构建过程的一部分,即使是已连接的数据源也可执行此操作。

Soundex

所有关系数据库管理系统 (RDBMS) 原本就支持 Soundex 函数。底层 RDBMS 将计算包含此函数的所有表达式。但是,MySQL 提供程序返回的结果可能与从其他提供程序获得的结果不同。

布尔运算值表示

SDF 和 SHP 提供程序使用术语 TRUE 和 FALSE 表示布尔运算值。RDBMS 提供程序使用 0 和 1 表示布尔运算值。这些差异可能影响标签的显示。例如,以下表达式定义的标签指示了阀门是否打开:

Concat('Valve is open: ', <valve_status_property>)

对于 SDF 和 SHP 数据,标签将显示为“Valve is open: True”。对于 RDBMS 数据,标签将显示为“Valve is open: 1”。

AddMonths 与 MonthsBetween

AddMonths 与 MonthsBetween 函数不考虑日份信息,而 RDBMS 系统却相反。

例如,对于表达式 AddMonths(<date_property>, 88.7),RDBMS 提供程序会将 88.7 个月添加到所提供的日期。在产品中创建的表达式中的函数将仅添加 88 个月。

同样,对于表达式 MonthsBetween(<date_1>, <date_2>),RDBMS 提供程序可能会返回值 77.4。在产品中创建的表达式中的函数会返回 77。

基于缓存的操作与基于 RDBMS 的操作

某些操作(例如,创建已计算特性)是基于缓存的操作,使用表达式构建过程进行计算。其他操作(例如,RDBMS 数据存储中的过滤器)使用底层 RDBMS 系统。

结果会因提供程序的不同而有所差别。例如,如果连接到 MySQL 数据存储,您可以创建两个已计算特性:CP1 和 CP2。CP1 由表达式 Soundex(<property>) 定义,CP2 由表达式 Soundex(<literal>) 定义。在“数据表”中,CP1 和 CP2 的值可能相同。但是,如果使用包含表达式 Soundex(<property>) = Soundex(<literal>) 的过滤器,结果值可能有所不同。在 Map_ProdNameLongAutoCAD Map 3D 工具集中,表达式构建过程将计算表达式。MySQL 数据存储(使用不同函数定义)会计算过滤器。