Cast 属性来自 `canCoerce`, 该函数对于复杂类型会默默地发生错误
作者: findepi创建于 2026年9月16日更新于 2026年9月16日
标签correctness
| 站点 | 从 canCoerce 推断出的属性 |
防护措施 | 状态 |
|---|---|---|---|
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 TODO: 记录"安全性"...在 Cast 节 承认代理 |
UnwrapCastInComparison.isInjectiveOrderPreservingCastAtValue (UnwrapCastInComparison.java:620-687) |
注入式且保持顺序 | bigint/integer -> double/real 根据值, decimal -> double/real 根据精度, timestamp with time zone 和 time with time zone 目标 - 所有都是顶层 |
生成错误结果 |
TypeCoercion.isInjectiveCoercion (TypeCoercion.java:129-149) |
注入式 | 相同的数字集,顶层;没有 char/varchar 案例 | 生成错误结果 通过 PlanNodeDecorrelator.isSimpleInjectiveCast (PlanNodeDecorrelator.java:526-539) |
DomainTranslator.isOrderPreserving (DomainTranslator.java:575-589) |
保持顺序 | CharType -> VarcharType,顶层 |
含缺陷(见下文) |
RemoveUnsupportedDynamicFilters.isSupportedDynamicFilterExpression (RemoveUnsupportedDynamicFilters.java:305-323) |
范围谓词可转换 | 除了 canCoerce 之外没有其他 |
含缺陷(见下文) |
IrExpressions.mayFail (IrExpressions.java:498-514) |
运行时不能失败 | ResolvedFunction.neverFails() 首先,然后是 canCoerce,然后是 !cast.type().equals(VARCHAR) |
未审计;该方法包含了一个 `TODO: 记录 |
内容来源: trinodb/trino