Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
ada3e776
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ada3e776
编写于
7月 03, 2013
作者:
R
Robert Haas
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Additional regression tests for CREATE OPERATOR.
Robins Tharakan, reviewed by Szymon Guz
上级
7cd9b137
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
287 addition
and
0 deletion
+287
-0
src/test/regress/expected/create_operator.out
src/test/regress/expected/create_operator.out
+142
-0
src/test/regress/sql/create_operator.sql
src/test/regress/sql/create_operator.sql
+145
-0
未找到文件。
src/test/regress/expected/create_operator.out
浏览文件 @
ada3e776
...
...
@@ -29,3 +29,145 @@ CREATE OPERATOR #%# (
-- Test comments
COMMENT ON OPERATOR ###### (int4, NONE) IS 'bad right unary';
ERROR: operator does not exist: integer ######
-- Show deprecated message. => is deprecated now
CREATE OPERATOR => (
leftarg = int8, -- right unary
procedure = numeric_fac
);
WARNING: => is deprecated as an operator name
DETAIL: This name may be disallowed altogether in future versions of PostgreSQL.
-- Should fail. CREATE OPERATOR requires USAGE on SCHEMA
BEGIN TRANSACTION;
CREATE ROLE regress_rol_op1;
CREATE SCHEMA schema_op1;
GRANT USAGE ON SCHEMA schema_op1 TO PUBLIC;
REVOKE USAGE ON SCHEMA schema_op1 FROM regress_rol_op1;
SET ROLE regress_rol_op1;
CREATE OPERATOR schema_op1.#*# (
leftarg = int8, -- right unary
procedure = numeric_fac
);
ERROR: permission denied for schema schema_op1
ROLLBACK;
-- Should fail. SETOF type functions not allowed as argument (testing leftarg)
BEGIN TRANSACTION;
CREATE OPERATOR #*# (
leftarg = SETOF int8,
procedure = numeric_fac
);
ERROR: SETOF type not allowed for operator argument
ROLLBACK;
-- Should fail. SETOF type functions not allowed as argument (testing rightarg)
BEGIN TRANSACTION;
CREATE OPERATOR #*# (
rightarg = SETOF int8,
procedure = numeric_fac
);
ERROR: SETOF type not allowed for operator argument
ROLLBACK;
-- Should work. Sample text-book case
BEGIN TRANSACTION;
CREATE OR REPLACE FUNCTION fn_op2(boolean, boolean)
RETURNS boolean AS $$
SELECT NULL::BOOLEAN;
$$ LANGUAGE sql IMMUTABLE;
CREATE OPERATOR === (
LEFTARG = boolean,
RIGHTARG = boolean,
PROCEDURE = fn_op2,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = contsel,
JOIN = contjoinsel,
SORT1, SORT2, LTCMP, GTCMP, HASHES, MERGES
);
ROLLBACK;
-- Should fail. Invalid attribute
CREATE OPERATOR #@%# (
leftarg = int8, -- right unary
procedure = numeric_fac,
invalid_att = int8
);
WARNING: operator attribute "invalid_att" not recognized
-- Should fail. At least leftarg or rightarg should be mandatorily specified
CREATE OPERATOR #@%# (
procedure = numeric_fac
);
ERROR: at least one of leftarg or rightarg must be specified
-- Should fail. Procedure should be mandatorily specified
CREATE OPERATOR #@%# (
leftarg = int8
);
ERROR: operator procedure must be specified
-- Should fail. CREATE OPERATOR requires USAGE on TYPE
BEGIN TRANSACTION;
CREATE ROLE regress_rol_op3;
CREATE TYPE type_op3 AS ENUM ('new', 'open', 'closed');
CREATE FUNCTION fn_op3(type_op3, int8)
RETURNS int8 AS $$
SELECT NULL::int8;
$$ LANGUAGE sql IMMUTABLE;
REVOKE USAGE ON TYPE type_op3 FROM regress_rol_op3;
REVOKE USAGE ON TYPE type_op3 FROM PUBLIC; -- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC
SET ROLE regress_rol_op3;
CREATE OPERATOR #*# (
leftarg = type_op3,
rightarg = int8,
procedure = fn_op3
);
ERROR: permission denied for type type_op3
ROLLBACK;
-- Should fail. CREATE OPERATOR requires USAGE on TYPE (need to check separately for rightarg)
BEGIN TRANSACTION;
CREATE ROLE regress_rol_op4;
CREATE TYPE type_op4 AS ENUM ('new', 'open', 'closed');
CREATE FUNCTION fn_op4(int8, type_op4)
RETURNS int8 AS $$
SELECT NULL::int8;
$$ LANGUAGE sql IMMUTABLE;
REVOKE USAGE ON TYPE type_op4 FROM regress_rol_op4;
REVOKE USAGE ON TYPE type_op4 FROM PUBLIC; -- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC
SET ROLE regress_rol_op4;
CREATE OPERATOR #*# (
leftarg = int8,
rightarg = type_op4,
procedure = fn_op4
);
ERROR: permission denied for type type_op4
ROLLBACK;
-- Should fail. CREATE OPERATOR requires EXECUTE on function
BEGIN TRANSACTION;
CREATE ROLE regress_rol_op5;
CREATE TYPE type_op5 AS ENUM ('new', 'open', 'closed');
CREATE FUNCTION fn_op5(int8, int8)
RETURNS int8 AS $$
SELECT NULL::int8;
$$ LANGUAGE sql IMMUTABLE;
REVOKE EXECUTE ON FUNCTION fn_op5(int8, int8) FROM regress_rol_op5;
REVOKE EXECUTE ON FUNCTION fn_op5(int8, int8) FROM PUBLIC;-- Need to do this so that regress_rol_op3 is not allowed EXECUTE via PUBLIC
SET ROLE regress_rol_op5;
CREATE OPERATOR #*# (
leftarg = int8,
rightarg = int8,
procedure = fn_op5
);
ERROR: permission denied for function fn_op5
ROLLBACK;
-- Should fail. CREATE OPERATOR requires USAGE on return TYPE
BEGIN TRANSACTION;
CREATE ROLE regress_rol_op6;
CREATE TYPE type_op6 AS ENUM ('new', 'open', 'closed');
CREATE FUNCTION fn_op6(int8, int8)
RETURNS type_op6 AS $$
SELECT NULL::type_op6;
$$ LANGUAGE sql IMMUTABLE;
REVOKE USAGE ON TYPE type_op6 FROM regress_rol_op6;
REVOKE USAGE ON TYPE type_op6 FROM PUBLIC; -- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC
SET ROLE regress_rol_op6;
CREATE OPERATOR #*# (
leftarg = int8,
rightarg = int8,
procedure = fn_op6
);
ERROR: permission denied for type type_op6
ROLLBACK;
src/test/regress/sql/create_operator.sql
浏览文件 @
ada3e776
...
...
@@ -34,3 +34,148 @@ CREATE OPERATOR #%# (
-- Test comments
COMMENT
ON
OPERATOR
######
(
int4
,
NONE
)
IS
'bad right unary'
;
-- Show deprecated message. => is deprecated now
CREATE
OPERATOR
=>
(
leftarg
=
int8
,
-- right unary
procedure
=
numeric_fac
);
-- Should fail. CREATE OPERATOR requires USAGE on SCHEMA
BEGIN
TRANSACTION
;
CREATE
ROLE
regress_rol_op1
;
CREATE
SCHEMA
schema_op1
;
GRANT
USAGE
ON
SCHEMA
schema_op1
TO
PUBLIC
;
REVOKE
USAGE
ON
SCHEMA
schema_op1
FROM
regress_rol_op1
;
SET
ROLE
regress_rol_op1
;
CREATE
OPERATOR
schema_op1
.
#*#
(
leftarg
=
int8
,
-- right unary
procedure
=
numeric_fac
);
ROLLBACK
;
-- Should fail. SETOF type functions not allowed as argument (testing leftarg)
BEGIN
TRANSACTION
;
CREATE
OPERATOR
#*#
(
leftarg
=
SETOF
int8
,
procedure
=
numeric_fac
);
ROLLBACK
;
-- Should fail. SETOF type functions not allowed as argument (testing rightarg)
BEGIN
TRANSACTION
;
CREATE
OPERATOR
#*#
(
rightarg
=
SETOF
int8
,
procedure
=
numeric_fac
);
ROLLBACK
;
-- Should work. Sample text-book case
BEGIN
TRANSACTION
;
CREATE
OR
REPLACE
FUNCTION
fn_op2
(
boolean
,
boolean
)
RETURNS
boolean
AS
$$
SELECT
NULL
::
BOOLEAN
;
$$
LANGUAGE
sql
IMMUTABLE
;
CREATE
OPERATOR
===
(
LEFTARG
=
boolean
,
RIGHTARG
=
boolean
,
PROCEDURE
=
fn_op2
,
COMMUTATOR
=
===
,
NEGATOR
=
!==
,
RESTRICT
=
contsel
,
JOIN
=
contjoinsel
,
SORT1
,
SORT2
,
LTCMP
,
GTCMP
,
HASHES
,
MERGES
);
ROLLBACK
;
-- Should fail. Invalid attribute
CREATE
OPERATOR
#@%#
(
leftarg
=
int8
,
-- right unary
procedure
=
numeric_fac
,
invalid_att
=
int8
);
-- Should fail. At least leftarg or rightarg should be mandatorily specified
CREATE
OPERATOR
#@%#
(
procedure
=
numeric_fac
);
-- Should fail. Procedure should be mandatorily specified
CREATE
OPERATOR
#@%#
(
leftarg
=
int8
);
-- Should fail. CREATE OPERATOR requires USAGE on TYPE
BEGIN
TRANSACTION
;
CREATE
ROLE
regress_rol_op3
;
CREATE
TYPE
type_op3
AS
ENUM
(
'new'
,
'open'
,
'closed'
);
CREATE
FUNCTION
fn_op3
(
type_op3
,
int8
)
RETURNS
int8
AS
$$
SELECT
NULL
::
int8
;
$$
LANGUAGE
sql
IMMUTABLE
;
REVOKE
USAGE
ON
TYPE
type_op3
FROM
regress_rol_op3
;
REVOKE
USAGE
ON
TYPE
type_op3
FROM
PUBLIC
;
-- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC
SET
ROLE
regress_rol_op3
;
CREATE
OPERATOR
#*#
(
leftarg
=
type_op3
,
rightarg
=
int8
,
procedure
=
fn_op3
);
ROLLBACK
;
-- Should fail. CREATE OPERATOR requires USAGE on TYPE (need to check separately for rightarg)
BEGIN
TRANSACTION
;
CREATE
ROLE
regress_rol_op4
;
CREATE
TYPE
type_op4
AS
ENUM
(
'new'
,
'open'
,
'closed'
);
CREATE
FUNCTION
fn_op4
(
int8
,
type_op4
)
RETURNS
int8
AS
$$
SELECT
NULL
::
int8
;
$$
LANGUAGE
sql
IMMUTABLE
;
REVOKE
USAGE
ON
TYPE
type_op4
FROM
regress_rol_op4
;
REVOKE
USAGE
ON
TYPE
type_op4
FROM
PUBLIC
;
-- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC
SET
ROLE
regress_rol_op4
;
CREATE
OPERATOR
#*#
(
leftarg
=
int8
,
rightarg
=
type_op4
,
procedure
=
fn_op4
);
ROLLBACK
;
-- Should fail. CREATE OPERATOR requires EXECUTE on function
BEGIN
TRANSACTION
;
CREATE
ROLE
regress_rol_op5
;
CREATE
TYPE
type_op5
AS
ENUM
(
'new'
,
'open'
,
'closed'
);
CREATE
FUNCTION
fn_op5
(
int8
,
int8
)
RETURNS
int8
AS
$$
SELECT
NULL
::
int8
;
$$
LANGUAGE
sql
IMMUTABLE
;
REVOKE
EXECUTE
ON
FUNCTION
fn_op5
(
int8
,
int8
)
FROM
regress_rol_op5
;
REVOKE
EXECUTE
ON
FUNCTION
fn_op5
(
int8
,
int8
)
FROM
PUBLIC
;
-- Need to do this so that regress_rol_op3 is not allowed EXECUTE via PUBLIC
SET
ROLE
regress_rol_op5
;
CREATE
OPERATOR
#*#
(
leftarg
=
int8
,
rightarg
=
int8
,
procedure
=
fn_op5
);
ROLLBACK
;
-- Should fail. CREATE OPERATOR requires USAGE on return TYPE
BEGIN
TRANSACTION
;
CREATE
ROLE
regress_rol_op6
;
CREATE
TYPE
type_op6
AS
ENUM
(
'new'
,
'open'
,
'closed'
);
CREATE
FUNCTION
fn_op6
(
int8
,
int8
)
RETURNS
type_op6
AS
$$
SELECT
NULL
::
type_op6
;
$$
LANGUAGE
sql
IMMUTABLE
;
REVOKE
USAGE
ON
TYPE
type_op6
FROM
regress_rol_op6
;
REVOKE
USAGE
ON
TYPE
type_op6
FROM
PUBLIC
;
-- Need to do this so that regress_rol_op3 is not allowed USAGE via PUBLIC
SET
ROLE
regress_rol_op6
;
CREATE
OPERATOR
#*#
(
leftarg
=
int8
,
rightarg
=
int8
,
procedure
=
fn_op6
);
ROLLBACK
;
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录