Merge branch '3.0' of https://github.com/taosdata/TDengine into enh/TS-5445-3.0

This commit is contained in:
Hongze Cheng 2025-03-07 16:47:48 +08:00
commit eb5ff7317d
25 changed files with 372 additions and 188 deletions

View File

@ -15,23 +15,23 @@
1. [TDengine 简介](#1-tdengine-简介) 1. [TDengine 简介](#1-tdengine-简介)
1. [文档](#2-文档) 1. [文档](#2-文档)
1. [必备工具](#3-必备工具) 1. [必备工具](#3-必备工具)
- [3.1 Linux预备](#31-linux系统) - [3.1 Linux 预备](#31-Linux系统)
- [3.2 macOS预备](#32-macos系统) - [3.2 macOS 预备](#32-macOS系统)
- [3.3 Windows预备](#33-windows系统) - [3.3 Windows 预备](#3.3-Windows系统)
- [3.4 克隆仓库](#34-克隆仓库) - [3.4 克隆仓库](#34-克隆仓库)
1. [构建](#4-构建) 1. [构建](#4-构建)
- [4.1 Linux系统上构建](#41-linux系统上构建) - [4.1 Linux 系统上构建](#41-Linux系统上构建)
- [4.2 macOS系统上构建](#42-macos系统上构建) - [4.2 macOS 系统上构建](#42-macOS系统上构建)
- [4.3 Windows系统上构建](#43-windows系统上构建) - [4.3 Windows 系统上构建](#43-Windows系统上构建)
1. [打包](#5-打包) 1. [打包](#5-打包)
1. [安装](#6-安装) 1. [安装](#6-安装)
- [6.1 Linux系统上安装](#61-linux系统上安装) - [6.1 Linux 系统上安装](#61-Linux系统上安装)
- [6.2 macOS系统上安装](#62-macos系统上安装) - [6.2 macOS 系统上安装](#62-macOS系统上安装)
- [6.3 Windows系统上安装](#63-windows系统上安装) - [6.3 Windows 系统上安装](#63-Windows系统上安装)
1. [快速运行](#7-快速运行) 1. [快速运行](#7-快速运行)
- [7.1 Linux系统上运行](#71-linux系统上运行) - [7.1 Linux 系统上运行](#71-Linux系统上运行)
- [7.2 macOS系统上运行](#72-macos系统上运行) - [7.2 macOS 系统上运行](#72-macOS系统上运行)
- [7.3 Windows系统上运行](#73-windows系统上运行) - [7.3 Windows 系统上运行](#73-Windows系统上运行)
1. [测试](#8-测试) 1. [测试](#8-测试)
1. [版本发布](#9-版本发布) 1. [版本发布](#9-版本发布)
1. [工作流](#10-工作流) 1. [工作流](#10-工作流)
@ -63,11 +63,11 @@ TDengine 是一款开源、高性能、云原生的时序数据库 (Time-Series
用户可根据需求选择通过 [容器](https://docs.taosdata.com/get-started/docker/)、[安装包](https://docs.taosdata.com/get-started/package/)、[Kubernetes](https://docs.taosdata.com/deployment/k8s/) 来安装或直接使用无需安装部署的 [云服务](https://cloud.taosdata.com/)。本快速指南是面向想自己编译、打包、测试的开发者的。 用户可根据需求选择通过 [容器](https://docs.taosdata.com/get-started/docker/)、[安装包](https://docs.taosdata.com/get-started/package/)、[Kubernetes](https://docs.taosdata.com/deployment/k8s/) 来安装或直接使用无需安装部署的 [云服务](https://cloud.taosdata.com/)。本快速指南是面向想自己编译、打包、测试的开发者的。
如果想编译或测试TDengine连接器请访问以下仓库: [JDBC连接器](https://github.com/taosdata/taos-connector-jdbc), [Go连接器](https://github.com/taosdata/driver-go), [Python连接器](https://github.com/taosdata/taos-connector-python), [Node.js连接器](https://github.com/taosdata/taos-connector-node), [C#连接器](https://github.com/taosdata/taos-connector-dotnet), [Rust连接器](https://github.com/taosdata/taos-connector-rust). 如果想编译或测试 TDengine 连接器,请访问以下仓库:[JDBC连接器](https://github.com/taosdata/taos-connector-jdbc)、[Go连接器](https://github.com/taosdata/driver-go)、[Python连接器](https://github.com/taosdata/taos-connector-python)、[Node.js连接器](https://github.com/taosdata/taos-connector-node)、[C#连接器](https://github.com/taosdata/taos-connector-dotnet)、[Rust连接器](https://github.com/taosdata/taos-connector-rust)。
# 3. 前置条件 # 3. 前置条件
TDengine 目前可以在 Linux、 Windows、macOS 等平台上安装和运行。任何 OS 的应用也可以选择 taosAdapter 的 RESTful 接口连接服务端 taosd。CPU 支持 X64/ARM64后续会支持 MIPS64、Alpha64、ARM32、RISC-V 等 CPU 架构。目前不支持使用交叉编译器构建。 TDengine 目前可以在 Linux、 Windows、macOS 等平台上安装和运行。任何 OS 的应用也可以选择 taosAdapter 的 RESTful 接口连接服务端 taosd。CPU 支持 X64ARM64后续会支持 MIPS64、Alpha64、ARM32、RISC-V 等 CPU 架构。目前不支持使用交叉编译器构建。
如果你想要编译 taosAdapter 或者 taosKeeper需要安装 Go 1.18 及以上版本。 如果你想要编译 taosAdapter 或者 taosKeeper需要安装 Go 1.18 及以上版本。
@ -102,7 +102,7 @@ yum install -y zlib-static xz-devel snappy-devel jansson-devel pkgconfig libatom
<summary>安装 macOS 必备工具</summary> <summary>安装 macOS 必备工具</summary>
根据提示安装依赖工具 [brew](https://brew.sh/). 根据提示安装依赖工具 [brew](https://brew.sh/)
```bash ```bash
brew install argp-standalone gflags pkgconfig brew install argp-standalone gflags pkgconfig
@ -122,7 +122,7 @@ brew install argp-standalone gflags pkgconfig
## 3.4 克隆仓库 ## 3.4 克隆仓库
通过如下命令将TDengine仓库克隆到指定计算机: 通过如下命令将 TDengine 仓库克隆到指定计算机:
```bash ```bash
git clone https://github.com/taosdata/TDengine.git git clone https://github.com/taosdata/TDengine.git
@ -131,9 +131,9 @@ cd TDengine
# 4. 构建 # 4. 构建
TDengine 还提供一组辅助工具软件 taosTools目前它包含 taosBenchmark曾命名为 taosdemo和 taosdump 两个软件。默认 TDengine 编译不包含 taosTools, 您可以在编译 TDengine 时使用`cmake .. -DBUILD_TOOLS=true` 来同时编译 taosTools。 TDengine 还提供一组辅助工具软件 taosTools目前它包含 taosBenchmark曾命名为 taosdemo和 taosdump 两个软件。默认 TDengine 编译不包含 taosTools,您可以在编译 TDengine 时使用 `cmake .. -DBUILD_TOOLS=true` 来同时编译 taosTools。
为了构建TDengine, 请使用 [CMake](https://cmake.org/) 3.13.0 或者更高版本。 为了构建 TDengine请使用 [CMake](https://cmake.org/) 3.13.0 或者更高版本。
## 4.1 Linux 系统上构建 ## 4.1 Linux 系统上构建
@ -141,13 +141,13 @@ TDengine 还提供一组辅助工具软件 taosTools目前它包含 taosBench
<summary>Linux 系统上构建步骤</summary> <summary>Linux 系统上构建步骤</summary>
可以通过以下命令使用脚本 `build.sh` 编译TDengine和taosTools包括taosBenchmark和taosdump: 可以通过以下命令使用脚本 `build.sh` 编译 TDengine 和 taosTools包括 taosBenchmark 和 taosdump。
```bash ```bash
./build.sh ./build.sh
``` ```
也可以通过以下命令进行构建: 也可以通过以下命令进行构建
```bash ```bash
mkdir debug && cd debug mkdir debug && cd debug
@ -157,15 +157,15 @@ make
如果你想要编译 taosAdapter需要添加 `-DBUILD_HTTP=false` 选项。 如果你想要编译 taosAdapter需要添加 `-DBUILD_HTTP=false` 选项。
如果你想要编译 taosKeeper需要添加 `--DBUILD_KEEPER=true` 选项。 如果你想要编译 taosKeeper需要添加 `-DBUILD_KEEPER=true` 选项。
可以使用Jemalloc作为内存分配器而不是使用glibc: 可以使用 Jemalloc 作为内存分配器,而不是使用 glibc
```bash ```bash
cmake .. -DJEMALLOC_ENABLED=ON cmake .. -DJEMALLOC_ENABLED=ON
``` ```
TDengine 构建脚本可以自动检测 x86、x86-64、arm64 平台上主机的体系结构。 TDengine 构建脚本可以自动检测 x86、x86-64、arm64 平台上主机的体系结构。
您也可以通过 CPUTYPE 选项手动指定架构: 您也可以通过 CPUTYPE 选项手动指定架构
```bash ```bash
cmake .. -DCPUTYPE=aarch64 && cmake --build . cmake .. -DCPUTYPE=aarch64 && cmake --build .
@ -208,19 +208,19 @@ cmake .. -G "NMake Makefiles"
nmake nmake
``` ```
如果您使用Visual Studio 2019或2017: 如果您使用 Visual Studio 2019 或 2017
请执行 “cmd.exe” 打开命令窗口执行如下命令。 请执行 “cmd.exe” 打开命令窗口执行如下命令。
执行 vcvarsall.bat 时64 位的 Windows 请指定 “x64”32 位的 Windows 请指定 “x86”。 执行 vcvarsall.bat 时64 位的 Windows 请指定 “x64”32 位的 Windows 请指定 “x86”。
```cmd ```cmd
mkdir debug && cd debug mkdir debug && cd debug
"c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" < x64 | x86 > "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" < x64 | x86 >
cmake .. -G "NMake Makefiles" cmake .. -G "NMake Makefiles"
nmake nmake
``` ```
或者,您可以通过点击Windows开始菜单打开命令窗口->“Visual Studio < 2019 | 2017 >”文件夹->“x64原生工具命令提示符VS < 2019 | 2017 >”或“x86原生工具命令提示符VS < 2019 | 2017 >”取决于你的Windows是什么架构,然后执行命令如下: 或者,您可以通过点击 Windows 开始菜单打开命令窗口 -> `Visual Studio < 2019 | 2017 >` 文件夹 -> `x64 原生工具命令提示符 VS < 2019 | 2017 >``x86 原生工具命令提示符 < 2019 | 2017 >` 取决于你的 Windows 是什么架构,然后执行命令如下:
```cmd ```cmd
mkdir debug && cd debug mkdir debug && cd debug
@ -242,7 +242,7 @@ nmake
<summary>Linux 系统上安装详细步骤</summary> <summary>Linux 系统上安装详细步骤</summary>
构建成功后TDengine可以通过以下命令进行安装: 构建成功后TDengine 可以通过以下命令进行安装:
```bash ```bash
sudo make install sudo make install
@ -257,7 +257,7 @@ sudo make install
<summary>macOS 系统上安装详细步骤</summary> <summary>macOS 系统上安装详细步骤</summary>
构建成功后TDengine可以通过以下命令进行安装: 构建成功后TDengine可以通过以下命令进行安装
```bash ```bash
sudo make install sudo make install
@ -271,7 +271,7 @@ sudo make install
<summary>Windows 系统上安装详细步骤</summary> <summary>Windows 系统上安装详细步骤</summary>
构建成功后TDengine可以通过以下命令进行安装: 构建成功后TDengine 可以通过以下命令进行安装:
```cmd ```cmd
nmake install nmake install
@ -287,12 +287,12 @@ nmake install
<summary>Linux 系统上运行详细步骤</summary> <summary>Linux 系统上运行详细步骤</summary>
在Linux系统上安装TDengine完成后在终端运行如下命令启动服务: 在Linux 系统上安装 TDengine 完成后,在终端运行如下命令启动服务
```bash ```bash
sudo systemctl start taosd sudo systemctl start taosd
``` ```
然后用户可以通过如下命令使用TDengine命令行连接TDengine服务: 然后用户可以通过如下命令使用 TDengine 命令行连接 TDengine 服务:
```bash ```bash
taos taos
@ -300,13 +300,13 @@ taos
如果 TDengine 命令行连接服务器成功,系统将打印欢迎信息和版本信息。否则,将显示连接错误信息。 如果 TDengine 命令行连接服务器成功,系统将打印欢迎信息和版本信息。否则,将显示连接错误信息。
如果您不想将TDengine作为服务运行您可以在当前终端中运行它。例如要在构建完成后快速启动TDengine服务器在终端中运行以下命令我们以Linux为例Windows上的命令为 `taosd.exe` 如果您不想将 TDengine 作为服务运行,您可以在当前终端中运行它。例如,要在构建完成后快速启动 TDengine 服务器,在终端中运行以下命令:(以 Linux 为例Windows 上的命令为 `taosd.exe`
```bash ```bash
./build/bin/taosd -c test/cfg ./build/bin/taosd -c test/cfg
``` ```
在另一个终端上,使用TDengine命令行连接服务器: 在另一个终端上,使用 TDengine 命令行连接服务器:
```bash ```bash
./build/bin/taos -c test/cfg ./build/bin/taos -c test/cfg
@ -322,13 +322,13 @@ taos
<summary>macOS 系统上运行详细步骤</summary> <summary>macOS 系统上运行详细步骤</summary>
在macOS上安装完成后启动服务双击/applications/TDengine启动程序或者在终端中执行如下命令 macOS 上安装完成后启动服务,双击 `/applications/TDengine` 启动程序,或者在终端中执行如下命令:
```bash ```bash
sudo launchctl start com.tdengine.taosd sudo launchctl start com.tdengine.taosd
``` ```
然后在终端中使用如下命令通过TDengine命令行连接TDengine服务器: 然后在终端中使用如下命令通过 TDengine 命令行连接 TDengine 服务器:
```bash ```bash
taos taos
@ -345,13 +345,13 @@ taos
<summary>Windows 系统上运行详细步骤</summary> <summary>Windows 系统上运行详细步骤</summary>
您可以使用以下命令在Windows平台上启动TDengine服务器: 您可以使用以下命令在 Windows 平台上启动 TDengine 服务器:
```cmd ```cmd
.\build\bin\taosd.exe -c test\cfg .\build\bin\taosd.exe -c test\cfg
``` ```
在另一个终端上,使用TDengine命令行连接服务器: 在另一个终端上,使用 TDengine 命令行连接服务器:
```cmd ```cmd
.\build\bin\taos.exe -c test\cfg .\build\bin\taos.exe -c test\cfg
@ -371,7 +371,7 @@ TDengine发布版本的完整列表请参考 [版本列表](https://github.co
# 10. 工作流 # 10. 工作流
TDengine构建检查工作流可以在参考 [Github Action](https://github.com/taosdata/TDengine/actions/workflows/taosd-ci-build.yml), 更多的工作流正在创建中,将很快可用。 TDengine 构建检查工作流可以在参考 [Github Action](https://github.com/taosdata/TDengine/actions/workflows/taosd-ci-build.yml)更多的工作流正在创建中,将很快可用。
# 11. 覆盖率 # 11. 覆盖率
@ -381,7 +381,7 @@ TDengine构建检查工作流可以在参考 [Github Action](https://github.com/
<summary>如何在本地运行测试覆盖率报告?</summary> <summary>如何在本地运行测试覆盖率报告?</summary>
在本地创建测试覆盖率报告HTML格式),请运行以下命令: 在本地创建测试覆盖率报告HTML 格式),请运行以下命令:
```bash ```bash
cd tests cd tests
@ -389,7 +389,7 @@ bash setup-lcov.sh -v 1.16 && ./run_local_coverage.sh -b main -c task
# on main branch and run cases in longtimeruning_cases.task # on main branch and run cases in longtimeruning_cases.task
# for more infomation about options please refer to ./run_local_coverage.sh -h # for more infomation about options please refer to ./run_local_coverage.sh -h
``` ```
> **注意:** > **注意**
> 请注意,-b 和 -i 选项将使用 -DCOVER=true 选项重新编译 TDengine这可能需要花费一些时间。 > 请注意,-b 和 -i 选项将使用 -DCOVER=true 选项重新编译 TDengine这可能需要花费一些时间。
</details> </details>

View File

@ -116,8 +116,6 @@ ELSE()
set(VAR_TSZ "TSZ" CACHE INTERNAL "global variant tsz") set(VAR_TSZ "TSZ" CACHE INTERNAL "global variant tsz")
ENDIF() ENDIF()
# SET(JEMALLOC_ENABLED OFF)
IF(TD_WINDOWS) IF(TD_WINDOWS)
MESSAGE("${Yellow} set compiler flag for Windows! ${ColourReset}") MESSAGE("${Yellow} set compiler flag for Windows! ${ColourReset}")
@ -259,12 +257,15 @@ ELSE()
ENDIF() ENDIF()
IF(TD_LINUX) IF(TD_LINUX_64)
IF(${JEMALLOC_ENABLED}) IF(${JEMALLOC_ENABLED})
MESSAGE(STATUS "JEMALLOC Enabled") MESSAGE(STATUS "JEMALLOC Enabled")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=attributes") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=attributes")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=attributes") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=attributes")
SET(LINK_JEMALLOC "-L${CMAKE_BINARY_DIR}/build/lib -ljemalloc")
ADD_DEFINITIONS(-DTD_JEMALLOC_ENABLED -I${CMAKE_BINARY_DIR}/build/include -L${CMAKE_BINARY_DIR}/build/lib -Wl,-rpath,${CMAKE_BINARY_DIR}/build/lib)
ELSE() ELSE()
MESSAGE(STATUS "JEMALLOC Disabled") MESSAGE(STATUS "JEMALLOC Disabled")
SET(LINK_JEMALLOC "")
ENDIF() ENDIF()
ENDIF() ENDIF()

View File

@ -231,6 +231,7 @@ The effective value of charset is UTF-8.
|udf | |Supported, effective after restart|Whether to start UDF service; 0: do not start, 1: start; default value 0 | |udf | |Supported, effective after restart|Whether to start UDF service; 0: do not start, 1: start; default value 0 |
|udfdResFuncs | |Supported, effective after restart|Internal parameter, for setting UDF result sets| |udfdResFuncs | |Supported, effective after restart|Internal parameter, for setting UDF result sets|
|udfdLdLibPath | |Supported, effective after restart|Internal parameter, indicates the library path for loading UDF| |udfdLdLibPath | |Supported, effective after restart|Internal parameter, indicates the library path for loading UDF|
|enableStrongPassword | After 3.3.5.0 |Supported, effective after restart|The password include at least three types of characters from the following: uppercase letters, lowercase letters, numbers, and special characters, special characters include `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? \| ~ , .`; 0: disable, 1: enable; default value 1 |
### Stream Computing Parameters ### Stream Computing Parameters

View File

@ -127,10 +127,11 @@ Displays created indexes.
## SHOW LOCAL VARIABLES ## SHOW LOCAL VARIABLES
```sql ```sql
SHOW LOCAL VARIABLES; SHOW LOCAL VARIABLES [like pattern];
``` ```
Displays the runtime values of configuration parameters for the current client. Displays the runtime values of configuration parameters for the current client.
You can use the like pattern to filter by name.
## SHOW MNODES ## SHOW MNODES
@ -320,11 +321,11 @@ Displays information about all users in the current system, including user-defin
## SHOW CLUSTER VARIABLES (before version 3.0.1.6 it was SHOW VARIABLES) ## SHOW CLUSTER VARIABLES (before version 3.0.1.6 it was SHOW VARIABLES)
```sql ```sql
SHOW CLUSTER VARIABLES; SHOW CLUSTER VARIABLES [like pattern];
SHOW DNODE dnode_id VARIABLES; SHOW DNODE dnode_id VARIABLES [like pattern];
``` ```
Displays the runtime values of configuration parameters that need to be the same across nodes in the current system, or you can specify a DNODE to view its configuration parameters. Displays the runtime values of configuration parameters that need to be the same across nodes in the current system, or you can specify a DNODE to view its configuration parameters. And you can use the like pattern to filter by name.
## SHOW VGROUPS ## SHOW VGROUPS

View File

@ -1017,6 +1017,13 @@ charset 的有效值是 UTF-8。
- 动态修改:支持通过 SQL 修改,重启生效 - 动态修改:支持通过 SQL 修改,重启生效
- 支持版本v3.1.0.0 引入 - 支持版本v3.1.0.0 引入
#### enableStrongPassword
- 说明:密码要符合一个要求:至少包含大写字母、小写字母、数字、特殊字符中的三类。特殊字符包括 `! @ # $ % ^ & * ( ) - _ + = [ ] { } : ; > < ? | ~ , .`
- 类型整数0不启用1启用
- 默认值1
- 动态修改:支持通过 SQL 修改,重启生效
- 支持版本v3.3.5.0 引入
### 流计算参数 ### 流计算参数
#### disableStream #### disableStream

View File

@ -134,10 +134,10 @@ SHOW INDEXES FROM [db_name.]tbl_name;
## SHOW LOCAL VARIABLES ## SHOW LOCAL VARIABLES
```sql ```sql
SHOW LOCAL VARIABLES; SHOW LOCAL VARIABLES [like pattern];
``` ```
显示当前客户端配置参数的运行值。 显示当前客户端配置参数的运行值,可使用 like pattern 根据 name 进行过滤
## SHOW MNODES ## SHOW MNODES
@ -329,11 +329,12 @@ SHOW USERS;
## SHOW CLUSTER VARIABLES(3.0.1.6 之前为 SHOW VARIABLES) ## SHOW CLUSTER VARIABLES(3.0.1.6 之前为 SHOW VARIABLES)
```sql ```sql
SHOW CLUSTER VARIABLES; SHOW CLUSTER VARIABLES [like pattern];;
SHOW DNODE dnode_id VARIABLES; SHOW DNODE dnode_id VARIABLES [like pattern];;
``` ```
显示当前系统中各节点需要相同的配置参数的运行值,也可以指定 DNODE 来查看其的配置参数。 显示当前系统中各节点需要相同的配置参数的运行值,也可以指定 DNODE 来查看其的配置参数。
可使用 like pattern 根据 name 进行过滤。
## SHOW VGROUPS ## SHOW VGROUPS

View File

@ -414,7 +414,7 @@ typedef struct STUidTagInfo {
#define NOTIFY_EVENT_STR_COLUMN_INDEX 0 #define NOTIFY_EVENT_STR_COLUMN_INDEX 0
int32_t taosGenCrashJsonMsg(int signum, char** pMsg, int64_t clusterId, int64_t startTime); int32_t taosGenCrashJsonMsg(int signum, char** pMsg, int64_t clusterId, int64_t startTime);
int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol); int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol, char* likePattern);
#define TSMA_RES_STB_POSTFIX "_tsma_res_stb_" #define TSMA_RES_STB_POSTFIX "_tsma_res_stb_"
#define MD5_OUTPUT_LEN 32 #define MD5_OUTPUT_LEN 32

View File

@ -2255,11 +2255,14 @@ typedef struct {
} STagData; } STagData;
typedef struct { typedef struct {
int32_t useless; // useless int32_t opType;
uint32_t valLen;
char* val;
} SShowVariablesReq; } SShowVariablesReq;
int32_t tSerializeSShowVariablesReq(void* buf, int32_t bufLen, SShowVariablesReq* pReq); int32_t tSerializeSShowVariablesReq(void* buf, int32_t bufLen, SShowVariablesReq* pReq);
// int32_t tDeserializeSShowVariablesReq(void* buf, int32_t bufLen, SShowVariablesReq* pReq); int32_t tDeserializeSShowVariablesReq(void* buf, int32_t bufLen, SShowVariablesReq* pReq);
void tFreeSShowVariablesReq(SShowVariablesReq* pReq);
typedef struct { typedef struct {
char name[TSDB_CONFIG_OPTION_LEN + 1]; char name[TSDB_CONFIG_OPTION_LEN + 1];

View File

@ -47,6 +47,7 @@ typedef struct SPatternCompareInfo {
int32_t InitRegexCache(); int32_t InitRegexCache();
void DestroyRegexCache(); void DestroyRegexCache();
int32_t rawStrPatternMatch(const char *pattern, const char *str);
int32_t patternMatch(const char *pattern, size_t psize, const char *str, size_t ssize, const SPatternCompareInfo *pInfo); int32_t patternMatch(const char *pattern, size_t psize, const char *str, size_t ssize, const SPatternCompareInfo *pInfo);
int32_t checkRegexPattern(const char *pPattern); int32_t checkRegexPattern(const char *pPattern);
void DestoryThreadLocalRegComp(); void DestoryThreadLocalRegComp();

View File

@ -630,14 +630,14 @@ static int32_t buildShowVariablesRsp(SArray* pVars, SRetrieveTableRsp** pRsp) {
(*pRsp)->numOfRows = htobe64((int64_t)pBlock->info.rows); (*pRsp)->numOfRows = htobe64((int64_t)pBlock->info.rows);
(*pRsp)->numOfCols = htonl(SHOW_VARIABLES_RESULT_COLS); (*pRsp)->numOfCols = htonl(SHOW_VARIABLES_RESULT_COLS);
int32_t len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, dataEncodeBufSize, SHOW_VARIABLES_RESULT_COLS); int32_t len = 0;
if ((*pRsp)->numOfRows > 0) {
len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, dataEncodeBufSize, SHOW_VARIABLES_RESULT_COLS);
if (len < 0) { if (len < 0) {
uError("buildShowVariablesRsp error, len:%d", len); uError("buildShowVariablesRsp error, len:%d", len);
code = terrno; code = terrno;
goto _exit; goto _exit;
} }
blockDataDestroy(pBlock);
SET_PAYLOAD_LEN((*pRsp)->data, len, len); SET_PAYLOAD_LEN((*pRsp)->data, len, len);
int32_t payloadLen = len + PAYLOAD_PREFIX_LEN; int32_t payloadLen = len + PAYLOAD_PREFIX_LEN;
@ -650,6 +650,10 @@ static int32_t buildShowVariablesRsp(SArray* pVars, SRetrieveTableRsp** pRsp) {
code = TSDB_CODE_TSC_INVALID_INPUT; code = TSDB_CODE_TSC_INVALID_INPUT;
goto _exit; goto _exit;
} }
}
blockDataDestroy(pBlock);
pBlock = NULL;
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
_exit: _exit:

View File

@ -627,7 +627,7 @@ int32_t tDeserializeSClientHbBatchRsp(void *buf, int32_t bufLen, SClientHbBatchR
if (!tDecodeIsEnd(&decoder)) { if (!tDecodeIsEnd(&decoder)) {
TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pBatchRsp->enableStrongPass)); TAOS_CHECK_EXIT(tDecodeI8(&decoder, &pBatchRsp->enableStrongPass));
} else { } else {
pBatchRsp->enableStrongPass = 1; pBatchRsp->enableStrongPass = 0;
} }
tEndDecode(&decoder); tEndDecode(&decoder);
@ -5837,7 +5837,11 @@ int32_t tSerializeSShowVariablesReq(void *buf, int32_t bufLen, SShowVariablesReq
tEncoderInit(&encoder, buf, bufLen); tEncoderInit(&encoder, buf, bufLen);
TAOS_CHECK_EXIT(tStartEncode(&encoder)); TAOS_CHECK_EXIT(tStartEncode(&encoder));
TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->useless)); TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->opType));
TAOS_CHECK_EXIT(tEncodeI32(&encoder, pReq->valLen));
if (pReq->valLen > 0) {
TAOS_CHECK_EXIT(tEncodeBinary(&encoder, (const uint8_t *)pReq->val, pReq->valLen));
}
tEndEncode(&encoder); tEndEncode(&encoder);
_exit: _exit:
@ -5850,6 +5854,37 @@ _exit:
return tlen; return tlen;
} }
int32_t tDeserializeSShowVariablesReq(void *buf, int32_t bufLen, SShowVariablesReq *pReq) {
SDecoder decoder = {0};
int32_t code = 0;
int32_t lino;
tDecoderInit(&decoder, buf, bufLen);
TAOS_CHECK_EXIT(tStartDecode(&decoder));
TAOS_CHECK_EXIT(tDecodeI32(&decoder, &pReq->opType));
TAOS_CHECK_EXIT(tDecodeU32(&decoder, &pReq->valLen));
if (pReq->valLen > 0) {
pReq->val = taosMemoryCalloc(1, pReq->valLen + 1);
if (pReq->val == NULL) {
TAOS_CHECK_EXIT(terrno);
}
TAOS_CHECK_EXIT(tDecodeCStrTo(&decoder, pReq->val));
}
tEndDecode(&decoder);
_exit:
tDecoderClear(&decoder);
return code;
}
void tFreeSShowVariablesReq(SShowVariablesReq *pReq) {
if (NULL != pReq && NULL != pReq->val) {
taosMemoryFree(pReq->val);
pReq->val = NULL;
}
}
int32_t tEncodeSVariablesInfo(SEncoder *pEncoder, SVariablesInfo *pInfo) { int32_t tEncodeSVariablesInfo(SEncoder *pEncoder, SVariablesInfo *pInfo) {
TAOS_CHECK_RETURN(tEncodeCStr(pEncoder, pInfo->name)); TAOS_CHECK_RETURN(tEncodeCStr(pEncoder, pInfo->name));
TAOS_CHECK_RETURN(tEncodeCStr(pEncoder, pInfo->value)); TAOS_CHECK_RETURN(tEncodeCStr(pEncoder, pInfo->value));

View File

@ -18,6 +18,7 @@
#include "tglobal.h" #include "tglobal.h"
#include "tjson.h" #include "tjson.h"
#include "tmisce.h" #include "tmisce.h"
#include "tcompare.h"
int32_t taosGetFqdnPortFromEp(const char* ep, SEp* pEp) { int32_t taosGetFqdnPortFromEp(const char* ep, SEp* pEp) {
pEp->port = 0; pEp->port = 0;
@ -257,7 +258,7 @@ _exit:
TAOS_RETURN(code); TAOS_RETURN(code);
} }
int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) { int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol, char* likePattern) {
int32_t code = 0; int32_t code = 0;
SConfig* pConf = taosGetCfg(); SConfig* pConf = taosGetCfg();
if (pConf == NULL) { if (pConf == NULL) {
@ -291,6 +292,9 @@ int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) {
// GRANT_CFG_SKIP; // GRANT_CFG_SKIP;
char name[TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE] = {0}; char name[TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE] = {0};
if (likePattern && rawStrPatternMatch(pItem->name, likePattern) != TSDB_PATTERN_MATCH) {
continue;
}
STR_WITH_MAXSIZE_TO_VARSTR(name, pItem->name, TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE); STR_WITH_MAXSIZE_TO_VARSTR(name, pItem->name, TSDB_CONFIG_OPTION_LEN + VARSTR_HEADER_SIZE);
SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, col++); SColumnInfoData* pColInfo = taosArrayGet(pBlock->pDataBlock, col++);

View File

@ -14,24 +14,12 @@ target_include_directories(
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/node_mgmt/inc" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/node_mgmt/inc"
) )
IF(TD_ENTERPRISE) if(TD_ENTERPRISE)
IF(${BUILD_WITH_S3}) if(${BUILD_WITH_S3})
add_definitions(-DUSE_S3) add_definitions(-DUSE_S3)
ELSEIF(${BUILD_WITH_COS}) elseif(${BUILD_WITH_COS})
add_definitions(-DUSE_COS) add_definitions(-DUSE_COS)
ENDIF() endif()
ENDIF() endif()
IF(TD_LINUX_64 AND JEMALLOC_ENABLED)
ADD_DEFINITIONS(-DTD_JEMALLOC_ENABLED -I${CMAKE_BINARY_DIR}/build/include -L${CMAKE_BINARY_DIR}/build/lib -Wl,-rpath,${CMAKE_BINARY_DIR}/build/lib -ljemalloc)
SET(LINK_JEMALLOC "-L${CMAKE_BINARY_DIR}/build/lib -ljemalloc")
ELSE()
SET(LINK_JEMALLOC "")
ENDIF()
IF(TD_LINUX_64 AND JEMALLOC_ENABLED)
ADD_DEPENDENCIES(taosd jemalloc)
target_link_libraries(taosd dnode crypt ${LINK_JEMALLOC})
ELSE()
target_link_libraries(taosd dnode crypt) target_link_libraries(taosd dnode crypt)
ENDIF()

View File

@ -690,7 +690,7 @@ _exit:
} }
int32_t dmAppendVariablesToBlock(SSDataBlock *pBlock, int32_t dnodeId) { int32_t dmAppendVariablesToBlock(SSDataBlock *pBlock, int32_t dnodeId) {
int32_t code = dumpConfToDataBlock(pBlock, 1); int32_t code = dumpConfToDataBlock(pBlock, 1, NULL);
if (code != 0) { if (code != 0) {
return code; return code;
} }

View File

@ -23,6 +23,7 @@
#include "mndTrans.h" #include "mndTrans.h"
#include "mndUser.h" #include "mndUser.h"
#include "tutil.h" #include "tutil.h"
#include "tcompare.h"
#define CFG_VER_NUMBER 1 #define CFG_VER_NUMBER 1
#define CFG_RESERVE_SIZE 63 #define CFG_RESERVE_SIZE 63
@ -809,7 +810,7 @@ static void cfgObjArrayCleanUp(SArray *array) {
taosArrayDestroy(array); taosArrayDestroy(array);
} }
SArray *initVariablesFromItems(SArray *pItems) { static SArray *initVariablesFromItems(SArray *pItems, const char* likePattern) {
if (pItems == NULL) { if (pItems == NULL) {
return NULL; return NULL;
} }
@ -825,6 +826,9 @@ SArray *initVariablesFromItems(SArray *pItems) {
SConfigItem *pItem = taosArrayGet(pItems, i); SConfigItem *pItem = taosArrayGet(pItems, i);
SVariablesInfo info = {0}; SVariablesInfo info = {0};
tstrncpy(info.name, pItem->name, sizeof(info.name)); tstrncpy(info.name, pItem->name, sizeof(info.name));
if (likePattern != NULL && rawStrPatternMatch(pItem->name, likePattern) != TSDB_PATTERN_MATCH) {
continue;
}
// init info value // init info value
switch (pItem->dtype) { switch (pItem->dtype) {
@ -891,15 +895,23 @@ SArray *initVariablesFromItems(SArray *pItems) {
static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq) { static int32_t mndProcessShowVariablesReq(SRpcMsg *pReq) {
SShowVariablesRsp rsp = {0}; SShowVariablesRsp rsp = {0};
int32_t code = -1; int32_t code = TSDB_CODE_SUCCESS;
SShowVariablesReq req = {0};
SArray *array = NULL;
code = tDeserializeSShowVariablesReq(pReq->pCont, pReq->contLen, &req);
if (code != 0) {
mError("failed to deserialize config req, since %s", terrstr());
goto _OVER;
}
if ((code = mndCheckOperPrivilege(pReq->info.node, pReq->info.conn.user, MND_OPER_SHOW_VARIABLES)) != 0) { if ((code = mndCheckOperPrivilege(pReq->info.node, pReq->info.conn.user, MND_OPER_SHOW_VARIABLES)) != 0) {
goto _OVER; goto _OVER;
} }
SVariablesInfo info = {0}; SVariablesInfo info = {0};
char *likePattern = req.opType == OP_TYPE_LIKE ? req.val : NULL;
rsp.variables = initVariablesFromItems(taosGetGlobalCfg(tsCfg)); rsp.variables = initVariablesFromItems(taosGetGlobalCfg(tsCfg), likePattern);
if (rsp.variables == NULL) { if (rsp.variables == NULL) {
code = terrno; code = terrno;
goto _OVER; goto _OVER;
@ -926,7 +938,7 @@ _OVER:
if (code != 0) { if (code != 0) {
mError("failed to get show variables info since %s", tstrerror(code)); mError("failed to get show variables info since %s", tstrerror(code));
} }
tFreeSShowVariablesReq(&req);
tFreeSShowVariablesRsp(&rsp); tFreeSShowVariablesRsp(&rsp);
TAOS_RETURN(code); TAOS_RETURN(code);
} }

View File

@ -20,6 +20,7 @@
#include "systable.h" #include "systable.h"
#include "taosdef.h" #include "taosdef.h"
#include "tdatablock.h" #include "tdatablock.h"
#include "tdataformat.h"
#include "tglobal.h" #include "tglobal.h"
#include "tgrant.h" #include "tgrant.h"
@ -53,13 +54,16 @@ static int32_t buildRetrieveTableRsp(SSDataBlock* pBlock, int32_t numOfCols, SRe
(*pRsp)->numOfRows = htobe64((int64_t)pBlock->info.rows); (*pRsp)->numOfRows = htobe64((int64_t)pBlock->info.rows);
(*pRsp)->numOfCols = htonl(numOfCols); (*pRsp)->numOfCols = htonl(numOfCols);
int32_t len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, dataEncodeBufSize, numOfCols); int32_t len = 0;
if (pBlock->info.rows > 0) {
len = blockEncode(pBlock, (*pRsp)->data + PAYLOAD_PREFIX_LEN, dataEncodeBufSize, numOfCols);
if (len < 0) { if (len < 0) {
taosMemoryFree(*pRsp); taosMemoryFree(*pRsp);
*pRsp = NULL; *pRsp = NULL;
return terrno; return terrno;
} }
SET_PAYLOAD_LEN((*pRsp)->data, len, len); SET_PAYLOAD_LEN((*pRsp)->data, len, len);
}
int32_t payloadLen = len + PAYLOAD_PREFIX_LEN; int32_t payloadLen = len + PAYLOAD_PREFIX_LEN;
(*pRsp)->payloadLen = htonl(payloadLen); (*pRsp)->payloadLen = htonl(payloadLen);
@ -985,11 +989,17 @@ _exit:
return terrno; return terrno;
} }
static int32_t execShowLocalVariables(SRetrieveTableRsp** pRsp) { static int32_t execShowLocalVariables(SShowStmt* pStmt, SRetrieveTableRsp** pRsp) {
SSDataBlock* pBlock = NULL; SSDataBlock* pBlock = NULL;
char* likePattern = NULL;
int32_t code = buildLocalVariablesResultDataBlock(&pBlock); int32_t code = buildLocalVariablesResultDataBlock(&pBlock);
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
code = dumpConfToDataBlock(pBlock, 0); if (pStmt->tableCondType == OP_TYPE_LIKE) {
likePattern = ((SValueNode*)pStmt->pTbName)->literal;
}
}
if (TSDB_CODE_SUCCESS == code) {
code = dumpConfToDataBlock(pBlock, 0, likePattern);
} }
if (TSDB_CODE_SUCCESS == code) { if (TSDB_CODE_SUCCESS == code) {
code = buildRetrieveTableRsp(pBlock, SHOW_LOCAL_VARIABLES_RESULT_COLS, pRsp); code = buildRetrieveTableRsp(pBlock, SHOW_LOCAL_VARIABLES_RESULT_COLS, pRsp);
@ -1091,7 +1101,7 @@ int32_t qExecCommand(int64_t* pConnId, bool sysInfoUser, SNode* pStmt, SRetrieve
case QUERY_NODE_ALTER_LOCAL_STMT: case QUERY_NODE_ALTER_LOCAL_STMT:
return execAlterLocal((SAlterLocalStmt*)pStmt); return execAlterLocal((SAlterLocalStmt*)pStmt);
case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT: case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
return execShowLocalVariables(pRsp); return execShowLocalVariables((SShowStmt*)pStmt, pRsp);
case QUERY_NODE_SELECT_STMT: case QUERY_NODE_SELECT_STMT:
return execSelectWithoutFrom((SSelectStmt*)pStmt, pRsp); return execSelectWithoutFrom((SSelectStmt*)pStmt, pRsp);
default: default:

View File

@ -241,6 +241,7 @@ SNode* createUseDatabaseStmt(SAstCreateContext* pCxt, SToken* pDbName);
SNode* setShowKind(SAstCreateContext* pCxt, SNode* pStmt, EShowKind showKind); SNode* setShowKind(SAstCreateContext* pCxt, SNode* pStmt, EShowKind showKind);
SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type); SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type);
SNode* createShowStmtWithFull(SAstCreateContext* pCxt, ENodeType type); SNode* createShowStmtWithFull(SAstCreateContext* pCxt, ENodeType type);
SNode* createShowStmtWithLike(SAstCreateContext* pCxt, ENodeType type, SNode* pLikePattern);
SNode* createShowStmtWithCond(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, SNode* pTbName, SNode* createShowStmtWithCond(SAstCreateContext* pCxt, ENodeType type, SNode* pDbName, SNode* pTbName,
EOperatorType tableCondType); EOperatorType tableCondType);
SNode* createShowTablesStmt(SAstCreateContext* pCxt, SShowTablesOption option, SNode* pTbName, SNode* createShowTablesStmt(SAstCreateContext* pCxt, SShowTablesOption option, SNode* pTbName,

View File

@ -602,9 +602,9 @@ cmd ::= SHOW ENCRYPTIONS.
cmd ::= SHOW QUERIES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); } cmd ::= SHOW QUERIES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
cmd ::= SHOW SCORES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); } cmd ::= SHOW SCORES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
cmd ::= SHOW TOPICS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); } cmd ::= SHOW TOPICS. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
cmd ::= SHOW VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); } cmd ::= SHOW VARIABLES like_pattern_opt(B). { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
cmd ::= SHOW CLUSTER VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); } cmd ::= SHOW CLUSTER VARIABLES like_pattern_opt(B). { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
cmd ::= SHOW LOCAL VARIABLES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT); } cmd ::= SHOW LOCAL VARIABLES like_pattern_opt(B). { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT, B); }
cmd ::= SHOW DNODE NK_INTEGER(A) VARIABLES like_pattern_opt(B). { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), B); } cmd ::= SHOW DNODE NK_INTEGER(A) VARIABLES like_pattern_opt(B). { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), B); }
cmd ::= SHOW BNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); } cmd ::= SHOW BNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
cmd ::= SHOW SNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); } cmd ::= SHOW SNODES. { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }

View File

@ -2804,6 +2804,22 @@ static bool needDbShowStmt(ENodeType type) {
QUERY_NODE_SHOW_VIEWS_STMT == type || QUERY_NODE_SHOW_TSMAS_STMT == type || QUERY_NODE_SHOW_USAGE_STMT == type; QUERY_NODE_SHOW_VIEWS_STMT == type || QUERY_NODE_SHOW_TSMAS_STMT == type || QUERY_NODE_SHOW_USAGE_STMT == type;
} }
SNode* createShowStmtWithLike(SAstCreateContext* pCxt, ENodeType type, SNode* pLikePattern) {
CHECK_PARSER_STATUS(pCxt);
SShowStmt* pStmt = NULL;
pCxt->errCode = nodesMakeNode(type, (SNode**)&pStmt);
CHECK_MAKE_NODE(pStmt);
pStmt->withFull = false;
pStmt->pTbName = pLikePattern;
if (pLikePattern) {
pStmt->tableCondType = OP_TYPE_LIKE;
}
return (SNode*)pStmt;
_err:
nodesDestroyNode(pLikePattern);
return NULL;
}
SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type) { SNode* createShowStmt(SAstCreateContext* pCxt, ENodeType type) {
CHECK_PARSER_STATUS(pCxt); CHECK_PARSER_STATUS(pCxt);
SShowStmt* pStmt = NULL; SShowStmt* pStmt = NULL;

View File

@ -13325,7 +13325,16 @@ static int32_t translateSplitVgroup(STranslateContext* pCxt, SSplitVgroupStmt* p
static int32_t translateShowVariables(STranslateContext* pCxt, SShowStmt* pStmt) { static int32_t translateShowVariables(STranslateContext* pCxt, SShowStmt* pStmt) {
SShowVariablesReq req = {0}; SShowVariablesReq req = {0};
return buildCmdMsg(pCxt, TDMT_MND_SHOW_VARIABLES, (FSerializeFunc)tSerializeSShowVariablesReq, &req); req.opType = pStmt->tableCondType;
if (req.opType == OP_TYPE_LIKE && pStmt->pTbName) {
req.valLen = strlen(((SValueNode*)pStmt->pTbName)->literal);
if (req.valLen > 0) {
req.val = taosStrdupi(((SValueNode*)pStmt->pTbName)->literal);
}
}
int32_t code = buildCmdMsg(pCxt, TDMT_MND_SHOW_VARIABLES, (FSerializeFunc)tSerializeSShowVariablesReq, &req);
tFreeSShowVariablesReq(&req);
return code;
} }
static int32_t translateShowCreateDatabase(STranslateContext* pCxt, SShowCreateDatabaseStmt* pStmt) { static int32_t translateShowCreateDatabase(STranslateContext* pCxt, SShowCreateDatabaseStmt* pStmt) {

View File

@ -1,4 +1,5 @@
aux_source_directory(src OS_SRC) aux_source_directory(src OS_SRC)
if(NOT ${TD_WINDOWS}) if(NOT ${TD_WINDOWS})
add_definitions(-DTHREAD_SAFE=1) add_definitions(-DTHREAD_SAFE=1)
aux_source_directory(src/timezone OS_TZ) aux_source_directory(src/timezone OS_TZ)
@ -6,6 +7,7 @@ if(NOT ${TD_WINDOWS})
else() else()
add_library(os STATIC ${OS_SRC}) add_library(os STATIC ${OS_SRC})
endif(NOT ${TD_WINDOWS}) endif(NOT ${TD_WINDOWS})
target_include_directories( target_include_directories(
os os
PUBLIC "${TD_SOURCE_DIR}/include/os" PUBLIC "${TD_SOURCE_DIR}/include/os"
@ -16,21 +18,26 @@ target_include_directories(
PUBLIC "${TD_SOURCE_DIR}/contrib/msvcregex" PUBLIC "${TD_SOURCE_DIR}/contrib/msvcregex"
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc" PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
) )
# iconv # iconv
if(TD_WINDOWS) if(TD_WINDOWS)
find_path(IconvApiIncludes iconv.h "${TD_SOURCE_DIR}/contrib/iconv") find_path(IconvApiIncludes iconv.h "${TD_SOURCE_DIR}/contrib/iconv")
else() else()
find_path(IconvApiIncludes iconv.h PATHS) find_path(IconvApiIncludes iconv.h PATHS)
endif(TD_WINDOWS) endif(TD_WINDOWS)
if(NOT IconvApiIncludes) if(NOT IconvApiIncludes)
add_definitions(-DDISALLOW_NCHAR_WITHOUT_ICONV) add_definitions(-DDISALLOW_NCHAR_WITHOUT_ICONV)
endif() endif()
if(USE_TD_MEMORY) if(USE_TD_MEMORY)
add_definitions(-DUSE_TD_MEMORY) add_definitions(-DUSE_TD_MEMORY)
endif() endif()
if(BUILD_WITH_RAND_ERR) if(BUILD_WITH_RAND_ERR)
add_definitions(-DBUILD_WITH_RAND_ERR) add_definitions(-DBUILD_WITH_RAND_ERR)
endif() endif()
if(BUILD_ADDR2LINE) if(BUILD_ADDR2LINE)
if(NOT TD_WINDOWS) if(NOT TD_WINDOWS)
target_include_directories( target_include_directories(
@ -41,16 +48,21 @@ if(BUILD_ADDR2LINE)
os PUBLIC addr2line dl z os PUBLIC addr2line dl z
) )
endif() endif()
add_definitions(-DUSE_ADDR2LINE) add_definitions(-DUSE_ADDR2LINE)
endif() endif()
if(CHECK_STR2INT_ERROR) if(CHECK_STR2INT_ERROR)
add_definitions(-DTD_CHECK_STR_TO_INT_ERROR) add_definitions(-DTD_CHECK_STR_TO_INT_ERROR)
endif() endif()
target_link_libraries( target_link_libraries(
os os
PUBLIC pthread PUBLIC pthread
PUBLIC zlibstatic PUBLIC zlibstatic
PUBLIC ${LINK_JEMALLOC}
) )
if(TD_WINDOWS) if(TD_WINDOWS)
target_link_libraries( target_link_libraries(
os PUBLIC ws2_32 iconv msvcregex wcwidth winmm crashdump dbghelp version KtmW32 os PUBLIC ws2_32 iconv msvcregex wcwidth winmm crashdump dbghelp version KtmW32
@ -73,15 +85,14 @@ else()
) )
endif() endif()
IF (JEMALLOC_ENABLED) if(JEMALLOC_ENABLED)
target_link_libraries(os PUBLIC -L${CMAKE_BINARY_DIR}/build/lib -ljemalloc) add_dependencies(os jemalloc)
ENDIF () endif()
# if(NOT ${TD_WINDOWS}) # if(NOT ${TD_WINDOWS})
# find_library(tz libtz.a "${TD_SOURCE_DIR}/contrib/tz") # find_library(tz libtz.a "${TD_SOURCE_DIR}/contrib/tz")
# target_link_libraries(os PUBLIC ${tz}) # target_link_libraries(os PUBLIC ${tz})
# endif(NOT ${TD_WINDOWS}) # endif(NOT ${TD_WINDOWS})
if(${BUILD_TEST}) if(${BUILD_TEST})
add_subdirectory(test) add_subdirectory(test)
endif(${BUILD_TEST}) endif(${BUILD_TEST})

View File

@ -1123,6 +1123,19 @@ int32_t patternMatch(const char *pattern, size_t psize, const char *str, size_t
return (j >= ssize || str[j] == 0) ? TSDB_PATTERN_MATCH : TSDB_PATTERN_NOMATCH; return (j >= ssize || str[j] == 0) ? TSDB_PATTERN_MATCH : TSDB_PATTERN_NOMATCH;
} }
int32_t rawStrPatternMatch(const char *str, const char *pattern) {
SPatternCompareInfo pInfo = PATTERN_COMPARE_INFO_INITIALIZER;
size_t pLen = strlen(pattern);
size_t sz = strlen(str);
if (pLen > TSDB_MAX_FIELD_LEN) {
return 1;
}
int32_t ret = patternMatch(pattern, pLen, str, sz, &pInfo);
return (ret == TSDB_PATTERN_MATCH) ? 0 : 1;
}
int32_t wcsPatternMatch(const TdUcs4 *pattern, size_t psize, const TdUcs4 *str, size_t ssize, int32_t wcsPatternMatch(const TdUcs4 *pattern, size_t psize, const TdUcs4 *str, size_t ssize,
const SPatternCompareInfo *pInfo) { const SPatternCompareInfo *pInfo) {
TdUcs4 c, c1; TdUcs4 c, c1;

View File

@ -705,6 +705,17 @@ class TDSql:
return True return True
self.print_error_frame_info(elm, expect_elm) self.print_error_frame_info(elm, expect_elm)
def checkGreater(self, elm, expect_elm):
if elm > expect_elm:
tdLog.info("sql:%s, elm:%s > expect_elm:%s" % (self.sql, elm, expect_elm))
return True
else:
caller = inspect.getframeinfo(inspect.stack()[1][0])
args = (caller.filename, caller.lineno, self.sql, elm, expect_elm)
tdLog.info("%s(%d) failed: sql:%s, elm:%s <= expect_elm:%s" % args)
self.print_error_frame_info(elm, expect_elm)
return False
def checkNotEqual(self, elm, expect_elm): def checkNotEqual(self, elm, expect_elm):
if elm != expect_elm: if elm != expect_elm:
tdLog.info("sql:%s, elm:%s != expect_elm:%s" % (self.sql, elm, expect_elm)) tdLog.info("sql:%s, elm:%s != expect_elm:%s" % (self.sql, elm, expect_elm))

View File

@ -46,8 +46,9 @@ class TDTestCase:
tdSql.checkRows(2) tdSql.checkRows(2)
def case2(self): def case2(self):
tdSql.query("show variables") tdSql.query("show variables")
tdSql.checkRows(88) tdSql.checkGreater(tdSql.getRows(), 80)
for i in range(self.replicaVar): for i in range(self.replicaVar):
tdSql.query("show dnode %d variables like 'debugFlag'" % (i + 1)) tdSql.query("show dnode %d variables like 'debugFlag'" % (i + 1))
@ -86,6 +87,58 @@ class TDTestCase:
tdSql.checkData(0, 1, 's3UploadDelaySec') tdSql.checkData(0, 1, 's3UploadDelaySec')
tdSql.checkData(0, 2, 60) tdSql.checkData(0, 2, 60)
def show_local_variables_like(self):
tdSql.query("show local variables")
tdSql.checkGreater(tdSql.getRows(), 80)
tdSql.query("show local variables like 'debugFlag'")
tdSql.checkRows(1)
tdSql.checkData(0, 0, 'debugFlag')
tdSql.checkData(0, 1, 0)
tdSql.query("show local variables like '%debugFlag'")
tdSql.checkRows(9)
tdSql.query("show local variables like '____debugFlag'")
tdSql.checkRows(0)
tdSql.query("show local variables like 's3MigrateEnab%'")
tdSql.checkRows(0)
tdSql.query("show local variables like 'mini%'")
tdSql.checkRows(3)
tdSql.checkData(0, 0, 'minimalTmpDirGB')
tdSql.query("show local variables like '%info'")
tdSql.checkRows(2)
def show_cluster_variables_like(self):
zones = ["", "cluster"]
for zone in zones:
tdLog.info(f"show {zone} variables")
tdSql.query(f"show {zone} variables")
tdSql.checkGreater(tdSql.getRows(), 80)
tdLog.info(f"show {zone} variables like 'debugFlag'")
#tdSql.query(f"show {zone} variables like 'debugFlag'")
#tdSql.checkRows(0)
tdSql.query(f"show {zone} variables like 's3%'")
tdSql.checkRows(6)
tdSql.query(f"show {zone} variables like 'Max%'")
tdSql.checkRows(3)
tdSql.query(f"show {zone} variables like 'ttl%'")
tdSql.checkRows(5)
tdSql.query(f"show {zone} variables like 'ttl34343434%'")
tdSql.checkRows(0)
tdSql.query(f"show {zone} variables like 'jdlkfdjdfkdfnldlfdnfkdkfdmfdlfmnnnnnjkjk'")
tdSql.checkRows(0)
def threadTest(self, threadID): def threadTest(self, threadID):
print(f"Thread {threadID} starting...") print(f"Thread {threadID} starting...")
tdsqln = tdCom.newTdSql() tdsqln = tdCom.newTdSql()
@ -128,6 +181,14 @@ class TDTestCase:
self.case3() self.case3()
tdLog.printNoPrefix("==========end case3 run ...............") tdLog.printNoPrefix("==========end case3 run ...............")
tdLog.printNoPrefix("==========start show_local_variables_like run ...............")
self.show_local_variables_like()
tdLog.printNoPrefix("==========end show_local_variables_like run ...............")
tdLog.printNoPrefix("==========start show_cluster_variables_like run ...............")
self.show_cluster_variables_like()
tdLog.printNoPrefix("==========end show_cluster_variables_like run ...............")
def stop(self): def stop(self):
tdSql.close() tdSql.close()
tdLog.success(f"{__file__} successfully executed") tdLog.success(f"{__file__} successfully executed")

View File

@ -2,14 +2,6 @@ aux_source_directory(src SHELL_SRC)
add_executable(shell ${SHELL_SRC}) add_executable(shell ${SHELL_SRC})
IF(TD_LINUX_64 AND JEMALLOC_ENABLED)
ADD_DEFINITIONS(-DTD_JEMALLOC_ENABLED -I${CMAKE_BINARY_DIR}/build/include -L${CMAKE_BINARY_DIR}/build/lib -Wl,-rpath,${CMAKE_BINARY_DIR}/build/lib -ljemalloc)
SET(LINK_JEMALLOC "-L${CMAKE_BINARY_DIR}/build/lib -ljemalloc")
ADD_DEPENDENCIES(shell jemalloc)
ELSE()
SET(LINK_JEMALLOC "")
ENDIF()
IF(TD_LINUX AND TD_WEBSOCKET) IF(TD_LINUX AND TD_WEBSOCKET)
ADD_DEFINITIONS(-DWEBSOCKET -I${CMAKE_BINARY_DIR}/build/include -ltaosws) ADD_DEFINITIONS(-DWEBSOCKET -I${CMAKE_BINARY_DIR}/build/include -ltaosws)
SET(LINK_WEBSOCKET "-L${CMAKE_BINARY_DIR}/build/lib -ltaosws") SET(LINK_WEBSOCKET "-L${CMAKE_BINARY_DIR}/build/lib -ltaosws")
@ -33,13 +25,14 @@ ELSE()
ENDIF() ENDIF()
if(TD_WINDOWS) if(TD_WINDOWS)
target_link_libraries(shell PUBLIC ${TAOS_LIB_STATIC} ${LINK_WEBSOCKET}) target_link_libraries(shell PUBLIC ${TAOS_LIB_STATIC})
else() else()
target_link_libraries(shell PUBLIC ${TAOS_LIB} ${LINK_WEBSOCKET} ${LINK_JEMALLOC} ${LINK_ARGP}) target_link_libraries(shell PUBLIC ${TAOS_LIB} ${LINK_ARGP})
endif() endif()
target_link_libraries( target_link_libraries(
shell shell
PUBLIC ${LINK_WEBSOCKET}
PRIVATE os common transport geometry util PRIVATE os common transport geometry util
) )
@ -53,16 +46,17 @@ SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos)
# #
# generator library shell_ut for uint test # generator library shell_ut for uint test
# #
IF(TD_LINUX) IF(TD_LINUX)
# include # include
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
# shell_ut library # shell_ut library
add_library(shell_ut STATIC ${SHELL_SRC}) add_library(shell_ut STATIC ${SHELL_SRC})
IF(TD_WEBSOCKET) IF(TD_WEBSOCKET)
ADD_DEPENDENCIES(shell_ut taosws-rs) ADD_DEPENDENCIES(shell_ut taosws-rs)
ENDIF() ENDIF()
target_link_libraries(shell_ut PUBLIC ${TAOS_LIB} ${LINK_WEBSOCKET} ${LINK_JEMALLOC} ${LINK_ARGP}) target_link_libraries(shell_ut PUBLIC ${TAOS_LIB} ${LINK_WEBSOCKET} ${LINK_JEMALLOC} ${LINK_ARGP})
target_link_libraries(shell_ut PRIVATE os common transport geometry util) target_link_libraries(shell_ut PRIVATE os common transport geometry util)