Merge branch 'develop' into feature/TD-4038
This commit is contained in:
commit
49948f2683
|
@ -1,30 +1,49 @@
|
||||||
version: 1.0.{build}
|
version: 1.0.{build}
|
||||||
os: Visual Studio 2015
|
image:
|
||||||
|
- Visual Studio 2015
|
||||||
|
- macos
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
- ARCH: amd64
|
- ARCH: amd64
|
||||||
- ARCH: x86
|
- ARCH: x86
|
||||||
|
matrix:
|
||||||
|
exclude:
|
||||||
|
- image: macos
|
||||||
|
ARCH: x86
|
||||||
|
for:
|
||||||
|
-
|
||||||
|
matrix:
|
||||||
|
only:
|
||||||
|
- image: Visual Studio 2015
|
||||||
|
clone_folder: c:\dev\TDengine
|
||||||
|
clone_depth: 1
|
||||||
|
|
||||||
clone_folder: c:\dev\TDengine
|
init:
|
||||||
clone_depth: 1
|
- call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %ARCH%
|
||||||
|
|
||||||
init:
|
before_build:
|
||||||
- call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %ARCH%
|
- cd c:\dev\TDengine
|
||||||
|
- md build
|
||||||
|
|
||||||
before_build:
|
build_script:
|
||||||
- cd c:\dev\TDengine
|
- cd build
|
||||||
- md build
|
- cmake -G "NMake Makefiles" ..
|
||||||
|
- nmake install
|
||||||
build_script:
|
-
|
||||||
- cd build
|
matrix:
|
||||||
- cmake -G "NMake Makefiles" ..
|
only:
|
||||||
- nmake install
|
- image: macos
|
||||||
|
clone_depth: 1
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- mkdir debug
|
||||||
|
- cd debug
|
||||||
|
- cmake .. > /dev/null
|
||||||
|
- make > /dev/null
|
||||||
notifications:
|
notifications:
|
||||||
- provider: Email
|
- provider: Email
|
||||||
to:
|
to:
|
||||||
- sangshuduo@gmail.com
|
- sangshuduo@gmail.com
|
||||||
|
|
||||||
on_build_success: true
|
on_build_success: true
|
||||||
on_build_failure: true
|
on_build_failure: true
|
||||||
on_build_status_changed: true
|
on_build_status_changed: true
|
||||||
|
|
|
@ -0,0 +1,180 @@
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: test_amd64
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: smoke_test
|
||||||
|
image: python:3.8
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y cmake build-essential gcc
|
||||||
|
- pip3 install psutil
|
||||||
|
- pip3 install guppy3
|
||||||
|
- pip3 install src/connector/python/linux/python3/
|
||||||
|
- mkdir debug
|
||||||
|
- cd debug
|
||||||
|
- cmake ..
|
||||||
|
- make
|
||||||
|
- cd ../tests
|
||||||
|
- ./test-all.sh smoke
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
|
||||||
|
|
||||||
|
- name: crash_gen
|
||||||
|
image: python:3.8
|
||||||
|
commands:
|
||||||
|
- pip3 install requests
|
||||||
|
- pip3 install src/connector/python/linux/python3/
|
||||||
|
- pip3 install psutil
|
||||||
|
- pip3 install guppy3
|
||||||
|
- cd tests/pytest
|
||||||
|
- ./crash_gen.sh -a -p -t 4 -s 2000
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: test_arm64
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: arm64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: gcc
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y cmake build-essential
|
||||||
|
- mkdir debug
|
||||||
|
- cd debug
|
||||||
|
- cmake .. -DCPUTYPE=aarch64 > /dev/null
|
||||||
|
- make
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: test_arm
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: arm
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: arm32v7/ubuntu:bionic
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y cmake build-essential
|
||||||
|
- mkdir debug
|
||||||
|
- cd debug
|
||||||
|
- cmake .. -DCPUTYPE=aarch32 > /dev/null
|
||||||
|
- make
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build_trusty
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: ubuntu:trusty
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y gcc cmake3 build-essential git binutils-2.26
|
||||||
|
|
||||||
|
- mkdir debug
|
||||||
|
- cd debug
|
||||||
|
- cmake ..
|
||||||
|
- make
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build_xenial
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: ubuntu:xenial
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y gcc cmake build-essential
|
||||||
|
- mkdir debug
|
||||||
|
- cd debug
|
||||||
|
- cmake ..
|
||||||
|
- make
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build_bionic
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: build
|
||||||
|
image: ubuntu:bionic
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install -y gcc cmake build-essential
|
||||||
|
- mkdir debug
|
||||||
|
- cd debug
|
||||||
|
- cmake ..
|
||||||
|
- make
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: goodbye
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 64-bit
|
||||||
|
image: alpine
|
||||||
|
commands:
|
||||||
|
- echo 64-bit is good.
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- develop
|
||||||
|
- master
|
||||||
|
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- test_arm64
|
||||||
|
- test_amd64
|
298
.travis.yml
298
.travis.yml
|
@ -1,298 +0,0 @@
|
||||||
#
|
|
||||||
# Configuration
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Build Matrix
|
|
||||||
#
|
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
- coverity_scan
|
|
||||||
- /^.*ci-.*$/
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
- os: linux
|
|
||||||
dist: bionic
|
|
||||||
language: c
|
|
||||||
|
|
||||||
git:
|
|
||||||
- depth: 1
|
|
||||||
|
|
||||||
compiler: gcc
|
|
||||||
env: DESC="linux/gcc build and test"
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- build-essential
|
|
||||||
- cmake
|
|
||||||
- net-tools
|
|
||||||
- python3.8
|
|
||||||
- libc6-dbg
|
|
||||||
- valgrind
|
|
||||||
- psmisc
|
|
||||||
- unixodbc
|
|
||||||
- unixodbc-dev
|
|
||||||
- mono-complete
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- export TZ=Asia/Harbin
|
|
||||||
- date
|
|
||||||
- curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3.8 get-pip.py
|
|
||||||
- python3.8 -m pip install --upgrade pip setuptools
|
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
|
||||||
- mkdir debug
|
|
||||||
- cd debug
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cmake .. > /dev/null
|
|
||||||
- make > /dev/null
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- travis_wait 20
|
|
||||||
- |-
|
|
||||||
case $TRAVIS_OS_NAME in
|
|
||||||
linux)
|
|
||||||
cd ${TRAVIS_BUILD_DIR}/debug
|
|
||||||
make install > /dev/null || travis_terminate $?
|
|
||||||
|
|
||||||
py3ver=`python3 --version|awk '{print $2}'|cut -d "." -f 1,2` && apt install python$py3ver-dev
|
|
||||||
pip3 install psutil
|
|
||||||
pip3 install guppy3
|
|
||||||
pip3 install --user ${TRAVIS_BUILD_DIR}/src/connector/python/linux/python3/
|
|
||||||
|
|
||||||
cd ${TRAVIS_BUILD_DIR}/tests/examples/C#/taosdemo
|
|
||||||
mcs -out:taosdemo *.cs || travis_terminate $?
|
|
||||||
pkill -TERM -x taosd
|
|
||||||
fuser -k -n tcp 6030
|
|
||||||
sleep 1
|
|
||||||
${TRAVIS_BUILD_DIR}/debug/build/bin/taosd -c ${TRAVIS_BUILD_DIR}/debug/test/cfg > /dev/null &
|
|
||||||
sleep 5
|
|
||||||
mono taosdemo -Q DEFAULT -y || travis_terminate $?
|
|
||||||
pkill -KILL -x taosd
|
|
||||||
fuser -k -n tcp 6030
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
cd ${TRAVIS_BUILD_DIR}/tests
|
|
||||||
./test-all.sh smoke || travis_terminate $?
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
cd ${TRAVIS_BUILD_DIR}/tests/pytest
|
|
||||||
pkill -TERM -x taosd
|
|
||||||
fuser -k -n tcp 6030
|
|
||||||
sleep 1
|
|
||||||
./crash_gen.sh -a -p -t 4 -s 2000|| travis_terminate $?
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
cd ${TRAVIS_BUILD_DIR}/tests/pytest
|
|
||||||
./valgrind-test.sh 2>&1 > mem-error-out.log
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
|
|
||||||
# Color setting
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[1;32m'
|
|
||||||
GREEN_DARK='\033[0;32m'
|
|
||||||
GREEN_UNDERLINE='\033[4;32m'
|
|
||||||
NC='\033[0m'
|
|
||||||
|
|
||||||
grep 'start to execute\|ERROR SUMMARY' mem-error-out.log|grep -v 'grep'|uniq|tee uniq-mem-error-out.log
|
|
||||||
|
|
||||||
for memError in `grep 'ERROR SUMMARY' uniq-mem-error-out.log | awk '{print $4}'`
|
|
||||||
do
|
|
||||||
if [ -n "$memError" ]; then
|
|
||||||
if [ "$memError" -gt 12 ]; then
|
|
||||||
echo -e "${RED} ## Memory errors number valgrind reports is $memError.\
|
|
||||||
More than our threshold! ## ${NC}"
|
|
||||||
travis_terminate $memError
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
grep 'start to execute\|definitely lost:' mem-error-out.log|grep -v 'grep'|uniq|tee uniq-definitely-lost-out.log
|
|
||||||
for defiMemError in `grep 'definitely lost:' uniq-definitely-lost-out.log | awk '{print $7}'`
|
|
||||||
do
|
|
||||||
if [ -n "$defiMemError" ]; then
|
|
||||||
if [ "$defiMemError" -gt 13 ]; then
|
|
||||||
echo -e "${RED} ## Memory errors number valgrind reports \
|
|
||||||
Definitely lost is $defiMemError. More than our threshold! ## ${NC}"
|
|
||||||
travis_terminate $defiMemError
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
dist: bionic
|
|
||||||
language: c
|
|
||||||
compiler: gcc
|
|
||||||
env: COVERITY_SCAN=true
|
|
||||||
git:
|
|
||||||
- depth: 1
|
|
||||||
|
|
||||||
script:
|
|
||||||
- echo "this job is for coverity scan"
|
|
||||||
|
|
||||||
addons:
|
|
||||||
coverity_scan:
|
|
||||||
# GitHub project metadata
|
|
||||||
# ** specific to your project **
|
|
||||||
project:
|
|
||||||
name: TDengine
|
|
||||||
version: 2.x
|
|
||||||
description: TDengine
|
|
||||||
|
|
||||||
# Where email notification of build analysis results will be sent
|
|
||||||
notification_email: sdsang@taosdata.com, slguan@taosdata.com
|
|
||||||
|
|
||||||
# Commands to prepare for build_command
|
|
||||||
# ** likely specific to your build **
|
|
||||||
build_command_prepend: cmake . > /dev/null
|
|
||||||
|
|
||||||
# The command that will be added as an argument to "cov-build" to compile your project for analysis,
|
|
||||||
# ** likely specific to your build **
|
|
||||||
build_command: make
|
|
||||||
|
|
||||||
# Pattern to match selecting branches that will run analysis. We recommend leaving this set to 'coverity_scan'.
|
|
||||||
# Take care in resource usage, and consider the build frequency allowances per
|
|
||||||
# https://scan.coverity.com/faq#frequency
|
|
||||||
branch_pattern: coverity_scan
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
dist: trusty
|
|
||||||
language: c
|
|
||||||
git:
|
|
||||||
- depth: 1
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- build-essential
|
|
||||||
- cmake
|
|
||||||
- binutils-2.26
|
|
||||||
- unixodbc
|
|
||||||
- unixodbc-dev
|
|
||||||
env:
|
|
||||||
- DESC="trusty/gcc-4.8/bintuils-2.26 build"
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- export TZ=Asia/Harbin
|
|
||||||
- date
|
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
|
||||||
- mkdir debug
|
|
||||||
- cd debug
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cmake .. > /dev/null
|
|
||||||
- export PATH=/usr/lib/binutils-2.26/bin:$PATH && make
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
dist: bionic
|
|
||||||
language: c
|
|
||||||
compiler: clang
|
|
||||||
env: DESC="linux/clang build"
|
|
||||||
git:
|
|
||||||
- depth: 1
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- build-essential
|
|
||||||
- cmake
|
|
||||||
- unixodbc
|
|
||||||
- unixodbc-dev
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- export TZ=Asia/Harbin
|
|
||||||
- date
|
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
|
||||||
- mkdir debug
|
|
||||||
- cd debug
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cmake .. > /dev/null
|
|
||||||
- make > /dev/null
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
arch: arm64
|
|
||||||
dist: bionic
|
|
||||||
language: c
|
|
||||||
compiler: clang
|
|
||||||
env: DESC="arm64 linux/clang build"
|
|
||||||
git:
|
|
||||||
- depth: 1
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- build-essential
|
|
||||||
- cmake
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- export TZ=Asia/Harbin
|
|
||||||
- date
|
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
|
||||||
- mkdir debug
|
|
||||||
- cd debug
|
|
||||||
|
|
||||||
script:
|
|
||||||
- if [ "${TRAVIS_CPU_ARCH}" == "arm64" ]; then
|
|
||||||
cmake .. -DCPUTYPE=aarch64 > /dev/null;
|
|
||||||
else
|
|
||||||
cmake .. > /dev/null;
|
|
||||||
fi
|
|
||||||
- make > /dev/null
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
arch: arm64
|
|
||||||
dist: xenial
|
|
||||||
language: c
|
|
||||||
git:
|
|
||||||
- depth: 1
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- build-essential
|
|
||||||
- cmake
|
|
||||||
- unixodbc
|
|
||||||
- unixodbc-dev
|
|
||||||
env:
|
|
||||||
- DESC="arm64 xenial build"
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- export TZ=Asia/Harbin
|
|
||||||
- date
|
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
|
||||||
- mkdir debug
|
|
||||||
- cd debug
|
|
||||||
|
|
||||||
script:
|
|
||||||
- if [ "${TRAVIS_CPU_ARCH}" == "arm64" ]; then
|
|
||||||
cmake .. -DCPUTYPE=aarch64 > /dev/null;
|
|
||||||
else
|
|
||||||
cmake .. > /dev/null;
|
|
||||||
fi
|
|
||||||
- make > /dev/null
|
|
||||||
|
|
||||||
- os: osx
|
|
||||||
osx_image: xcode11.4
|
|
||||||
language: c
|
|
||||||
compiler: clang
|
|
||||||
env: DESC="mac/clang build"
|
|
||||||
git:
|
|
||||||
- depth: 1
|
|
||||||
addons:
|
|
||||||
homebrew:
|
|
||||||
- cmake
|
|
||||||
- unixodbc
|
|
||||||
|
|
||||||
script:
|
|
||||||
- cd ${TRAVIS_BUILD_DIR}
|
|
||||||
- mkdir debug
|
|
||||||
- cd debug
|
|
||||||
- cmake .. > /dev/null
|
|
||||||
- make > /dev/null
|
|
|
@ -4,7 +4,7 @@ PROJECT(TDengine)
|
||||||
IF (DEFINED VERNUMBER)
|
IF (DEFINED VERNUMBER)
|
||||||
SET(TD_VER_NUMBER ${VERNUMBER})
|
SET(TD_VER_NUMBER ${VERNUMBER})
|
||||||
ELSE ()
|
ELSE ()
|
||||||
SET(TD_VER_NUMBER "2.0.20.0")
|
SET(TD_VER_NUMBER "2.1.0.0")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
IF (DEFINED VERCOMPATIBLE)
|
IF (DEFINED VERCOMPATIBLE)
|
||||||
|
|
|
@ -16,7 +16,6 @@ TDengine 的 JDBC 驱动实现尽可能与关系型数据库驱动保持一致
|
||||||
|
|
||||||
* TDengine 目前不支持针对单条数据记录的删除操作。
|
* TDengine 目前不支持针对单条数据记录的删除操作。
|
||||||
* 目前不支持事务操作。
|
* 目前不支持事务操作。
|
||||||
* 目前不支持表间的 union 操作。
|
|
||||||
* 目前不支持嵌套查询(nested query)。
|
* 目前不支持嵌套查询(nested query)。
|
||||||
* 对每个 Connection 的实例,至多只能有一个打开的 ResultSet 实例;如果在 ResultSet 还没关闭的情况下执行了新的查询,taos-jdbcdriver 会自动关闭上一个 ResultSet。
|
* 对每个 Connection 的实例,至多只能有一个打开的 ResultSet 实例;如果在 ResultSet 还没关闭的情况下执行了新的查询,taos-jdbcdriver 会自动关闭上一个 ResultSet。
|
||||||
|
|
||||||
|
@ -447,7 +446,7 @@ Query OK, 1 row(s) in set (0.000141s)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## TAOS-JDBCDriver 版本以及支持的 TDengine 版本和 JDK 版本
|
## <a class="anchor" id="version"></a>TAOS-JDBCDriver 版本以及支持的 TDengine 版本和 JDK 版本
|
||||||
|
|
||||||
| taos-jdbcdriver 版本 | TDengine 版本 | JDK 版本 |
|
| taos-jdbcdriver 版本 | TDengine 版本 | JDK 版本 |
|
||||||
| -------------------- | ----------------- | -------- |
|
| -------------------- | ----------------- | -------- |
|
||||||
|
|
|
@ -144,7 +144,7 @@ TDengine集群中加入一个新的dnode时,涉及集群相关的一些参数
|
||||||
- numOfMnodes:系统中管理节点个数。默认值:3。
|
- numOfMnodes:系统中管理节点个数。默认值:3。
|
||||||
- balance:是否启动负载均衡。0:否,1:是。默认值:1。
|
- balance:是否启动负载均衡。0:否,1:是。默认值:1。
|
||||||
- mnodeEqualVnodeNum: 一个mnode等同于vnode消耗的个数。默认值:4。
|
- mnodeEqualVnodeNum: 一个mnode等同于vnode消耗的个数。默认值:4。
|
||||||
- offlineThreshold: dnode离线阈值,超过该时间将导致该dnode从集群中删除。单位为秒,默认值:86400*100(即100天)。
|
- offlineThreshold: dnode离线阈值,超过该时间将导致该dnode从集群中删除。单位为秒,默认值:86400*10(即10天)。
|
||||||
- statusInterval: dnode向mnode报告状态时长。单位为秒,默认值:1。
|
- statusInterval: dnode向mnode报告状态时长。单位为秒,默认值:1。
|
||||||
- maxTablesPerVnode: 每个vnode中能够创建的最大表个数。默认值:1000000。
|
- maxTablesPerVnode: 每个vnode中能够创建的最大表个数。默认值:1000000。
|
||||||
- maxVgroupsPerDb: 每个数据库中能够使用的最大vgroup个数。
|
- maxVgroupsPerDb: 每个数据库中能够使用的最大vgroup个数。
|
||||||
|
@ -462,31 +462,31 @@ TDengine的所有可执行文件默认存放在 _/usr/local/taos/bin_ 目录下
|
||||||
|
|
||||||
| 关键字列表 | | | | |
|
| 关键字列表 | | | | |
|
||||||
| ---------- | ----------- | ------------ | ---------- | --------- |
|
| ---------- | ----------- | ------------ | ---------- | --------- |
|
||||||
| ABLOCKS | CONNECTIONS | HAVING | MODULES | SLIMIT |
|
| ABLOCKS | CONNECTIONS | HAVING | MODULES | SMALLINT |
|
||||||
| ABORT | COPY | ID | NCHAR | SMALLINT |
|
| ABORT | COPY | ID | NCHAR | SPREAD |
|
||||||
| ACCOUNT | COUNT | IF | NE | SPREAD |
|
| ACCOUNT | COUNT | IF | NE | STABLE |
|
||||||
| ACCOUNTS | CREATE | IGNORE | NONE | STABLE |
|
| ACCOUNTS | CREATE | IGNORE | NONE | STABLES |
|
||||||
| ADD | CTIME | IMMEDIATE | NOT | STABLES |
|
| ADD | CTIME | IMMEDIATE | NOT | STAR |
|
||||||
| AFTER | DATABASE | IMPORT | NOTNULL | STAR |
|
| AFTER | DATABASE | IMPORT | NOTNULL | STATEMENT |
|
||||||
| ALL | DATABASES | IN | NOW | STATEMENT |
|
| ALL | DATABASES | IN | NOW | STDDEV |
|
||||||
| ALTER | DAYS | INITIALLY | OF | STDDEV |
|
| ALTER | DAYS | INITIALLY | OF | STREAM |
|
||||||
| AND | DEFERRED | INSERT | OFFSET | STREAM |
|
| AND | DEFERRED | INSERT | OFFSET | STREAMS |
|
||||||
| AS | DELIMITERS | INSTEAD | OR | STREAMS |
|
| AS | DELIMITERS | INSTEAD | OR | STRING |
|
||||||
| ASC | DESC | INTEGER | ORDER | STRING |
|
| ASC | DESC | INTEGER | ORDER | SUM |
|
||||||
| ATTACH | DESCRIBE | INTERVAL | PASS | SUM |
|
| ATTACH | DESCRIBE | INTERVAL | PASS | TABLE |
|
||||||
| AVG | DETACH | INTO | PERCENTILE | TABLE |
|
| AVG | DETACH | INTO | PERCENTILE | TABLES |
|
||||||
| BEFORE | DIFF | IP | PLUS | TABLES |
|
| BEFORE | DIFF | IP | PLUS | TAG |
|
||||||
| BEGIN | DISTINCT | IS | PRAGMA | TAG |
|
| BEGIN | DISTINCT | IS | PRAGMA | TAGS |
|
||||||
| BETWEEN | DIVIDE | ISNULL | PREV | TAGS |
|
| BETWEEN | DIVIDE | ISNULL | PREV | TBLOCKS |
|
||||||
| BIGINT | DNODE | JOIN | PRIVILEGE | TBLOCKS |
|
| BIGINT | DNODE | JOIN | PRIVILEGE | TBNAME |
|
||||||
| BINARY | DNODES | KEEP | QUERIES | TBNAME |
|
| BINARY | DNODES | KEEP | QUERIES | TIMES |
|
||||||
| BITAND | DOT | KEY | QUERY | TIMES |
|
| BITAND | DOT | KEY | QUERY | TIMESTAMP |
|
||||||
| BITNOT | DOUBLE | KILL | RAISE | TIMESTAMP |
|
| BITNOT | DOUBLE | KILL | RAISE | TINYINT |
|
||||||
| BITOR | DROP | LAST | REM | TINYINT |
|
| BITOR | DROP | LAST | REM | TOP |
|
||||||
| BOOL | EACH | LE | REPLACE | TOP |
|
| BOOL | EACH | LE | REPLACE | TOPIC |
|
||||||
| BOTTOM | END | LEASTSQUARES | REPLICA | TOPIC |
|
| BOTTOM | END | LEASTSQUARES | REPLICA | TRIGGER |
|
||||||
| BY | EQ | LIKE | RESET | TRIGGER |
|
| BY | EQ | LIKE | RESET | UMINUS |
|
||||||
| CACHE | EXISTS | LIMIT | RESTRICT | UMINUS |
|
| CACHE | EXISTS | LIMIT | RESTRICT | UNION |
|
||||||
| CASCADE | EXPLAIN | LINEAR | ROW | UPLUS |
|
| CASCADE | EXPLAIN | LINEAR | ROW | UPLUS |
|
||||||
| CHANGE | FAIL | LOCAL | ROWS | USE |
|
| CHANGE | FAIL | LOCAL | ROWS | USE |
|
||||||
| CLOG | FILL | LP | RP | USER |
|
| CLOG | FILL | LP | RP | USER |
|
||||||
|
@ -498,5 +498,5 @@ TDengine的所有可执行文件默认存放在 _/usr/local/taos/bin_ 目录下
|
||||||
| CONCAT | GLOB | METRICS | SHOW | VIEW |
|
| CONCAT | GLOB | METRICS | SHOW | VIEW |
|
||||||
| CONFIGS | GRANTS | MIN | SLASH | WAVG |
|
| CONFIGS | GRANTS | MIN | SLASH | WAVG |
|
||||||
| CONFLICT | GROUP | MINUS | SLIDING | WHERE |
|
| CONFLICT | GROUP | MINUS | SLIDING | WHERE |
|
||||||
| CONNECTION | GT | MNODES | | |
|
| CONNECTION | GT | MNODES | SLIMIT | |
|
||||||
|
|
||||||
|
|
|
@ -407,7 +407,7 @@ SELECT select_expr [, select_expr ...]
|
||||||
[INTERVAL (interval_val [, interval_offset])]
|
[INTERVAL (interval_val [, interval_offset])]
|
||||||
[SLIDING sliding_val]
|
[SLIDING sliding_val]
|
||||||
[FILL fill_val]
|
[FILL fill_val]
|
||||||
[GROUP BY col_list <!-- [HAVING having_condition] -->]
|
[GROUP BY col_list]
|
||||||
[ORDER BY col_list { DESC | ASC }]
|
[ORDER BY col_list { DESC | ASC }]
|
||||||
[SLIMIT limit_val [SOFFSET offset_val]]
|
[SLIMIT limit_val [SOFFSET offset_val]]
|
||||||
[LIMIT limit_val [OFFSET offset_val]]
|
[LIMIT limit_val [OFFSET offset_val]]
|
||||||
|
@ -647,7 +647,7 @@ Query OK, 1 row(s) in set (0.001091s)
|
||||||
3. 从 2.0.17 版本开始,条件过滤开始支持 BETWEEN AND 语法,例如 `WHERE col2 BETWEEN 1.5 AND 3.25` 表示查询条件为“1.5 ≤ col2 ≤ 3.25”。
|
3. 从 2.0.17 版本开始,条件过滤开始支持 BETWEEN AND 语法,例如 `WHERE col2 BETWEEN 1.5 AND 3.25` 表示查询条件为“1.5 ≤ col2 ≤ 3.25”。
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
### GROUP BY 之后的 HAVING 过滤
|
### <a class="anchor" id="having"></a>GROUP BY 之后的 HAVING 过滤
|
||||||
|
|
||||||
从 2.0.20 版本开始,GROUP BY 之后允许再跟一个 HAVING 子句,对成组后的各组数据再做筛选。HAVING 子句可以使用聚合函数和选择函数作为过滤条件(但暂时不支持 LEASTSQUARES、TOP、BOTTOM、LAST_ROW)。
|
从 2.0.20 版本开始,GROUP BY 之后允许再跟一个 HAVING 子句,对成组后的各组数据再做筛选。HAVING 子句可以使用聚合函数和选择函数作为过滤条件(但暂时不支持 LEASTSQUARES、TOP、BOTTOM、LAST_ROW)。
|
||||||
|
|
||||||
|
@ -657,6 +657,16 @@ SELECT AVG(f1), SPREAD(f1, f2, st2.f1) FROM st2 WHERE f1 > 0 GROUP BY f1 HAVING
|
||||||
```
|
```
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
### <a class="anchor" id="union"></a>UNION ALL 操作符
|
||||||
|
|
||||||
|
```mysql
|
||||||
|
SELECT ...
|
||||||
|
UNION ALL SELECT ...
|
||||||
|
[UNION ALL SELECT ...]
|
||||||
|
```
|
||||||
|
|
||||||
|
TDengine 支持 UNION ALL 操作符。也就是说,如果多个 SELECT 子句返回结果集的结构完全相同(列名、列类型、列数、顺序),那么可以通过 UNION ALL 把这些结果集合并到一起。目前只支持 UNION ALL 模式,也即在结果集的合并过程中是不去重的。
|
||||||
|
|
||||||
### SQL 示例
|
### SQL 示例
|
||||||
|
|
||||||
- 对于下面的例子,表tb1用以下语句创建
|
- 对于下面的例子,表tb1用以下语句创建
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: tdengine
|
name: tdengine
|
||||||
base: core18
|
base: core18
|
||||||
version: '2.0.20.0'
|
version: '2.1.0.0'
|
||||||
icon: snap/gui/t-dengine.svg
|
icon: snap/gui/t-dengine.svg
|
||||||
summary: an open-source big data platform designed and optimized for IoT.
|
summary: an open-source big data platform designed and optimized for IoT.
|
||||||
description: |
|
description: |
|
||||||
|
@ -72,7 +72,7 @@ parts:
|
||||||
- usr/bin/taosd
|
- usr/bin/taosd
|
||||||
- usr/bin/taos
|
- usr/bin/taos
|
||||||
- usr/bin/taosdemo
|
- usr/bin/taosdemo
|
||||||
- usr/lib/libtaos.so.2.0.20.0
|
- usr/lib/libtaos.so.2.1.0.0
|
||||||
- usr/lib/libtaos.so.1
|
- usr/lib/libtaos.so.1
|
||||||
- usr/lib/libtaos.so
|
- usr/lib/libtaos.so
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="taos",
|
name="taos",
|
||||||
version="2.0.8",
|
version="2.0.9",
|
||||||
author="Taosdata Inc.",
|
author="Taosdata Inc.",
|
||||||
author_email="support@taosdata.com",
|
author_email="support@taosdata.com",
|
||||||
description="TDengine python client package",
|
description="TDengine python client package",
|
||||||
|
|
|
@ -21,11 +21,17 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
_timestamp_converter = _convert_microsecond_to_datetime
|
_timestamp_converter = _convert_microsecond_to_datetime
|
||||||
|
|
||||||
if num_of_rows > 0:
|
if num_of_rows > 0:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
else:
|
else:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
|
|
||||||
|
|
||||||
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
|
|
|
@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="taos",
|
name="taos",
|
||||||
version="2.0.7",
|
version="2.0.9",
|
||||||
author="Taosdata Inc.",
|
author="Taosdata Inc.",
|
||||||
author_email="support@taosdata.com",
|
author_email="support@taosdata.com",
|
||||||
description="TDengine python client package",
|
description="TDengine python client package",
|
||||||
|
|
|
@ -21,11 +21,17 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
_timestamp_converter = _convert_microsecond_to_datetime
|
_timestamp_converter = _convert_microsecond_to_datetime
|
||||||
|
|
||||||
if num_of_rows > 0:
|
if num_of_rows > 0:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
else:
|
else:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
|
|
||||||
|
|
||||||
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
|
|
|
@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="taos",
|
name="taos",
|
||||||
version="2.0.7",
|
version="2.0.9",
|
||||||
author="Taosdata Inc.",
|
author="Taosdata Inc.",
|
||||||
author_email="support@taosdata.com",
|
author_email="support@taosdata.com",
|
||||||
description="TDengine python client package",
|
description="TDengine python client package",
|
||||||
|
|
|
@ -21,11 +21,17 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
_timestamp_converter = _convert_microsecond_to_datetime
|
_timestamp_converter = _convert_microsecond_to_datetime
|
||||||
|
|
||||||
if num_of_rows > 0:
|
if num_of_rows > 0:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
else:
|
else:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
|
|
||||||
|
|
||||||
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
|
|
|
@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="taos",
|
name="taos",
|
||||||
version="2.0.7",
|
version="2.0.9",
|
||||||
author="Taosdata Inc.",
|
author="Taosdata Inc.",
|
||||||
author_email="support@taosdata.com",
|
author_email="support@taosdata.com",
|
||||||
description="TDengine python client package",
|
description="TDengine python client package",
|
||||||
|
|
|
@ -21,11 +21,17 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
_timestamp_converter = _convert_microsecond_to_datetime
|
_timestamp_converter = _convert_microsecond_to_datetime
|
||||||
|
|
||||||
if num_of_rows > 0:
|
if num_of_rows > 0:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
else:
|
else:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
|
|
||||||
|
|
||||||
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
|
|
|
@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="taos",
|
name="taos",
|
||||||
version="2.0.7",
|
version="2.0.9",
|
||||||
author="Taosdata Inc.",
|
author="Taosdata Inc.",
|
||||||
author_email="support@taosdata.com",
|
author_email="support@taosdata.com",
|
||||||
description="TDengine python client package",
|
description="TDengine python client package",
|
||||||
|
|
|
@ -21,11 +21,17 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
_timestamp_converter = _convert_microsecond_to_datetime
|
_timestamp_converter = _convert_microsecond_to_datetime
|
||||||
|
|
||||||
if num_of_rows > 0:
|
if num_of_rows > 0:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
else:
|
else:
|
||||||
return list(map(_timestamp_converter, ctypes.cast(
|
return [
|
||||||
data, ctypes.POINTER(ctypes.c_int64))[:abs(num_of_rows)]))
|
None if ele == FieldType.C_BIGINT_NULL else _timestamp_converter(ele) for ele in ctypes.cast(
|
||||||
|
data, ctypes.POINTER(
|
||||||
|
ctypes.c_int64))[
|
||||||
|
:abs(num_of_rows)]]
|
||||||
|
|
||||||
|
|
||||||
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
def _crow_bool_to_python(data, num_of_rows, nbytes=None, micro=False):
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -72,7 +72,8 @@ enum _show_db_index {
|
||||||
TSDB_SHOW_DB_WALLEVEL_INDEX,
|
TSDB_SHOW_DB_WALLEVEL_INDEX,
|
||||||
TSDB_SHOW_DB_FSYNC_INDEX,
|
TSDB_SHOW_DB_FSYNC_INDEX,
|
||||||
TSDB_SHOW_DB_COMP_INDEX,
|
TSDB_SHOW_DB_COMP_INDEX,
|
||||||
TSDB_SHOW_DB_PRECISION_INDEX,
|
TSDB_SHOW_DB_CACHELAST_INDEX,
|
||||||
|
TSDB_SHOW_DB_PRECISION_INDEX,
|
||||||
TSDB_SHOW_DB_UPDATE_INDEX,
|
TSDB_SHOW_DB_UPDATE_INDEX,
|
||||||
TSDB_SHOW_DB_STATUS_INDEX,
|
TSDB_SHOW_DB_STATUS_INDEX,
|
||||||
TSDB_MAX_SHOW_DB
|
TSDB_MAX_SHOW_DB
|
||||||
|
@ -83,10 +84,10 @@ enum _show_tables_index {
|
||||||
TSDB_SHOW_TABLES_NAME_INDEX,
|
TSDB_SHOW_TABLES_NAME_INDEX,
|
||||||
TSDB_SHOW_TABLES_CREATED_TIME_INDEX,
|
TSDB_SHOW_TABLES_CREATED_TIME_INDEX,
|
||||||
TSDB_SHOW_TABLES_COLUMNS_INDEX,
|
TSDB_SHOW_TABLES_COLUMNS_INDEX,
|
||||||
TSDB_SHOW_TABLES_METRIC_INDEX,
|
TSDB_SHOW_TABLES_METRIC_INDEX,
|
||||||
TSDB_SHOW_TABLES_UID_INDEX,
|
TSDB_SHOW_TABLES_UID_INDEX,
|
||||||
TSDB_SHOW_TABLES_TID_INDEX,
|
TSDB_SHOW_TABLES_TID_INDEX,
|
||||||
TSDB_SHOW_TABLES_VGID_INDEX,
|
TSDB_SHOW_TABLES_VGID_INDEX,
|
||||||
TSDB_MAX_SHOW_TABLES
|
TSDB_MAX_SHOW_TABLES
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -99,11 +100,13 @@ enum _describe_table_index {
|
||||||
TSDB_MAX_DESCRIBE_METRIC
|
TSDB_MAX_DESCRIBE_METRIC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define COL_NOTE_LEN 128
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char field[TSDB_COL_NAME_LEN + 1];
|
char field[TSDB_COL_NAME_LEN + 1];
|
||||||
char type[16];
|
char type[16];
|
||||||
int length;
|
int length;
|
||||||
char note[128];
|
char note[COL_NOTE_LEN];
|
||||||
} SColDes;
|
} SColDes;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -132,6 +135,7 @@ typedef struct {
|
||||||
int8_t wallevel;
|
int8_t wallevel;
|
||||||
int32_t fsync;
|
int32_t fsync;
|
||||||
int8_t comp;
|
int8_t comp;
|
||||||
|
int8_t cachelast;
|
||||||
char precision[8]; // time resolution
|
char precision[8]; // time resolution
|
||||||
int8_t update;
|
int8_t update;
|
||||||
char status[16];
|
char status[16];
|
||||||
|
@ -358,19 +362,19 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||||
arguments->data_batch = atoi(arg);
|
arguments->data_batch = atoi(arg);
|
||||||
if (arguments->data_batch >= INT16_MAX) {
|
if (arguments->data_batch >= INT16_MAX) {
|
||||||
arguments->data_batch = INT16_MAX - 1;
|
arguments->data_batch = INT16_MAX - 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'L':
|
case 'L':
|
||||||
{
|
{
|
||||||
int32_t len = atoi(arg);
|
int32_t len = atoi(arg);
|
||||||
if (len > TSDB_MAX_ALLOWED_SQL_LEN) {
|
if (len > TSDB_MAX_ALLOWED_SQL_LEN) {
|
||||||
len = TSDB_MAX_ALLOWED_SQL_LEN;
|
len = TSDB_MAX_ALLOWED_SQL_LEN;
|
||||||
} else if (len < TSDB_MAX_SQL_LEN) {
|
} else if (len < TSDB_MAX_SQL_LEN) {
|
||||||
len = TSDB_MAX_SQL_LEN;
|
len = TSDB_MAX_SQL_LEN;
|
||||||
}
|
}
|
||||||
arguments->max_sql_len = len;
|
arguments->max_sql_len = len;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 't':
|
case 't':
|
||||||
arguments->table_batch = atoi(arg);
|
arguments->table_batch = atoi(arg);
|
||||||
break;
|
break;
|
||||||
|
@ -413,12 +417,12 @@ static void taosStartDumpOutWorkThreads(void* taosCon, struct arguments* args, i
|
||||||
|
|
||||||
struct arguments g_args = {
|
struct arguments g_args = {
|
||||||
// connection option
|
// connection option
|
||||||
NULL,
|
NULL,
|
||||||
"root",
|
"root",
|
||||||
#ifdef _TD_POWER_
|
#ifdef _TD_POWER_
|
||||||
"powerdb",
|
"powerdb",
|
||||||
#else
|
#else
|
||||||
"taosdata",
|
"taosdata",
|
||||||
#endif
|
#endif
|
||||||
0,
|
0,
|
||||||
"",
|
"",
|
||||||
|
@ -523,7 +527,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
/* Parse our arguments; every option seen by parse_opt will be
|
/* Parse our arguments; every option seen by parse_opt will be
|
||||||
reflected in arguments. */
|
reflected in arguments. */
|
||||||
if (argc > 1)
|
if (argc > 2)
|
||||||
parse_args(argc, argv, &g_args);
|
parse_args(argc, argv, &g_args);
|
||||||
|
|
||||||
argp_parse(&argp, argc, argv, 0, 0, &g_args);
|
argp_parse(&argp, argc, argv, 0, 0, &g_args);
|
||||||
|
@ -675,10 +679,10 @@ int taosGetTableRecordInfo(char *table, STableRecordInfo *pTableRecordInfo, TAOS
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(tempCommand, "show tables like %s", table);
|
sprintf(tempCommand, "show tables like %s", table);
|
||||||
|
|
||||||
result = taos_query(taosCon, tempCommand);
|
result = taos_query(taosCon, tempCommand);
|
||||||
int32_t code = taos_errno(result);
|
int32_t code = taos_errno(result);
|
||||||
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command %s\n", tempCommand);
|
fprintf(stderr, "failed to run command %s\n", tempCommand);
|
||||||
free(tempCommand);
|
free(tempCommand);
|
||||||
|
@ -705,12 +709,12 @@ int taosGetTableRecordInfo(char *table, STableRecordInfo *pTableRecordInfo, TAOS
|
||||||
free(tempCommand);
|
free(tempCommand);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(tempCommand, "show stables like %s", table);
|
sprintf(tempCommand, "show stables like %s", table);
|
||||||
|
|
||||||
result = taos_query(taosCon, tempCommand);
|
result = taos_query(taosCon, tempCommand);
|
||||||
code = taos_errno(result);
|
code = taos_errno(result);
|
||||||
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command %s\n", tempCommand);
|
fprintf(stderr, "failed to run command %s\n", tempCommand);
|
||||||
free(tempCommand);
|
free(tempCommand);
|
||||||
|
@ -748,7 +752,7 @@ int32_t taosSaveAllNormalTableToTempFile(TAOS *taosCon, char*meter, char* metric
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||||
tstrncpy(tableRecord.name, meter, TSDB_TABLE_NAME_LEN);
|
tstrncpy(tableRecord.name, meter, TSDB_TABLE_NAME_LEN);
|
||||||
tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN);
|
tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN);
|
||||||
|
@ -770,7 +774,7 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(tmpCommand, "select tbname from %s", metric);
|
sprintf(tmpCommand, "select tbname from %s", metric);
|
||||||
|
|
||||||
TAOS_RES *res = taos_query(taosCon, tmpCommand);
|
TAOS_RES *res = taos_query(taosCon, tmpCommand);
|
||||||
int32_t code = taos_errno(res);
|
int32_t code = taos_errno(res);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
|
@ -792,20 +796,20 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS_FIELD *fields = taos_fetch_fields(res);
|
TAOS_FIELD *fields = taos_fetch_fields(res);
|
||||||
|
|
||||||
int32_t numOfTable = 0;
|
int32_t numOfTable = 0;
|
||||||
while ((row = taos_fetch_row(res)) != NULL) {
|
while ((row = taos_fetch_row(res)) != NULL) {
|
||||||
|
|
||||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||||
tstrncpy(tableRecord.name, (char *)row[0], fields[0].bytes);
|
tstrncpy(tableRecord.name, (char *)row[0], fields[0].bytes);
|
||||||
tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN);
|
tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN);
|
||||||
|
|
||||||
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
||||||
numOfTable++;
|
numOfTable++;
|
||||||
}
|
}
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
lseek(fd, 0, SEEK_SET);
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
|
||||||
int maxThreads = arguments->thread_num;
|
int maxThreads = arguments->thread_num;
|
||||||
int tableOfPerFile ;
|
int tableOfPerFile ;
|
||||||
if (numOfTable <= arguments->thread_num) {
|
if (numOfTable <= arguments->thread_num) {
|
||||||
|
@ -815,16 +819,16 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
||||||
tableOfPerFile = numOfTable / arguments->thread_num;
|
tableOfPerFile = numOfTable / arguments->thread_num;
|
||||||
if (0 != numOfTable % arguments->thread_num) {
|
if (0 != numOfTable % arguments->thread_num) {
|
||||||
tableOfPerFile += 1;
|
tableOfPerFile += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char* tblBuf = (char*)calloc(1, tableOfPerFile * sizeof(STableRecord));
|
char* tblBuf = (char*)calloc(1, tableOfPerFile * sizeof(STableRecord));
|
||||||
if (NULL == tblBuf){
|
if (NULL == tblBuf){
|
||||||
fprintf(stderr, "failed to calloc %" PRIzu "\n", tableOfPerFile * sizeof(STableRecord));
|
fprintf(stderr, "failed to calloc %" PRIzu "\n", tableOfPerFile * sizeof(STableRecord));
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t numOfThread = *totalNumOfThread;
|
int32_t numOfThread = *totalNumOfThread;
|
||||||
int subFd = -1;
|
int subFd = -1;
|
||||||
for (; numOfThread < maxThreads; numOfThread++) {
|
for (; numOfThread < maxThreads; numOfThread++) {
|
||||||
|
@ -838,7 +842,7 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
||||||
(void)remove(tmpBuf);
|
(void)remove(tmpBuf);
|
||||||
}
|
}
|
||||||
sprintf(tmpBuf, ".select-tbname.tmp");
|
sprintf(tmpBuf, ".select-tbname.tmp");
|
||||||
(void)remove(tmpBuf);
|
(void)remove(tmpBuf);
|
||||||
free(tblBuf);
|
free(tblBuf);
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -856,11 +860,11 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
||||||
|
|
||||||
sprintf(tmpBuf, ".select-tbname.tmp");
|
sprintf(tmpBuf, ".select-tbname.tmp");
|
||||||
(void)remove(tmpBuf);
|
(void)remove(tmpBuf);
|
||||||
|
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
close(fd);
|
close(fd);
|
||||||
fd = -1;
|
fd = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
*totalNumOfThread = numOfThread;
|
*totalNumOfThread = numOfThread;
|
||||||
|
|
||||||
|
@ -884,7 +888,7 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
} else {
|
} else {
|
||||||
sprintf(tmpBuf, "dbs.sql");
|
sprintf(tmpBuf, "dbs.sql");
|
||||||
}
|
}
|
||||||
|
|
||||||
fp = fopen(tmpBuf, "w");
|
fp = fopen(tmpBuf, "w");
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
fprintf(stderr, "failed to open file %s\n", tmpBuf);
|
fprintf(stderr, "failed to open file %s\n", tmpBuf);
|
||||||
|
@ -916,9 +920,9 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
taosDumpCharset(fp);
|
taosDumpCharset(fp);
|
||||||
|
|
||||||
sprintf(command, "show databases");
|
sprintf(command, "show databases");
|
||||||
result = taos_query(taos, command);
|
result = taos_query(taos, command);
|
||||||
int32_t code = taos_errno(result);
|
int32_t code = taos_errno(result);
|
||||||
|
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command: %s, reason: %s\n", command, taos_errstr(result));
|
fprintf(stderr, "failed to run command: %s, reason: %s\n", command, taos_errstr(result));
|
||||||
goto _exit_failure;
|
goto _exit_failure;
|
||||||
|
@ -958,12 +962,12 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
strncpy(dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX], fields[TSDB_SHOW_DB_NAME_INDEX].bytes);
|
strncpy(dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX], fields[TSDB_SHOW_DB_NAME_INDEX].bytes);
|
||||||
if (arguments->with_property) {
|
if (arguments->with_property) {
|
||||||
dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]);
|
dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]);
|
||||||
dbInfos[count]->vgroups = *((int32_t *)row[TSDB_SHOW_DB_VGROUPS_INDEX]);
|
dbInfos[count]->vgroups = *((int32_t *)row[TSDB_SHOW_DB_VGROUPS_INDEX]);
|
||||||
dbInfos[count]->replica = *((int16_t *)row[TSDB_SHOW_DB_REPLICA_INDEX]);
|
dbInfos[count]->replica = *((int16_t *)row[TSDB_SHOW_DB_REPLICA_INDEX]);
|
||||||
dbInfos[count]->quorum = *((int16_t *)row[TSDB_SHOW_DB_QUORUM_INDEX]);
|
dbInfos[count]->quorum = *((int16_t *)row[TSDB_SHOW_DB_QUORUM_INDEX]);
|
||||||
dbInfos[count]->days = *((int16_t *)row[TSDB_SHOW_DB_DAYS_INDEX]);
|
dbInfos[count]->days = *((int16_t *)row[TSDB_SHOW_DB_DAYS_INDEX]);
|
||||||
|
|
||||||
strncpy(dbInfos[count]->keeplist, (char *)row[TSDB_SHOW_DB_KEEP_INDEX], fields[TSDB_SHOW_DB_KEEP_INDEX].bytes);
|
strncpy(dbInfos[count]->keeplist, (char *)row[TSDB_SHOW_DB_KEEP_INDEX], fields[TSDB_SHOW_DB_KEEP_INDEX].bytes);
|
||||||
//dbInfos[count]->daysToKeep = *((int16_t *)row[TSDB_SHOW_DB_KEEP_INDEX]);
|
//dbInfos[count]->daysToKeep = *((int16_t *)row[TSDB_SHOW_DB_KEEP_INDEX]);
|
||||||
//dbInfos[count]->daysToKeep1;
|
//dbInfos[count]->daysToKeep1;
|
||||||
//dbInfos[count]->daysToKeep2;
|
//dbInfos[count]->daysToKeep2;
|
||||||
|
@ -974,8 +978,9 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
dbInfos[count]->wallevel = *((int8_t *)row[TSDB_SHOW_DB_WALLEVEL_INDEX]);
|
dbInfos[count]->wallevel = *((int8_t *)row[TSDB_SHOW_DB_WALLEVEL_INDEX]);
|
||||||
dbInfos[count]->fsync = *((int32_t *)row[TSDB_SHOW_DB_FSYNC_INDEX]);
|
dbInfos[count]->fsync = *((int32_t *)row[TSDB_SHOW_DB_FSYNC_INDEX]);
|
||||||
dbInfos[count]->comp = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_COMP_INDEX]));
|
dbInfos[count]->comp = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_COMP_INDEX]));
|
||||||
|
dbInfos[count]->cachelast = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_CACHELAST_INDEX]));
|
||||||
|
|
||||||
strncpy(dbInfos[count]->precision, (char *)row[TSDB_SHOW_DB_PRECISION_INDEX], fields[TSDB_SHOW_DB_PRECISION_INDEX].bytes);
|
strncpy(dbInfos[count]->precision, (char *)row[TSDB_SHOW_DB_PRECISION_INDEX], fields[TSDB_SHOW_DB_PRECISION_INDEX].bytes);
|
||||||
//dbInfos[count]->precision = *((int8_t *)row[TSDB_SHOW_DB_PRECISION_INDEX]);
|
//dbInfos[count]->precision = *((int8_t *)row[TSDB_SHOW_DB_PRECISION_INDEX]);
|
||||||
dbInfos[count]->update = *((int8_t *)row[TSDB_SHOW_DB_UPDATE_INDEX]);
|
dbInfos[count]->update = *((int8_t *)row[TSDB_SHOW_DB_UPDATE_INDEX]);
|
||||||
}
|
}
|
||||||
|
@ -1007,8 +1012,8 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
g_resultStatistics.totalDatabasesOfDumpOut++;
|
g_resultStatistics.totalDatabasesOfDumpOut++;
|
||||||
|
|
||||||
sprintf(command, "use %s", dbInfos[0]->name);
|
sprintf(command, "use %s", dbInfos[0]->name);
|
||||||
|
|
||||||
result = taos_query(taos, command);
|
result = taos_query(taos, command);
|
||||||
int32_t code = taos_errno(result);
|
int32_t code = taos_errno(result);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "invalid database %s\n", dbInfos[0]->name);
|
fprintf(stderr, "invalid database %s\n", dbInfos[0]->name);
|
||||||
|
@ -1038,7 +1043,7 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
int ret = taosDumpStable(tableRecordInfo.tableRecord.metric, fp, taos, dbInfos[0]->name);
|
int ret = taosDumpStable(tableRecordInfo.tableRecord.metric, fp, taos, dbInfos[0]->name);
|
||||||
if (0 == ret) {
|
if (0 == ret) {
|
||||||
superTblCnt++;
|
superTblCnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
retCode = taosSaveAllNormalTableToTempFile(taos, tableRecordInfo.tableRecord.name, tableRecordInfo.tableRecord.metric, &normalTblFd);
|
retCode = taosSaveAllNormalTableToTempFile(taos, tableRecordInfo.tableRecord.name, tableRecordInfo.tableRecord.metric, &normalTblFd);
|
||||||
}
|
}
|
||||||
|
@ -1050,7 +1055,7 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
goto _clean_tmp_file;
|
goto _clean_tmp_file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: save dump super table <superTblCnt> into result_output.txt
|
// TODO: save dump super table <superTblCnt> into result_output.txt
|
||||||
fprintf(g_fpOfResult, "# super table counter: %d\n", superTblCnt);
|
fprintf(g_fpOfResult, "# super table counter: %d\n", superTblCnt);
|
||||||
g_resultStatistics.totalSuperTblsOfDumpOut += superTblCnt;
|
g_resultStatistics.totalSuperTblsOfDumpOut += superTblCnt;
|
||||||
|
@ -1076,7 +1081,7 @@ int taosDumpOut(struct arguments *arguments) {
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taos_free_result(result);
|
taos_free_result(result);
|
||||||
tfree(command);
|
tfree(command);
|
||||||
taosFreeDbInfos();
|
taosFreeDbInfos();
|
||||||
fprintf(stderr, "dump out rows: %" PRId64 "\n", totalDumpOutRows);
|
fprintf(stderr, "dump out rows: %" PRId64 "\n", totalDumpOutRows);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1097,8 +1102,8 @@ int taosGetTableDes(char* dbName, char *table, STableDef *tableDes, TAOS* taosCo
|
||||||
|
|
||||||
char sqlstr[COMMAND_SIZE];
|
char sqlstr[COMMAND_SIZE];
|
||||||
sprintf(sqlstr, "describe %s.%s;", dbName, table);
|
sprintf(sqlstr, "describe %s.%s;", dbName, table);
|
||||||
|
|
||||||
res = taos_query(taosCon, sqlstr);
|
res = taos_query(taosCon, sqlstr);
|
||||||
int32_t code = taos_errno(res);
|
int32_t code = taos_errno(res);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command <%s>, reason:%s\n", sqlstr, taos_errstr(res));
|
fprintf(stderr, "failed to run command <%s>, reason:%s\n", sqlstr, taos_errstr(res));
|
||||||
|
@ -1128,23 +1133,23 @@ int taosGetTableDes(char* dbName, char *table, STableDef *tableDes, TAOS* taosCo
|
||||||
if (isSuperTable) {
|
if (isSuperTable) {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if chidl-table have tag, using select tagName from table to get tagValue
|
// if chidl-table have tag, using select tagName from table to get tagValue
|
||||||
for (int i = 0 ; i < count; i++) {
|
for (int i = 0 ; i < count; i++) {
|
||||||
if (strcmp(tableDes->cols[i].note, "TAG") != 0) continue;
|
if (strcmp(tableDes->cols[i].note, "TAG") != 0) continue;
|
||||||
|
|
||||||
|
|
||||||
sprintf(sqlstr, "select %s from %s.%s", tableDes->cols[i].field, dbName, table);
|
sprintf(sqlstr, "select %s from %s.%s", tableDes->cols[i].field, dbName, table);
|
||||||
|
|
||||||
res = taos_query(taosCon, sqlstr);
|
res = taos_query(taosCon, sqlstr);
|
||||||
code = taos_errno(res);
|
code = taos_errno(res);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command <%s>, reason:%s\n", sqlstr, taos_errstr(res));
|
fprintf(stderr, "failed to run command <%s>, reason:%s\n", sqlstr, taos_errstr(res));
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fields = taos_fetch_fields(res);
|
fields = taos_fetch_fields(res);
|
||||||
|
|
||||||
row = taos_fetch_row(res);
|
row = taos_fetch_row(res);
|
||||||
if (NULL == row) {
|
if (NULL == row) {
|
||||||
|
@ -1159,7 +1164,7 @@ int taosGetTableDes(char* dbName, char *table, STableDef *tableDes, TAOS* taosCo
|
||||||
res = NULL;
|
res = NULL;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t* length = taos_fetch_lengths(res);
|
int32_t* length = taos_fetch_lengths(res);
|
||||||
|
|
||||||
//int32_t* length = taos_fetch_lengths(tmpResult);
|
//int32_t* length = taos_fetch_lengths(tmpResult);
|
||||||
|
@ -1188,16 +1193,16 @@ int taosGetTableDes(char* dbName, char *table, STableDef *tableDes, TAOS* taosCo
|
||||||
case TSDB_DATA_TYPE_BINARY: {
|
case TSDB_DATA_TYPE_BINARY: {
|
||||||
memset(tableDes->cols[i].note, 0, sizeof(tableDes->cols[i].note));
|
memset(tableDes->cols[i].note, 0, sizeof(tableDes->cols[i].note));
|
||||||
tableDes->cols[i].note[0] = '\'';
|
tableDes->cols[i].note[0] = '\'';
|
||||||
char tbuf[COMMAND_SIZE];
|
char tbuf[COL_NOTE_LEN];
|
||||||
converStringToReadable((char *)row[0], length[0], tbuf, COMMAND_SIZE);
|
converStringToReadable((char *)row[0], length[0], tbuf, COL_NOTE_LEN);
|
||||||
char* pstr = stpcpy(&(tableDes->cols[i].note[1]), tbuf);
|
char* pstr = stpcpy(&(tableDes->cols[i].note[1]), tbuf);
|
||||||
*(pstr++) = '\'';
|
*(pstr++) = '\'';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_NCHAR: {
|
case TSDB_DATA_TYPE_NCHAR: {
|
||||||
memset(tableDes->cols[i].note, 0, sizeof(tableDes->cols[i].note));
|
memset(tableDes->cols[i].note, 0, sizeof(tableDes->cols[i].note));
|
||||||
char tbuf[COMMAND_SIZE];
|
char tbuf[COL_NOTE_LEN-2]; // need reserve 2 bytes for ' '
|
||||||
convertNCharToReadable((char *)row[0], length[0], tbuf, COMMAND_SIZE);
|
convertNCharToReadable((char *)row[0], length[0], tbuf, COL_NOTE_LEN);
|
||||||
sprintf(tableDes->cols[i].note, "\'%s\'", tbuf);
|
sprintf(tableDes->cols[i].note, "\'%s\'", tbuf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1219,9 +1224,9 @@ int taosGetTableDes(char* dbName, char *table, STableDef *tableDes, TAOS* taosCo
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
res = NULL;
|
res = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
@ -1280,9 +1285,10 @@ void taosDumpCreateDbClause(SDbInfo *dbInfo, bool isDumpProperty, FILE *fp) {
|
||||||
pstr += sprintf(pstr, "CREATE DATABASE IF NOT EXISTS %s ", dbInfo->name);
|
pstr += sprintf(pstr, "CREATE DATABASE IF NOT EXISTS %s ", dbInfo->name);
|
||||||
if (isDumpProperty) {
|
if (isDumpProperty) {
|
||||||
pstr += sprintf(pstr,
|
pstr += sprintf(pstr,
|
||||||
"TABLES %d VGROUPS %d REPLICA %d QUORUM %d DAYS %d KEEP %s CACHE %d BLOCKS %d MINROWS %d MAXROWS %d WALLEVEL %d FYNC %d COMP %d PRECISION '%s' UPDATE %d",
|
"REPLICA %d QUORUM %d DAYS %d KEEP %s CACHE %d BLOCKS %d MINROWS %d MAXROWS %d FSYNC %d CACHELAST %d COMP %d PRECISION '%s' UPDATE %d",
|
||||||
dbInfo->ntables, dbInfo->vgroups, dbInfo->replica, dbInfo->quorum, dbInfo->days, dbInfo->keeplist, dbInfo->cache,
|
dbInfo->replica, dbInfo->quorum, dbInfo->days, dbInfo->keeplist, dbInfo->cache,
|
||||||
dbInfo->blocks, dbInfo->minrows, dbInfo->maxrows, dbInfo->wallevel, dbInfo->fsync, dbInfo->comp, dbInfo->precision, dbInfo->update);
|
dbInfo->blocks, dbInfo->minrows, dbInfo->maxrows, dbInfo->fsync, dbInfo->cachelast,
|
||||||
|
dbInfo->comp, dbInfo->precision, dbInfo->update);
|
||||||
}
|
}
|
||||||
|
|
||||||
pstr += sprintf(pstr, ";");
|
pstr += sprintf(pstr, ";");
|
||||||
|
@ -1293,8 +1299,8 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
||||||
{
|
{
|
||||||
SThreadParaObj *pThread = (SThreadParaObj*)arg;
|
SThreadParaObj *pThread = (SThreadParaObj*)arg;
|
||||||
STableRecord tableRecord;
|
STableRecord tableRecord;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
char tmpBuf[TSDB_FILENAME_LEN*4] = {0};
|
char tmpBuf[TSDB_FILENAME_LEN*4] = {0};
|
||||||
sprintf(tmpBuf, ".tables.tmp.%d", pThread->threadIndex);
|
sprintf(tmpBuf, ".tables.tmp.%d", pThread->threadIndex);
|
||||||
fd = open(tmpBuf, O_RDWR | O_CREAT, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH);
|
fd = open(tmpBuf, O_RDWR | O_CREAT, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH);
|
||||||
|
@ -1305,13 +1311,13 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
||||||
|
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
memset(tmpBuf, 0, TSDB_FILENAME_LEN + 128);
|
memset(tmpBuf, 0, TSDB_FILENAME_LEN + 128);
|
||||||
|
|
||||||
if (g_args.outpath[0] != 0) {
|
if (g_args.outpath[0] != 0) {
|
||||||
sprintf(tmpBuf, "%s/%s.tables.%d.sql", g_args.outpath, pThread->dbName, pThread->threadIndex);
|
sprintf(tmpBuf, "%s/%s.tables.%d.sql", g_args.outpath, pThread->dbName, pThread->threadIndex);
|
||||||
} else {
|
} else {
|
||||||
sprintf(tmpBuf, "%s.tables.%d.sql", pThread->dbName, pThread->threadIndex);
|
sprintf(tmpBuf, "%s.tables.%d.sql", pThread->dbName, pThread->threadIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
fp = fopen(tmpBuf, "w");
|
fp = fopen(tmpBuf, "w");
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
fprintf(stderr, "failed to open file %s\n", tmpBuf);
|
fprintf(stderr, "failed to open file %s\n", tmpBuf);
|
||||||
|
@ -1321,13 +1327,13 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
||||||
|
|
||||||
memset(tmpBuf, 0, TSDB_FILENAME_LEN);
|
memset(tmpBuf, 0, TSDB_FILENAME_LEN);
|
||||||
sprintf(tmpBuf, "use %s", pThread->dbName);
|
sprintf(tmpBuf, "use %s", pThread->dbName);
|
||||||
|
|
||||||
TAOS_RES* tmpResult = taos_query(pThread->taosCon, tmpBuf);
|
TAOS_RES* tmpResult = taos_query(pThread->taosCon, tmpBuf);
|
||||||
int32_t code = taos_errno(tmpResult);
|
int32_t code = taos_errno(tmpResult);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "invalid database %s\n", pThread->dbName);
|
fprintf(stderr, "invalid database %s\n", pThread->dbName);
|
||||||
taos_free_result(tmpResult);
|
taos_free_result(tmpResult);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
close(fd);
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1345,7 +1351,7 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
||||||
// TODO: sum table count and table rows by self
|
// TODO: sum table count and table rows by self
|
||||||
pThread->tablesOfDumpOut++;
|
pThread->tablesOfDumpOut++;
|
||||||
pThread->rowsOfDumpOut += ret;
|
pThread->rowsOfDumpOut += ret;
|
||||||
|
|
||||||
if (pThread->rowsOfDumpOut >= lastRowsPrint) {
|
if (pThread->rowsOfDumpOut >= lastRowsPrint) {
|
||||||
printf(" %"PRId64 " rows already be dumpout from database %s\n", pThread->rowsOfDumpOut, pThread->dbName);
|
printf(" %"PRId64 " rows already be dumpout from database %s\n", pThread->rowsOfDumpOut, pThread->dbName);
|
||||||
lastRowsPrint += 5000000;
|
lastRowsPrint += 5000000;
|
||||||
|
@ -1355,15 +1361,15 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
||||||
if (tablesInOneFile >= g_args.table_batch) {
|
if (tablesInOneFile >= g_args.table_batch) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
tablesInOneFile = 0;
|
tablesInOneFile = 0;
|
||||||
|
|
||||||
memset(tmpBuf, 0, TSDB_FILENAME_LEN + 128);
|
memset(tmpBuf, 0, TSDB_FILENAME_LEN + 128);
|
||||||
if (g_args.outpath[0] != 0) {
|
if (g_args.outpath[0] != 0) {
|
||||||
sprintf(tmpBuf, "%s/%s.tables.%d-%d.sql", g_args.outpath, pThread->dbName, pThread->threadIndex, fileNameIndex);
|
sprintf(tmpBuf, "%s/%s.tables.%d-%d.sql", g_args.outpath, pThread->dbName, pThread->threadIndex, fileNameIndex);
|
||||||
} else {
|
} else {
|
||||||
sprintf(tmpBuf, "%s.tables.%d-%d.sql", pThread->dbName, pThread->threadIndex, fileNameIndex);
|
sprintf(tmpBuf, "%s.tables.%d-%d.sql", pThread->dbName, pThread->threadIndex, fileNameIndex);
|
||||||
}
|
}
|
||||||
fileNameIndex++;
|
fileNameIndex++;
|
||||||
|
|
||||||
fp = fopen(tmpBuf, "w");
|
fp = fopen(tmpBuf, "w");
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
fprintf(stderr, "failed to open file %s\n", tmpBuf);
|
fprintf(stderr, "failed to open file %s\n", tmpBuf);
|
||||||
|
@ -1377,7 +1383,7 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
||||||
|
|
||||||
taos_free_result(tmpResult);
|
taos_free_result(tmpResult);
|
||||||
close(fd);
|
close(fd);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1393,7 +1399,7 @@ static void taosStartDumpOutWorkThreads(void* taosCon, struct arguments* args, i
|
||||||
pThread->threadIndex = t;
|
pThread->threadIndex = t;
|
||||||
pThread->totalThreads = numOfThread;
|
pThread->totalThreads = numOfThread;
|
||||||
tstrncpy(pThread->dbName, dbName, TSDB_TABLE_NAME_LEN);
|
tstrncpy(pThread->dbName, dbName, TSDB_TABLE_NAME_LEN);
|
||||||
pThread->taosCon = taosCon;
|
pThread->taosCon = taosCon;
|
||||||
|
|
||||||
pthread_attr_init(&thattr);
|
pthread_attr_init(&thattr);
|
||||||
pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE);
|
pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE);
|
||||||
|
@ -1408,7 +1414,7 @@ static void taosStartDumpOutWorkThreads(void* taosCon, struct arguments* args, i
|
||||||
pthread_join(threadObj[t].threadID, NULL);
|
pthread_join(threadObj[t].threadID, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: sum all thread dump table count and rows of per table, then save into result_output.txt
|
// TODO: sum all thread dump table count and rows of per table, then save into result_output.txt
|
||||||
int64_t totalRowsOfDumpOut = 0;
|
int64_t totalRowsOfDumpOut = 0;
|
||||||
int64_t totalChildTblsOfDumpOut = 0;
|
int64_t totalChildTblsOfDumpOut = 0;
|
||||||
for (int32_t t = 0; t < numOfThread; ++t) {
|
for (int32_t t = 0; t < numOfThread; ++t) {
|
||||||
|
@ -1449,7 +1455,7 @@ int32_t taosDumpStable(char *table, FILE *fp, TAOS* taosCon, char* dbName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
||||||
{
|
{
|
||||||
TAOS_ROW row;
|
TAOS_ROW row;
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
|
@ -1457,8 +1463,8 @@ int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
||||||
char sqlstr[TSDB_MAX_SQL_LEN] = {0};
|
char sqlstr[TSDB_MAX_SQL_LEN] = {0};
|
||||||
|
|
||||||
sprintf(sqlstr, "show %s.stables", dbName);
|
sprintf(sqlstr, "show %s.stables", dbName);
|
||||||
|
|
||||||
TAOS_RES* res = taos_query(taosCon, sqlstr);
|
TAOS_RES* res = taos_query(taosCon, sqlstr);
|
||||||
int32_t code = taos_errno(res);
|
int32_t code = taos_errno(res);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command <%s>, reason: %s\n", sqlstr, taos_errstr(res));
|
fprintf(stderr, "failed to run command <%s>, reason: %s\n", sqlstr, taos_errstr(res));
|
||||||
|
@ -1478,13 +1484,13 @@ int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
||||||
(void)remove(".stables.tmp");
|
(void)remove(".stables.tmp");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((row = taos_fetch_row(res)) != NULL) {
|
while ((row = taos_fetch_row(res)) != NULL) {
|
||||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||||
strncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX], fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes);
|
strncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX], fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes);
|
||||||
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
||||||
}
|
}
|
||||||
|
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
(void)lseek(fd, 0, SEEK_SET);
|
(void)lseek(fd, 0, SEEK_SET);
|
||||||
|
|
||||||
|
@ -1492,7 +1498,7 @@ int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
||||||
while (1) {
|
while (1) {
|
||||||
ssize_t readLen = read(fd, &tableRecord, sizeof(STableRecord));
|
ssize_t readLen = read(fd, &tableRecord, sizeof(STableRecord));
|
||||||
if (readLen <= 0) break;
|
if (readLen <= 0) break;
|
||||||
|
|
||||||
int ret = taosDumpStable(tableRecord.name, fp, taosCon, dbName);
|
int ret = taosDumpStable(tableRecord.name, fp, taosCon, dbName);
|
||||||
if (0 == ret) {
|
if (0 == ret) {
|
||||||
superTblCnt++;
|
superTblCnt++;
|
||||||
|
@ -1505,8 +1511,8 @@ int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
(void)remove(".stables.tmp");
|
(void)remove(".stables.tmp");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1516,19 +1522,19 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
||||||
STableRecord tableRecord;
|
STableRecord tableRecord;
|
||||||
|
|
||||||
taosDumpCreateDbClause(dbInfo, arguments->with_property, fp);
|
taosDumpCreateDbClause(dbInfo, arguments->with_property, fp);
|
||||||
|
|
||||||
fprintf(g_fpOfResult, "\n#### database: %s\n", dbInfo->name);
|
fprintf(g_fpOfResult, "\n#### database: %s\n", dbInfo->name);
|
||||||
g_resultStatistics.totalDatabasesOfDumpOut++;
|
g_resultStatistics.totalDatabasesOfDumpOut++;
|
||||||
|
|
||||||
char sqlstr[TSDB_MAX_SQL_LEN] = {0};
|
char sqlstr[TSDB_MAX_SQL_LEN] = {0};
|
||||||
|
|
||||||
fprintf(fp, "USE %s;\n\n", dbInfo->name);
|
fprintf(fp, "USE %s;\n\n", dbInfo->name);
|
||||||
|
|
||||||
(void)taosDumpCreateSuperTableClause(taosCon, dbInfo->name, fp);
|
(void)taosDumpCreateSuperTableClause(taosCon, dbInfo->name, fp);
|
||||||
|
|
||||||
sprintf(sqlstr, "show %s.tables", dbInfo->name);
|
sprintf(sqlstr, "show %s.tables", dbInfo->name);
|
||||||
|
|
||||||
TAOS_RES* res = taos_query(taosCon, sqlstr);
|
TAOS_RES* res = taos_query(taosCon, sqlstr);
|
||||||
int code = taos_errno(res);
|
int code = taos_errno(res);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command <%s>, reason:%s\n", sqlstr, taos_errstr(res));
|
fprintf(stderr, "failed to run command <%s>, reason:%s\n", sqlstr, taos_errstr(res));
|
||||||
|
@ -1547,15 +1553,15 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
||||||
}
|
}
|
||||||
|
|
||||||
TAOS_FIELD *fields = taos_fetch_fields(res);
|
TAOS_FIELD *fields = taos_fetch_fields(res);
|
||||||
|
|
||||||
int32_t numOfTable = 0;
|
int32_t numOfTable = 0;
|
||||||
while ((row = taos_fetch_row(res)) != NULL) {
|
while ((row = taos_fetch_row(res)) != NULL) {
|
||||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||||
tstrncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX], fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes);
|
tstrncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX], fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes);
|
||||||
tstrncpy(tableRecord.metric, (char *)row[TSDB_SHOW_TABLES_METRIC_INDEX], fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes);
|
tstrncpy(tableRecord.metric, (char *)row[TSDB_SHOW_TABLES_METRIC_INDEX], fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes);
|
||||||
|
|
||||||
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
||||||
|
|
||||||
numOfTable++;
|
numOfTable++;
|
||||||
}
|
}
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
|
@ -1570,7 +1576,7 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
||||||
tableOfPerFile = numOfTable / g_args.thread_num;
|
tableOfPerFile = numOfTable / g_args.thread_num;
|
||||||
if (0 != numOfTable % g_args.thread_num) {
|
if (0 != numOfTable % g_args.thread_num) {
|
||||||
tableOfPerFile += 1;
|
tableOfPerFile += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char* tblBuf = (char*)calloc(1, tableOfPerFile * sizeof(STableRecord));
|
char* tblBuf = (char*)calloc(1, tableOfPerFile * sizeof(STableRecord));
|
||||||
|
@ -1579,7 +1585,7 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t numOfThread = 0;
|
int32_t numOfThread = 0;
|
||||||
int subFd = -1;
|
int subFd = -1;
|
||||||
for (numOfThread = 0; numOfThread < maxThreads; numOfThread++) {
|
for (numOfThread = 0; numOfThread < maxThreads; numOfThread++) {
|
||||||
|
@ -1616,7 +1622,7 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
||||||
close(fd);
|
close(fd);
|
||||||
fd = -1;
|
fd = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
|
|
||||||
// start multi threads to dumpout
|
// start multi threads to dumpout
|
||||||
|
@ -1624,7 +1630,7 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
||||||
for (int loopCnt = 0; loopCnt < numOfThread; loopCnt++) {
|
for (int loopCnt = 0; loopCnt < numOfThread; loopCnt++) {
|
||||||
sprintf(tmpBuf, ".tables.tmp.%d", loopCnt);
|
sprintf(tmpBuf, ".tables.tmp.%d", loopCnt);
|
||||||
(void)remove(tmpBuf);
|
(void)remove(tmpBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(tblBuf);
|
free(tblBuf);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1735,7 +1741,7 @@ int taosDumpTableData(FILE *fp, char *tbname, struct arguments *arguments, TAOS*
|
||||||
char *pstr = NULL;
|
char *pstr = NULL;
|
||||||
TAOS_ROW row = NULL;
|
TAOS_ROW row = NULL;
|
||||||
int numFields = 0;
|
int numFields = 0;
|
||||||
|
|
||||||
if (arguments->schemaonly) {
|
if (arguments->schemaonly) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1750,11 +1756,11 @@ int taosDumpTableData(FILE *fp, char *tbname, struct arguments *arguments, TAOS*
|
||||||
pstr = tmpBuffer;
|
pstr = tmpBuffer;
|
||||||
|
|
||||||
char sqlstr[1024] = {0};
|
char sqlstr[1024] = {0};
|
||||||
sprintf(sqlstr,
|
sprintf(sqlstr,
|
||||||
"select * from %s.%s where _c0 >= %" PRId64 " and _c0 <= %" PRId64 " order by _c0 asc;",
|
"select * from %s.%s where _c0 >= %" PRId64 " and _c0 <= %" PRId64 " order by _c0 asc;",
|
||||||
dbName, tbname, arguments->start_time, arguments->end_time);
|
dbName, tbname, arguments->start_time, arguments->end_time);
|
||||||
|
|
||||||
TAOS_RES* tmpResult = taos_query(taosCon, sqlstr);
|
TAOS_RES* tmpResult = taos_query(taosCon, sqlstr);
|
||||||
int32_t code = taos_errno(tmpResult);
|
int32_t code = taos_errno(tmpResult);
|
||||||
if (code != 0) {
|
if (code != 0) {
|
||||||
fprintf(stderr, "failed to run command %s, reason: %s\n", sqlstr, taos_errstr(tmpResult));
|
fprintf(stderr, "failed to run command %s, reason: %s\n", sqlstr, taos_errstr(tmpResult));
|
||||||
|
@ -1774,7 +1780,7 @@ int taosDumpTableData(FILE *fp, char *tbname, struct arguments *arguments, TAOS*
|
||||||
while ((row = taos_fetch_row(tmpResult)) != NULL) {
|
while ((row = taos_fetch_row(tmpResult)) != NULL) {
|
||||||
pstr = tmpBuffer;
|
pstr = tmpBuffer;
|
||||||
curr_sqlstr_len = 0;
|
curr_sqlstr_len = 0;
|
||||||
|
|
||||||
int32_t* length = taos_fetch_lengths(tmpResult); // act len
|
int32_t* length = taos_fetch_lengths(tmpResult); // act len
|
||||||
|
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
|
@ -1829,7 +1835,7 @@ int taosDumpTableData(FILE *fp, char *tbname, struct arguments *arguments, TAOS*
|
||||||
converStringToReadable((char *)row[col], length[col], tbuf, COMMAND_SIZE);
|
converStringToReadable((char *)row[col], length[col], tbuf, COMMAND_SIZE);
|
||||||
//pstr = stpcpy(pstr, tbuf);
|
//pstr = stpcpy(pstr, tbuf);
|
||||||
//*(pstr++) = '\'';
|
//*(pstr++) = '\'';
|
||||||
pstr += sprintf(pstr + curr_sqlstr_len, "\'%s\'", tbuf);
|
pstr += sprintf(pstr + curr_sqlstr_len, "\'%s\'", tbuf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_NCHAR: {
|
case TSDB_DATA_TYPE_NCHAR: {
|
||||||
|
@ -1857,10 +1863,10 @@ int taosDumpTableData(FILE *fp, char *tbname, struct arguments *arguments, TAOS*
|
||||||
|
|
||||||
curr_sqlstr_len += sprintf(pstr + curr_sqlstr_len, ") ");
|
curr_sqlstr_len += sprintf(pstr + curr_sqlstr_len, ") ");
|
||||||
|
|
||||||
totalRows++;
|
totalRows++;
|
||||||
count++;
|
count++;
|
||||||
fprintf(fp, "%s", tmpBuffer);
|
fprintf(fp, "%s", tmpBuffer);
|
||||||
|
|
||||||
if (totalRows >= lastRowsPrint) {
|
if (totalRows >= lastRowsPrint) {
|
||||||
printf(" %"PRId64 " rows already be dumpout from %s.%s\n", totalRows, dbName, tbname);
|
printf(" %"PRId64 " rows already be dumpout from %s.%s\n", totalRows, dbName, tbname);
|
||||||
lastRowsPrint += 5000000;
|
lastRowsPrint += 5000000;
|
||||||
|
@ -2206,7 +2212,7 @@ static FILE* taosOpenDumpInFile(char *fptr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char *fname = full_path.we_wordv[0];
|
char *fname = full_path.we_wordv[0];
|
||||||
|
|
||||||
FILE *f = fopen(fname, "r");
|
FILE *f = fopen(fname, "r");
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
fprintf(stderr, "ERROR: failed to open file %s\n", fname);
|
fprintf(stderr, "ERROR: failed to open file %s\n", fname);
|
||||||
|
@ -2240,7 +2246,7 @@ int taosDumpInOneFile(TAOS * taos, FILE* fp, char* fcharset, char* encode, c
|
||||||
line[--read_len] = '\0';
|
line[--read_len] = '\0';
|
||||||
|
|
||||||
//if (read_len == 0 || isCommentLine(line)) { // line starts with #
|
//if (read_len == 0 || isCommentLine(line)) { // line starts with #
|
||||||
if (read_len == 0 ) {
|
if (read_len == 0 ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2259,8 +2265,8 @@ int taosDumpInOneFile(TAOS * taos, FILE* fp, char* fcharset, char* encode, c
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(cmd, 0, TSDB_MAX_ALLOWED_SQL_LEN);
|
memset(cmd, 0, TSDB_MAX_ALLOWED_SQL_LEN);
|
||||||
cmd_len = 0;
|
cmd_len = 0;
|
||||||
|
|
||||||
if (lineNo >= lastRowsPrint) {
|
if (lineNo >= lastRowsPrint) {
|
||||||
printf(" %d lines already be executed from file %s\n", lineNo, fileName);
|
printf(" %d lines already be executed from file %s\n", lineNo, fileName);
|
||||||
lastRowsPrint += 5000000;
|
lastRowsPrint += 5000000;
|
||||||
|
@ -2300,7 +2306,7 @@ static void taosStartDumpInWorkThreads(void* taosCon, struct arguments *args)
|
||||||
if (totalThreads > tsSqlFileNum) {
|
if (totalThreads > tsSqlFileNum) {
|
||||||
totalThreads = tsSqlFileNum;
|
totalThreads = tsSqlFileNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
SThreadParaObj *threadObj = (SThreadParaObj *)calloc(totalThreads, sizeof(SThreadParaObj));
|
SThreadParaObj *threadObj = (SThreadParaObj *)calloc(totalThreads, sizeof(SThreadParaObj));
|
||||||
for (int32_t t = 0; t < totalThreads; ++t) {
|
for (int32_t t = 0; t < totalThreads; ++t) {
|
||||||
pThread = threadObj + t;
|
pThread = threadObj + t;
|
||||||
|
@ -2330,7 +2336,7 @@ static void taosStartDumpInWorkThreads(void* taosCon, struct arguments *args)
|
||||||
|
|
||||||
int taosDumpIn(struct arguments *arguments) {
|
int taosDumpIn(struct arguments *arguments) {
|
||||||
assert(arguments->isDumpIn);
|
assert(arguments->isDumpIn);
|
||||||
|
|
||||||
TAOS *taos = NULL;
|
TAOS *taos = NULL;
|
||||||
FILE *fp = NULL;
|
FILE *fp = NULL;
|
||||||
|
|
||||||
|
@ -2345,22 +2351,22 @@ int taosDumpIn(struct arguments *arguments) {
|
||||||
int32_t tsSqlFileNumOfTbls = tsSqlFileNum;
|
int32_t tsSqlFileNumOfTbls = tsSqlFileNum;
|
||||||
if (tsDbSqlFile[0] != 0) {
|
if (tsDbSqlFile[0] != 0) {
|
||||||
tsSqlFileNumOfTbls--;
|
tsSqlFileNumOfTbls--;
|
||||||
|
|
||||||
fp = taosOpenDumpInFile(tsDbSqlFile);
|
fp = taosOpenDumpInFile(tsDbSqlFile);
|
||||||
if (NULL == fp) {
|
if (NULL == fp) {
|
||||||
fprintf(stderr, "failed to open input file %s\n", tsDbSqlFile);
|
fprintf(stderr, "failed to open input file %s\n", tsDbSqlFile);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "Success Open input file: %s\n", tsDbSqlFile);
|
fprintf(stderr, "Success Open input file: %s\n", tsDbSqlFile);
|
||||||
|
|
||||||
taosLoadFileCharset(fp, tsfCharset);
|
taosLoadFileCharset(fp, tsfCharset);
|
||||||
|
|
||||||
taosDumpInOneFile(taos, fp, tsfCharset, arguments->encode, tsDbSqlFile);
|
taosDumpInOneFile(taos, fp, tsfCharset, arguments->encode, tsDbSqlFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 != tsSqlFileNumOfTbls) {
|
if (0 != tsSqlFileNumOfTbls) {
|
||||||
taosStartDumpInWorkThreads(taos, arguments);
|
taosStartDumpInWorkThreads(taos, arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
taosFreeSQLFiles();
|
taosFreeSQLFiles();
|
||||||
|
|
|
@ -171,7 +171,7 @@ typedef struct HttpThread {
|
||||||
EpollFd pollFd;
|
EpollFd pollFd;
|
||||||
int32_t numOfContexts;
|
int32_t numOfContexts;
|
||||||
int32_t threadId;
|
int32_t threadId;
|
||||||
char label[HTTP_LABEL_SIZE];
|
char label[HTTP_LABEL_SIZE << 1];
|
||||||
bool (*processData)(HttpContext *pContext);
|
bool (*processData)(HttpContext *pContext);
|
||||||
} HttpThread;
|
} HttpThread;
|
||||||
|
|
||||||
|
|
|
@ -4466,13 +4466,18 @@ SArray* getOrderCheckColumns(SQueryAttr* pQuery) {
|
||||||
for(int32_t i = 0; i < numOfCols; ++i) {
|
for(int32_t i = 0; i < numOfCols; ++i) {
|
||||||
SColIndex* index = taosArrayGet(pOrderColumns, i);
|
SColIndex* index = taosArrayGet(pOrderColumns, i);
|
||||||
for(int32_t j = 0; j < pQuery->numOfOutput; ++j) {
|
for(int32_t j = 0; j < pQuery->numOfOutput; ++j) {
|
||||||
if (index->colId == pQuery->pExpr1[j].base.colInfo.colId) {
|
SSqlExpr* pExpr = &pQuery->pExpr1[j].base;
|
||||||
|
int32_t functionId = pExpr->functionId;
|
||||||
|
|
||||||
|
if (index->colId == pExpr->colInfo.colId &&
|
||||||
|
(functionId == TSDB_FUNC_PRJ || functionId == TSDB_FUNC_TAG || functionId == TSDB_FUNC_TS)) {
|
||||||
index->colIndex = j;
|
index->colIndex = j;
|
||||||
index->colId = pQuery->pExpr1[j].base.resColId;
|
index->colId = pExpr->resColId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return pOrderColumns;
|
return pOrderColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4804,7 +4809,7 @@ static SSDataBlock* doArithmeticOperation(void* param, bool* newgroup) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return result of the previous group in the firstly.
|
// Return result of the previous group in the firstly.
|
||||||
if (newgroup && pRes->info.rows > 0) {
|
if (*newgroup && pRes->info.rows > 0) {
|
||||||
pArithInfo->existDataBlock = pBlock;
|
pArithInfo->existDataBlock = pBlock;
|
||||||
clearNumOfRes(pInfo->pCtx, pOperator->numOfOutput);
|
clearNumOfRes(pInfo->pCtx, pOperator->numOfOutput);
|
||||||
return pInfo->pRes;
|
return pInfo->pRes;
|
||||||
|
|
|
@ -295,7 +295,7 @@ void *rpcOpen(const SRpcInit *pInit) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pRpc->pCache = rpcOpenConnCache(pRpc->sessions, rpcCloseConn, pRpc->tmrCtrl, pRpc->idleTime * 30);
|
pRpc->pCache = rpcOpenConnCache(pRpc->sessions, rpcCloseConn, pRpc->tmrCtrl, pRpc->idleTime * 20);
|
||||||
if ( pRpc->pCache == NULL ) {
|
if ( pRpc->pCache == NULL ) {
|
||||||
tError("%s failed to init connection cache", pRpc->label);
|
tError("%s failed to init connection cache", pRpc->label);
|
||||||
rpcClose(pRpc);
|
rpcClose(pRpc);
|
||||||
|
|
|
@ -539,7 +539,7 @@ static void taosNetTestServer(char *host, int32_t startPort, int32_t pkgLen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) {
|
void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) {
|
||||||
// tscEmbedded = 1;
|
tscEmbedded = 1;
|
||||||
if (host == NULL) host = tsLocalFqdn;
|
if (host == NULL) host = tsLocalFqdn;
|
||||||
if (port == 0) port = tsServerPort;
|
if (port == 0) port = tsServerPort;
|
||||||
if (pkgLen <= 10) pkgLen = 1000;
|
if (pkgLen <= 10) pkgLen = 1000;
|
||||||
|
@ -550,6 +550,7 @@ void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) {
|
||||||
} else if (0 == strcmp("server", role)) {
|
} else if (0 == strcmp("server", role)) {
|
||||||
taosNetTestServer(host, port, pkgLen);
|
taosNetTestServer(host, port, pkgLen);
|
||||||
} else if (0 == strcmp("rpc", role)) {
|
} else if (0 == strcmp("rpc", role)) {
|
||||||
|
tscEmbedded = 0;
|
||||||
taosNetTestRpc(host, port, pkgLen);
|
taosNetTestRpc(host, port, pkgLen);
|
||||||
} else if (0 == strcmp("sync", role)) {
|
} else if (0 == strcmp("sync", role)) {
|
||||||
taosNetCheckSync(host, port);
|
taosNetCheckSync(host, port);
|
||||||
|
@ -559,5 +560,5 @@ void taosNetTest(char *role, char *host, int32_t port, int32_t pkgLen) {
|
||||||
taosNetTestStartup(host, port);
|
taosNetTestStartup(host, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
// tscEmbedded = 0;
|
tscEmbedded = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,20 +28,22 @@ class TDTestCase:
|
||||||
sql = "select server_version()"
|
sql = "select server_version()"
|
||||||
ret = tdSql.query(sql)
|
ret = tdSql.query(sql)
|
||||||
version = tdSql.getData(0, 0)[0:3]
|
version = tdSql.getData(0, 0)[0:3]
|
||||||
expectedVersion = "2.0"
|
expectedVersion_dev = "2.0"
|
||||||
if(version == expectedVersion):
|
expectedVersion_master = "2.1"
|
||||||
tdLog.info("sql:%s, row:%d col:%d data:%s == expect:%s" % (sql, 0, 0, version, expectedVersion))
|
if(version == expectedVersion_dev or version == expectedVersion_master):
|
||||||
|
tdLog.info("sql:%s, row:%d col:%d data:%s == expect" % (sql, 0, 0, version))
|
||||||
else:
|
else:
|
||||||
tdLog.exit("sql:%s, row:%d col:%d data:%s != expect:%s" % (sql, 0, 0, version, expectedVersion))
|
tdLog.exit("sql:%s, row:%d col:%d data:%s != expect:%s or %s " % (sql, 0, 0, version, expectedVersion_dev, expectedVersion_master))
|
||||||
|
|
||||||
sql = "select client_version()"
|
sql = "select client_version()"
|
||||||
ret = tdSql.query(sql)
|
ret = tdSql.query(sql)
|
||||||
version = tdSql.getData(0, 0)[0:3]
|
version = tdSql.getData(0, 0)[0:3]
|
||||||
expectedVersion = "2.0"
|
expectedVersion_dev = "2.0"
|
||||||
if(version == expectedVersion):
|
expectedVersion_master = "2.1"
|
||||||
tdLog.info("sql:%s, row:%d col:%d data:%s == expect:%s" % (sql, 0, 0, version, expectedVersion))
|
if(version == expectedVersion_dev or version == expectedVersion_master):
|
||||||
|
tdLog.info("sql:%s, row:%d col:%d data:%s == expect" % (sql, 0, 0, version))
|
||||||
else:
|
else:
|
||||||
tdLog.exit("sql:%s, row:%d col:%d data:%s != expect:%s" % (sql, 0, 0, version, expectedVersion))
|
tdLog.exit("sql:%s, row:%d col:%d data:%s != expect:%s or %s " % (sql, 0, 0, version, expectedVersion_dev, expectedVersion_master))
|
||||||
|
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
|
|
@ -17332,3 +17332,168 @@
|
||||||
fun:PyVectorcall_Call
|
fun:PyVectorcall_Call
|
||||||
fun:_PyEval_EvalFrameDefault
|
fun:_PyEval_EvalFrameDefault
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:lib_build_and_cache_attr
|
||||||
|
fun:lib_getattr
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:_PyFunction_Vectorcall
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:_PyEval_EvalCodeWithName
|
||||||
|
fun:PyEval_EvalCode
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyVectorcall_Call
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:lib_build_and_cache_attr
|
||||||
|
fun:lib_getattr
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:_PyFunction_Vectorcall
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:PyEval_EvalCode
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:_PyEval_EvalCodeWithName
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:_my_Py_InitModule
|
||||||
|
fun:lib_getattr
|
||||||
|
fun:b_init_cffi_1_0_external_module
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyObject_CallMethod
|
||||||
|
fun:_cffi_init
|
||||||
|
fun:PyInit__bcrypt
|
||||||
|
fun:_PyImport_LoadDynamicModuleWithSpec
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyVectorcall_Call
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:_PyObject_GC_New
|
||||||
|
fun:lib_getattr
|
||||||
|
fun:ffi_internal_new
|
||||||
|
fun:b_init_cffi_1_0_external_module
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyObject_CallMethod
|
||||||
|
fun:_cffi_init
|
||||||
|
fun:PyInit__bcrypt
|
||||||
|
fun:_PyImport_LoadDynamicModuleWithSpec
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyVectorcall_Call
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:lib_build_cpython_func.isra.87
|
||||||
|
fun:lib_build_and_cache_attr
|
||||||
|
fun:lib_getattr
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:_PyFunction_Vectorcall
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:lib_build_and_cache_attr
|
||||||
|
fun:lib_getattr
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:_PyFunction_Vectorcall
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
fun:_PyEval_EvalCodeWithName
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:_my_Py_InitModule
|
||||||
|
fun:b_init_cffi_1_0_external_module
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyObject_CallMethod
|
||||||
|
fun:_cffi_init
|
||||||
|
fun:PyInit__bcrypt
|
||||||
|
fun:_PyImport_LoadDynamicModuleWithSpec
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyVectorcall_Call
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:_my_Py_InitModule
|
||||||
|
fun:b_init_cffi_1_0_external_module
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyObject_CallMethod
|
||||||
|
fun:PyInit__openssl
|
||||||
|
fun:_PyImport_LoadDynamicModuleWithSpec
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyVectorcall_Call
|
||||||
|
fun:_PyEval_EvalFrameDefault
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<insert_a_suppression_name_here>
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:malloc
|
||||||
|
fun:_PyObject_GC_New
|
||||||
|
fun:ffi_internal_new
|
||||||
|
fun:b_init_cffi_1_0_external_module
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyObject_CallMethod
|
||||||
|
fun:_cffi_init
|
||||||
|
fun:PyInit__bcrypt
|
||||||
|
fun:_PyImport_LoadDynamicModuleWithSpec
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
obj:/usr/bin/python3.8
|
||||||
|
fun:PyVectorcall_Call
|
||||||
|
}
|
Loading…
Reference in New Issue