**openGauss  支持lock tables特性设计说明书**

<table>
    <tr>
        <td>所属SIG组:</td>
        <td>SQL</td>
    </tr>
    <tr>
        <td>落入版本:</td>
        <td>xxx</td>
    </tr>
    <tr>
        <td>设计人员:</td>
        <td>王修强</td>
    </tr>
    <tr>
        <td>日期:</td>
        <td>2023.01.12</td>
    </tr>
</table>

**Copyright © 2022 openGauss Community**

您对&quot;本文档&quot;的复制，使用，修改及分发受知识共享(Creative Commons)署名—相同方式共享4.0国际公共许可协议(以下简称&quot;CC BY-SA 4.0&quot;)的约束。
为了方便用户理解，您可以通过访问<https://creativecommons.org/licenses/by-sa/4.0/>了解CC BY-SA 4.0的概要 (但不是替代)。
CC BY-SA 4.0的完整协议内容您可以访问如下网址获取：<https://creativecommons.org/licenses/by-sa/4.0/legalcode>。

**改版记录**

<table>
    <tr>
        <th>日期</th>
        <th>修订版本</th>
        <th>修订描述</th>
        <th>作者</th>
        <th>审核</th>
    </tr>
    <tr>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
    </tr>
    <tr>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
    </tr>
</table>


**目录**

1.特性概述

1.1范围

1.2特性需求列表

2.需求场景分析

2.1特性需求来源与价值概述

2.2特性场景分析

2.3特性影响分析

2.3.1硬件限制

2.3.2技术限制

2.3.3对License的影响分析

2.3.4对系统性能规格的影响分析

2.3.5对系统可靠性规格的影响分析

2.3.6对系统兼容性的影响分析

2.3.7与其他重大特性的交互性，冲突性的影响分析

2.4同类社区/商用软件实现方案分析

3.特性/功能实现原理(可分解出来多个Use Case)

3.1目标

3.2总体方案

4.Use Case一实现

4.1设计思路

4.2约束条件

4.3详细实现(从用户入口的模块级别或进程级别消息序列图)

4.4子系统间接口(主要覆盖模块接口定义)

4.5子系统详细设计

4.6DFX属性设计

4.6.1性能设计

4.6.2升级与扩容设计

4.6.3异常处理设计

4.6.4资源管理相关设计

4.6.5小型化设计

4.6.6可测性设计

4.6.7安全设计

4.7系统外部接口

4.8自测用例设计

5.Use Case二实现

6.可靠性&amp;可用性设计

6.1冗余设计

6.2故障管理

6.3过载控制设计

6.4升级不中断业务

6.5人因差错设计

6.6故障预测预防设计

7.安全&amp;隐私&amp;韧性设计

7.1Low Level威胁分析及设计

7.1.12层数据流图

7.1.2业务场景及信任边界说明

7.1.3外部交互方分析

7.1.4数据流分析

7.1.5处理过程分析

7.1.6数据存储分析

7.1.7缺陷列表

7.2隐私风险分析与设计

7.2.1隐私风险预分析问卷

7.2.2隐私风险预分析总结

7.2.3个人数据列表

7.2.4XX需求设计

7.2.5YY需求设计

8.特性非功能性质量属性相关设计

8.1可测试性

8.2可服务性

8.3可演进性

8.4开放性

8.5兼容性

8.6可伸缩性/可扩展性

8.7 可维护性

8.8 资料

9.数据结构设计（可选）

10.参考资料清单

**表目录**

表X：特性场景相关性分析

表X：特性需求列表

**图目录**

图X：方案总体实现原理图

图X：样图：处理流程示意图

**List of abbreviations**  **缩略语清单** ：

<table>
    <tr>
        <th>Abbreviations 缩略语</th>
        <th>Full spelling 英文全名</th>
        <th>Chinese explanation 中文解释</th>
    </tr>
    <tr>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
    </tr>
    <tr>
        <td>xxx</td>
        <td>xxx</td>
        <td>xxx</td>
    </tr>
</table>

# 1.特性概述

支持lock tables。

## 1.1范围

1. 支持lock tables tab_name read 语法和功能。
2. 支持lock tables tab_name write 语法和功能。
3. 支持unlock tables语法和功能。
4. 支持FLUSH TABLES WITH READ LOCK语法和功能。
5. 支持外键和触发器。


## 1.2特性需求列表

表X：特性需求列表

<table>
    <tr>
        <th>需求编号</th>
        <th>需求名称</th>
        <th>特性描述</th>
        <th>备注</th>
    </tr>
    <tr>
        <td>1</td>
        <td>支持lock tables tab_name read 语法和功能</td>
        <td></td>
        <td></td>  
    </tr>
    <tr>
        <td>2</td>
        <td>支持lock tables tab_name write 语法和功能</td>
        <td></td>
        <td></td>  
    </tr>
    <tr>
        <td>3</td>
        <td>支持unlock tables语法和功能</td>
        <td></td>
        <td></td>  
    </tr>
    <tr>
        <td>4</td>
        <td>支持FLUSH TABLES WITH READ LOCK语法和功能</td>
        <td></td>
        <td></td>  
    </tr>
    <tr>
        <td>5</td>
        <td>支持外键和触发器</td>
        <td></td>
        <td></td>  
    </tr>
</table>

# 2.需求场景分析

## 2.1特性需求来源与价值概述

MySQL使客户端会话能够显式获取表锁。为了与其他会话写作以访问表，或防止其他会话在期间修改表，会话需要独占访问它们的时间段。
一个会话只能为自己获取或释放锁。一个会话无法获取另一个会话的锁或释放持有的锁。
对于OG，也有类似的功能lock table，但是该功能的语法以及使用方式和MySQL都不一样。所以为了兼容MySQL的这部分功能，需要对该特性进行开发。
参考链接：https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html

## 2.2特性场景分析

1. 支持lock tables tab_name read/write语法和功能。
2. unlock tables语法和功能。
3. 支持FLUSH TABLES WITH READ LOCK语法和功能。
4. 支持外键和触发器


## 2.3特性影响分析

_描述该特性在整个系统中的位置及周边接口。描述该特性有哪些关键约束或特性冲突。_

_与其他需求及特性的交互分析：无_

_平台差异性分析：无_

_兼容性分析：兼容Mysql@host验证和鉴权_

_约束及限制：还需支持存储过程中用户得定义和使用_

### 2.3.1硬件限制

无

### 2.3.2技术限制

_操作系统：无_

_编程语言：无_

### 2.3.3对License的影响分析

不涉及

### 2.3.4对系统性能规格的影响分析

不涉及

### 2.3.5对系统可靠性规格的影响分析

不涉及

### 2.3.6对系统兼容性的影响分析

不影响

### 2.3.7与其他重大特性的交互性，冲突性的影响分析

不涉及

## 2.4同类社区/商用软件实现方案分析



# 3.特性/功能实现原理(可分解出来多个Use Case)

## 3.1目标

见特性场景分析

## 3.2总体方案

1. 支持lock tables tab_name read/write语法和功能。
2. unlock tables语法和功能。
3. 支持FLUSH TABLES WITH READ LOCK语法和功能。
4. 支持外键和触发器。

# 4.Use Case一实现

## 4.1设计思路

1. 在LockStmt结构体中添加变量isLockTables，用于和OG原来lock table语法进行区分。另外在gram.y中支持lock tables tab_name read/write语法，并构建LockStmt节点，利用OG原来的lock table代码逻辑进行实现
![](./sheji1.png)
![](./sheji3.png)
![](./sheji2.png)
2. unlock tables语法和功能
暂未实现
初步设想是功能与end transaction一致
3. 支持FLUSH TABLES WITH READ LOCK语法和功能
暂未实现
4. 支持外键和触发器


## 4.2约束条件


## 4.3详细实现(从用户入口的模块级别或进程级别消息序列图)


## 4.4子系统间接口(主要覆盖模块接口定义)

不涉及

## 4.5子系统详细设计

不涉及

## 4.6DFX属性设计

### 4.6.1性能设计

不涉及

### 4.6.2升级与扩容设计

不涉及

### 4.6.3异常处理设计

不涉及

### 4.6.4资源管理相关设计

不涉及

### 4.6.5小型化设计

不涉及

### 4.6.6可测性设计

1. 测试lock tables ... read/write
2. 测试unlock tables
3. 测试FLUSH TABLES WITH READ LOCK
4. 测试外键和触发器相关

### 4.6.7安全设计

不涉及

## 4.7系统外部接口

不涉及

## 4.8自测用例设计

1. 测试lock tables ... read/write
2. 测试unlock tables
3. 测试FLUSH TABLES WITH READ LOCK
4. 测试外键和触发器相关

# 5.Use Case二实现

不涉及

# 6.可靠性&amp;可用性设计

## 6.1冗余设计

不涉及

## 6.2故障管理

不涉及

## 6.3过载控制设计

不涉及

## 6.4升级不中断业务

不涉及

## 6.5人因差错设计

不涉及

## 6.6故障预测预防设计

不涉及

# 7.安全&amp;隐私&amp;韧性设计

不涉及

## 7.1Low Level威胁分析及设计

### 7.1.12层数据流图

不涉及

### 7.1.2业务场景及信任边界说明

不涉及

### 7.1.3外部交互方分析

不涉及

### 7.1.4数据流分析

不涉及

### 7.1.5处理过程分析

不涉及

### 7.1.6数据存储分析

不涉及

### 7.1.7缺陷列表

不涉及

## 7.2隐私风险分析与设计

_本章目的在于帮助产品在做Low Level威胁分析前，分析当前系统是否需要做隐私风险分析。_

### 7.2.1隐私风险预分析问卷

不涉及

### 7.2.2隐私风险预分析总结

不涉及

### 7.2.3个人数据列表

不涉及

### 7.2.4XX需求设计

不涉及

### 7.2.5YY需求设计


# 8.特性非功能性质量属性相关设计

## 8.1可测试性

不涉及

## 8.2可服务性

不涉及

## 8.3可演进性

不涉及

## 8.4开放性

不涉及

## 8.5兼容性

_重点描述特性是否会影响系统的前向兼容性，即旧功能在升级新版本之后是否可使用，使用行为是否和旧版本保持一致。_

## 8.6可伸缩性/可扩展性

不涉及

## 8.7可维护性

不涉及

## 8.8资料

不涉及

# 9.数据结构设计（可选）

不涉及

# 10.参考资料清单

参考链接：https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html
