gms_assert使用

创建Extension

创建gms_assert extension可直接使用create extension gms_assert;命令进行创建。

openGauss=# CREATE Extension gms_assert;

使用Extension

函数声明

  • NOOP(str IN TEXT);

    描述:空操作函数,将输入值直接返回,不做任何验证或处理。适用于不需要验证输入值,快速返回结果的情况。

    参数说明

    • str:指定要验证的文本。

    返回值

    返回str

  • ENQUOTE_LITERAL(str IN TEXT);

    描述:为输入文本str首尾添加单引号(如果str首尾已有单引号则不再额外添加),并验证str中首尾之外的单引号是否成对出现。

    参数说明

    • str:指定要验证并添加单引号的文本。

    返回值

    返回str首尾添加了单引号的结果。如果str中的单引号没有成对出现,则抛出异常。

  • ENQUOTE_NAME(str IN TEXT, capitalize IN BOOLEAN DEFAULT TRUE);

    描述:为输入文本str首尾添加双引号(如果str首尾已有双引号则不再额外添加),并验证str中首尾之外的双引号是否成对出现。

    参数说明

    • str:指定要验证并添加双引号的文本。
    • capitalize:是否在添加双引号前将str转为大写。

    返回值

    返回str首尾添加了双引号的结果。如果str中的双引号没有成对出现,则抛出异常。

  • SIMPLE_SQL_NAME(str IN TEXT);

    描述:验证输入是否是一个简单的SQL名称,即是否首尾有双引号包裹,或以字母或下划线开头,后续仅由数字、字母和部分特殊符号(_$#)构成。str前后可有任意长度的空格。

    参数说明

    • str:指定要验证的文本。

    返回值

    返回str去除前后空格后的结果。如果str不是一个简单的SQL名称,则会抛出异常。

  • QUALIFIED_SQL_NAME(str IN TEXT);

    描述:验证输入是否是一个合格的SQL名称。一个合格SQL名称满足以下语法构成规则,其中simple_name是一个简单的SQL名称。

    qualified_sql_name ::= local_qualified_name ['@' local_qualified_name ['@'simple_name]]
    local_qualified_name ::= simple_name {'.' simple_name}
    

    参数说明

    • str:指定要验证的文本。

    返回值

    返回str。如果str不是一个合格的SQL名称,则会抛出异常。

  • SCHEMA_NAME(str IN TEXT);

    描述:验证输入是否是一个现存模式的名称,如果不是则抛出异常。

    参数说明

    • str:指定要验证的文本。

    返回值

    返回str。如果str不是一个现存模式的名称,则会抛出异常。

  • SQL_OBJECT_NAME(str IN TEXT);

    描述:验证输入是否是一个现存数据库对象的名称。

    参数说明

    • str:指定要验证的文本。

    返回值

    返回str。如果str不是一个现存数据库对象的名称,则抛出异常。

    使用说明

    • 函数对数据库对象名称的判断大小写不敏感。
    • 函数对数据库对象名称的判断受用户本身权限的约束。输入用户无权访问的数据库对象的名称,函数依然会抛出异常。

函数使用

  • noop 使用
openGauss=# SELECT gms_assert.noop(NULL);
 noop
------

(1 row)

openGauss=# SELECT gms_assert.noop(E'O\'hello');
  noop
---------
 O'hello
(1 row)

openGauss=# SELECT gms_assert.noop(4.1);
 noop
------
 4.1
(1 row)

openGauss=# SELECT gms_assert.noop('A line. ');
   noop
----------
 A line.
(1 row)
  • enquote_literal使用
openGauss=# SELECT gms_assert.enquote_literal(NULL);
 enquote_literal
-----------------
 ''
(1 row)

openGauss=# SELECT gms_assert.enquote_literal('AbC');
 enquote_literal
-----------------
 'AbC'
(1 row)

openGauss=# SELECT gms_assert.enquote_literal('A''''bC');
 enquote_literal
-----------------
 'A''bC'
(1 row)

openGauss=# SELECT gms_assert.enquote_literal('''AbC''');
 enquote_literal
-----------------
 'AbC'
(1 row)

openGauss=# SELECT gms_assert.enquote_literal('''AbC');
ERROR:  numeric or value error
CONTEXT:  referenced column: enquote_literal
openGauss=# SELECT gms_assert.enquote_literal('A''bC');
ERROR:  numeric or value error
CONTEXT:  referenced column: enquote_literal
  • ENQUOTE_NAME
openGauss=# SELECT gms_assert.enquote_name(NULL);
 enquote_name
--------------
 ""
(1 row)

openGauss=# SELECT gms_assert.enquote_name('Ab_c');
 enquote_name
--------------
 "AB_C"
(1 row)

openGauss=# SELECT gms_assert.enquote_name('A""b_c');
 enquote_name
--------------
 "A""B_C"
(1 row)

openGauss=# SELECT gms_assert.enquote_name('"Ab _c"');
 enquote_name
--------------
 "Ab _c"
(1 row)

openGauss=# SELECT gms_assert.enquote_name('A"ss"b_c');
ERROR:  invalid SQL name
CONTEXT:  referenced column: enquote_name
openGauss=# SELECT gms_assert.enquote_name('Ab_c', true);
 enquote_name
--------------
 "AB_C"
(1 row)

openGauss=# SELECT gms_assert.enquote_name('Ab_c', false);
 enquote_name
--------------
 "Ab_c"
(1 row)

openGauss=# SELECT gms_assert.enquote_name('"Ab_c"', true);
 enquote_name
--------------
 "Ab_c"
(1 row)
  • SIMPLE_SQL_NAME
opengauss=# SELECT gms_assert.simple_sql_name(NULL);
ERROR:  invalid SQL name
CONTEXT:  referenced column: simple_sql_name
opengauss=# SELECT gms_assert.simple_sql_name(' a_1B$# ');
 simple_sql_name
-----------------
 a_1B$#
(1 row)

opengauss=# SELECT gms_assert.simple_sql_name(' "a_ *B" ');
 simple_sql_name
-----------------
 "a_ *B"
(1 row)

opengauss=# SELECT gms_assert.simple_sql_name('a_""B');
ERROR:  invalid SQL name
CONTEXT:  referenced column: simple_sql_name
  • QUALIFIED_SQL_NAME
opengauss=# SELECT gms_assert.qualified_sql_name(NULL);
ERROR:  invalid qualified SQL name
CONTEXT:  referenced column: qualified_sql_name
opengauss=# SELECT gms_assert.qualified_sql_name('abc');
 qualified_sql_name
--------------------
 abc
(1 row)

opengauss=# SELECT gms_assert.qualified_sql_name('abc@"def*"@GHI');
 qualified_sql_name
--------------------
 abc@"def*"@GHI
(1 row)

opengauss=# SELECT gms_assert.qualified_sql_name('abc@"def*"@GHI.jkl');
ERROR:  invalid qualified SQL name
CONTEXT:  referenced column: qualified_sql_name
  • SCHEMA_NAME
opengauss=# SELECT gms_assert.schema_name(NULL);
ERROR:  invalid schema
CONTEXT:  referenced column: schema_name
opengauss=# CREATE SCHEMA test;
CREATE SCHEMA
opengauss=# SELECT gms_assert.schema_name('test');
 schema_name
-------------
 test
(1 row)

opengauss=# SELECT gms_assert.schema_name('Test');
ERROR:  invalid schema
CONTEXT:  referenced column: schema_name
opengauss=# DROP SCHEMA test;
DROP SCHEMA
opengauss=# SELECT gms_assert.schema_name('test');
ERROR:  invalid schema
CONTEXT:  referenced column: schema_name
  • SQL_OBJECT_NAME
opengauss=# SELECT gms_assert.sql_object_name(NULL);
ERROR:  invalid object name
CONTEXT:  referenced column: sql_object_name
opengauss=# CREATE TABLE tb1(col1 int);
CREATE TABLE
opengauss=# CREATE SYNONYM syn1 FOR tb1;
CREATE SYNONYM
opengauss=# SELECT gms_assert.sql_object_name('tb1');
 sql_object_name
-----------------
 tb1
(1 row)

opengauss=# SELECT gms_assert.sql_object_name('syn1');
 sql_object_name
-----------------
 syn1
(1 row)

opengauss=# SELECT gms_assert.sql_object_name('SYN1');
 sql_object_name
-----------------
 SYN1
(1 row)

opengauss=# DROP TABLE tb1;
DROP TABLE
opengauss=# SELECT gms_assert.sql_object_name('tb1');
ERROR:  invalid object name
CONTEXT:  referenced column: sql_object_name

删除Extension

在openGauss中删除gms_assert Extension的方法如下所示:

openGauss=# DROP extension gms_assert [CASCADE];

说明:

如果Extension被其它对象依赖,需要加入CASCADE(级联)关键字,删除所有依赖对象。

意见反馈
编组 3备份
    openGauss 2025-04-24 08:40:47
    取消