From 984f42da0c75815f437af18dca6f5fbbe5056688 Mon Sep 17 00:00:00 2001 From: yelingzhi Date: Wed, 19 Mar 2025 01:36:43 +0000 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81gms=5Fassert=E9=AB=98?= =?UTF-8?q?=E7=BA=A7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rt\351\253\230\347\272\247\345\214\205.md" | 33 ++ .../\351\253\230\347\272\247\345\214\205.md" | 1 + .../gms_assert-Extension.md | 9 + .../gms_assert\344\275\277\347\224\250.md" | 340 ++++++++++++++++++ .../gms_assert\345\256\211\350\243\205.md" | 3 + .../gms_assert\346\246\202\350\277\260.md" | 3 + .../gms_assert\351\231\220\345\210\266.md" | 3 + content/docs-lite/zh/menu/index.md | 6 + ...rt\351\253\230\347\272\247\345\214\205.md" | 33 ++ .../\351\253\230\347\272\247\345\214\205.md" | 4 +- .../gms_assert-Extension.md | 9 + .../gms_assert\344\275\277\347\224\250.md" | 340 ++++++++++++++++++ .../gms_assert\345\256\211\350\243\205.md" | 3 + .../gms_assert\346\246\202\350\277\260.md" | 3 + .../gms_assert\351\231\220\345\210\266.md" | 3 + content/zh/menu/index.md | 6 + .../\351\253\230\347\272\247\345\214\205.rst" | 1 + .../gms_assert-Extension.rst | 9 + 18 files changed, 808 insertions(+), 1 deletion(-) create mode 100644 "content/docs-lite/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" create mode 100644 content/docs-lite/zh/docs/ExtensionReference/gms_assert-Extension.md create mode 100644 "content/docs-lite/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" create mode 100644 "content/docs-lite/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" create mode 100644 "content/docs-lite/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" create mode 100644 "content/docs-lite/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" create mode 100644 "content/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" create mode 100644 content/zh/docs/ExtensionReference/gms_assert-Extension.md create mode 100644 "content/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" create mode 100644 "content/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" create mode 100644 "content/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" create mode 100644 "content/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" create mode 100644 sphinx/source/ExtensionReference/gms_assert-Extension.rst diff --git "a/content/docs-lite/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" "b/content/docs-lite/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" new file mode 100644 index 000000000..4753083b4 --- /dev/null +++ "b/content/docs-lite/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" @@ -0,0 +1,33 @@ +# gms_assert高级包 + +## 可获得性 + +本特性自openGauss 7.0.0-RC1版本开始引入。 + +## 特性简介 + +本特性主要用来实现[GMS_ASSERT高级包](../ExtensionReference/gms_assert-Extension.md),用于验证输入值的属性。 + +## 客户价值 + +- gms_assert可用于对输入值进行检验,防止SQL注入等问题。 + +## 特性描述 + +- 通过CREATE Extension命令进行插件创建。 +- gms_assert包可用于验证输入值属性,包括验证字符串的合法性(是否正确使用引号),验证数据库对象名称的合法性。 + +## 特性增强 + +无。 + +## 性能增强 + +无。 +## 特性约束 + +- 仅支持`create extension`命令方式加载插件。 + +## 依赖关系 + +无。 diff --git "a/content/docs-lite/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" "b/content/docs-lite/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" index d036f2bf3..39d2efe20 100644 --- "a/content/docs-lite/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" +++ "b/content/docs-lite/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" @@ -18,3 +18,4 @@ - **[gms_match高级包](gms_match高级包.md)** +- **[gms_assert高级包](gms_assert高级包.md)** diff --git a/content/docs-lite/zh/docs/ExtensionReference/gms_assert-Extension.md b/content/docs-lite/zh/docs/ExtensionReference/gms_assert-Extension.md new file mode 100644 index 000000000..fc8171fd8 --- /dev/null +++ b/content/docs-lite/zh/docs/ExtensionReference/gms_assert-Extension.md @@ -0,0 +1,9 @@ +# gms_assert Extension + +- **[gms_assert概述](gms_assert概述.md)** + +- **[gms_assert限制](gms_assert限制.md)** + +- **[gms_assert安装](gms_assert安装.md)** + +- **[gms_assert使用](gms_assert使用.md)** \ No newline at end of file diff --git "a/content/docs-lite/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" new file mode 100644 index 000000000..4c5dbafee --- /dev/null +++ "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" @@ -0,0 +1,340 @@ +# 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 使用 + +```sql +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使用 + +```sql +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 + +```sql +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 + +```sql +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 + +```sql +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 + +```sql +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 + +```sql +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]; +``` + +>![](public_sys-resources/icon-note.png) **说明:** +> +>如果Extension被其它对象依赖,需要加入CASCADE(级联)关键字,删除所有依赖对象。 \ No newline at end of file diff --git "a/content/docs-lite/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" new file mode 100644 index 000000000..8a196c55e --- /dev/null +++ "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" @@ -0,0 +1,3 @@ +# gms_assert安装 + +openGauss打包编译时默认已经包含了gms_assert,可以在安装完openGauss后,直接通过`create extension gms_assert;`加载插件。 \ No newline at end of file diff --git "a/content/docs-lite/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" new file mode 100644 index 000000000..2996238fc --- /dev/null +++ "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" @@ -0,0 +1,3 @@ +# gms_assert概述 + +gms_assert是一个基于openGauss的插件,为用户提供了验证输入值的功能。目前支持的接口有:GMS_ASSERT.NOOP、GMS_ASSERT.ENQUOTE_LITERAL、GMS_ASSERT.ENQUOTE_NAME、GMS_ASSERT.SIMPLE_SQL_NAME、GMS_ASSERT.QUALIFIED_SQL_NAME、GMS_ASSERT.SCHEMA_NAME、GMS_ASSERT.SQL_OBJECT_NAME。 \ No newline at end of file diff --git "a/content/docs-lite/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" new file mode 100644 index 000000000..8e6dd67f0 --- /dev/null +++ "b/content/docs-lite/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" @@ -0,0 +1,3 @@ +# gms_assert限制 + +- 仅支持Create extension命令方式加载插件。 \ No newline at end of file diff --git a/content/docs-lite/zh/menu/index.md b/content/docs-lite/zh/menu/index.md index 5189840a9..245c0e5b1 100644 --- a/content/docs-lite/zh/menu/index.md +++ b/content/docs-lite/zh/menu/index.md @@ -108,6 +108,7 @@ headless: true - [gms_utility高级包]({{< relref "./docs/AboutopenGauss/gms_utility高级包.md" >}}) - [gms_raw高级包]({{< relref "./docs/AboutopenGauss/gms_raw高级包.md" >}}) - [gms_match高级包]({{< relref "./docs/AboutopenGauss/gms_match高级包.md" >}}) + - [gms_assert高级包]({{< relref "./docs/AboutopenGauss/gms_assert高级包.md" >}}) - [应用开发接口]({{< relref "./docs/AboutopenGauss/应用开发接口.md" >}}) - [支持标准SQL]({{< relref "./docs/AboutopenGauss/支持标准SQL.md" >}}) - [支持标准开发接口]({{< relref "./docs/AboutopenGauss/支持标准开发接口.md" >}}) @@ -833,6 +834,11 @@ headless: true - [gms_match限制]({{< relref "./docs/ExtensionReference/gms_match限制.md" >}}) - [gms_match安装]({{< relref "./docs/ExtensionReference/gms_match安装.md" >}}) - [gms_match使用]({{< relref "./docs/ExtensionReference/gms_match使用.md" >}}) + - [gms_assert Extension]({{< relref "./docs/ExtensionReference/gms_assert-Extension.md" >}}) + - [gms_assert概述]({{< relref "./docs/ExtensionReference/gms_assert概述.md" >}}) + - [gms_assert限制]({{< relref "./docs/ExtensionReference/gms_assert限制.md" >}}) + - [gms_assert安装]({{< relref "./docs/ExtensionReference/gms_assert安装.md" >}}) + - [gms_assert使用]({{< relref "./docs/ExtensionReference/gms_assert使用.md" >}}) - [shark Extension]({{< relref "./docs/ExtensionReference/shark-Extension.md" >}}) - [shark概述]({{< relref "./docs/ExtensionReference/shark概述.md" >}}) - [shark限制]({{< relref "./docs/ExtensionReference/shark限制.md" >}}) diff --git "a/content/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" "b/content/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" new file mode 100644 index 000000000..4753083b4 --- /dev/null +++ "b/content/zh/docs/AboutopenGauss/gms_assert\351\253\230\347\272\247\345\214\205.md" @@ -0,0 +1,33 @@ +# gms_assert高级包 + +## 可获得性 + +本特性自openGauss 7.0.0-RC1版本开始引入。 + +## 特性简介 + +本特性主要用来实现[GMS_ASSERT高级包](../ExtensionReference/gms_assert-Extension.md),用于验证输入值的属性。 + +## 客户价值 + +- gms_assert可用于对输入值进行检验,防止SQL注入等问题。 + +## 特性描述 + +- 通过CREATE Extension命令进行插件创建。 +- gms_assert包可用于验证输入值属性,包括验证字符串的合法性(是否正确使用引号),验证数据库对象名称的合法性。 + +## 特性增强 + +无。 + +## 性能增强 + +无。 +## 特性约束 + +- 仅支持`create extension`命令方式加载插件。 + +## 依赖关系 + +无。 diff --git "a/content/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" "b/content/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" index 740f94095..32381ec7c 100644 --- "a/content/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" +++ "b/content/zh/docs/AboutopenGauss/\351\253\230\347\272\247\345\214\205.md" @@ -18,4 +18,6 @@ - **[gms_raw高级包](gms_raw高级包.md)** -- **[gms_match高级包](gms_match高级包.md)** \ No newline at end of file +- **[gms_match高级包](gms_match高级包.md)** + +- **[gms_assert高级包](gms_assert高级包.md)** diff --git a/content/zh/docs/ExtensionReference/gms_assert-Extension.md b/content/zh/docs/ExtensionReference/gms_assert-Extension.md new file mode 100644 index 000000000..fc8171fd8 --- /dev/null +++ b/content/zh/docs/ExtensionReference/gms_assert-Extension.md @@ -0,0 +1,9 @@ +# gms_assert Extension + +- **[gms_assert概述](gms_assert概述.md)** + +- **[gms_assert限制](gms_assert限制.md)** + +- **[gms_assert安装](gms_assert安装.md)** + +- **[gms_assert使用](gms_assert使用.md)** \ No newline at end of file diff --git "a/content/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" "b/content/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" new file mode 100644 index 000000000..4c5dbafee --- /dev/null +++ "b/content/zh/docs/ExtensionReference/gms_assert\344\275\277\347\224\250.md" @@ -0,0 +1,340 @@ +# 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 使用 + +```sql +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使用 + +```sql +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 + +```sql +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 + +```sql +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 + +```sql +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 + +```sql +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 + +```sql +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]; +``` + +>![](public_sys-resources/icon-note.png) **说明:** +> +>如果Extension被其它对象依赖,需要加入CASCADE(级联)关键字,删除所有依赖对象。 \ No newline at end of file diff --git "a/content/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" "b/content/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" new file mode 100644 index 000000000..8a196c55e --- /dev/null +++ "b/content/zh/docs/ExtensionReference/gms_assert\345\256\211\350\243\205.md" @@ -0,0 +1,3 @@ +# gms_assert安装 + +openGauss打包编译时默认已经包含了gms_assert,可以在安装完openGauss后,直接通过`create extension gms_assert;`加载插件。 \ No newline at end of file diff --git "a/content/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" "b/content/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" new file mode 100644 index 000000000..2996238fc --- /dev/null +++ "b/content/zh/docs/ExtensionReference/gms_assert\346\246\202\350\277\260.md" @@ -0,0 +1,3 @@ +# gms_assert概述 + +gms_assert是一个基于openGauss的插件,为用户提供了验证输入值的功能。目前支持的接口有:GMS_ASSERT.NOOP、GMS_ASSERT.ENQUOTE_LITERAL、GMS_ASSERT.ENQUOTE_NAME、GMS_ASSERT.SIMPLE_SQL_NAME、GMS_ASSERT.QUALIFIED_SQL_NAME、GMS_ASSERT.SCHEMA_NAME、GMS_ASSERT.SQL_OBJECT_NAME。 \ No newline at end of file diff --git "a/content/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" "b/content/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" new file mode 100644 index 000000000..8e6dd67f0 --- /dev/null +++ "b/content/zh/docs/ExtensionReference/gms_assert\351\231\220\345\210\266.md" @@ -0,0 +1,3 @@ +# gms_assert限制 + +- 仅支持Create extension命令方式加载插件。 \ No newline at end of file diff --git a/content/zh/menu/index.md b/content/zh/menu/index.md index 792835122..34af78df1 100644 --- a/content/zh/menu/index.md +++ b/content/zh/menu/index.md @@ -151,6 +151,7 @@ headless: true - [gms_utility高级包]({{< relref "./docs/AboutopenGauss/gms_utility高级包.md" >}}) - [gms_raw高级包]({{< relref "./docs/AboutopenGauss/gms_raw高级包.md" >}}) - [gms_match高级包]({{< relref "./docs/AboutopenGauss/gms_match高级包.md" >}}) + - [gms_assert高级包]({{< relref "./docs/AboutopenGauss/gms_assert高级包.md" >}}) - [应用开发接口]({{< relref "./docs/AboutopenGauss/应用开发接口.md" >}}) - [支持标准SQL]({{< relref "./docs/AboutopenGauss/支持标准SQL.md" >}}) - [支持标准开发接口]({{< relref "./docs/AboutopenGauss/支持标准开发接口.md" >}}) @@ -1233,6 +1234,11 @@ headless: true - [gms_match限制]({{< relref "./docs/ExtensionReference/gms_match限制.md" >}}) - [gms_match安装]({{< relref "./docs/ExtensionReference/gms_match安装.md" >}}) - [gms_match使用]({{< relref "./docs/ExtensionReference/gms_match使用.md" >}}) + - [gms_assert Extension]({{< relref "./docs/ExtensionReference/gms_assert-Extension.md" >}}) + - [gms_assert概述]({{< relref "./docs/ExtensionReference/gms_assert概述.md" >}}) + - [gms_assert限制]({{< relref "./docs/ExtensionReference/gms_assert限制.md" >}}) + - [gms_assert安装]({{< relref "./docs/ExtensionReference/gms_assert安装.md" >}}) + - [gms_assert使用]({{< relref "./docs/ExtensionReference/gms_assert使用.md" >}}) - [SPQPlugin Extension]({{< relref "./docs/ExtensionReference/spqplugin-Extension.md" >}}) - [SPQPlugin概述]({{< relref "./docs/ExtensionReference/spqplugin概述.md" >}}) - [SPQPlugin限制]({{< relref "./docs/ExtensionReference/spqplugin限制.md" >}}) diff --git "a/sphinx/source/AboutopenGauss/\351\253\230\347\272\247\345\214\205.rst" "b/sphinx/source/AboutopenGauss/\351\253\230\347\272\247\345\214\205.rst" index a870c462f..e6a0a84bf 100644 --- "a/sphinx/source/AboutopenGauss/\351\253\230\347\272\247\345\214\205.rst" +++ "b/sphinx/source/AboutopenGauss/\351\253\230\347\272\247\345\214\205.rst" @@ -8,3 +8,4 @@ ../content/zh/docs/AboutopenGauss/gms_i18n高级包 ../content/zh/docs/AboutopenGauss/gms_sql高级包 ../content/zh/docs/AboutopenGauss/gms_tcp高级包 + ../content/zh/docs/AboutopenGauss/gms_assert高级包 diff --git a/sphinx/source/ExtensionReference/gms_assert-Extension.rst b/sphinx/source/ExtensionReference/gms_assert-Extension.rst new file mode 100644 index 000000000..bd69d4e98 --- /dev/null +++ b/sphinx/source/ExtensionReference/gms_assert-Extension.rst @@ -0,0 +1,9 @@ +gms_assert-Extension +====================== + +.. toctree:: + + ../content/zh/docs/ExtensionReference/gms_assert概述 + ../content/zh/docs/ExtensionReference/gms_assert安装 + ../content/zh/docs/ExtensionReference/gms_assert使用 + ../content/zh/docs/ExtensionReference/gms_assert限制 -- Gitee