返回首页

gbase数据、南大通用产品文档:GBase8c同层参数化路径的Hint

更新日期:2024年09月11日

功能描述
通过predpush_same_level Hint 来指定同层表或物化视图之间参数化路径生成。
语法格式
predpush_same_level(src, dest)
predpush_same_level(src1 src2 ..., dest)
本参数仅在rewrite_rule 中的predpushforce 选项打开时生效。
示例
准备参数和表及索引:

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
580
gsql=# set rewrite_rule = 'predpushforce';
SET
gsql=# create table t1(a int, b int);
CREATE TABLE
gsql=# create table t2(a int, b int);
CREATE TABLE
gsql=# create index idx1 on t1(a);
CREATE INDEX
gsql=# create index idx2 on t2(a);
CREATE INDEX
执行语句查看计划:
gsql=# explain select * from t1, t2 where t1.a = t2.a;
QUERY PLAN
------------------------------------------------------------------
Hash Join
(cost=27.50..56.25 rows=1000 width=16)
Hash Cond: (t1.a = t2.a)
->
Seq Scan on t1
(cost=0.00..15.00 rows=1000 width=8)
->
Hash
(cost=15.00..15.00 rows=1000 width=8)
->
Seq Scan on t2
(cost=0.00..15.00 rows=1000 width=8)
(5 rows)
可以看到t1.a = t2.a 条件过滤在Join 上面,此时可以通过predpush_same_level(t1, t2)将
条件下推至t2 的扫描算子上:
gsql=# explain select /*+predpush_same_level(t1, t2)*/ * from t1, t2 where t1.a = t2.a;
QUERY PLAN
---------------------------------------------------------------------
Nested Loop
(cost=0.00..335.00 rows=1000 width=16)
->
Seq Scan on t1
(cost=0.00..15.00 rows=1000 width=8)
->
Index Scan using idx2 on t2
(cost=0.00..0.31 rows=1 width=8)
Index Cond: (a = t1.a)
(4 rows)
predpush_same_level 可以指定多个src,但是所有的src 必须在同一个条件中。
如果指定的src 和dest 条件不存在,
或该条件不符合参数化路径要求,
则本hint 不生效。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
581

ReleaseConnect() 函数仅在 Windows(TM) 环境中可用。
它释放或终止显式的连接,

清除所有分配了的内存。

重要: 对于与 Version 5.01 GBase 8s ESQL/C 相兼容的 Windows(TM) 应用程序,
GBase 8s ESQL/C 支持 ReleaseConnect() 连接库函数。当您编写新的 Windows(TM) 环境的
GBase 8s ESQL/C 应用程序时,
请使用 SQL DISCONNECT 语句来终止建立了的显式的连
接。

语法
void *ReleaseConnect ( void *CnctHndl )
CnctHndl
由前面的 GetConnect() 调用返回的连接句柄。

用法
ReleaseConnect() 函数映射到简单的 SQL DISCONNECT 语句(没有 ALL、
CURRENT 或 DEFAULT 选项的)。 ReleaseConnect() 调用自身等同于下列 SEL 语句:

EXEC SQL disconnect db_connection;

在此示例中,
db_connection 是 is the name of an existing connection that the GetConnect()
函数已建立的现有连接的名称。 您将此 db_connection 名称作为参数传递至
ReleaseConnect();它是所需要的连接的连接句柄。

例如,下列代码片段使用 ReleaseConnect() 来关闭缺省的数据库服务器上的至
stores7 数据库的显式的连接:
void *cnctHndl;

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



cnctHndl = GetConnect();
EXEC SQL database stores7;


EXEC SQL close database;
cnctHndl = ReleaseConnect( cnctHndl );

对于 GetConnect() 已建立了的每一连接,请调用 ReleaseConnect() 一次。在
ReleaseConnect() 函数终止当前的连接之前,
它关闭任何打开的数据库。
如果在当前连接中
任何事务是打开的,则它失败。

在调用 ReleaseConnect() 之前,以 SQL CLOSE DATABASE 语句显式地关闭数据库
是一种好的编程实践。

重要: 由于 ReleaseConnect() 函数映射至 DISCONNECT 语句,因此它设置
SQLCODE 和 SQLSTATE 状态代码,来指示该连接终止请求成功还是失败。此行为不同
于 Windows(TM) 的 Version 5.01 GBase 8s ESQL/C 中的 ReleaseConnect(),此函数不在其
中设置 SQLCODE 和 SQLSTATE 值。

ReleaseConnect() 函数与 DISCONNECT 语句的不同之处在于,它取得连接名称。
ReleaseConnect() 使用存储在连接句柄中的内部生成的名称;您必须至此此句柄作为
ReleaseConnect() 调用的参数。
仅对于不带有 AS 子句的 CONNECT 语句已建立了的连接,
DISCONNECT 语句才使用内部生成的连接名称;如果该连接有(CONNECT 语句的 AS
子句指定的)用户定义的连接名称,则 DISCONNECT 使用此名称。

返回代码
CnctHndl
如果 ReleaseConnect() 已返回了传递给它的连接句柄相匹配的连接句柄,则对它的调
用成功。

如果在升级过程中发生错误,使用 CONVERSION_GUARD 配置参数来指定 GBase 8s 是停止
还是继续升级到服务器的新版本。
onconfig.std 值
CONVERSION_GUARD 2

0 = 禁用。
1 = 如果发生与捕获恢复点数据相关的错误,则启用一个恢复点作为升级进程的一部分,
并停止升级。
2 = 即使发生与捕获恢复点数据相关的错误,也启用一个恢复点作为升级进程的一部分,
并继续升级。
单位
整数
生效
当数据库服务器重启时。
用法
缺省情况下:
l CONVERSION_GUARD 配置参数为开(设置为 2)。如果升级到服务器新版本失败,
则您可使用 onrestorept 实用程序来恢复数据。
l 服务器在 $GBS_DATA/tmp 目录中存储恢复点数据。
如果 CONVERSION_GUARD 配置参数设置为 1 或 2 且升级到服务器新版本失败,则您可使
用 onrestorept 实用程序来恢复数据。
如果 CONVERSION_GUARD 配置参数设置为 2 且转换防护操作失败(例如,由于服务器没有
足够空间存储恢复点数据)

升级失败,
则您不可使用 onrestorept 实用程序来恢复数据。


GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 53 -

在启动服务器初始化升级到服务器新版本前,您可更改 CONVERSION_GUARD 配置参数的值
或更改在 RESTORE_POINT_DIR 配置参数中指定的目录。升级期间,您不可更改
CONVERSION_GUARD 或 RESTORE_POINT_DIR 值。