other: merge 3.0
This commit is contained in:
commit
91c376ab63
|
@ -116,7 +116,7 @@ Note: TDengine only supports Windows Server 2016/2019 and Windows 10/11 on the W
|
||||||
|
|
||||||
1. Download the macOS installation package.
|
1. Download the macOS installation package.
|
||||||
<PkgListV3 type={7}/>
|
<PkgListV3 type={7}/>
|
||||||
2. Run the downloaded package to install TDengine.
|
2. Run the downloaded package to install TDengine. If the installation is blocked, you can right-click or ctrl-click on the installation package and select `Open`.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
@ -179,12 +179,20 @@ The following `systemctl` commands can help you manage TDengine service:
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## Command Line Interface (CLI)
|
||||||
|
|
||||||
|
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can execute `taos` in terminal.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="Windows" value="windows">
|
<TabItem label="Windows" value="windows">
|
||||||
|
|
||||||
After the installation is complete, run `C:\TDengine\taosd.exe` to start TDengine Server.
|
After the installation is complete, run `C:\TDengine\taosd.exe` to start TDengine Server.
|
||||||
|
|
||||||
|
## Command Line Interface (CLI)
|
||||||
|
|
||||||
|
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can run `taos.exe` in the `C:\TDengine` directory of the Windows terminal to start the TDengine command line.
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="macOS" value="macos">
|
<TabItem label="macOS" value="macos">
|
||||||
|
@ -206,12 +214,12 @@ The following `launchctl` commands can help you manage TDengine service:
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
## Command Line Interface (CLI)
|
## Command Line Interface (CLI)
|
||||||
|
|
||||||
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can execute `taos` in the Linux/macOS terminal where TDengine is installed, or you can run `taos.exe` in the `C:\TDengine` directory of the Windows terminal where TDengine is installed to start the TDengine command line.
|
You can use the TDengine CLI to monitor your TDengine deployment and execute ad hoc queries. To open the CLI, you can execute `taos` in terminal.
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taos
|
taos
|
||||||
|
|
|
@ -15,10 +15,12 @@ import ConnCSNative from "./_connect_cs.mdx";
|
||||||
import ConnC from "./_connect_c.mdx";
|
import ConnC from "./_connect_c.mdx";
|
||||||
import ConnR from "./_connect_r.mdx";
|
import ConnR from "./_connect_r.mdx";
|
||||||
import ConnPHP from "./_connect_php.mdx";
|
import ConnPHP from "./_connect_php.mdx";
|
||||||
import InstallOnWindows from "../../14-reference/03-connector/_linux_install.mdx";
|
import InstallOnLinux from "../../14-reference/03-connector/_linux_install.mdx";
|
||||||
import InstallOnLinux from "../../14-reference/03-connector/_windows_install.mdx";
|
import InstallOnWindows from "../../14-reference/03-connector/_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "../../14-reference/03-connector/_macos_install.mdx";
|
||||||
import VerifyLinux from "../../14-reference/03-connector/_verify_linux.mdx";
|
import VerifyLinux from "../../14-reference/03-connector/_verify_linux.mdx";
|
||||||
import VerifyWindows from "../../14-reference/03-connector/_verify_windows.mdx";
|
import VerifyWindows from "../../14-reference/03-connector/_verify_windows.mdx";
|
||||||
|
import VerifyMacOS from "../../14-reference/03-connector/_verify_macos.mdx";
|
||||||
|
|
||||||
Any application running on any platform can access TDengine through the REST API provided by TDengine. For information, see [REST API](/reference/rest-api/). Applications can also use the connectors for various programming languages, including C/C++, Java, Python, Go, Node.js, C#, and Rust, to access TDengine. These connectors support connecting to TDengine clusters using both native interfaces (taosc). Some connectors also support connecting over a REST interface. Community developers have also contributed several unofficial connectors, such as the ADO.NET connector, the Lua connector, and the PHP connector.
|
Any application running on any platform can access TDengine through the REST API provided by TDengine. For information, see [REST API](/reference/rest-api/). Applications can also use the connectors for various programming languages, including C/C++, Java, Python, Go, Node.js, C#, and Rust, to access TDengine. These connectors support connecting to TDengine clusters using both native interfaces (taosc). Some connectors also support connecting over a REST interface. Community developers have also contributed several unofficial connectors, such as the ADO.NET connector, the Lua connector, and the PHP connector.
|
||||||
|
|
||||||
|
@ -44,10 +46,13 @@ If you are choosing to use the native connection and the the application is not
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -62,6 +67,9 @@ After the above installation and configuration are done and making sure TDengine
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## Install Connectors
|
## Install Connectors
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import PkgListV3 from "/components/PkgListV3";
|
||||||
|
|
||||||
|
1. Download the client installation package
|
||||||
|
|
||||||
|
<PkgListV3 type={8} sys="MacOS" />
|
||||||
|
|
||||||
|
[All Downloads](../../releases/tdengine)
|
||||||
|
|
||||||
|
2. Execute the installer, select the default value as prompted, and complete the installation. If the installation is blocked, you can right-click or ctrl-click on the installation package and select `Open`.
|
||||||
|
3. configure taos.cfg
|
||||||
|
|
||||||
|
Edit `taos.cfg` file (full path is `/etc/taos/taos.cfg` by default), modify `firstEP` with actual TDengine server's End Point, for example `h1.tdengine.com:6030`
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
|
||||||
|
1. If the computer does not run the TDengine service but installs the TDengine client driver, then you need to config `firstEP` in `taos.cfg` only, and there is no need to configure `FQDN`;
|
||||||
|
2. If you encounter the "Unable to resolve FQDN" error, please make sure the FQDN in the `/etc/hosts` file of the current computer is correctly configured, or the DNS service is correctly configured.
|
||||||
|
|
||||||
|
:::
|
|
@ -0,0 +1,15 @@
|
||||||
|
Execute TDengine CLI program `taos` directly from the macOS shell to connect to the TDengine service and enter the TDengine CLI interface, as shown in the following example.
|
||||||
|
|
||||||
|
```text
|
||||||
|
$ taos
|
||||||
|
|
||||||
|
taos> show databases;
|
||||||
|
name |
|
||||||
|
=================================
|
||||||
|
information_schema |
|
||||||
|
performance_schema |
|
||||||
|
db |
|
||||||
|
Query OK, 3 rows in database (0.019154s)
|
||||||
|
|
||||||
|
taos>
|
||||||
|
```
|
|
@ -10,12 +10,14 @@ import PkgListV3 from "/components/PkgListV3";
|
||||||
|
|
||||||
The default installation path is C:\TDengine, including the following files (directories).
|
The default installation path is C:\TDengine, including the following files (directories).
|
||||||
|
|
||||||
- _taos.exe_ : TDengine CLI command-line program
|
- _taos.exe_: TDengine CLI command-line program
|
||||||
- _cfg_ : configuration file directory
|
- _taosadapter.exe_: server-side executable that provides RESTful services and accepts writing requests from a variety of other softwares
|
||||||
|
- _taosBenchmark.exe_: TDengine testing tool
|
||||||
|
- _cfg_: configuration file directory
|
||||||
- _driver_: client driver dynamic link library
|
- _driver_: client driver dynamic link library
|
||||||
- _examples_: sample programs bash/C/C#/go/JDBC/Python/Node.js
|
- _examples_: sample programs bash/C/C#/go/JDBC/Python/Node.js
|
||||||
- _include_: header files
|
- _include_: header files
|
||||||
- _log_ : log file
|
- _log_: log file
|
||||||
- _unins000.exe_: uninstaller
|
- _unins000.exe_: uninstaller
|
||||||
|
|
||||||
4. configure taos.cfg
|
4. configure taos.cfg
|
||||||
|
|
|
@ -74,10 +74,12 @@ The different database framework specifications for various programming language
|
||||||
|
|
||||||
import Tabs from "@theme/Tabs";
|
import Tabs from "@theme/Tabs";
|
||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
import InstallOnWindows from "./_linux_install.mdx";
|
import InstallOnLinux from "./_linux_install.mdx";
|
||||||
import InstallOnLinux from "./_windows_install.mdx";
|
import InstallOnWindows from "./_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "./_macos_install.mdx";
|
||||||
import VerifyWindows from "./_verify_windows.mdx";
|
import VerifyWindows from "./_verify_windows.mdx";
|
||||||
import VerifyLinux from "./_verify_linux.mdx";
|
import VerifyLinux from "./_verify_linux.mdx";
|
||||||
|
import VerifyMacOS from "./_verify_macos.mdx";
|
||||||
|
|
||||||
## Install Client Driver
|
## Install Client Driver
|
||||||
|
|
||||||
|
@ -90,10 +92,13 @@ The client driver needs to be installed if you use the native interface connecto
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -108,5 +113,8 @@ After completing the above installation and configuration and you have confirmed
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
|
|
@ -222,12 +222,12 @@ TDengine provides a variety of query processing functions for tables and STables
|
||||||
|
|
||||||
### Query Process
|
### Query Process
|
||||||
|
|
||||||
1. TDEngine client driver `taosc` parses the SQL statement and generates an abstract syntax tree (AST), then check and verify the AST according to metadata. During this stage, the metadata management module in `taosc` (Catalog) requests the metadata of the involved database and table from mnode and vnode.
|
1. TDengine client driver `taosc` parses the SQL statement and generates an abstract syntax tree (AST), then checks and verifies the AST according to metadata. During this stage, the metadata management module in `taosc` (Catalog) requests the metadata of the involved database and table from mnode and vnode.
|
||||||
2. After the verification passes, `taosc` generates distributed query plan and optimizes the plan.
|
2. After the verification passes, `taosc` generates distributed query plan and optimizes the plan.
|
||||||
3. `taosc` schedules the tasks according to configured query policy, a query sub-task may be scheduled to a vnode or qnode according to data relative and system load. Please be noted that both vnode and qnode are logic execution unit, the physical execution node is dnode (data node).
|
3. `taosc` schedules the tasks according to configured query policy, a query sub-task may be scheduled to a vnode or qnode according to data relative and system load. Please be noted that both vnode and qnode are logic execution unit, the physical execution node is dnode (data node).
|
||||||
4. When a dnode receives a query request, it identifies which vnode or qnode this query request is targeted, and forwards the request to the query execution queue of the identified vnode or qnode.
|
4. When a dnode receives a query request, it identifies which vnode or qnode this query request is targeted, and forwards the request to the query execution queue of the identified vnode or qnode.
|
||||||
5. The query execution thread of the vnode or qnode establishes fundamental query execution context, and executes the query, and notifies the client once obtaining a part of result data.
|
5. The query execution thread of the vnode or qnode establishes fundamental query execution context, and executes the query, and notifies the client once obtaining a part of result data.
|
||||||
6. TDengine client driver `taosc` will initiates next level query tasks or obtain the result simply.
|
6. TDengine client driver `taosc` will initiate next level query tasks or obtain the result simply.
|
||||||
|
|
||||||
### Aggregation by Time Axis, Downsampling, Interpolation
|
### Aggregation by Time Axis, Downsampling, Interpolation
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ apt-get 方式只适用于 Debian 或 Ubuntu 系统。
|
||||||
|
|
||||||
1. 从列表中下载获得 pkg 安装程序;
|
1. 从列表中下载获得 pkg 安装程序;
|
||||||
<PkgListV3 type={7}/>
|
<PkgListV3 type={7}/>
|
||||||
2. 运行可执行程序来安装 TDengine。
|
2. 运行可执行程序来安装 TDengine。如果安装被阻止,可以右键或者按 Ctrl 点击安装包,选择 `打开`。
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
@ -178,12 +178,20 @@ Active: inactive (dead)
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
## TDengine 命令行(CLI)
|
||||||
|
|
||||||
|
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在终端执行 `taos` 即可。
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="Windows 系统" value="windows">
|
<TabItem label="Windows 系统" value="windows">
|
||||||
|
|
||||||
安装后,在 `C:\TDengine` 目录下,运行 `taosd.exe` 来启动 TDengine 服务进程。
|
安装后,在 `C:\TDengine` 目录下,运行 `taosd.exe` 来启动 TDengine 服务进程。
|
||||||
|
|
||||||
|
## TDengine 命令行(CLI)
|
||||||
|
|
||||||
|
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在终端执行 `taos` 即可。
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
<TabItem label="macOS 系统" value="macos">
|
<TabItem label="macOS 系统" value="macos">
|
||||||
|
@ -205,12 +213,12 @@ Active: inactive (dead)
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
</TabItem>
|
|
||||||
</Tabs>
|
|
||||||
|
|
||||||
## TDengine 命令行(CLI)
|
## TDengine 命令行(CLI)
|
||||||
|
|
||||||
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在安装有 TDengine 的 Linux、macOS 终端执行 `taos` 即可,也可以在安装有 TDengine 的 Windows 终端的 C:\TDengine 目录下,运行 taos.exe 来启动 TDengine 命令行。
|
为便于检查 TDengine 的状态,执行数据库(Database)的各种即席(Ad Hoc)查询,TDengine 提供一命令行应用程序(以下简称为 TDengine CLI)taos。要进入 TDengine 命令行,您只要在 Windows 终端的 C:\TDengine 目录下,运行 taos.exe 来启动 TDengine 命令行。
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
</Tabs>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
taos
|
taos
|
||||||
|
|
|
@ -14,9 +14,11 @@ import ConnCSNative from "./_connect_cs.mdx";
|
||||||
import ConnC from "./_connect_c.mdx";
|
import ConnC from "./_connect_c.mdx";
|
||||||
import ConnR from "./_connect_r.mdx";
|
import ConnR from "./_connect_r.mdx";
|
||||||
import ConnPHP from "./_connect_php.mdx";
|
import ConnPHP from "./_connect_php.mdx";
|
||||||
import InstallOnWindows from "../../08-connector/_linux_install.mdx";
|
import InstallOnLinux from "../../08-connector/_linux_install.mdx";
|
||||||
import InstallOnLinux from "../../08-connector/_windows_install.mdx";
|
import InstallOnWindows from "../../08-connector/_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "../../08-connector/_macos_install.mdx";
|
||||||
import VerifyLinux from "../../08-connector/_verify_linux.mdx";
|
import VerifyLinux from "../../08-connector/_verify_linux.mdx";
|
||||||
|
import VerifyMacOS from "../../08-connector/_verify_macos.mdx";
|
||||||
import VerifyWindows from "../../08-connector/_verify_windows.mdx";
|
import VerifyWindows from "../../08-connector/_verify_windows.mdx";
|
||||||
|
|
||||||
TDengine 提供了丰富的应用程序开发接口,为了便于用户快速开发自己的应用,TDengine 支持了多种编程语言的连接器,其中官方连接器包括支持 C/C++、Java、Python、Go、Node.js、C#、Rust、Lua(社区贡献)和 PHP (社区贡献)的连接器。这些连接器支持使用原生接口(taosc)和 REST 接口(部分语言暂不支持)连接 TDengine 集群。社区开发者也贡献了多个非官方连接器,例如 ADO.NET 连接器、Lua 连接器和 PHP 连接器。
|
TDengine 提供了丰富的应用程序开发接口,为了便于用户快速开发自己的应用,TDengine 支持了多种编程语言的连接器,其中官方连接器包括支持 C/C++、Java、Python、Go、Node.js、C#、Rust、Lua(社区贡献)和 PHP (社区贡献)的连接器。这些连接器支持使用原生接口(taosc)和 REST 接口(部分语言暂不支持)连接 TDengine 集群。社区开发者也贡献了多个非官方连接器,例如 ADO.NET 连接器、Lua 连接器和 PHP 连接器。
|
||||||
|
@ -43,10 +45,13 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="macOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -61,6 +66,9 @@ TDengine 提供了丰富的应用程序开发接口,为了便于用户快速
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="macOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## 安装连接器
|
## 安装连接器
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import PkgListV3 from "/components/PkgListV3";
|
||||||
|
|
||||||
|
1. 下载客户端安装包
|
||||||
|
|
||||||
|
<PkgListV3 type={8} sys="MacOS" />
|
||||||
|
|
||||||
|
[所有下载](../../releases/tdengine)
|
||||||
|
|
||||||
|
2. 执行安装程序,按提示选择默认值,完成安装。如果安装被阻止,可以右键或者按 Ctrl 点击安装包,选择 `打开`。
|
||||||
|
3. 配置 taos.cfg
|
||||||
|
|
||||||
|
编辑 `taos.cfg` 文件(默认路径/etc/taos/taos.cfg),将 `firstEP` 修改为 TDengine 服务器的 End Point,例如:`h1.tdengine.com:6030`
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
|
||||||
|
1. 如本机没有部署 TDengine 服务,仅安装了应用驱动,则 `taos.cfg` 中仅需配置 `firstEP`,无需在本机配置 `FQDN`。
|
||||||
|
2. 为防止与服务器端连接时出现“Unable to resolve FQDN”错误,建议确认本机的 `/etc/hosts` 文件已经配置了服务器正确的 FQDN 值,或配置好了 DNS 服务。
|
||||||
|
|
||||||
|
:::
|
|
@ -0,0 +1,15 @@
|
||||||
|
在 macOS shell 下直接执行 `taos` 连接到 TDengine 服务,进入到 TDengine CLI 界面,示例如下:
|
||||||
|
|
||||||
|
```text
|
||||||
|
$ taos
|
||||||
|
|
||||||
|
taos> show databases;
|
||||||
|
name |
|
||||||
|
=================================
|
||||||
|
information_schema |
|
||||||
|
performance_schema |
|
||||||
|
db |
|
||||||
|
Query OK, 3 rows in database (0.019154s)
|
||||||
|
|
||||||
|
taos>
|
||||||
|
```
|
|
@ -12,6 +12,8 @@ import PkgListV3 from "/components/PkgListV3";
|
||||||
默认安装路径为:C:\TDengine,其中包括以下文件(目录):
|
默认安装路径为:C:\TDengine,其中包括以下文件(目录):
|
||||||
|
|
||||||
- _taos.exe_:TDengine CLI 命令行程序
|
- _taos.exe_:TDengine CLI 命令行程序
|
||||||
|
- _taosadapter.exe_:提供 RESTful 服务和接受其他多种软件写入请求的服务端可执行文件
|
||||||
|
- _taosBenchmark.exe_:TDengine 测试程序
|
||||||
- _cfg_ : 配置文件目录
|
- _cfg_ : 配置文件目录
|
||||||
- _driver_: 应用驱动动态链接库
|
- _driver_: 应用驱动动态链接库
|
||||||
- _examples_: 示例程序 bash/C/C#/go/JDBC/Python/Node.js
|
- _examples_: 示例程序 bash/C/C#/go/JDBC/Python/Node.js
|
||||||
|
|
|
@ -74,10 +74,12 @@ TDengine 版本更新往往会增加新的功能特性,列表中的连接器
|
||||||
|
|
||||||
import Tabs from "@theme/Tabs";
|
import Tabs from "@theme/Tabs";
|
||||||
import TabItem from "@theme/TabItem";
|
import TabItem from "@theme/TabItem";
|
||||||
import InstallOnWindows from "./_linux_install.mdx";
|
import InstallOnLinux from "./_linux_install.mdx";
|
||||||
import InstallOnLinux from "./_windows_install.mdx";
|
import InstallOnWindows from "./_windows_install.mdx";
|
||||||
|
import InstallOnMacOS from "./_macos_install.mdx";
|
||||||
import VerifyWindows from "./_verify_windows.mdx";
|
import VerifyWindows from "./_verify_windows.mdx";
|
||||||
import VerifyLinux from "./_verify_linux.mdx";
|
import VerifyLinux from "./_verify_linux.mdx";
|
||||||
|
import VerifyMacOS from "./_verify_macos.mdx";
|
||||||
|
|
||||||
## 安装客户端驱动
|
## 安装客户端驱动
|
||||||
|
|
||||||
|
@ -90,10 +92,13 @@ import VerifyLinux from "./_verify_linux.mdx";
|
||||||
|
|
||||||
<Tabs defaultValue="linux" groupId="os">
|
<Tabs defaultValue="linux" groupId="os">
|
||||||
<TabItem value="linux" label="Linux">
|
<TabItem value="linux" label="Linux">
|
||||||
<InstallOnWindows />
|
<InstallOnLinux />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<InstallOnLinux />
|
<InstallOnWindows />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<InstallOnMacOS />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
@ -108,5 +113,8 @@ import VerifyLinux from "./_verify_linux.mdx";
|
||||||
<TabItem value="windows" label="Windows">
|
<TabItem value="windows" label="Windows">
|
||||||
<VerifyWindows />
|
<VerifyWindows />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
<TabItem value="macos" label="MacOS">
|
||||||
|
<VerifyMacOS />
|
||||||
|
</TabItem>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
|
|
|
@ -525,7 +525,7 @@ typedef struct SDataInserterNode {
|
||||||
SDataSinkNode sink;
|
SDataSinkNode sink;
|
||||||
int32_t numOfTables;
|
int32_t numOfTables;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
char* pData;
|
void* pData;
|
||||||
} SDataInserterNode;
|
} SDataInserterNode;
|
||||||
|
|
||||||
typedef struct SQueryInserterNode {
|
typedef struct SQueryInserterNode {
|
||||||
|
|
|
@ -356,7 +356,7 @@ typedef struct SVgDataBlocks {
|
||||||
SVgroupInfo vg;
|
SVgroupInfo vg;
|
||||||
int32_t numOfTables; // number of tables in current submit block
|
int32_t numOfTables; // number of tables in current submit block
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
char* pData; // SMsgDesc + SSubmitReq + SSubmitBlk + ...
|
void* pData; // SMsgDesc + SSubmitReq + SSubmitBlk + ...
|
||||||
} SVgDataBlocks;
|
} SVgDataBlocks;
|
||||||
|
|
||||||
typedef struct SVnodeModifOpStmt {
|
typedef struct SVnodeModifOpStmt {
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>Label</key>
|
||||||
|
<string>com.tdengine.taosadapter</string>
|
||||||
|
<key>ProgramArguments</key>
|
||||||
|
<array>
|
||||||
|
<string>/usr/local/bin/taosadapter</string>
|
||||||
|
</array>
|
||||||
|
<key>ProcessType</key>
|
||||||
|
<string>Interactive</string>
|
||||||
|
<key>Disabled</key>
|
||||||
|
<false/>
|
||||||
|
<key>RunAtLoad</key>
|
||||||
|
<false/>
|
||||||
|
<key>LaunchOnlyOnce</key>
|
||||||
|
<false/>
|
||||||
|
<key>SessionCreate</key>
|
||||||
|
<true/>
|
||||||
|
<key>ExitTimeOut</key>
|
||||||
|
<integer>600</integer>
|
||||||
|
<key>KeepAlive</key>
|
||||||
|
<dict>
|
||||||
|
<key>SuccessfulExit</key>
|
||||||
|
<false/>
|
||||||
|
<key>AfterInitialDemand</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>Program</key>
|
||||||
|
<string>/usr/local/bin/taosadapter</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -69,7 +69,7 @@ prompt_force=0
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &>/dev/null; then
|
if ps aux | grep -v grep | grep systemd &>/dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &>/dev/null); then
|
elif $(which service &>/dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -575,11 +575,11 @@ function install_web() {
|
||||||
|
|
||||||
|
|
||||||
function clean_service_on_sysvinit() {
|
function clean_service_on_sysvinit() {
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
${csudo}service ${serverName} stop || :
|
${csudo}service ${serverName} stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if pidof tarbitrator &>/dev/null; then
|
if ps aux | grep -v grep | grep tarbitrator &>/dev/null; then
|
||||||
${csudo}service tarbitratord stop || :
|
${csudo}service tarbitratord stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -759,7 +759,7 @@ function updateProduct() {
|
||||||
|
|
||||||
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
||||||
# Stop the service if running
|
# Stop the service if running
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
${csudo}systemctl stop ${serverName} || :
|
${csudo}systemctl stop ${serverName} || :
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
|
|
|
@ -265,7 +265,7 @@ function update_TDengine() {
|
||||||
tar -zxf ${tarName}
|
tar -zxf ${tarName}
|
||||||
echo -e "${GREEN}Start to update ${productName} client...${NC}"
|
echo -e "${GREEN}Start to update ${productName} client...${NC}"
|
||||||
# Stop the client shell if running
|
# Stop the client shell if running
|
||||||
if pidof ${clientName} &> /dev/null; then
|
if ps aux | grep -v grep | grep ${clientName} &> /dev/null; then
|
||||||
kill_client
|
kill_client
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -2,4 +2,5 @@ TDengine is a high-efficient, scalable, high-available distributed time-series d
|
||||||
|
|
||||||
To configure TDengine : edit /etc/taos/taos.cfg
|
To configure TDengine : edit /etc/taos/taos.cfg
|
||||||
To start service : launchctl start com.tdengine.taosd
|
To start service : launchctl start com.tdengine.taosd
|
||||||
|
To start Taos Adapter : launchctl start com.tdengine.taosadapter
|
||||||
To access TDengine : use taos in shell
|
To access TDengine : use taos in shell
|
|
@ -77,7 +77,7 @@ os_type=0
|
||||||
|
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
if pidof systemd &>/dev/null; then
|
if ps aux | grep -v grep | grep systemd &>/dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &>/dev/null); then
|
elif $(which service &>/dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -130,7 +130,6 @@ function kill_taosadapter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function kill_taosd() {
|
function kill_taosd() {
|
||||||
ps -ef | grep ${serverName}
|
|
||||||
pid=$(ps -ef | grep -w ${serverName} | grep -v "grep" | awk '{print $2}')
|
pid=$(ps -ef | grep -w ${serverName} | grep -v "grep" | awk '{print $2}')
|
||||||
if [ -n "$pid" ]; then
|
if [ -n "$pid" ]; then
|
||||||
${csudo}kill -9 $pid || :
|
${csudo}kill -9 $pid || :
|
||||||
|
@ -438,7 +437,7 @@ function install_web() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_service_on_sysvinit() {
|
function clean_service_on_sysvinit() {
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
${csudo}service ${serverName} stop || :
|
${csudo}service ${serverName} stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -535,6 +534,10 @@ function install_service_on_launchctl() {
|
||||||
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
${csudo}cp ${script_dir}/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist
|
${csudo}cp ${script_dir}/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist
|
||||||
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
|
|
||||||
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
|
${csudo}cp ${script_dir}/com.taosdata.taosadapter.plist /Library/LaunchDaemons/com.taosdata.taosadapter.plist
|
||||||
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_service() {
|
function install_service() {
|
||||||
|
@ -568,7 +571,7 @@ function update_TDengine() {
|
||||||
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
echo -e "${GREEN}Start to update ${productName}...${NC}"
|
||||||
# Stop the service if running
|
# Stop the service if running
|
||||||
|
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
if ((${service_mod} == 0)); then
|
if ((${service_mod} == 0)); then
|
||||||
${csudo}systemctl stop ${serverName} || :
|
${csudo}systemctl stop ${serverName} || :
|
||||||
elif ((${service_mod} == 1)); then
|
elif ((${service_mod} == 1)); then
|
||||||
|
@ -615,11 +618,12 @@ function update_TDengine() {
|
||||||
else
|
else
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
||||||
else
|
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
|
||||||
fi
|
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
||||||
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
||||||
|
@ -666,11 +670,12 @@ function install_TDengine() {
|
||||||
else
|
else
|
||||||
if [ "$osType" != "Darwin" ]; then
|
if [ "$osType" != "Darwin" ]; then
|
||||||
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
echo -e "${GREEN_DARK}To start ${productName} ${NC}: ${serverName}${NC}"
|
||||||
else
|
|
||||||
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
|
||||||
fi
|
|
||||||
[ -f ${installDir}/bin/taosadapter ] && \
|
[ -f ${installDir}/bin/taosadapter ] && \
|
||||||
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: taosadapter &${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${GREEN_DARK}To start service ${NC}: launchctl start com.tdengine.taosd${NC}"
|
||||||
|
echo -e "${GREEN_DARK}To start Taos Adapter ${NC}: launchctl start com.tdengine.taosadapter${NC}"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
echo -e "${GREEN_DARK}To access ${productName} ${NC}: use ${GREEN_UNDERLINE}${clientName}${NC} in shell${NC}"
|
||||||
|
|
|
@ -75,7 +75,7 @@ fi
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &> /dev/null; then
|
if ps aux | grep -v grep | grep systemd &> /dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &> /dev/null); then
|
elif $(which service &> /dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -421,7 +421,7 @@ function clean_service_on_sysvinit() {
|
||||||
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
||||||
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
||||||
|
|
||||||
if pidof taosd &> /dev/null; then
|
if ps aux | grep -v grep | grep taosd &> /dev/null; then
|
||||||
${csudo}service taosd stop || :
|
${csudo}service taosd stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -512,6 +512,11 @@ function install_service_on_launchctl() {
|
||||||
${csudo}cp ${install_main_dir}/service/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
${csudo}cp ${install_main_dir}/service/com.taosdata.taosd.plist /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
||||||
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosd.plist || :
|
||||||
fi
|
fi
|
||||||
|
if [ -f ${install_main_dir}/service/com.taosdata.taosadapter.plist ]; then
|
||||||
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
|
${csudo}cp ${install_main_dir}/service/com.taosdata.taosadapter.plist /Library/LaunchDaemons/com.taosdata.taosadapter.plist || :
|
||||||
|
${csudouser}launchctl load -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist || :
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function install_taosadapter_service() {
|
function install_taosadapter_service() {
|
||||||
|
|
|
@ -25,7 +25,7 @@ fi
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &> /dev/null; then
|
if ps aux | grep -v grep | grep systemd &> /dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &> /dev/null); then
|
elif $(which service &> /dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -82,7 +82,7 @@ function clean_service_on_sysvinit() {
|
||||||
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
|
||||||
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
#${csudo}sed -i "\|${restart_config_str}|d" /etc/inittab || :
|
||||||
|
|
||||||
if pidof taosd &> /dev/null; then
|
if ps aux | grep -v grep | grep taosd &> /dev/null; then
|
||||||
echo "TDengine taosd is running, stopping it..."
|
echo "TDengine taosd is running, stopping it..."
|
||||||
${csudo}service taosd stop || :
|
${csudo}service taosd stop || :
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -55,7 +55,7 @@ fi
|
||||||
|
|
||||||
initd_mod=0
|
initd_mod=0
|
||||||
service_mod=2
|
service_mod=2
|
||||||
if pidof systemd &>/dev/null; then
|
if ps aux | grep -v grep | grep systemd &>/dev/null; then
|
||||||
service_mod=0
|
service_mod=0
|
||||||
elif $(which service &>/dev/null); then
|
elif $(which service &>/dev/null); then
|
||||||
service_mod=1
|
service_mod=1
|
||||||
|
@ -171,12 +171,12 @@ function clean_service_on_systemd() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_service_on_sysvinit() {
|
function clean_service_on_sysvinit() {
|
||||||
if pidof ${serverName} &>/dev/null; then
|
if ps aux | grep -v grep | grep ${serverName} &>/dev/null; then
|
||||||
echo "${productName} ${serverName} is running, stopping it..."
|
echo "${productName} ${serverName} is running, stopping it..."
|
||||||
${csudo}service ${serverName} stop || :
|
${csudo}service ${serverName} stop || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if pidof tarbitrator &>/dev/null; then
|
if ps aux | grep -v grep | grep tarbitrator &>/dev/null; then
|
||||||
echo "${productName} tarbitrator is running, stopping it..."
|
echo "${productName} tarbitrator is running, stopping it..."
|
||||||
${csudo}service tarbitratord stop || :
|
${csudo}service tarbitratord stop || :
|
||||||
fi
|
fi
|
||||||
|
@ -215,6 +215,8 @@ function clean_service_on_sysvinit() {
|
||||||
function clean_service_on_launchctl() {
|
function clean_service_on_launchctl() {
|
||||||
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
${csudo}rm /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
${csudo}rm /Library/LaunchDaemons/com.taosdata.taosd.plist > /dev/null 2>&1 || :
|
||||||
|
${csudouser}launchctl unload -w /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
|
${csudo}rm /Library/LaunchDaemons/com.taosdata.taosadapter.plist > /dev/null 2>&1 || :
|
||||||
}
|
}
|
||||||
|
|
||||||
function clean_service() {
|
function clean_service() {
|
||||||
|
|
|
@ -28,7 +28,7 @@ if command -v sudo > /dev/null; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
function kill_client() {
|
function kill_client() {
|
||||||
if [ -n "$(pidof ${clientName})" ]; then
|
if [ -n "$(ps aux | grep -v grep | grep ${clientName})" ]; then
|
||||||
${csudo}kill -9 $pid || :
|
${csudo}kill -9 $pid || :
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,6 @@ static int32_t buildRetrieveTableRsp(SSDataBlock* pBlock, int32_t numOfCols, SRe
|
||||||
blockEncode(pBlock, (*pRsp)->data, &len, numOfCols, false);
|
blockEncode(pBlock, (*pRsp)->data, &len, numOfCols, false);
|
||||||
ASSERT(len == rspSize - sizeof(SRetrieveTableRsp));
|
ASSERT(len == rspSize - sizeof(SRetrieveTableRsp));
|
||||||
|
|
||||||
blockDataDestroy(pBlock);
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,21 +58,33 @@ static int32_t getSchemaBytes(const SSchema* pSchema) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static SSDataBlock* buildDescResultDataBlock() {
|
static int32_t buildDescResultDataBlock(SSDataBlock** pOutput) {
|
||||||
SSDataBlock* pBlock = createDataBlock();
|
SSDataBlock* pBlock = createDataBlock();
|
||||||
|
if (NULL == pBlock) {
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, DESCRIBE_RESULT_FIELD_LEN, 1);
|
SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, DESCRIBE_RESULT_FIELD_LEN, 1);
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
int32_t code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, DESCRIBE_RESULT_TYPE_LEN, 2);
|
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, DESCRIBE_RESULT_TYPE_LEN, 2);
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
infoData = createColumnInfoData(TSDB_DATA_TYPE_INT, tDataTypes[TSDB_DATA_TYPE_INT].bytes, 3);
|
infoData = createColumnInfoData(TSDB_DATA_TYPE_INT, tDataTypes[TSDB_DATA_TYPE_INT].bytes, 3);
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, DESCRIBE_RESULT_NOTE_LEN, 4);
|
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, DESCRIBE_RESULT_NOTE_LEN, 4);
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
return pBlock;
|
}
|
||||||
|
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
*pOutput = pBlock;
|
||||||
|
} else {
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setDescResultIntoDataBlock(bool sysInfoUser, SSDataBlock* pBlock, int32_t numOfRows, STableMeta* pMeta) {
|
static void setDescResultIntoDataBlock(bool sysInfoUser, SSDataBlock* pBlock, int32_t numOfRows, STableMeta* pMeta) {
|
||||||
|
@ -109,22 +120,39 @@ static int32_t execDescribe(bool sysInfoUser, SNode* pStmt, SRetrieveTableRsp**
|
||||||
SDescribeStmt* pDesc = (SDescribeStmt*)pStmt;
|
SDescribeStmt* pDesc = (SDescribeStmt*)pStmt;
|
||||||
int32_t numOfRows = TABLE_TOTAL_COL_NUM(pDesc->pMeta);
|
int32_t numOfRows = TABLE_TOTAL_COL_NUM(pDesc->pMeta);
|
||||||
|
|
||||||
SSDataBlock* pBlock = buildDescResultDataBlock();
|
SSDataBlock* pBlock = NULL;
|
||||||
|
int32_t code = buildDescResultDataBlock(&pBlock);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
setDescResultIntoDataBlock(sysInfoUser, pBlock, numOfRows, pDesc->pMeta);
|
setDescResultIntoDataBlock(sysInfoUser, pBlock, numOfRows, pDesc->pMeta);
|
||||||
|
}
|
||||||
return buildRetrieveTableRsp(pBlock, DESCRIBE_RESULT_COLS, pRsp);
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = buildRetrieveTableRsp(pBlock, DESCRIBE_RESULT_COLS, pRsp);
|
||||||
|
}
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t execResetQueryCache() { return catalogClearCache(); }
|
static int32_t execResetQueryCache() { return catalogClearCache(); }
|
||||||
|
|
||||||
static SSDataBlock* buildCreateDBResultDataBlock() {
|
static int32_t buildCreateDBResultDataBlock(SSDataBlock** pOutput) {
|
||||||
SSDataBlock* pBlock = createDataBlock();
|
SSDataBlock* pBlock = createDataBlock();
|
||||||
SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_DB_RESULT_COLS, 1);
|
if (NULL == pBlock) {
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_DB_RESULT_COLS, 1);
|
||||||
|
int32_t code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_DB_RESULT_FIELD2_LEN, 2);
|
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_DB_RESULT_FIELD2_LEN, 2);
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
return pBlock;
|
}
|
||||||
|
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
*pOutput = pBlock;
|
||||||
|
} else {
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t getValOfDiffPrecision(int8_t unit, int64_t val) {
|
int64_t getValOfDiffPrecision(int8_t unit, int64_t val) {
|
||||||
|
@ -259,21 +287,37 @@ static void setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbFName, S
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t execShowCreateDatabase(SShowCreateDatabaseStmt* pStmt, SRetrieveTableRsp** pRsp) {
|
static int32_t execShowCreateDatabase(SShowCreateDatabaseStmt* pStmt, SRetrieveTableRsp** pRsp) {
|
||||||
SSDataBlock* pBlock = buildCreateDBResultDataBlock();
|
SSDataBlock* pBlock = NULL;
|
||||||
|
int32_t code = buildCreateDBResultDataBlock(&pBlock);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
setCreateDBResultIntoDataBlock(pBlock, pStmt->dbName, pStmt->pCfg);
|
setCreateDBResultIntoDataBlock(pBlock, pStmt->dbName, pStmt->pCfg);
|
||||||
return buildRetrieveTableRsp(pBlock, SHOW_CREATE_DB_RESULT_COLS, pRsp);
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = buildRetrieveTableRsp(pBlock, SHOW_CREATE_DB_RESULT_COLS, pRsp);
|
||||||
|
}
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SSDataBlock* buildCreateTbResultDataBlock() {
|
static int32_t buildCreateTbResultDataBlock(SSDataBlock** pOutput) {
|
||||||
SSDataBlock* pBlock = createDataBlock();
|
SSDataBlock* pBlock = createDataBlock();
|
||||||
|
if (NULL == pBlock) {
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_TB_RESULT_FIELD1_LEN, 1);
|
SColumnInfoData infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_TB_RESULT_FIELD1_LEN, 1);
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
int32_t code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_TB_RESULT_FIELD2_LEN, 2);
|
infoData = createColumnInfoData(TSDB_DATA_TYPE_VARCHAR, SHOW_CREATE_TB_RESULT_FIELD2_LEN, 2);
|
||||||
blockDataAppendColInfo(pBlock, &infoData);
|
code = blockDataAppendColInfo(pBlock, &infoData);
|
||||||
|
}
|
||||||
|
|
||||||
return pBlock;
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
*pOutput = pBlock;
|
||||||
|
} else {
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
|
}
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
void appendColumnFields(char* buf, int32_t* len, STableCfg* pCfg) {
|
void appendColumnFields(char* buf, int32_t* len, STableCfg* pCfg) {
|
||||||
|
@ -482,13 +526,16 @@ static int32_t setCreateTBResultIntoDataBlock(SSDataBlock* pBlock, SDbCfgInfo* p
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t execShowCreateTable(SShowCreateTableStmt* pStmt, SRetrieveTableRsp** pRsp) {
|
static int32_t execShowCreateTable(SShowCreateTableStmt* pStmt, SRetrieveTableRsp** pRsp) {
|
||||||
SSDataBlock* pBlock = buildCreateTbResultDataBlock();
|
SSDataBlock* pBlock = NULL;
|
||||||
int32_t code = setCreateTBResultIntoDataBlock(pBlock, pStmt->pDbCfg, pStmt->tableName, pStmt->pTableCfg);
|
int32_t code = buildCreateTbResultDataBlock(&pBlock);
|
||||||
if (code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = setCreateTBResultIntoDataBlock(pBlock, pStmt->pDbCfg, pStmt->tableName, pStmt->pTableCfg);
|
||||||
|
}
|
||||||
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = buildRetrieveTableRsp(pBlock, SHOW_CREATE_TB_RESULT_COLS, pRsp);
|
||||||
|
}
|
||||||
blockDataDestroy(pBlock);
|
blockDataDestroy(pBlock);
|
||||||
return code;
|
return code;
|
||||||
}
|
|
||||||
return buildRetrieveTableRsp(pBlock, SHOW_CREATE_TB_RESULT_COLS, pRsp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t execShowCreateSTable(SShowCreateTableStmt* pStmt, SRetrieveTableRsp** pRsp) {
|
static int32_t execShowCreateSTable(SShowCreateTableStmt* pStmt, SRetrieveTableRsp** pRsp) {
|
||||||
|
@ -557,8 +604,12 @@ _return:
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SSDataBlock* buildLocalVariablesResultDataBlock() {
|
static int32_t buildLocalVariablesResultDataBlock(SSDataBlock** pOutput) {
|
||||||
SSDataBlock* pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock));
|
SSDataBlock* pBlock = taosMemoryCalloc(1, sizeof(SSDataBlock));
|
||||||
|
if (NULL == pBlock) {
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
pBlock->info.hasVarCol = true;
|
pBlock->info.hasVarCol = true;
|
||||||
|
|
||||||
pBlock->pDataBlock = taosArrayInit(SHOW_LOCAL_VARIABLES_RESULT_COLS, sizeof(SColumnInfoData));
|
pBlock->pDataBlock = taosArrayInit(SHOW_LOCAL_VARIABLES_RESULT_COLS, sizeof(SColumnInfoData));
|
||||||
|
@ -573,7 +624,8 @@ static SSDataBlock* buildLocalVariablesResultDataBlock() {
|
||||||
infoData.info.bytes = SHOW_LOCAL_VARIABLES_RESULT_FIELD2_LEN;
|
infoData.info.bytes = SHOW_LOCAL_VARIABLES_RESULT_FIELD2_LEN;
|
||||||
taosArrayPush(pBlock->pDataBlock, &infoData);
|
taosArrayPush(pBlock->pDataBlock, &infoData);
|
||||||
|
|
||||||
return pBlock;
|
*pOutput = pBlock;
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t setLocalVariablesResultIntoDataBlock(SSDataBlock* pBlock) {
|
int32_t setLocalVariablesResultIntoDataBlock(SSDataBlock* pBlock) {
|
||||||
|
@ -605,12 +657,16 @@ int32_t setLocalVariablesResultIntoDataBlock(SSDataBlock* pBlock) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t execShowLocalVariables(SRetrieveTableRsp** pRsp) {
|
static int32_t execShowLocalVariables(SRetrieveTableRsp** pRsp) {
|
||||||
SSDataBlock* pBlock = buildLocalVariablesResultDataBlock();
|
SSDataBlock* pBlock = NULL;
|
||||||
int32_t code = setLocalVariablesResultIntoDataBlock(pBlock);
|
int32_t code = buildLocalVariablesResultDataBlock(&pBlock);
|
||||||
if (code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
return code;
|
code = setLocalVariablesResultIntoDataBlock(pBlock);
|
||||||
}
|
}
|
||||||
return buildRetrieveTableRsp(pBlock, SHOW_LOCAL_VARIABLES_RESULT_COLS, pRsp);
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
code = buildRetrieveTableRsp(pBlock, SHOW_LOCAL_VARIABLES_RESULT_COLS, pRsp);
|
||||||
|
}
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t createSelectResultDataBlock(SNodeList* pProjects, SSDataBlock** pOutput) {
|
static int32_t createSelectResultDataBlock(SNodeList* pProjects, SSDataBlock** pOutput) {
|
||||||
|
@ -660,6 +716,7 @@ static int32_t execSelectWithoutFrom(SSelectStmt* pSelect, SRetrieveTableRsp** p
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = buildRetrieveTableRsp(pBlock, LIST_LENGTH(pSelect->pProjectionList), pRsp);
|
code = buildRetrieveTableRsp(pBlock, LIST_LENGTH(pSelect->pProjectionList), pRsp);
|
||||||
}
|
}
|
||||||
|
blockDataDestroy(pBlock);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -170,6 +170,7 @@ static void getDataLength(SDataSinkHandle* pHandle, int64_t* pLen, bool* pQueryE
|
||||||
|
|
||||||
SDataDispatchBuf* pBuf = NULL;
|
SDataDispatchBuf* pBuf = NULL;
|
||||||
taosReadQitem(pDispatcher->pDataBlocks, (void**)&pBuf);
|
taosReadQitem(pDispatcher->pDataBlocks, (void**)&pBuf);
|
||||||
|
ASSERT(NULL != pBuf);
|
||||||
memcpy(&pDispatcher->nextOutput, pBuf, sizeof(SDataDispatchBuf));
|
memcpy(&pDispatcher->nextOutput, pBuf, sizeof(SDataDispatchBuf));
|
||||||
taosFreeQitem(pBuf);
|
taosFreeQitem(pBuf);
|
||||||
|
|
||||||
|
@ -258,6 +259,7 @@ int32_t createDataDispatcher(SDataSinkManager* pManager, const SDataSinkNode* pD
|
||||||
dispatcher->pDataBlocks = taosOpenQueue();
|
dispatcher->pDataBlocks = taosOpenQueue();
|
||||||
taosThreadMutexInit(&dispatcher->mutex, NULL);
|
taosThreadMutexInit(&dispatcher->mutex, NULL);
|
||||||
if (NULL == dispatcher->pDataBlocks) {
|
if (NULL == dispatcher->pDataBlocks) {
|
||||||
|
taosMemoryFree(dispatcher);
|
||||||
terrno = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
return TSDB_CODE_QRY_OUT_OF_MEMORY;
|
return TSDB_CODE_QRY_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -758,7 +758,7 @@ SOperatorInfo* createMultiwayMergeOperatorInfo(SOperatorInfo** downStreams, size
|
||||||
}
|
}
|
||||||
return pOperator;
|
return pOperator;
|
||||||
|
|
||||||
_error:
|
_error: 3
|
||||||
pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY;
|
pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
if (pInfo != NULL) {
|
if (pInfo != NULL) {
|
||||||
destroyMultiwayMergeOperatorInfo(pInfo);
|
destroyMultiwayMergeOperatorInfo(pInfo);
|
||||||
|
|
|
@ -3472,6 +3472,7 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream,
|
||||||
int32_t numOfCols = 0;
|
int32_t numOfCols = 0;
|
||||||
SExprInfo* pExprInfo = createExprInfo(pIntervalPhyNode->window.pFuncs, NULL, &numOfCols);
|
SExprInfo* pExprInfo = createExprInfo(pIntervalPhyNode->window.pFuncs, NULL, &numOfCols);
|
||||||
SSDataBlock* pResBlock = createResDataBlock(pPhyNode->pOutputDataBlockDesc);
|
SSDataBlock* pResBlock = createResDataBlock(pPhyNode->pOutputDataBlockDesc);
|
||||||
|
initBasicInfo(&pInfo->binfo, pResBlock);
|
||||||
|
|
||||||
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
int32_t code = initAggInfo(&pOperator->exprSupp, &pInfo->aggSup, pExprInfo, numOfCols, keyBufSize, pTaskInfo->id.str);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
|
@ -3479,7 +3480,6 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream,
|
||||||
}
|
}
|
||||||
|
|
||||||
initStreamFunciton(pOperator->exprSupp.pCtx, pOperator->exprSupp.numOfExprs);
|
initStreamFunciton(pOperator->exprSupp.pCtx, pOperator->exprSupp.numOfExprs);
|
||||||
initBasicInfo(&pInfo->binfo, pResBlock);
|
|
||||||
|
|
||||||
ASSERT(numOfCols > 0);
|
ASSERT(numOfCols > 0);
|
||||||
initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window);
|
initExecTimeWindowInfo(&pInfo->twAggSup.timeWindowData, &pTaskInfo->window);
|
||||||
|
|
|
@ -543,7 +543,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
|
||||||
case TSDB_DATA_TYPE_UTINYINT: {
|
case TSDB_DATA_TYPE_UTINYINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned tinyint data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned tinyint data", pToken->z);
|
||||||
} else if (!IS_VALID_UTINYINT(uv)) {
|
} else if (uv > UINT8_MAX) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned tinyint data overflow", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "unsigned tinyint data overflow", pToken->z);
|
||||||
}
|
}
|
||||||
uint8_t tmpVal = (uint8_t)uv;
|
uint8_t tmpVal = (uint8_t)uv;
|
||||||
|
@ -563,7 +563,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
|
||||||
case TSDB_DATA_TYPE_USMALLINT: {
|
case TSDB_DATA_TYPE_USMALLINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned smallint data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned smallint data", pToken->z);
|
||||||
} else if (!IS_VALID_USMALLINT(uv)) {
|
} else if (uv > UINT16_MAX) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned smallint data overflow", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "unsigned smallint data overflow", pToken->z);
|
||||||
}
|
}
|
||||||
uint16_t tmpVal = (uint16_t)uv;
|
uint16_t tmpVal = (uint16_t)uv;
|
||||||
|
@ -583,7 +583,7 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
|
||||||
case TSDB_DATA_TYPE_UINT: {
|
case TSDB_DATA_TYPE_UINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned int data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned int data", pToken->z);
|
||||||
} else if (!IS_VALID_UINT(uv)) {
|
} else if (uv > UINT32_MAX) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned int data overflow", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "unsigned int data overflow", pToken->z);
|
||||||
}
|
}
|
||||||
uint32_t tmpVal = (uint32_t)uv;
|
uint32_t tmpVal = (uint32_t)uv;
|
||||||
|
@ -600,8 +600,6 @@ static int32_t parseValueToken(char** end, SToken* pToken, SSchema* pSchema, int
|
||||||
case TSDB_DATA_TYPE_UBIGINT: {
|
case TSDB_DATA_TYPE_UBIGINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned bigint data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned bigint data", pToken->z);
|
||||||
} else if (!IS_VALID_UBIGINT(uv)) {
|
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned bigint data overflow", pToken->z);
|
|
||||||
}
|
}
|
||||||
return func(pMsgBuf, &uv, pSchema->bytes, param);
|
return func(pMsgBuf, &uv, pSchema->bytes, param);
|
||||||
}
|
}
|
||||||
|
@ -844,7 +842,7 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
|
||||||
case TSDB_DATA_TYPE_UTINYINT: {
|
case TSDB_DATA_TYPE_UTINYINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned tinyint data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned tinyint data", pToken->z);
|
||||||
} else if (!IS_VALID_UTINYINT(uv)) {
|
} else if (uv > UINT8_MAX) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned tinyint data overflow", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "unsigned tinyint data overflow", pToken->z);
|
||||||
}
|
}
|
||||||
*(uint8_t*)(&val->i64) = uv;
|
*(uint8_t*)(&val->i64) = uv;
|
||||||
|
@ -864,7 +862,7 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
|
||||||
case TSDB_DATA_TYPE_USMALLINT: {
|
case TSDB_DATA_TYPE_USMALLINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned smallint data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned smallint data", pToken->z);
|
||||||
} else if (!IS_VALID_USMALLINT(uv)) {
|
} else if (uv > UINT16_MAX) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned smallint data overflow", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "unsigned smallint data overflow", pToken->z);
|
||||||
}
|
}
|
||||||
*(uint16_t*)(&val->i64) = uv;
|
*(uint16_t*)(&val->i64) = uv;
|
||||||
|
@ -884,7 +882,7 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
|
||||||
case TSDB_DATA_TYPE_UINT: {
|
case TSDB_DATA_TYPE_UINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned int data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned int data", pToken->z);
|
||||||
} else if (!IS_VALID_UINT(uv)) {
|
} else if (uv > UINT32_MAX) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned int data overflow", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "unsigned int data overflow", pToken->z);
|
||||||
}
|
}
|
||||||
*(uint32_t*)(&val->i64) = uv;
|
*(uint32_t*)(&val->i64) = uv;
|
||||||
|
@ -902,8 +900,6 @@ static int32_t parseTagToken(char** end, SToken* pToken, SSchema* pSchema, int16
|
||||||
case TSDB_DATA_TYPE_UBIGINT: {
|
case TSDB_DATA_TYPE_UBIGINT: {
|
||||||
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
if (TSDB_CODE_SUCCESS != toUInteger(pToken->z, pToken->n, 10, &uv)) {
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned bigint data", pToken->z);
|
return buildSyntaxErrMsg(pMsgBuf, "invalid unsigned bigint data", pToken->z);
|
||||||
} else if (!IS_VALID_UBIGINT(uv)) {
|
|
||||||
return buildSyntaxErrMsg(pMsgBuf, "unsigned bigint data overflow", pToken->z);
|
|
||||||
}
|
}
|
||||||
*(uint64_t*)(&val->i64) = uv;
|
*(uint64_t*)(&val->i64) = uv;
|
||||||
break;
|
break;
|
||||||
|
@ -994,7 +990,7 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
|
||||||
isParseBindParam = true;
|
isParseBindParam = true;
|
||||||
if (NULL == pCxt->pStmtCb) {
|
if (NULL == pCxt->pStmtCb) {
|
||||||
code = buildSyntaxErrMsg(&pCxt->msg, "? only used in stmt", sToken.z);
|
code = buildSyntaxErrMsg(&pCxt->msg, "? only used in stmt", sToken.z);
|
||||||
goto end;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
@ -1002,57 +998,50 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SSchema* pSchema, uint
|
||||||
|
|
||||||
if (isParseBindParam) {
|
if (isParseBindParam) {
|
||||||
code = buildInvalidOperationMsg(&pCxt->msg, "no mix usage for ? and tag values");
|
code = buildInvalidOperationMsg(&pCxt->msg, "no mix usage for ? and tag values");
|
||||||
goto end;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSchema* pTagSchema = &pSchema[pCxt->tags.boundColumns[i]];
|
SSchema* pTagSchema = &pSchema[pCxt->tags.boundColumns[i]];
|
||||||
char tmpTokenBuf[TSDB_MAX_BYTES_PER_ROW] = {0}; // todo this can be optimize with parse column
|
char tmpTokenBuf[TSDB_MAX_BYTES_PER_ROW] = {0}; // todo this can be optimize with parse column
|
||||||
code = checkAndTrimValue(&sToken, tmpTokenBuf, &pCxt->msg);
|
code = checkAndTrimValue(&sToken, tmpTokenBuf, &pCxt->msg);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isNullValue(pTagSchema->type, &sToken)) {
|
if (!isNullValue(pTagSchema->type, &sToken)) {
|
||||||
taosArrayPush(tagName, pTagSchema->name);
|
taosArrayPush(tagName, pTagSchema->name);
|
||||||
}
|
}
|
||||||
if (pTagSchema->type == TSDB_DATA_TYPE_JSON) {
|
if (pTagSchema->type == TSDB_DATA_TYPE_JSON) {
|
||||||
|
isJson = true;
|
||||||
if (sToken.n > (TSDB_MAX_JSON_TAG_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
if (sToken.n > (TSDB_MAX_JSON_TAG_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
||||||
code = buildSyntaxErrMsg(&pCxt->msg, "json string too long than 4095", sToken.z);
|
code = buildSyntaxErrMsg(&pCxt->msg, "json string too long than 4095", sToken.z);
|
||||||
goto end;
|
break;
|
||||||
}
|
}
|
||||||
if (isNullValue(pTagSchema->type, &sToken)) {
|
if (isNullValue(pTagSchema->type, &sToken)) {
|
||||||
code = tTagNew(pTagVals, 1, true, &pTag);
|
code = tTagNew(pTagVals, 1, true, &pTag);
|
||||||
} else {
|
} else {
|
||||||
code = parseJsontoTagData(sToken.z, pTagVals, &pTag, &pCxt->msg);
|
code = parseJsontoTagData(sToken.z, pTagVals, &pTag, &pCxt->msg);
|
||||||
}
|
}
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
isJson = true;
|
|
||||||
} else {
|
} else {
|
||||||
STagVal val = {0};
|
STagVal val = {0};
|
||||||
code = parseTagToken(&pCxt->pSql, &sToken, pTagSchema, precision, &val, &pCxt->msg);
|
code = parseTagToken(&pCxt->pSql, &sToken, pTagSchema, precision, &val, &pCxt->msg);
|
||||||
if (TSDB_CODE_SUCCESS != code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
taosArrayPush(pTagVals, &val);
|
taosArrayPush(pTagVals, &val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (isParseBindParam) {
|
if (TSDB_CODE_SUCCESS != code) {
|
||||||
code = TSDB_CODE_SUCCESS;
|
break;
|
||||||
goto end;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isJson && (code = tTagNew(pTagVals, 1, false, &pTag)) != TSDB_CODE_SUCCESS) {
|
if (TSDB_CODE_SUCCESS == code && !isParseBindParam && !isJson) {
|
||||||
goto end;
|
code = tTagNew(pTagVals, 1, false, &pTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TSDB_CODE_SUCCESS == code && !isParseBindParam) {
|
||||||
buildCreateTbReq(&pCxt->createTblReq, tName, pTag, pCxt->pTableMeta->suid, pCxt->sTableName, tagName,
|
buildCreateTbReq(&pCxt->createTblReq, tName, pTag, pCxt->pTableMeta->suid, pCxt->sTableName, tagName,
|
||||||
pCxt->pTableMeta->tableInfo.numOfTags);
|
pCxt->pTableMeta->tableInfo.numOfTags);
|
||||||
|
pTag = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
end:
|
|
||||||
for (int i = 0; i < taosArrayGetSize(pTagVals); ++i) {
|
for (int i = 0; i < taosArrayGetSize(pTagVals); ++i) {
|
||||||
STagVal* p = (STagVal*)taosArrayGet(pTagVals, i);
|
STagVal* p = (STagVal*)taosArrayGet(pTagVals, i);
|
||||||
if (IS_VAR_DATA_TYPE(p->type)) {
|
if (IS_VAR_DATA_TYPE(p->type)) {
|
||||||
|
@ -1061,6 +1050,7 @@ end:
|
||||||
}
|
}
|
||||||
taosArrayDestroy(pTagVals);
|
taosArrayDestroy(pTagVals);
|
||||||
taosArrayDestroy(tagName);
|
taosArrayDestroy(tagName);
|
||||||
|
tTagFree(pTag);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -244,7 +244,7 @@ int32_t getDataBlockFromList(SHashObj* pHashList, void* id, int32_t idLen, int32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
taosHashPut(pHashList, (const char*)id, idLen, (char*)dataBlocks, POINTER_BYTES);
|
taosHashPut(pHashList, id, idLen, dataBlocks, POINTER_BYTES);
|
||||||
if (pBlockList) {
|
if (pBlockList) {
|
||||||
taosArrayPush(pBlockList, dataBlocks);
|
taosArrayPush(pBlockList, dataBlocks);
|
||||||
}
|
}
|
||||||
|
@ -666,7 +666,7 @@ static int trimDataBlock(void* pDataBlock, STableDataBlocks* pTableDataBlock, SB
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int32_t i = 0; i < numOfRows; ++i) {
|
for (int32_t i = 0; i < numOfRows; ++i) {
|
||||||
char* payload = (blkKeyTuple + i)->payloadAddr;
|
void* payload = (blkKeyTuple + i)->payloadAddr;
|
||||||
TDRowLenT rowTLen = TD_ROW_LEN((STSRow*)payload);
|
TDRowLenT rowTLen = TD_ROW_LEN((STSRow*)payload);
|
||||||
memcpy(pDataBlock, payload, rowTLen);
|
memcpy(pDataBlock, payload, rowTLen);
|
||||||
pDataBlock = POINTER_SHIFT(pDataBlock, rowTLen);
|
pDataBlock = POINTER_SHIFT(pDataBlock, rowTLen);
|
||||||
|
|
|
@ -597,6 +597,8 @@ uint32_t tGetToken(const char* z, uint32_t* tokenId) {
|
||||||
*tokenId = TK_NK_BOOL;
|
*tokenId = TK_NK_BOOL;
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
*tokenId = tKeywordCode(z, i);
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
if (((*z & 0x80) != 0) || !isIdChar[(uint8_t)*z]) {
|
if (((*z & 0x80) != 0) || !isIdChar[(uint8_t)*z]) {
|
||||||
|
|
|
@ -995,13 +995,17 @@ static int32_t parseTimeFromValueNode(STranslateContext* pCxt, SValueNode* pVal)
|
||||||
if (DEAL_RES_ERROR == translateValue(pCxt, pVal)) {
|
if (DEAL_RES_ERROR == translateValue(pCxt, pVal)) {
|
||||||
return pCxt->errCode;
|
return pCxt->errCode;
|
||||||
}
|
}
|
||||||
|
int64_t value = 0;
|
||||||
if (IS_UNSIGNED_NUMERIC_TYPE(pVal->node.resType.type)) {
|
if (IS_UNSIGNED_NUMERIC_TYPE(pVal->node.resType.type)) {
|
||||||
pVal->datum.i = (int64_t)pVal->datum.u;
|
value = pVal->datum.u;
|
||||||
} else if (IS_FLOAT_TYPE(pVal->node.resType.type)) {
|
} else if (IS_FLOAT_TYPE(pVal->node.resType.type)) {
|
||||||
pVal->datum.i = (int64_t)pVal->datum.d;
|
value = pVal->datum.d;
|
||||||
} else if (TSDB_DATA_TYPE_BOOL == pVal->node.resType.type) {
|
} else if (TSDB_DATA_TYPE_BOOL == pVal->node.resType.type) {
|
||||||
pVal->datum.i = pVal->datum.b;
|
value = pVal->datum.b;
|
||||||
|
} else {
|
||||||
|
value = pVal->datum.i;
|
||||||
}
|
}
|
||||||
|
pVal->datum.i = value;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
} else if (IS_VAR_DATA_TYPE(pVal->node.resType.type) || TSDB_DATA_TYPE_TIMESTAMP == pVal->node.resType.type) {
|
} else if (IS_VAR_DATA_TYPE(pVal->node.resType.type) || TSDB_DATA_TYPE_TIMESTAMP == pVal->node.resType.type) {
|
||||||
if (TSDB_CODE_SUCCESS == taosParseTime(pVal->literal, &pVal->datum.i, pVal->node.resType.bytes,
|
if (TSDB_CODE_SUCCESS == taosParseTime(pVal->literal, &pVal->datum.i, pVal->node.resType.bytes,
|
||||||
|
@ -1083,7 +1087,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_UTINYINT: {
|
case TSDB_DATA_TYPE_UTINYINT: {
|
||||||
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
||||||
if (strict && (TSDB_CODE_SUCCESS != code || !IS_VALID_UTINYINT(pVal->datum.u))) {
|
if (strict && (TSDB_CODE_SUCCESS != code || pVal->datum.u > UINT8_MAX)) {
|
||||||
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
||||||
}
|
}
|
||||||
*(uint8_t*)&pVal->typeData = pVal->datum.u;
|
*(uint8_t*)&pVal->typeData = pVal->datum.u;
|
||||||
|
@ -1091,7 +1095,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_USMALLINT: {
|
case TSDB_DATA_TYPE_USMALLINT: {
|
||||||
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
||||||
if (strict && (TSDB_CODE_SUCCESS != code || !IS_VALID_USMALLINT(pVal->datum.u))) {
|
if (strict && (TSDB_CODE_SUCCESS != code || pVal->datum.u > UINT16_MAX)) {
|
||||||
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
||||||
}
|
}
|
||||||
*(uint16_t*)&pVal->typeData = pVal->datum.u;
|
*(uint16_t*)&pVal->typeData = pVal->datum.u;
|
||||||
|
@ -1099,7 +1103,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_UINT: {
|
case TSDB_DATA_TYPE_UINT: {
|
||||||
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
||||||
if (strict && (TSDB_CODE_SUCCESS != code || !IS_VALID_UINT(pVal->datum.u))) {
|
if (strict && (TSDB_CODE_SUCCESS != code || pVal->datum.u > UINT32_MAX)) {
|
||||||
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
||||||
}
|
}
|
||||||
*(uint32_t*)&pVal->typeData = pVal->datum.u;
|
*(uint32_t*)&pVal->typeData = pVal->datum.u;
|
||||||
|
@ -1107,7 +1111,7 @@ static EDealRes translateNormalValue(STranslateContext* pCxt, SValueNode* pVal,
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_UBIGINT: {
|
case TSDB_DATA_TYPE_UBIGINT: {
|
||||||
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
code = toUInteger(pVal->literal, strlen(pVal->literal), 10, &pVal->datum.u);
|
||||||
if (strict && (TSDB_CODE_SUCCESS != code || !IS_VALID_UBIGINT(pVal->datum.u))) {
|
if (strict && TSDB_CODE_SUCCESS != code) {
|
||||||
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
||||||
}
|
}
|
||||||
*(uint64_t*)&pVal->typeData = pVal->datum.u;
|
*(uint64_t*)&pVal->typeData = pVal->datum.u;
|
||||||
|
@ -4245,7 +4249,7 @@ static int32_t checkTableTagsSchema(STranslateContext* pCxt, SHashObj* pHash, SN
|
||||||
code = taosHashPut(pHash, pTag->colName, len, &pTag, POINTER_BYTES);
|
code = taosHashPut(pHash, pTag->colName, len, &pTag, POINTER_BYTES);
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
tagsSize += pTag->dataType.bytes;
|
tagsSize += calcTypeBytes(pTag->dataType);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4296,7 +4300,7 @@ static int32_t checkTableColsSchema(STranslateContext* pCxt, SHashObj* pHash, in
|
||||||
code = taosHashPut(pHash, pCol->colName, len, &pCol, POINTER_BYTES);
|
code = taosHashPut(pHash, pCol->colName, len, &pCol, POINTER_BYTES);
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
rowSize += pCol->dataType.bytes;
|
rowSize += calcTypeBytes(pCol->dataType);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1200,7 +1200,7 @@ int32_t getTableMetaFromCacheForInsert(SArray* pTableMetaPos, SParseMetaCache* p
|
||||||
int32_t reqIndex = *(int32_t*)taosArrayGet(pTableMetaPos, tableNo);
|
int32_t reqIndex = *(int32_t*)taosArrayGet(pTableMetaPos, tableNo);
|
||||||
SMetaRes* pRes = taosArrayGet(pMetaCache->pTableMetaData, reqIndex);
|
SMetaRes* pRes = taosArrayGet(pMetaCache->pTableMetaData, reqIndex);
|
||||||
if (TSDB_CODE_SUCCESS == pRes->code) {
|
if (TSDB_CODE_SUCCESS == pRes->code) {
|
||||||
*pMeta = tableMetaDup(pRes->pRes);
|
*pMeta = tableMetaDup((const STableMeta*)pRes->pRes);
|
||||||
if (NULL == *pMeta) {
|
if (NULL == *pMeta) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1959,7 +1959,8 @@ static SNode* rewriteUniqueOptCreateFirstFunc(SFunctionNode* pSelectValue, SNode
|
||||||
if (NULL != pSelectValue) {
|
if (NULL != pSelectValue) {
|
||||||
strcpy(pFunc->node.aliasName, pSelectValue->node.aliasName);
|
strcpy(pFunc->node.aliasName, pSelectValue->node.aliasName);
|
||||||
} else {
|
} else {
|
||||||
snprintf(pFunc->node.aliasName, sizeof(pFunc->node.aliasName), "%s.%p", pFunc->functionName, (void*)pFunc);
|
int64_t pointer = (int64_t)pFunc;
|
||||||
|
snprintf(pFunc->node.aliasName, sizeof(pFunc->node.aliasName), "%s.%" PRId64 "", pFunc->functionName, pointer);
|
||||||
}
|
}
|
||||||
int32_t code = nodesListMakeStrictAppend(&pFunc->pParameterList, nodesCloneNode(pCol));
|
int32_t code = nodesListMakeStrictAppend(&pFunc->pParameterList, nodesCloneNode(pCol));
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
|
|
@ -342,7 +342,8 @@ static int32_t stbSplAppendWStart(SNodeList* pFuncs, int32_t* pIndex) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
strcpy(pWStart->functionName, "_wstart");
|
strcpy(pWStart->functionName, "_wstart");
|
||||||
snprintf(pWStart->node.aliasName, sizeof(pWStart->node.aliasName), "%s.%p", pWStart->functionName, (void*)pWStart);
|
int64_t pointer = (int64_t)pWStart;
|
||||||
|
snprintf(pWStart->node.aliasName, sizeof(pWStart->node.aliasName), "%s.%" PRId64 "", pWStart->functionName, pointer);
|
||||||
int32_t code = fmGetFuncInfo(pWStart, NULL, 0);
|
int32_t code = fmGetFuncInfo(pWStart, NULL, 0);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = nodesListStrictAppend(pFuncs, (SNode*)pWStart);
|
code = nodesListStrictAppend(pFuncs, (SNode*)pWStart);
|
||||||
|
@ -367,7 +368,8 @@ static int32_t stbSplAppendWEnd(SWindowLogicNode* pWin, int32_t* pIndex) {
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
strcpy(pWEnd->functionName, "_wend");
|
strcpy(pWEnd->functionName, "_wend");
|
||||||
snprintf(pWEnd->node.aliasName, sizeof(pWEnd->node.aliasName), "%s.%p", pWEnd->functionName, (void*)pWEnd);
|
int64_t pointer = (int64_t)pWEnd;
|
||||||
|
snprintf(pWEnd->node.aliasName, sizeof(pWEnd->node.aliasName), "%s.%" PRId64 "", pWEnd->functionName, pointer);
|
||||||
int32_t code = fmGetFuncInfo(pWEnd, NULL, 0);
|
int32_t code = fmGetFuncInfo(pWEnd, NULL, 0);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
code = nodesListStrictAppend(pWin->pFuncs, (SNode*)pWEnd);
|
code = nodesListStrictAppend(pWin->pFuncs, (SNode*)pWEnd);
|
||||||
|
|
|
@ -248,7 +248,7 @@ python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py -N 5 -
|
||||||
|
|
||||||
python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 6 -M 3 -C 5
|
python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 6 -M 3 -C 5
|
||||||
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeStopInsert.py
|
# BUG python3 ./test.py -f 6-cluster/5dnode3mnodeStopInsert.py
|
||||||
python3 ./test.py -f 6-cluster/5dnode3mnodeDrop.py -N 5
|
# python3 ./test.py -f 6-cluster/5dnode3mnodeDrop.py -N 5
|
||||||
python3 test.py -f 6-cluster/5dnode3mnodeStopConnect.py -N 5 -M 3
|
python3 test.py -f 6-cluster/5dnode3mnodeStopConnect.py -N 5 -M 3
|
||||||
|
|
||||||
python3 ./test.py -f 6-cluster/5dnode3mnodeRecreateMnode.py -N 5 -M 3
|
python3 ./test.py -f 6-cluster/5dnode3mnodeRecreateMnode.py -N 5 -M 3
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7a94ffab45f08e16f09b3f430fe75d717054adb6
|
Subproject commit 1bdfca396cd6730cdc334e06fc7b2156dd1239a0
|
Loading…
Reference in New Issue