提交 3fb5b54f 编写于 作者: H Haojun Liao

Merge branch 'develop' into feature/query

......@@ -10,3 +10,6 @@
[submodule "tests/examples/rust"]
path = tests/examples/rust
url = https://github.com/songtianyi/tdengine-rust-bindings.git
[submodule "deps/jemalloc"]
path = deps/jemalloc
url = https://github.com/jemalloc/jemalloc
......@@ -59,6 +59,11 @@ IF (TD_LINUX_64)
MESSAGE(STATUS "linux64 is defined")
SET(COMMON_FLAGS "-std=gnu99 -Wall -Werror -fPIC -gdwarf-2 -msse4.2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE")
ADD_DEFINITIONS(-DUSE_LIBICONV)
IF (JEMALLOC_ENABLED)
ADD_DEFINITIONS(-DTD_JEMALLOC_ENABLED -I${CMAKE_BINARY_DIR}/build/include -L${CMAKE_BINARY_DIR}/build/lib -Wl,-rpath,${CMAKE_BINARY_DIR}/build/lib -ljemalloc)
ENDIF ()
ENDIF ()
IF (TD_LINUX_32)
......
......@@ -72,3 +72,8 @@ IF (${RANDOM_NETWORK_FAIL} MATCHES "true")
SET(TD_RANDOM_NETWORK_FAIL TRUE)
MESSAGE(STATUS "build with random-network-fail enabled")
ENDIF ()
IF (${JEMALLOC_ENABLED} MATCHES "true")
SET(TD_JEMALLOC_ENABLED TRUE)
MESSAGE(STATUS "build with jemalloc enabled")
ENDIF ()
......@@ -18,3 +18,16 @@ ENDIF ()
IF (TD_DARWIN AND TD_MQTT)
ADD_SUBDIRECTORY(MQTT-C)
ENDIF ()
IF (TD_LINUX_64 AND JEMALLOC_ENABLED)
MESSAGE("setup dpes/jemalloc, current source dir:" ${CMAKE_CURRENT_SOURCE_DIR})
MESSAGE("binary dir:" ${CMAKE_BINARY_DIR})
include(ExternalProject)
ExternalProject_Add(jemalloc
PREFIX "jemalloc"
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/
BUILD_COMMAND ${MAKE}
)
ENDIF ()
Subproject commit ea6b3e973b477b8061e0076bb257dbd7f3faa756
......@@ -107,9 +107,9 @@ TDengine采取的是Master-Slave模式进行同步,与流行的RAFT一致性
![replica-forward.png](page://images/architecture/replica-forward.png)
1. 应用对写请求做基本的合法性检查,通过,则给请求包打上一个版本号(version, 单调递增)
1. 应用对写请求做基本的合法性检查,通过,则给请求包打上一个版本号(version, 单调递增)
2. 应用将打上版本号的写请求封装一个WAL Head, 写入WAL(Write Ahead Log)
3. 应用调用API syncForwardToPeer,如vnode B是slave状态,sync模块将包含WAL Head的数据包通过Forward消息发送给vnode B,否则就不转发。
3. 应用调用API syncForwardToPeer,如vnode B是slave状态,sync模块将包含WAL Head的数据包通过Forward消息发送给vnode B,否则就不转发。
4. vnode B收到Forward消息后,调用回调函数writeToCache, 交给应用处理
5. vnode B应用在写入成功后,都需要调用syncAckForward通知sync模块已经写入成功。
6. 如果quorum大于1,vnode B需要等待应用的回复确认,收到确认后,vnode B发送Forward Response消息给node A。
......@@ -219,7 +219,7 @@ Arbitrator的程序tarbitrator.c在复制模块的同一目录, 编译整个系
不同之处:
- 选举流程不一样:Raft里任何一个节点是candidate时,主动向其他节点发出vote request, 如果超过半数回答Yes, 这个candidate就成为Leader,开始一个新的term. 而TDengine的实现里,节点上线、离线或角色改变都会触发状态消息在节点组类传播,等节点组里状态稳定一致之后才触发选举流程,因为状态稳定一致,基于同样的状态信息,每个节点做出的决定会是一致的,一旦某个节点符合成为master的条件,无需其他节点认可,它会自动将自己设为master。TDengine里,任何一个节点检测到其他节点或自己的角色发生改变,就会给节点组内其他节点进行广播的。Raft里不存在这样的机制,因此需要投票来解决。
- 选举流程不一样:Raft里任何一个节点是candidate时,主动向其他节点发出vote request,如果超过半数回答Yes,这个candidate就成为Leader,开始一个新的term。而TDengine的实现里,节点上线、离线或角色改变都会触发状态消息在节点组内传播,等节点组里状态稳定一致之后才触发选举流程,因为状态稳定一致,基于同样的状态信息,每个节点做出的决定会是一致的,一旦某个节点符合成为master的条件,无需其他节点认可,它会自动将自己设为master。TDengine里,任何一个节点检测到其他节点或自己的角色发生改变,就会向节点组内其他节点进行广播。Raft里不存在这样的机制,因此需要投票来解决。
- 对WAL的一条记录,Raft用term + index来做唯一标识。但TDengine只用version(类似index),在TDengine实现里,仅仅用version是完全可行的, 因为TDengine的选举机制,没有term的概念。
如果整个虚拟节点组全部宕机,重启,但不是所有虚拟节点都上线,这个时候TDengine是不会选出master的,因为未上线的节点有可能有最高version的数据。而RAFT协议,只要超过半数上线,就会选出Leader。
......
......@@ -343,7 +343,7 @@ TDengine采用数据驱动的方式让缓存中的数据写入硬盘进行持久
对于采集的数据,一般有保留时长,这个时长由系统配置参数keep决定。超过这个设置天数的数据文件,将被系统自动删除,释放存储空间。
给定days与keep两个参数,一个vnode总的数据文件数为:keep/days。总的数据文件个数不宜过大,也不宜过小。10到100以内合适。基于这个原则,可以设置合理的days。 目前的版本,参数keep可以修改,但对于参数days,一但设置后,不可修改。
给定days与keep两个参数,一个典型工作状态的vnode中总的数据文件数为:`向上取整(keep/days)+1`。总的数据文件个数不宜过大,也不宜过小。10到100以内合适。基于这个原则,可以设置合理的days。 目前的版本,参数keep可以修改,但对于参数days,一但设置后,不可修改。
在每个数据文件里,一张表的数据是一块一块存储的。一张表可以有一到多个数据文件块。在一个文件块里,数据是列式存储的,占用的是一片连续的存储空间,这样大大提高读取速度。文件块的大小由系统参数maxRows(每块最大记录条数)决定,缺省值为4096。这个值不宜过大,也不宜过小。过大,定位具体时间段的数据的搜索时间会变长,影响读取速度;过小,数据块的索引太大,压缩效率偏低,也影响读取速度。
......
......@@ -516,7 +516,7 @@ conn.close()
- _TDengineCursor_ 类
参考python中help(taos.TDengineCursor)。
这个类对应客户端进行的写入、查询操作。在客户端多线程的场景下,这个游标实例必须保持线程独享,不能线程共享使用,否则会导致返回结果出现错误。
这个类对应客户端进行的写入、查询操作。在客户端多线程的场景下,这个游标实例必须保持线程独享,不能线程共享使用,否则会导致返回结果出现错误。
- _connect_ 方法
......
......@@ -37,7 +37,7 @@ taos> DESCRIBE meters;
- Epoch Time:时间戳也可以是一个长整数,表示从 1970-01-01 08:00:00.000 开始的毫秒数
- 时间可以加减,比如 now-2h,表明查询时刻向前推 2 个小时(最近 2 小时)。数字后面的时间单位可以是 u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。 比如 `select * from t1 where ts > now-2w and ts <= now-1w`,表示查询两周前整整一周的数据。在指定降频操作(down sampling)的时间窗口(interval)时,时间单位还可以使用 n(自然月) 和 y(自然年)。
TDengine 缺省的时间戳是毫秒精度,但通过修改配置参数 enableMicrosecond 就可以支持微秒。
TDengine 缺省的时间戳是毫秒精度,但通过在 CREATE DATABASE 时传递的 PRECISION 参数就可以支持微秒。
在TDengine中,普通表的数据模型中可使用以下 10 种数据类型。
......@@ -400,6 +400,7 @@ TDengine 缺省的时间戳是毫秒精度,但通过修改配置参数 enableM
tb2_name (tb2_field1_name, ...) [USING stb2_name TAGS (tag_value2, ...)] VALUES (field1_value1, ...) (field1_value2, ...) ...;
```
以自动建表的方式,同时向表tb1_name和tb2_name中按列分别插入多条记录。
说明:`(tb1_field1_name, ...)`的部分可以省略掉,这样就是使用全列模式写入——也即在 VALUES 部分提供的数据,必须为数据表的每个列都显式地提供数据。全列写入速度会远快于指定列,因此建议尽可能采用全列写入方式,此时空列可以填入NULL。
从 2.0.20.5 版本开始,子表的列名可以不跟在子表名称后面,而是可以放在 TAGS 和 VALUES 之间,例如像下面这样写:
```mysql
INSERT INTO tb1_name [USING stb1_name TAGS (tag_value1, ...)] (tb1_field1_name, ...) VALUES (field1_value1, ...) (field1_value2, ...) ...;
......@@ -423,9 +424,9 @@ Query OK, 1 row(s) in set (0.001029s)
taos> SHOW TABLES;
Query OK, 0 row(s) in set (0.000946s)
taos> INSERT INTO d1001 USING meters TAGS('Beijing.Chaoyang', 2);
taos> INSERT INTO d1001 USING meters TAGS('Beijing.Chaoyang', 2) VALUES('a');
DB error: invalid SQL: keyword VALUES or FILE required
DB error: invalid SQL: 'a' (invalid timestamp) (0.039494s)
taos> SHOW TABLES;
table_name | created_time | columns | stable_name |
......
......@@ -6,7 +6,7 @@ set -e
#set -x
# release.sh -v [cluster | edge]
# -c [aarch32 | aarch64 | x64 | x86 | mips64 ...]
# -c [aarch32 | aarch64 | x64 | x86 | mips64 ...]
# -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
# -V [stable | beta]
# -l [full | lite]
......@@ -22,11 +22,12 @@ cpuType=x64 # [aarch32 | aarch64 | x64 | x86 | mips64 ...]
osType=Linux # [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
pagMode=full # [full | lite]
soMode=dynamic # [static | dynamic]
allocator=glibc # [glibc | jemalloc]
dbName=taos # [taos | power]
verNumber=""
verNumberComp="2.0.0.0"
while getopts "hv:V:c:o:l:s:d:n:m:" arg
while getopts "hv:V:c:o:l:s:d:a:n:m:" arg
do
case $arg in
v)
......@@ -53,6 +54,10 @@ do
#echo "dbName=$OPTARG"
dbName=$(echo $OPTARG)
;;
a)
#echo "allocator=$OPTARG"
allocator=$(echo $OPTARG)
;;
n)
#echo "verNumber=$OPTARG"
verNumber=$(echo $OPTARG)
......@@ -71,20 +76,21 @@ do
echo " -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...] "
echo " -V [stable | beta] "
echo " -l [full | lite] "
echo " -a [glibc | jemalloc] "
echo " -s [static | dynamic] "
echo " -d [taos | power] "
echo " -n [version number] "
echo " -m [compatible version number] "
exit 0
;;
?) #unknow option
?) #unknow option
echo "unkonw argument"
exit 1
;;
esac
done
echo "verMode=${verMode} verType=${verType} cpuType=${cpuType} osType=${osType} pagMode=${pagMode} soMode=${soMode} dbName=${dbName} verNumber=${verNumber} verNumberComp=${verNumberComp}"
echo "verMode=${verMode} verType=${verType} cpuType=${cpuType} osType=${osType} pagMode=${pagMode} soMode=${soMode} dbName=${dbName} allocator=${allocator} verNumber=${verNumber} verNumberComp=${verNumberComp}"
curr_dir=$(pwd)
......@@ -118,7 +124,7 @@ function vercomp () {
echo 0
exit 0
fi
local IFS=.
local i ver1=($1) ver2=($2)
......@@ -164,7 +170,7 @@ if [[ "$verMode" == "cluster" ]]; then
else
gitinfoOfInternal=NULL
fi
cd ${curr_dir}
# 2. cmake executable file
......@@ -180,12 +186,18 @@ else
fi
cd ${compile_dir}
if [[ "$allocator" == "jemalloc" ]]; then
allocator_macro="-DJEMALLOC_ENABLED=true"
else
allocator_macro=""
fi
# check support cpu type
if [[ "$cpuType" == "x64" ]] || [[ "$cpuType" == "aarch64" ]] || [[ "$cpuType" == "aarch32" ]] || [[ "$cpuType" == "mips64" ]] ; then
if [ "$verMode" != "cluster" ]; then
cmake ../ -DCPUTYPE=${cpuType} -DOSTYPE=${osType} -DSOMODE=${soMode} -DDBNAME=${dbName} -DVERTYPE=${verType} -DVERDATE="${build_time}" -DGITINFO=${gitinfo} -DGITINFOI=${gitinfoOfInternal} -DVERNUMBER=${verNumber} -DVERCOMPATIBLE=${verNumberComp} -DPAGMODE=${pagMode}
cmake ../ -DCPUTYPE=${cpuType} -DOSTYPE=${osType} -DSOMODE=${soMode} -DDBNAME=${dbName} -DVERTYPE=${verType} -DVERDATE="${build_time}" -DGITINFO=${gitinfo} -DGITINFOI=${gitinfoOfInternal} -DVERNUMBER=${verNumber} -DVERCOMPATIBLE=${verNumberComp} -DPAGMODE=${pagMode} ${allocator_macro}
else
cmake ../../ -DCPUTYPE=${cpuType} -DOSTYPE=${osType} -DSOMODE=${soMode} -DDBNAME=${dbName} -DVERTYPE=${verType} -DVERDATE="${build_time}" -DGITINFO=${gitinfo} -DGITINFOI=${gitinfoOfInternal} -DVERNUMBER=${verNumber} -DVERCOMPATIBLE=${verNumberComp}
cmake ../../ -DCPUTYPE=${cpuType} -DOSTYPE=${osType} -DSOMODE=${soMode} -DDBNAME=${dbName} -DVERTYPE=${verType} -DVERDATE="${build_time}" -DGITINFO=${gitinfo} -DGITINFOI=${gitinfoOfInternal} -DVERNUMBER=${verNumber} -DVERCOMPATIBLE=${verNumberComp} ${allocator_macro}
fi
else
echo "input cpuType=${cpuType} error!!!"
......@@ -199,9 +211,9 @@ cd ${curr_dir}
# 3. Call the corresponding script for packaging
if [ "$osType" != "Darwin" ]; then
if [[ "$verMode" != "cluster" ]] && [[ "$cpuType" == "x64" ]] && [[ "$dbName" == "taos" ]]; then
ret='0'
ret='0'
command -v dpkg >/dev/null 2>&1 || { ret='1'; }
if [ "$ret" -eq 0 ]; then
if [ "$ret" -eq 0 ]; then
echo "====do deb package for the ubuntu system===="
output_dir="${top_dir}/debs"
if [ -d ${output_dir} ]; then
......@@ -214,9 +226,9 @@ if [ "$osType" != "Darwin" ]; then
echo "==========dpkg command not exist, so not release deb package!!!"
fi
ret='0'
ret='0'
command -v rpmbuild >/dev/null 2>&1 || { ret='1'; }
if [ "$ret" -eq 0 ]; then
if [ "$ret" -eq 0 ]; then
echo "====do rpm package for the centos system===="
output_dir="${top_dir}/rpms"
if [ -d ${output_dir} ]; then
......@@ -229,11 +241,11 @@ if [ "$osType" != "Darwin" ]; then
echo "==========rpmbuild command not exist, so not release rpm package!!!"
fi
fi
echo "====do tar.gz package for all systems===="
cd ${script_dir}/tools
if [[ "$dbName" == "taos" ]]; then
if [[ "$dbName" == "taos" ]]; then
${csudo} ./makepkg.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode}
${csudo} ./makeclient.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode}
${csudo} ./makearbi.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode}
......
#!/bin/bash
#
# This file is used to install TAOS time-series database on linux systems. The operating system
# This file is used to install TAOS time-series database on linux systems. The operating system
# is required to use systemd to manage services at boot
set -e
# set -x
# -----------------------Variables definition---------------------
# -----------------------Variables definition
source_dir=$1
binary_dir=$2
osType=$3
......@@ -71,9 +71,9 @@ if [ "$osType" != "Darwin" ]; then
service_mod=0
elif $(which service &> /dev/null); then
service_mod=1
service_config_dir="/etc/init.d"
service_config_dir="/etc/init.d"
if $(which chkconfig &> /dev/null); then
initd_mod=1
initd_mod=1
elif $(which insserv &> /dev/null); then
initd_mod=2
elif $(which update-rc.d &> /dev/null); then
......@@ -123,9 +123,9 @@ function kill_taosd() {
function install_main_path() {
#create install main dir and all sub dir
${csudo} rm -rf ${install_main_dir} || :
${csudo} mkdir -p ${install_main_dir}
${csudo} mkdir -p ${install_main_dir}
${csudo} mkdir -p ${install_main_dir}/cfg
${csudo} mkdir -p ${install_main_dir}/bin
${csudo} mkdir -p ${install_main_dir}/bin
${csudo} mkdir -p ${install_main_dir}/connector
${csudo} mkdir -p ${install_main_dir}/driver
${csudo} mkdir -p ${install_main_dir}/examples
......@@ -176,6 +176,49 @@ function install_bin() {
[ -x ${install_main_dir}/bin/remove_client.sh ] && ${csudo} ln -s ${install_main_dir}/bin/remove_client.sh ${bin_link_dir}/rmtaos || :
fi
}
function install_jemalloc() {
if [ "$osType" != "Darwin" ]; then
/usr/bin/install -c -d /usr/local/bin
if [ -f ${binary_dir}/build/bin/jemalloc-config ]; then
/usr/bin/install -c -m 755 ${binary_dir}/build/bin/jemalloc-config /usr/local/bin
fi
if [ -f ${binary_dir}/build/bin/jemalloc.sh ]; then
/usr/bin/install -c -m 755 ${binary_dir}/build/bin/jemalloc.sh /usr/local/bin
fi
if [ -f ${binary_dir}/build/bin/jeprof ]; then
/usr/bin/install -c -m 755 ${binary_dir}/build/bin/jeprof /usr/local/bin
fi
if [ -f ${binary_dir}/build/include/jemalloc/jemalloc.h ]; then
/usr/bin/install -c -d /usr/local/include/jemalloc
/usr/bin/install -c -m 644 ${binary_dir}/build/include/jemalloc/jemalloc.h /usr/local/include/jemalloc
fi
if [ -f ${binary_dir}/build/lib/libjemalloc.so.2 ]; then
/usr/bin/install -c -d /usr/local/lib
/usr/bin/install -c -m 755 ${binary_dir}/build/lib/libjemalloc.so.2 /usr/local/lib
ln -sf libjemalloc.so.2 /usr/local/lib/libjemalloc.so
/usr/bin/install -c -d /usr/local/lib
if [ -f ${binary_dir}/build/lib/libjemalloc.a ]; then
/usr/bin/install -c -m 755 ${binary_dir}/build/lib/libjemalloc.a /usr/local/lib
fi
if [ -f ${binary_dir}/build/lib/libjemalloc_pic.a ]; then
/usr/bin/install -c -m 755 ${binary_dir}/build/lib/libjemalloc_pic.a /usr/local/lib
fi
if [ -f ${binary_dir}/build/lib/libjemalloc_pic.a ]; then
/usr/bin/install -c -d /usr/local/lib/pkgconfig
/usr/bin/install -c -m 644 ${binary_dir}/build/lib/pkgconfig/jemalloc.pc /usr/local/lib/pkgconfig
fi
fi
if [ -f ${binary_dir}/build/share/doc/jemalloc/jemalloc.html ]; then
/usr/bin/install -c -d /usr/local/share/doc/jemalloc
/usr/bin/install -c -m 644 ${binary_dir}/build/share/doc/jemalloc/jemalloc.html /usr/local/share/doc/jemalloc
fi
if [ -f ${binary_dir}/build/share/man/man3/jemalloc.3 ]; then
/usr/bin/install -c -d /usr/local/share/man/man3
/usr/bin/install -c -m 644 ${binary_dir}/build/share/man/man3/jemalloc.3 /usr/local/share/man/man3
fi
fi
}
function install_lib() {
# Remove links
......@@ -183,12 +226,12 @@ function install_lib() {
if [ "$osType" != "Darwin" ]; then
${csudo} rm -f ${lib64_link_dir}/libtaos.* || :
fi
if [ "$osType" != "Darwin" ]; then
${csudo} cp ${binary_dir}/build/lib/libtaos.so.${verNumber} ${install_main_dir}/driver && ${csudo} chmod 777 ${install_main_dir}/driver/*
${csudo} ln -sf ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1
${csudo} ln -sf ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so
if [ -d "${lib64_link_dir}" ]; then
${csudo} ln -sf ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1
${csudo} ln -sf ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so
......@@ -198,7 +241,9 @@ function install_lib() {
${csudo} ln -sf ${install_main_dir}/driver/libtaos.1.dylib ${lib_link_dir}/libtaos.1.dylib
${csudo} ln -sf ${lib_link_dir}/libtaos.1.dylib ${lib_link_dir}/libtaos.dylib
fi
install_jemalloc
if [ "$osType" != "Darwin" ]; then
${csudo} ldconfig
fi
......@@ -206,26 +251,26 @@ function install_lib() {
function install_header() {
${csudo} rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taoserror.h || :
${csudo} cp -f ${source_dir}/src/inc/taos.h ${source_dir}/src/inc/taoserror.h ${install_main_dir}/include && ${csudo} chmod 644 ${install_main_dir}/include/*
${csudo} rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taoserror.h || :
${csudo} cp -f ${source_dir}/src/inc/taos.h ${source_dir}/src/inc/taoserror.h ${install_main_dir}/include && ${csudo} chmod 644 ${install_main_dir}/include/*
${csudo} ln -s ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h
${csudo} ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
}
function install_config() {
#${csudo} rm -f ${install_main_dir}/cfg/taos.cfg || :
if [ ! -f ${cfg_install_dir}/taos.cfg ]; then
if [ ! -f ${cfg_install_dir}/taos.cfg ]; then
${csudo} mkdir -p ${cfg_install_dir}
[ -f ${script_dir}/../cfg/taos.cfg ] && ${csudo} cp ${script_dir}/../cfg/taos.cfg ${cfg_install_dir}
${csudo} chmod 644 ${cfg_install_dir}/*
fi
fi
${csudo} cp -f ${script_dir}/../cfg/taos.cfg ${install_main_dir}/cfg/taos.cfg.org
${csudo} ln -s ${cfg_install_dir}/taos.cfg ${install_main_dir}/cfg
${csudo} ln -s ${cfg_install_dir}/taos.cfg ${install_main_dir}/cfg
}
function install_log() {
function install_log() {
${csudo} rm -rf ${log_dir} || :
if [ "$osType" != "Darwin" ]; then
......@@ -239,7 +284,7 @@ function install_log() {
function install_data() {
${csudo} mkdir -p ${data_dir}
${csudo} ln -s ${data_dir} ${install_main_dir}/data
${csudo} ln -s ${data_dir} ${install_main_dir}/data
}
function install_connector() {
......@@ -254,8 +299,8 @@ function install_connector() {
echo "WARNING: go connector not found, please check if want to use it!"
fi
${csudo} cp -rf ${source_dir}/src/connector/python ${install_main_dir}/connector
${csudo} cp ${binary_dir}/build/lib/*.jar ${install_main_dir}/connector &> /dev/null && ${csudo} chmod 777 ${install_main_dir}/connector/*.jar || echo &> /dev/null
${csudo} cp ${binary_dir}/build/lib/*.jar ${install_main_dir}/connector &> /dev/null && ${csudo} chmod 777 ${install_main_dir}/connector/*.jar || echo &> /dev/null
}
function install_examples() {
......@@ -264,8 +309,8 @@ function install_examples() {
function clean_service_on_sysvinit() {
#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
${csudo} service taosd stop || :
fi
......@@ -277,9 +322,9 @@ function clean_service_on_sysvinit() {
elif ((${initd_mod}==3)); then
${csudo} update-rc.d -f taosd remove || :
fi
${csudo} rm -f ${service_config_dir}/taosd || :
if $(which init &> /dev/null); then
${csudo} init q || :
fi
......@@ -298,10 +343,10 @@ function install_service_on_sysvinit() {
${csudo} cp -f ${script_dir}/../rpm/taosd ${install_main_dir}/init.d
${csudo} cp ${script_dir}/../rpm/taosd ${service_config_dir} && ${csudo} chmod a+x ${service_config_dir}/taosd
fi
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
#${csudo} grep -q -F "$restart_config_str" /etc/inittab || ${csudo} bash -c "echo '${restart_config_str}' >> /etc/inittab"
if ((${initd_mod}==1)); then
${csudo} chkconfig --add taosd || :
${csudo} chkconfig --level 2345 taosd on || :
......@@ -323,7 +368,7 @@ function clean_service_on_systemd() {
${csudo} systemctl disable taosd &> /dev/null || echo &> /dev/null
${csudo} rm -f ${taosd_service_config}
}
}
# taos:2345:respawn:/etc/init.d/taosd start
......@@ -383,7 +428,7 @@ function update_TDengine() {
sleep 1
fi
fi
install_main_path
install_log
......@@ -431,16 +476,16 @@ function install_TDengine() {
# Start to install
if [ "$osType" != "Darwin" ]; then
echo -e "${GREEN}Start to install TDEngine...${NC}"
else
echo -e "${GREEN}Start to install TDEngine Client ...${NC}"
else
echo -e "${GREEN}Start to install TDEngine Client ...${NC}"
fi
install_main_path
install_main_path
if [ "$osType" != "Darwin" ]; then
if [ "$osType" != "Darwin" ]; then
install_data
fi
install_log
install_log
install_header
install_lib
install_connector
......@@ -452,7 +497,7 @@ function install_TDengine() {
install_service
fi
install_config
install_config
if [ "$osType" != "Darwin" ]; then
# Ask if to start the service
......
......@@ -123,6 +123,8 @@ int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, i
*/
bool tscIsPointInterpQuery(SQueryInfo* pQueryInfo);
bool tscIsTWAQuery(SQueryInfo* pQueryInfo);
bool tscIsSessionWindowQuery(SQueryInfo* pQueryInfo);
bool tscIsSecondStageQuery(SQueryInfo* pQueryInfo);
bool tsIsArithmeticQueryOnAggResult(SQueryInfo* pQueryInfo);
bool tscGroupbyColumn(SQueryInfo* pQueryInfo);
bool tscIsTopBotQuery(SQueryInfo* pQueryInfo);
......
......@@ -1286,7 +1286,7 @@ int stmtParseInsertTbTags(SSqlObj* pSql, STscStmt* pStmt) {
}
sToken = tStrGetToken(pCmd->insertParam.sql, &index, false);
if (sToken.n <= 0 || sToken.type != TK_VALUES) {
if (sToken.n <= 0 || (sToken.type != TK_VALUES && sToken.type != TK_LP)) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
......
......@@ -41,11 +41,11 @@
#define TSWINDOW_IS_EQUAL(t1, t2) (((t1).skey == (t2).skey) && ((t1).ekey == (t2).ekey))
// -1 is tbname column index, so here use the -3 as the initial value
#define COLUMN_INDEX_INITIAL_VAL (-3)
// -1 is tbname column index, so here use the -2 as the initial value
#define COLUMN_INDEX_INITIAL_VAL (-2)
#define COLUMN_INDEX_INITIALIZER \
{ COLUMN_INDEX_INITIAL_VAL, COLUMN_INDEX_INITIAL_VAL }
#define COLUMN_INDEX_VALIDE(index) (((index).tableIndex >= 0) && ((index).columnIndex >= TSDB_BLOCK_DIST_COLUMN_INDEX))
#define COLUMN_INDEX_VALIDE(index) (((index).tableIndex >= 0) && ((index).columnIndex >= TSDB_TBNAME_COLUMN_INDEX))
#define TBNAME_LIST_SEP ","
typedef struct SColumnList { // todo refactor
......@@ -90,6 +90,7 @@ static int32_t validateGroupbyNode(SQueryInfo* pQueryInfo, SArray* pList, SSqlCm
static int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pSqlNode);
static int32_t parseIntervalOffset(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SStrToken* offsetToken);
static int32_t parseSlidingClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SStrToken* pSliding);
static int32_t validateStateWindowNode(SSqlCmd* pSql, SQueryInfo* pQueryInfo, SSqlNode* pSqlNode, bool isStable);
static int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExprItem* pItem);
......@@ -851,6 +852,59 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS
// The following part is used to check for the invalid query expression.
return checkInvalidExprForTimeWindow(pCmd, pQueryInfo);
}
static int32_t validateStateWindowNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlNode, bool isStable) {
const char* msg1 = "invalid column name";
const char* msg3 = "not support state_window with group by ";
const char* msg4 = "function not support for super table query";
SStrToken *col = &(pSqlNode->windowstateVal.col) ;
if (col->z == NULL || col->n <= 0) {
return TSDB_CODE_SUCCESS;
}
if (pQueryInfo->colList == NULL) {
pQueryInfo->colList = taosArrayInit(4, POINTER_BYTES);
}
if (pQueryInfo->groupbyExpr.numOfGroupCols > 0) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
pQueryInfo->groupbyExpr.numOfGroupCols = 1;
//TODO(dengyihao): check tag column
if (isStable) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4);
}
SColumnIndex index = COLUMN_INDEX_INITIALIZER;
if (getColumnIndexByName(pCmd, col, pQueryInfo, &index) != TSDB_CODE_SUCCESS) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1);
}
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
STableMeta* pTableMeta = pTableMetaInfo->pTableMeta;
int32_t numOfCols = tscGetNumOfColumns(pTableMeta);
if (index.columnIndex == TSDB_TBNAME_COLUMN_INDEX || index.columnIndex >= numOfCols) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
SGroupbyExpr* pGroupExpr = &pQueryInfo->groupbyExpr;
if (pGroupExpr->columnInfo == NULL) {
pGroupExpr->columnInfo = taosArrayInit(4, sizeof(SColIndex));
}
SSchema* pSchema = tscGetTableColumnSchema(pTableMeta, index.columnIndex);
if (pSchema->type == TSDB_DATA_TYPE_TIMESTAMP || pSchema->type == TSDB_DATA_TYPE_FLOAT || pSchema->type == TSDB_DATA_TYPE_DOUBLE) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1);
}
tscColumnListInsert(pQueryInfo->colList, index.columnIndex, pTableMeta->id.uid, pSchema);
SColIndex colIndex = { .colIndex = index.columnIndex, .flag = TSDB_COL_NORMAL, .colId = pSchema->colId };
taosArrayPush(pGroupExpr->columnInfo, &colIndex);
pQueryInfo->groupbyExpr.orderType = TSDB_ORDER_ASC;
pQueryInfo->stateWindow = true;
return TSDB_CODE_SUCCESS;
}
int32_t validateSessionNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode * pSqlNode) {
const char* msg1 = "gap should be fixed time window";
......@@ -885,11 +939,17 @@ int32_t validateSessionNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode * pS
if (pQueryInfo->sessionWindow.gap != 0 && pQueryInfo->interval.interval != 0) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
}
if (pQueryInfo->sessionWindow.gap == 0) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4);
}
SColumnIndex index = COLUMN_INDEX_INITIALIZER;
if (getColumnIndexByName(pCmd, col, pQueryInfo, &index) != TSDB_CODE_SUCCESS) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
if (index.columnIndex != PRIMARYKEY_TIMESTAMP_COL_INDEX) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
pQueryInfo->sessionWindow.primaryColId = PRIMARYKEY_TIMESTAMP_COL_INDEX;
......@@ -1873,9 +1933,6 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
if (index.columnIndex == TSDB_TBNAME_COLUMN_INDEX) {
SSchema* colSchema = tGetTbnameColumnSchema();
tscAddFuncInSelectClause(pQueryInfo, startPos, TSDB_FUNC_TAGPRJ, &index, colSchema, TSDB_COL_TAG, getNewResColId(pCmd));
} else if (index.columnIndex == TSDB_BLOCK_DIST_COLUMN_INDEX) {
SSchema colSchema = tGetBlockDistColumnSchema();
tscAddFuncInSelectClause(pQueryInfo, startPos, TSDB_FUNC_PRJ, &index, &colSchema, TSDB_COL_TAG, getNewResColId(pCmd));
} else {
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
STableMeta* pTableMeta = pTableMetaInfo->pTableMeta;
......@@ -2487,7 +2544,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
}
SColumnIndex index = {.tableIndex = 0, .columnIndex = TSDB_BLOCK_DIST_COLUMN_INDEX,};
SColumnIndex index = {.tableIndex = 0, .columnIndex = 0,};
pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
SSchema s = {.name = "block_dist", .type = TSDB_DATA_TYPE_BINARY};
......@@ -2495,10 +2552,16 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
int16_t resType = 0;
int16_t bytes = 0;
getResultDataInfo(TSDB_DATA_TYPE_INT, 4, TSDB_FUNC_BLKINFO, 0, &resType, &bytes, &inter, 0, 0);
s.bytes = bytes;
s.type = (uint8_t)resType;
SExprInfo* pExpr = tscAddFuncInSelectClause(pQueryInfo, 0, TSDB_FUNC_BLKINFO, &index, &s, TSDB_COL_TAG, getNewResColId(pCmd));
SExprInfo* pExpr = tscExprInsert(pQueryInfo, 0, TSDB_FUNC_BLKINFO, &index, resType,
bytes, getNewResColId(pCmd), bytes, 0);
tstrncpy(pExpr->base.aliasName, s.name, sizeof(pExpr->base.aliasName));
SColumnList ids = createColumnList(1, index.tableIndex, index.columnIndex);
insertResultField(pQueryInfo, 0, &ids, bytes, s.type, s.name, pExpr);
pExpr->base.numOfParams = 1;
pExpr->base.param[0].i64 = pTableMetaInfo->pTableMeta->tableInfo.rowSize;
pExpr->base.param[0].nType = TSDB_DATA_TYPE_BIGINT;
......@@ -2545,14 +2608,6 @@ static bool isTablenameToken(SStrToken* token) {
return (strncasecmp(TSQL_TBNAME_L, tmpToken.z, tmpToken.n) == 0 && tmpToken.n == strlen(TSQL_TBNAME_L));
}
static bool isTableBlockDistToken(SStrToken* token) {
SStrToken tmpToken = *token;
SStrToken tableToken = {0};
extractTableNameFromToken(&tmpToken, &tableToken);
return (strncasecmp(TSQL_BLOCK_DIST, tmpToken.z, tmpToken.n) == 0 && tmpToken.n == strlen(TSQL_BLOCK_DIST_L));
}
static int16_t doGetColumnIndex(SQueryInfo* pQueryInfo, int32_t index, SStrToken* pToken) {
STableMeta* pTableMeta = tscGetMetaInfo(pQueryInfo, index)->pTableMeta;
......@@ -2582,8 +2637,6 @@ int32_t doGetColumnIndexByName(SSqlCmd* pCmd, SStrToken* pToken, SQueryInfo* pQu
if (isTablenameToken(pToken)) {
pIndex->columnIndex = TSDB_TBNAME_COLUMN_INDEX;
} else if (isTableBlockDistToken(pToken)) {
pIndex->columnIndex = TSDB_BLOCK_DIST_COLUMN_INDEX;
} else if (strncasecmp(pToken->z, DEFAULT_PRIMARY_TIMESTAMP_COL_NAME, pToken->n) == 0) {
pIndex->columnIndex = PRIMARYKEY_TIMESTAMP_COL_INDEX;
} else {
......@@ -2903,6 +2956,9 @@ bool hasUnsupportFunctionsForSTableQuery(SSqlCmd* pCmd, SQueryInfo* pQueryInfo)
return true;
}
}
} else if (tscIsSessionWindowQuery(pQueryInfo)) {
invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
return true;
}
return false;
......@@ -6163,7 +6219,7 @@ static int32_t doTagFunctionCheck(SQueryInfo* pQueryInfo) {
int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) {
const char* msg1 = "functions/columns not allowed in group by query";
const char* msg2 = "projection query on columns not allowed";
const char* msg3 = "group by not allowed on projection query";
const char* msg3 = "group by/session/state_window not allowed on projection query";
const char* msg4 = "retrieve tags not compatible with group by or interval query";
const char* msg5 = "functions can not be mixed up";
......@@ -6179,6 +6235,9 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) {
return TSDB_CODE_SUCCESS;
}
}
if (tscIsProjectionQuery(pQueryInfo) && tscIsSessionWindowQuery(pQueryInfo)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
if (pQueryInfo->groupbyExpr.numOfGroupCols > 0) {
// check if all the tags prj columns belongs to the group by columns
......@@ -6748,6 +6807,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
if (isTimeWindowQuery(pQueryInfo) && (validateFunctionsInIntervalOrGroupbyQuery(pCmd, pQueryInfo) != TSDB_CODE_SUCCESS)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
}
......@@ -7551,7 +7611,10 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf
TSDB_CODE_SUCCESS) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
// parse the window_state
if (validateStateWindowNode(pCmd, pQueryInfo, pSqlNode, isSTable) != TSDB_CODE_SUCCESS) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
// set order by info
if (validateOrderbyNode(pCmd, pQueryInfo, pSqlNode, tscGetTableSchema(pTableMetaInfo->pTableMeta)) !=
TSDB_CODE_SUCCESS) {
......@@ -7592,6 +7655,10 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf
* transfer sql functions that need secondary merge into another format
* in dealing with super table queries such as: count/first/last
*/
if (validateSessionNode(pCmd, pQueryInfo, pSqlNode) != TSDB_CODE_SUCCESS) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
if (isSTable) {
tscTansformFuncForSTableQuery(pQueryInfo);
if (hasUnsupportFunctionsForSTableQuery(pCmd, pQueryInfo)) {
......@@ -7599,10 +7666,6 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf
}
}
if (validateSessionNode(pCmd, pQueryInfo, pSqlNode) != TSDB_CODE_SUCCESS) {
return TSDB_CODE_TSC_INVALID_OPERATION;
}
// no result due to invalid query time range
if (pQueryInfo->window.skey > pQueryInfo->window.ekey) {
pQueryInfo->command = TSDB_SQL_RETRIEVE_EMPTY_RESULT;
......
......@@ -856,6 +856,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pQueryMsg->simpleAgg = query.simpleAgg;
pQueryMsg->pointInterpQuery = query.pointInterpQuery;
pQueryMsg->needReverseScan = query.needReverseScan;
pQueryMsg->stateWindow = query.stateWindow;
pQueryMsg->numOfTags = htonl(numOfTags);
pQueryMsg->sqlstrLen = htonl(sqlLen);
......
......@@ -434,6 +434,9 @@ bool tscIsTWAQuery(SQueryInfo* pQueryInfo) {
return false;
}
bool tscIsSessionWindowQuery(SQueryInfo* pQueryInfo) {
return pQueryInfo->sessionWindow.gap > 0;
}
bool tscNeedReverseScan(SQueryInfo* pQueryInfo) {
size_t numOfExprs = tscNumOfExprs(pQueryInfo);
......@@ -527,7 +530,7 @@ bool isSimpleAggregateRv(SQueryInfo* pQueryInfo) {
bool isBlockDistQuery(SQueryInfo* pQueryInfo) {
size_t numOfExprs = tscNumOfExprs(pQueryInfo);
SExprInfo* pExpr = tscExprGet(pQueryInfo, 0);
return (numOfExprs == 1 && pExpr->base.colInfo.colId == TSDB_BLOCK_DIST_COLUMN_INDEX);
return (numOfExprs == 1 && pExpr->base.functionId == TSDB_FUNC_BLKINFO);
}
void tscClearInterpInfo(SQueryInfo* pQueryInfo) {
......@@ -2073,16 +2076,14 @@ SExprInfo* tscExprCreate(SQueryInfo* pQueryInfo, int16_t functionId, SColumnInde
p->colInfo.colId = TSDB_TBNAME_COLUMN_INDEX;
p->colBytes = s->bytes;
p->colType = s->type;
} else if (pColIndex->columnIndex == TSDB_BLOCK_DIST_COLUMN_INDEX) {
SSchema s = tGetBlockDistColumnSchema();
p->colInfo.colId = TSDB_BLOCK_DIST_COLUMN_INDEX;
p->colBytes = s.bytes;
p->colType = s.type;
} else if (pColIndex->columnIndex <= TSDB_UD_COLUMN_INDEX) {
p->colInfo.colId = pColIndex->columnIndex;
p->colBytes = size;
p->colType = type;
} else if (functionId == TSDB_FUNC_BLKINFO) {
p->colInfo.colId = pColIndex->columnIndex;
p->colBytes = TSDB_MAX_BINARY_LEN;
p->colType = TSDB_DATA_TYPE_BINARY;
} else {
if (TSDB_COL_IS_TAG(colType)) {
SSchema* pSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
......@@ -2578,7 +2579,7 @@ bool tscValidateColumnId(STableMetaInfo* pTableMetaInfo, int32_t colId, int32_t
return false;
}
if (colId == TSDB_TBNAME_COLUMN_INDEX || colId == TSDB_BLOCK_DIST_COLUMN_INDEX || (colId <= TSDB_UD_COLUMN_INDEX && numOfParams == 2)) {
if (colId == TSDB_TBNAME_COLUMN_INDEX || (colId <= TSDB_UD_COLUMN_INDEX && numOfParams == 2)) {
return true;
}
......@@ -4238,11 +4239,13 @@ int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAt
pQueryAttr->simpleAgg = isSimpleAggregate(pQueryInfo);
pQueryAttr->needReverseScan = tscNeedReverseScan(pQueryInfo);
pQueryAttr->stableQuery = QUERY_IS_STABLE_QUERY(pQueryInfo->type);
pQueryAttr->groupbyColumn = tscGroupbyColumn(pQueryInfo);
pQueryAttr->groupbyColumn = (!pQueryInfo->stateWindow) && tscGroupbyColumn(pQueryInfo);
pQueryAttr->queryBlockDist = isBlockDistQuery(pQueryInfo);
pQueryAttr->pointInterpQuery = tscIsPointInterpQuery(pQueryInfo);
pQueryAttr->timeWindowInterpo = timeWindowInterpoRequired(pQueryInfo);
pQueryAttr->distinctTag = pQueryInfo->distinctTag;
pQueryAttr->sw = pQueryInfo->sessionWindow;
pQueryAttr->stateWindow = pQueryInfo->stateWindow;
pQueryAttr->numOfCols = numOfCols;
pQueryAttr->numOfOutput = numOfOutput;
......@@ -4250,8 +4253,8 @@ int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAt
pQueryAttr->slimit = pQueryInfo->slimit;
pQueryAttr->order = pQueryInfo->order;
pQueryAttr->fillType = pQueryInfo->fillType;
pQueryAttr->groupbyColumn = tscGroupbyColumn(pQueryInfo);
pQueryAttr->havingNum = pQueryInfo->havingFieldNum;
if (pQueryInfo->order.order == TSDB_ORDER_ASC) { // TODO refactor
pQueryAttr->window = pQueryInfo->window;
......
......@@ -92,8 +92,6 @@ size_t tableIdPrefix(const char* name, char* prefix, int32_t len);
void extractTableNameFromToken(SStrToken *pToken, SStrToken* pTable);
SSchema tGetBlockDistColumnSchema();
SSchema tGetUserSpecifiedColumnSchema(tVariant* pVal, SStrToken* exprStr, const char* name);
bool tscValidateTableNameLength(size_t len);
......
......@@ -33,15 +33,6 @@ size_t tableIdPrefix(const char* name, char* prefix, int32_t len) {
return strlen(prefix);
}
SSchema tGetBlockDistColumnSchema() {
SSchema s = {0};
s.bytes = TSDB_MAX_BINARY_LEN;;
s.type = TSDB_DATA_TYPE_BINARY;
s.colId = TSDB_BLOCK_DIST_COLUMN_INDEX;
tstrncpy(s.name, TSQL_BLOCK_DIST_L, TSDB_COL_NAME_LEN);
return s;
}
SSchema tGetUserSpecifiedColumnSchema(tVariant* pVal, SStrToken* exprStr, const char* name) {
SSchema s = {0};
......
Subproject commit 050667e5b4d0eafa5387e4283e713559b421203f
Subproject commit 8ce6d86558afc8c0b50c10f990fd2b4270cf06fc
Subproject commit 32e2c97a4cf7bedaa99f5d6dd8cb036e7f4470df
Subproject commit 3530c6df097134a410bacec6b3cd013ef38a61aa
......@@ -10,8 +10,15 @@ INCLUDE_DIRECTORIES(${TD_ENTERPRISE_DIR}/src/inc)
INCLUDE_DIRECTORIES(inc)
AUX_SOURCE_DIRECTORY(src SRC)
IF (TD_LINUX_64 AND JEMALLOC_ENABLED)
ADD_DEFINITIONS(-DTD_JEMALLOC_ENABLED -I${CMAKE_BINARY_DIR}/build/include -L${CMAKE_BINARY_DIR}/build/lib -Wl,-rpath,${CMAKE_BINARY_DIR}/build/lib -ljemalloc)
SET(LINK_JEMALLOC "-L${CMAKE_BINARY_DIR}/build/lib -ljemalloc")
ELSE ()
SET(LINK_JEMALLOC "")
ENDIF ()
ADD_EXECUTABLE(taosd ${SRC})
TARGET_LINK_LIBRARIES(taosd mnode monitor http tsdb twal vnode cJson lz4 balance sync)
TARGET_LINK_LIBRARIES(taosd mnode monitor http tsdb twal vnode cJson lz4 balance sync ${LINK_JEMALLOC})
IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(taosd taos_static)
......
......@@ -244,7 +244,6 @@ do { \
#define TSDB_MAX_REPLICA 5
#define TSDB_TBNAME_COLUMN_INDEX (-1)
#define TSDB_BLOCK_DIST_COLUMN_INDEX (-2)
#define TSDB_UD_COLUMN_INDEX (-1000)
#define TSDB_RES_COL_ID (-5000)
......
......@@ -473,6 +473,7 @@ typedef struct {
bool simpleAgg;
bool pointInterpQuery; // point interpolation query
bool needReverseScan; // need reverse scan
bool stateWindow; // state window flag
STimeWindow window;
int32_t numOfTables;
......
......@@ -215,7 +215,7 @@ typedef struct SDataBlockInfo {
} SDataBlockInfo;
typedef struct SFileBlockInfo {
int32_t numOfRows;
int32_t numBlocksOfStep;
} SFileBlockInfo;
typedef struct {
......@@ -229,11 +229,15 @@ typedef struct {
SHashObj *map; // speedup acquire the tableQueryInfo by table uid
} STableGroupInfo;
#define TSDB_BLOCK_DIST_STEP_ROWS 16
typedef struct {
uint16_t rowSize;
uint16_t numOfFiles;
uint32_t numOfTables;
uint64_t totalSize;
uint64_t totalRows;
int32_t maxRows;
int32_t minRows;
int32_t firstSeekTimeUs;
uint32_t numOfRowsInMemTable;
SArray *dataBlockInfos;
......
......@@ -136,74 +136,74 @@
#define TK_VARIABLE 117
#define TK_INTERVAL 118
#define TK_SESSION 119
#define TK_FILL 120
#define TK_SLIDING 121
#define TK_ORDER 122
#define TK_BY 123
#define TK_ASC 124
#define TK_DESC 125
#define TK_GROUP 126
#define TK_HAVING 127
#define TK_LIMIT 128
#define TK_OFFSET 129
#define TK_SLIMIT 130
#define TK_SOFFSET 131
#define TK_WHERE 132
#define TK_NOW 133
#define TK_RESET 134
#define TK_QUERY 135
#define TK_SYNCDB 136
#define TK_ADD 137
#define TK_COLUMN 138
#define TK_TAG 139
#define TK_CHANGE 140
#define TK_SET 141
#define TK_KILL 142
#define TK_CONNECTION 143
#define TK_STREAM 144
#define TK_COLON 145
#define TK_ABORT 146
#define TK_AFTER 147
#define TK_ATTACH 148
#define TK_BEFORE 149
#define TK_BEGIN 150
#define TK_CASCADE 151
#define TK_CLUSTER 152
#define TK_CONFLICT 153
#define TK_COPY 154
#define TK_DEFERRED 155
#define TK_DELIMITERS 156
#define TK_DETACH 157
#define TK_EACH 158
#define TK_END 159
#define TK_EXPLAIN 160
#define TK_FAIL 161
#define TK_FOR 162
#define TK_IGNORE 163
#define TK_IMMEDIATE 164
#define TK_INITIALLY 165
#define TK_INSTEAD 166
#define TK_MATCH 167
#define TK_KEY 168
#define TK_OF 169
#define TK_RAISE 170
#define TK_REPLACE 171
#define TK_RESTRICT 172
#define TK_ROW 173
#define TK_STATEMENT 174
#define TK_TRIGGER 175
#define TK_VIEW 176
#define TK_SEMI 177
#define TK_NONE 178
#define TK_PREV 179
#define TK_LINEAR 180
#define TK_IMPORT 181
#define TK_TBNAME 182
#define TK_JOIN 183
#define TK_INSERT 184
#define TK_INTO 185
#define TK_VALUES 186
#define TK_STATE_WINDOW 120
#define TK_FILL 121
#define TK_SLIDING 122
#define TK_ORDER 123
#define TK_BY 124
#define TK_ASC 125
#define TK_DESC 126
#define TK_GROUP 127
#define TK_HAVING 128
#define TK_LIMIT 129
#define TK_OFFSET 130
#define TK_SLIMIT 131
#define TK_SOFFSET 132
#define TK_WHERE 133
#define TK_NOW 134
#define TK_RESET 135
#define TK_QUERY 136
#define TK_SYNCDB 137
#define TK_ADD 138
#define TK_COLUMN 139
#define TK_TAG 140
#define TK_CHANGE 141
#define TK_SET 142
#define TK_KILL 143
#define TK_CONNECTION 144
#define TK_STREAM 145
#define TK_COLON 146
#define TK_ABORT 147
#define TK_AFTER 148
#define TK_ATTACH 149
#define TK_BEFORE 150
#define TK_BEGIN 151
#define TK_CASCADE 152
#define TK_CLUSTER 153
#define TK_CONFLICT 154
#define TK_COPY 155
#define TK_DEFERRED 156
#define TK_DELIMITERS 157
#define TK_DETACH 158
#define TK_EACH 159
#define TK_END 160
#define TK_EXPLAIN 161
#define TK_FAIL 162
#define TK_FOR 163
#define TK_IGNORE 164
#define TK_IMMEDIATE 165
#define TK_INITIALLY 166
#define TK_INSTEAD 167
#define TK_MATCH 168
#define TK_KEY 169
#define TK_OF 170
#define TK_RAISE 171
#define TK_REPLACE 172
#define TK_RESTRICT 173
#define TK_ROW 174
#define TK_STATEMENT 175
#define TK_TRIGGER 176
#define TK_VIEW 177
#define TK_SEMI 178
#define TK_NONE 179
#define TK_PREV 180
#define TK_LINEAR 181
#define TK_IMPORT 182
#define TK_TBNAME 183
#define TK_JOIN 184
#define TK_INSERT 185
#define TK_INTO 186
#define TK_VALUES 187
#define TK_SPACE 300
#define TK_COMMENT 301
......
......@@ -11,10 +11,17 @@ IF (TD_LINUX)
LIST(REMOVE_ITEM SRC ./src/shellDarwin.c)
ADD_EXECUTABLE(shell ${SRC})
IF (TD_LINUX_64 AND JEMALLOC_ENABLED)
ADD_DEFINITIONS(-DTD_JEMALLOC_ENABLED -I${CMAKE_BINARY_DIR}/build/include -L${CMAKE_BINARY_DIR}/build/lib -Wl,-rpath,${CMAKE_BINARY_DIR}/build/lib -ljemalloc)
SET(LINK_JEMALLOC "-L${CMAKE_BINARY_DIR}/build/lib -ljemalloc")
ELSE ()
SET(LINK_JEMALLOC "")
ENDIF ()
IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(shell taos_static)
TARGET_LINK_LIBRARIES(shell taos_static ${LINK_JEMALLOC})
ELSE ()
TARGET_LINK_LIBRARIES(shell taos)
TARGET_LINK_LIBRARIES(shell taos ${LINK_JEMALLOC})
ENDIF ()
SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos)
......
......@@ -55,14 +55,21 @@ ENDIF ()
MESSAGE("TD_VERSION_NUMBER is:" ${TD_VERSION_NUMBER})
ADD_DEFINITIONS(-DTD_VERNUMBER="${TD_VERSION_NUMBER}")
IF (TD_LINUX_64 AND JEMALLOC_ENABLED)
ADD_DEFINITIONS(-DTD_JEMALLOC_ENABLED -I${CMAKE_BINARY_DIR}/build/include -L${CMAKE_BINARY_DIR}/build/lib -Wl,-rpath,${CMAKE_BINARY_DIR}/build/lib -ljemalloc)
SET(LINK_JEMALLOC "-L${CMAKE_BINARY_DIR}/build/lib -ljemalloc")
ELSE ()
SET(LINK_JEMALLOC "")
ENDIF ()
IF (TD_LINUX)
AUX_SOURCE_DIRECTORY(. SRC)
ADD_EXECUTABLE(taosdemo ${SRC})
IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(taosdemo taos_static cJson)
TARGET_LINK_LIBRARIES(taosdemo taos_static cJson ${LINK_JEMALLOC})
ELSE ()
TARGET_LINK_LIBRARIES(taosdemo taos cJson)
TARGET_LINK_LIBRARIES(taosdemo taos cJson ${LINK_JEMALLOC})
ENDIF ()
ELSEIF (TD_WINDOWS)
AUX_SOURCE_DIRECTORY(. SRC)
......@@ -71,7 +78,7 @@ ELSEIF (TD_WINDOWS)
IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(taosdemo taos_static cJson)
ELSE ()
TARGET_LINK_LIBRARIES(taosdemo taos cJson})
TARGET_LINK_LIBRARIES(taosdemo taos cJson)
ENDIF ()
ELSEIF (TD_DARWIN)
# missing a few dependencies, such as <argp.h>
......
......@@ -1060,6 +1060,13 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SAlterDbMsg *pAlter) {
newCfg.partitions = partitions;
}
// community version can only change daysToKeep
// but enterprise version can change all daysToKeep options
#ifndef _STORAGE
newCfg.daysToKeep1 = newCfg.daysToKeep;
newCfg.daysToKeep2 = newCfg.daysToKeep;
#endif
return newCfg;
}
......
......@@ -22,6 +22,10 @@
extern "C" {
#endif
#ifdef TD_JEMALLOC_ENABLED
#include <jemalloc/jemalloc.h>
#endif
typedef enum {
TAOS_ALLOC_MODE_DEFAULT = 0,
TAOS_ALLOC_MODE_RANDOM_FAIL = 1,
......
......@@ -189,6 +189,7 @@ typedef struct SQueryAttr {
bool pointInterpQuery; // point interpolation query
bool needReverseScan; // need reverse scan
bool distinctTag; // distinct tag query
bool stateWindow; // window State on sub/normal table
int32_t interBufSize; // intermediate buffer sizse
int32_t havingNum; // having expr number
......@@ -296,6 +297,7 @@ enum OPERATOR_TYPE_E {
OP_Filter = 19,
OP_Distinct = 20,
OP_Join = 21,
OP_StateWindow = 22,
};
typedef struct SOperatorInfo {
......@@ -460,6 +462,16 @@ typedef struct SSWindowOperatorInfo {
int32_t start; // start row index
} SSWindowOperatorInfo;
typedef struct SStateWindowOperatorInfo {
SOptrBasicInfo binfo;
STimeWindow curWindow; // current time window
int32_t numOfRows; // number of rows
int32_t colIndex; // start row index
int32_t start;
char* prevData; // previous data
} SStateWindowOperatorInfo ;
typedef struct SDistinctOperatorInfo {
SHashObj *pSet;
SSDataBlock *pRes;
......@@ -509,6 +521,7 @@ SOperatorInfo* createDistinctOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperat
SOperatorInfo* createTableBlockInfoScanOperator(void* pTsdbQueryHandle, SQueryRuntimeEnv* pRuntimeEnv);
SOperatorInfo* createMultiwaySortOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SExprInfo* pExpr, int32_t numOfOutput,
int32_t numOfRows, void* merger, bool groupMix);
SOperatorInfo* createStatewindowOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput);
SOperatorInfo* createGlobalAggregateOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput, void* param);
SOperatorInfo* createSLimitOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput, void* merger);
SOperatorInfo* createFilterOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr,
......
......@@ -89,6 +89,10 @@ typedef struct SSessionWindowVal {
SStrToken gap;
} SSessionWindowVal;
typedef struct SWindowStateVal {
SStrToken col;
} SWindowStateVal;
struct SRelationInfo;
typedef struct SSqlNode {
......@@ -100,6 +104,7 @@ typedef struct SSqlNode {
SArray *fillType; // fill type[optional], SArray<tVariantListItem>
SIntervalVal interval; // (interval, interval_offset) [optional]
SSessionWindowVal sessionVal; // session window [optional]
SWindowStateVal windowstateVal; // window_state(col) [optional]
SStrToken sliding; // sliding window [optional]
SLimitVal limit; // limit offset [optional]
SLimitVal slimit; // group limit offset [optional]
......@@ -275,7 +280,7 @@ SArray *tSqlExprListAppend(SArray *pList, tSqlExpr *pNode, SStrToken *pDistinc
void tSqlExprListDestroy(SArray *pList);
SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelationInfo *pFrom, tSqlExpr *pWhere,
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *ps,
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *ps, SWindowStateVal *pw,
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pgLimit, tSqlExpr *pHaving);
int32_t tSqlExprCompare(tSqlExpr *left, tSqlExpr *right);
......
......@@ -138,6 +138,7 @@ typedef struct SQueryInfo {
bool hasFilter;
bool onlyTagQuery;
bool orderProjectQuery;
bool stateWindow;
} SQueryInfo;
/**
......
......@@ -456,8 +456,8 @@ tagitem(A) ::= PLUS(X) FLOAT(Y). {
//////////////////////// The SELECT statement /////////////////////////////////
%type select {SSqlNode*}
%destructor select {destroySqlNode($$);}
select(A) ::= SELECT(T) selcollist(W) from(X) where_opt(Y) interval_opt(K) session_option(H) fill_opt(F) sliding_opt(S) groupby_opt(P) orderby_opt(Z) having_opt(N) slimit_opt(G) limit_opt(L). {
A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &S, F, &L, &G, N);
select(A) ::= SELECT(T) selcollist(W) from(X) where_opt(Y) interval_opt(K) session_option(H) windowstate_option(D) fill_opt(F) sliding_opt(S) groupby_opt(P) orderby_opt(Z) having_opt(N) slimit_opt(G) limit_opt(L). {
A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &D, &S, F, &L, &G, N);
}
select(A) ::= LP select(B) RP. {A = B;}
......@@ -475,7 +475,7 @@ cmd ::= union(X). { setSqlInfo(pInfo, X, NULL, TSDB_SQL_SELECT); }
// select client_version()
// select server_state()
select(A) ::= SELECT(T) selcollist(W). {
A = tSetQuerySqlNode(&T, W, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
A = tSetQuerySqlNode(&T, W, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
}
// selcollist is a list of expressions that are to become the return
......@@ -558,6 +558,11 @@ session_option(X) ::= SESSION LP ids(V) cpxName(Z) COMMA tmvar(Y) RP. {
X.col = V;
X.gap = Y;
}
%type windowstate_option {SWindowStateVal}
windowstate_option(X) ::= . {X.col.n = 0;}
windowstate_option(X) ::= STATE_WINDOW LP ids(V) RP. {
X.col = V;
}
%type fill_opt {SArray*}
%destructor fill_opt {taosArrayDestroy($$);}
......
......@@ -19,6 +19,7 @@
#include "texpr.h"
#include "ttype.h"
#include "tsdb.h"
#include "tglobal.h"
#include "qAggMain.h"
#include "qFill.h"
......@@ -3297,8 +3298,12 @@ static void col_project_function(SQLFunctionCtx *pCtx) {
if (pCtx->numOfParams == 2) {
return;
}
if (pCtx->param[0].i64 == 1) {
SET_VAL(pCtx, pCtx->size, 1);
} else {
INC_INIT_VAL(pCtx, pCtx->size);
}
INC_INIT_VAL(pCtx, pCtx->size);
char *pData = GET_INPUT_DATA_LIST(pCtx);
if (pCtx->order == TSDB_ORDER_ASC) {
......@@ -4827,51 +4832,81 @@ void blockInfo_func(SQLFunctionCtx* pCtx) {
pResInfo->hasResult = DATA_SET_FLAG;
}
static void mergeTableBlockDist(STableBlockDist* pDist, const STableBlockDist* pSrc) {
static void mergeTableBlockDist(SResultRowCellInfo* pResInfo, const STableBlockDist* pSrc) {
STableBlockDist* pDist = (STableBlockDist*) GET_ROWCELL_INTERBUF(pResInfo);
assert(pDist != NULL && pSrc != NULL);
pDist->numOfTables += pSrc->numOfTables;
pDist->numOfRowsInMemTable += pSrc->numOfRowsInMemTable;
pDist->numOfFiles += pSrc->numOfFiles;
pDist->totalSize += pSrc->totalSize;
pDist->totalRows += pSrc->totalRows;
if (pDist->dataBlockInfos == NULL) {
pDist->dataBlockInfos = taosArrayInit(4, sizeof(SFileBlockInfo));
if (pResInfo->hasResult == DATA_SET_FLAG) {
pDist->maxRows = MAX(pDist->maxRows, pSrc->maxRows);
pDist->minRows = MIN(pDist->minRows, pSrc->minRows);
} else {
pDist->maxRows = pSrc->maxRows;
pDist->minRows = pSrc->minRows;
int32_t numSteps = tsMaxRowsInFileBlock/TSDB_BLOCK_DIST_STEP_ROWS;
pDist->dataBlockInfos = taosArrayInit(numSteps, sizeof(SFileBlockInfo));
taosArraySetSize(pDist->dataBlockInfos, numSteps);
}
taosArrayAddBatch(pDist->dataBlockInfos, pSrc->dataBlockInfos->pData, (int32_t) taosArrayGetSize(pSrc->dataBlockInfos));
size_t steps = taosArrayGetSize(pDist->dataBlockInfos);
for (int32_t i = 0; i < steps; ++i) {
int32_t srcNumBlocks = ((SFileBlockInfo*)taosArrayGet(pSrc->dataBlockInfos, i))->numBlocksOfStep;
SFileBlockInfo* blockInfo = (SFileBlockInfo*)taosArrayGet(pDist->dataBlockInfos, i);
blockInfo->numBlocksOfStep += srcNumBlocks;
}
}
void block_func_merge(SQLFunctionCtx* pCtx) {
SResultRowCellInfo *pResInfo = GET_RES_INFO(pCtx);
STableBlockDist* pDist = (STableBlockDist*) GET_ROWCELL_INTERBUF(pResInfo);
STableBlockDist info = {0};
int32_t len = *(int32_t*) pCtx->pInput;
blockDistInfoFromBinary(((char*)pCtx->pInput) + sizeof(int32_t), len, &info);
mergeTableBlockDist(pDist, &info);
SResultRowCellInfo *pResInfo = GET_RES_INFO(pCtx);
mergeTableBlockDist(pResInfo, &info);
pResInfo->numOfRes = 1;
pResInfo->hasResult = DATA_SET_FLAG;
}
static int32_t doGetPercentile(const SArray* pArray, double rate) {
int32_t len = (int32_t)taosArrayGetSize(pArray);
if (len <= 0) {
return 0;
void getPercentiles(STableBlockDist *pTableBlockDist, int64_t totalBlocks, int32_t numOfPercents,
double* percents, int32_t* percentiles) {
if (totalBlocks == 0) {
for (int32_t i = 0; i < numOfPercents; ++i) {
percentiles[i] = 0;
}
return;
}
assert(rate >= 0 && rate <= 1.0);
int idx = (int32_t)((len - 1) * rate);
SArray *blocksInfos = pTableBlockDist->dataBlockInfos;
size_t numSteps = taosArrayGetSize(blocksInfos);
size_t cumulativeBlocks = 0;
return ((SFileBlockInfo *)(taosArrayGet(pArray, idx)))->numOfRows;
}
int percentIndex = 0;
for (int32_t indexStep = 0; indexStep < numSteps; ++indexStep) {
int32_t numStepBlocks = ((SFileBlockInfo *)taosArrayGet(blocksInfos, indexStep))->numBlocksOfStep;
if (numStepBlocks == 0) continue;
cumulativeBlocks += numStepBlocks;
static int compareBlockInfo(const void *pLeft, const void *pRight) {
int32_t left = ((SFileBlockInfo *)pLeft)->numOfRows;
int32_t right = ((SFileBlockInfo *)pRight)->numOfRows;
while (percentIndex < numOfPercents) {
double blockRank = totalBlocks * percents[percentIndex];
if (blockRank <= cumulativeBlocks) {
percentiles[percentIndex] = indexStep;
++percentIndex;
} else {
break;
}
}
}
if (left > right) return 1;
if (left < right) return -1;
return 0;
for (int32_t i = 0; i < numOfPercents; ++i) {
percentiles[i] = (percentiles[i]+1) * TSDB_BLOCK_DIST_STEP_ROWS - TSDB_BLOCK_DIST_STEP_ROWS/2;
}
}
void generateBlockDistResult(STableBlockDist *pTableBlockDist, char* result) {
......@@ -4879,40 +4914,41 @@ void generateBlockDistResult(STableBlockDist *pTableBlockDist, char* result) {
return;
}
int64_t min = INT64_MAX, max = INT64_MIN, avg = 0;
SArray* blockInfos= pTableBlockDist->dataBlockInfos;
int64_t totalRows = 0, totalBlocks = taosArrayGetSize(blockInfos);
SArray* blockInfos = pTableBlockDist->dataBlockInfos;
uint64_t totalRows = pTableBlockDist->totalRows;
size_t numSteps = taosArrayGetSize(blockInfos);
int64_t totalBlocks = 0;
int64_t min = -1, max = -1, avg = 0;
for (size_t i = 0; i < taosArrayGetSize(blockInfos); i++) {
for (int32_t i = 0; i < numSteps; i++) {
SFileBlockInfo *blockInfo = taosArrayGet(blockInfos, i);
int64_t rows = blockInfo->numOfRows;
min = MIN(min, rows);
max = MAX(max, rows);
totalRows += rows;
int64_t blocks = blockInfo->numBlocksOfStep;
totalBlocks += blocks;
}
avg = totalBlocks > 0 ? (int64_t)(totalRows/totalBlocks) : 0;
taosArraySort(blockInfos, compareBlockInfo);
min = totalBlocks > 0 ? pTableBlockDist->minRows : 0;
max = totalBlocks > 0 ? pTableBlockDist->maxRows : 0;
double percents[] = {0.05, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 0.95, 0.99};
int32_t percentiles[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
assert(sizeof(percents)/sizeof(double) == sizeof(percentiles)/sizeof(int32_t));
getPercentiles(pTableBlockDist, totalBlocks, sizeof(percents)/sizeof(double), percents, percentiles);
uint64_t totalLen = pTableBlockDist->totalSize;
int32_t rowSize = pTableBlockDist->rowSize;
double compRatio = (totalRows>0) ? ((double)(totalLen)/(rowSize*totalRows)) : 1;
int sz = sprintf(result + VARSTR_HEADER_SIZE,
"summary: \n\t "
"5th=[%d], 10th=[%d], 20th=[%d], 30th=[%d], 40th=[%d], 50th=[%d]\n\t "
"60th=[%d], 70th=[%d], 80th=[%d], 90th=[%d], 95th=[%d], 99th=[%d]\n\t "
"Min=[%"PRId64"(Rows)] Max=[%"PRId64"(Rows)] Avg=[%"PRId64"(Rows)] Stddev=[%.2f] \n\t "
"Rows=[%"PRId64"], Blocks=[%"PRId64"], Size=[%.3f(Kb)] Comp=[%.2f%%]\n\t "
"Rows=[%"PRIu64"], Blocks=[%"PRId64"], Size=[%.3f(Kb)] Comp=[%.2f]\n\t "
"RowsInMem=[%d] \n\t SeekHeaderTime=[%d(us)]",
doGetPercentile(blockInfos, 0.05), doGetPercentile(blockInfos, 0.10),
doGetPercentile(blockInfos, 0.20), doGetPercentile(blockInfos, 0.30),
doGetPercentile(blockInfos, 0.40), doGetPercentile(blockInfos, 0.50),
doGetPercentile(blockInfos, 0.60), doGetPercentile(blockInfos, 0.70),
doGetPercentile(blockInfos, 0.80), doGetPercentile(blockInfos, 0.90),
doGetPercentile(blockInfos, 0.95), doGetPercentile(blockInfos, 0.99),
percentiles[0], percentiles[1], percentiles[2], percentiles[3], percentiles[4], percentiles[5],
percentiles[6], percentiles[7], percentiles[8], percentiles[9], percentiles[10], percentiles[11],
min, max, avg, 0.0,
totalRows, totalBlocks, totalLen/1024.0, (double)(totalLen*100.0)/(rowSize*totalRows),
totalRows, totalBlocks, totalLen/1024.0, compRatio,
pTableBlockDist->numOfRowsInMemTable, pTableBlockDist->firstSeekTimeUs);
varDataSetLen(result, sz);
UNUSED(sz);
......
......@@ -189,12 +189,16 @@ static void destroySFillOperatorInfo(void* param, int32_t numOfOutput);
static void destroyGroupbyOperatorInfo(void* param, int32_t numOfOutput);
static void destroyArithOperatorInfo(void* param, int32_t numOfOutput);
static void destroyTagScanOperatorInfo(void* param, int32_t numOfOutput);
static void destroySWindowOperatorInfo(void* param, int32_t numOfOutput);
static void destroyStateWindowOperatorInfo(void* param, int32_t numOfOutput);
static void destroyAggOperatorInfo(void* param, int32_t numOfOutput);
static void destroyOperatorInfo(SOperatorInfo* pOperator);
static int32_t doCopyToSDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SGroupResInfo* pGroupResInfo, int32_t orderType, SSDataBlock* pBlock);
static int32_t getGroupbyColumnIndex(SGroupbyExpr *pGroupbyExpr, SSDataBlock* pDataBlock);
static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SGroupbyOperatorInfo *pInfo, int32_t numOfCols, char *pData, int16_t type, int16_t bytes, int32_t groupIndex);
static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SOptrBasicInfo *binf, int32_t numOfCols, char *pData, int16_t type, int16_t bytes, int32_t groupIndex);
static void initCtxOutputBuffer(SQLFunctionCtx* pCtx, int32_t size);
static void getAlignQueryTimeWindow(SQueryAttr *pQueryAttr, int64_t key, int64_t keyFirst, int64_t keyLast, STimeWindow *win);
......@@ -731,7 +735,6 @@ static void doApplyFunctions(SQueryRuntimeEnv* pRuntimeEnv, SQLFunctionCtx* pCtx
if (pCtx[k].preAggVals.isSet && forwardStep < numOfTotal) {
pCtx[k].preAggVals.isSet = false;
}
if (functionNeedToExecute(pRuntimeEnv, &pCtx[k], functionId)) {
aAggs[functionId].xFunction(&pCtx[k]);
}
......@@ -935,7 +938,7 @@ static void doSetInputDataBlock(SOperatorInfo* pOperator, SQLFunctionCtx* pCtx,
setArithParams((SArithmeticSupport*)pCtx[i].param[1].pz, &pOperator->pExpr[i], pBlock);
} else {
SColIndex* pCol = &pOperator->pExpr[i].base.colInfo;
if (TSDB_COL_IS_NORMAL_COL(pCol->flag) || (pCol->colId == TSDB_BLOCK_DIST_COLUMN_INDEX) ||
if (TSDB_COL_IS_NORMAL_COL(pCol->flag) || (pCtx[i].functionId == TSDB_FUNC_BLKINFO) ||
(TSDB_COL_IS_TAG(pCol->flag) && pOperator->pRuntimeEnv->scanFlag == MERGE_STAGE)) {
SColIndex* pColIndex = &pOperator->pExpr[i].base.colInfo;
SColumnInfoData* p = taosArrayGet(pBlock->pDataBlock, pColIndex->colIndex);
......@@ -1305,7 +1308,7 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SGroupbyOperatorInfo *pIn
}
int32_t ret =
setGroupResultOutputBuf(pRuntimeEnv, pInfo, pOperator->numOfOutput, val, type, bytes, item->groupIndex);
setGroupResultOutputBuf(pRuntimeEnv, &(pInfo->binfo), pOperator->numOfOutput, val, type, bytes, item->groupIndex);
if (ret != TSDB_CODE_SUCCESS) { // null data, too many state code
longjmp(pRuntimeEnv->env, TSDB_CODE_QRY_APP_ERROR);
}
......@@ -1344,12 +1347,16 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf
pInfo->start = j;
} else if (tsList[j] - pInfo->prevTs <= gap) {
pInfo->curWindow.ekey = tsList[j];
pInfo->prevTs = tsList[j];
//pInfo->prevTs = tsList[j];
pInfo->numOfRows += 1;
pInfo->start = j;
if (j == 0 && pInfo->start != 0) {
pInfo->numOfRows = 1;
pInfo->start = 0;
}
} else { // start a new session window
SResultRow* pResult = NULL;
pInfo->curWindow.ekey = pInfo->curWindow.skey;
int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan,
&pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput,
pBInfo->rowCellInfoOffset);
......@@ -1370,6 +1377,7 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf
SResultRow* pResult = NULL;
pInfo->curWindow.ekey = pInfo->curWindow.skey;
int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan,
&pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput,
pBInfo->rowCellInfoOffset);
......@@ -1397,12 +1405,12 @@ static void setResultRowKey(SResultRow* pResultRow, char* pData, int16_t type) {
}
}
static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SGroupbyOperatorInfo *pInfo, int32_t numOfCols, char *pData, int16_t type, int16_t bytes, int32_t groupIndex) {
static int32_t setGroupResultOutputBuf(SQueryRuntimeEnv *pRuntimeEnv, SOptrBasicInfo *binfo, int32_t numOfCols, char *pData, int16_t type, int16_t bytes, int32_t groupIndex) {
SDiskbasedResultBuf *pResultBuf = pRuntimeEnv->pResultBuf;
int32_t *rowCellInfoOffset = pInfo->binfo.rowCellInfoOffset;
SResultRowInfo *pResultRowInfo = &pInfo->binfo.resultRowInfo;
SQLFunctionCtx *pCtx = pInfo->binfo.pCtx;
int32_t *rowCellInfoOffset = binfo->rowCellInfoOffset;
SResultRowInfo *pResultRowInfo = &binfo->resultRowInfo;
SQLFunctionCtx *pCtx = binfo->pCtx;
// not assign result buffer yet, add new result buffer, TODO remove it
char* d = pData;
......@@ -1773,6 +1781,11 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
}
break;
}
case OP_StateWindow: {
pRuntimeEnv->proot = createStatewindowOperatorInfo(pRuntimeEnv, pRuntimeEnv->proot, pQueryAttr->pExpr1, pQueryAttr->numOfOutput);
setTableScanFilterOperatorInfo(pRuntimeEnv->proot->upstream[0]->info, pRuntimeEnv->proot);
break;
}
case OP_Limit: {
pRuntimeEnv->proot = createLimitOperatorInfo(pRuntimeEnv, pRuntimeEnv->proot);
......@@ -2115,6 +2128,8 @@ static bool onlyFirstQuery(SQueryAttr *pQueryAttr) { return onlyOneQueryType(pQu
static bool onlyLastQuery(SQueryAttr *pQueryAttr) { return onlyOneQueryType(pQueryAttr, TSDB_FUNC_LAST, TSDB_FUNC_LAST_DST); }
static bool notContainSessionOrStateWindow(SQueryAttr *pQueryAttr) { return !(pQueryAttr->sw.gap > 0 || pQueryAttr->stateWindow); }
static int32_t updateBlockLoadStatus(SQueryAttr *pQuery, int32_t status) {
bool hasFirstLastFunc = false;
bool hasOtherFunc = false;
......@@ -2218,7 +2233,7 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
}
pQueryAttr->order.order = TSDB_ORDER_ASC;
} else if (onlyLastQuery(pQueryAttr)) {
} else if (onlyLastQuery(pQueryAttr) && notContainSessionOrStateWindow(pQueryAttr)) {
if (QUERY_IS_ASC_QUERY(pQueryAttr)) {
qDebug(msg, pQInfo, "only-last", pQueryAttr->order.order, TSDB_ORDER_DESC, pQueryAttr->window.skey,
pQueryAttr->window.ekey, pQueryAttr->window.ekey, pQueryAttr->window.skey);
......@@ -3210,7 +3225,7 @@ void finalizeQueryResult(SOperatorInfo* pOperator, SQLFunctionCtx* pCtx, SResult
SQueryAttr *pQueryAttr = pRuntimeEnv->pQueryAttr;
int32_t numOfOutput = pOperator->numOfOutput;
if (pQueryAttr->groupbyColumn || QUERY_IS_INTERVAL_QUERY(pQueryAttr) || pQueryAttr->sw.gap > 0) {
if (pQueryAttr->groupbyColumn || QUERY_IS_INTERVAL_QUERY(pQueryAttr) || pQueryAttr->sw.gap > 0 || pQueryAttr->stateWindow) {
// for each group result, call the finalize function for each column
if (pQueryAttr->groupbyColumn) {
closeAllResultRows(pResultRowInfo);
......@@ -3799,7 +3814,7 @@ void queryCostStatis(SQInfo *pQInfo) {
//
// int32_t numOfRes = tableApplyFunctionsOnBlock(pRuntimeEnv, pBlockInfo, NULL, binarySearchForKey, pDataBlock);
//
// qDebug("QInfo:0x%"PRIx64" check data block, brange:%" PRId64 "-%" PRId64 ", numOfRows:%d, numOfRes:%d, lastKey:%"PRId64, GET_QID(pRuntimeEnv),
// qDebug("QInfo:0x%"PRIx64" check data block, brange:%" PRId64 "-%" PRId64 ", numBlocksOfStep:%d, numOfRes:%d, lastKey:%"PRId64, GET_QID(pRuntimeEnv),
// pBlockInfo->window.skey, pBlockInfo->window.ekey, pBlockInfo->rows, numOfRes, pQuery->current->lastKey);
//}
......@@ -4379,7 +4394,12 @@ static SSDataBlock* doBlockInfoScan(void* param, bool* newgroup) {
STableBlockDist tableBlockDist = {0};
tableBlockDist.numOfTables = (int32_t)pOperator->pRuntimeEnv->tableqinfoGroupInfo.numOfTables;
tableBlockDist.dataBlockInfos = taosArrayInit(512, sizeof(SFileBlockInfo));
int32_t numRowSteps = tsMaxRowsInFileBlock / TSDB_BLOCK_DIST_STEP_ROWS;
tableBlockDist.dataBlockInfos = taosArrayInit(numRowSteps, sizeof(SFileBlockInfo));
taosArraySetSize(tableBlockDist.dataBlockInfos, numRowSteps);
tableBlockDist.maxRows = INT_MIN;
tableBlockDist.minRows = INT_MAX;
tsdbGetFileBlocksDistInfo(pTableScanInfo->pQueryHandle, &tableBlockDist);
tableBlockDist.numOfRowsInMemTable = (int32_t) tsdbGetNumOfRowsInMemTable(pTableScanInfo->pQueryHandle);
......@@ -4461,7 +4481,7 @@ SOperatorInfo* createTableBlockInfoScanOperator(void* pTsdbQueryHandle, SQueryRu
SColumnInfoData infoData = {{0}};
infoData.info.type = TSDB_DATA_TYPE_BINARY;
infoData.info.bytes = 1024;
infoData.info.colId = TSDB_BLOCK_DIST_COLUMN_INDEX;
infoData.info.colId = 0;
taosArrayPush(pInfo->block.pDataBlock, &infoData);
SOperatorInfo* pOperator = calloc(1, sizeof(SOperatorInfo));
......@@ -4519,6 +4539,12 @@ void setTableScanFilterOperatorInfo(STableScanInfo* pTableScanInfo, SOperatorInf
} else if (pDownstream->operatorType == OP_SessionWindow) {
SSWindowOperatorInfo* pInfo = pDownstream->info;
pTableScanInfo->pCtx = pInfo->binfo.pCtx;
pTableScanInfo->pResultRowInfo = &pInfo->binfo.resultRowInfo;
pTableScanInfo->rowCellInfoOffset = pInfo->binfo.rowCellInfoOffset;
} else if (pDownstream->operatorType == OP_StateWindow) {
SStateWindowOperatorInfo* pInfo = pDownstream->info;
pTableScanInfo->pCtx = pInfo->binfo.pCtx;
pTableScanInfo->pResultRowInfo = &pInfo->binfo.resultRowInfo;
pTableScanInfo->rowCellInfoOffset = pInfo->binfo.rowCellInfoOffset;
......@@ -4630,7 +4656,6 @@ static void destroyGlobalAggOperatorInfo(void* param, int32_t numOfOutput) {
tfree(pInfo->prevRow);
tfree(pInfo->currentGroupColData);
}
static void destroySlimitOperatorInfo(void* param, int32_t numOfOutput) {
SSLimitOperatorInfo *pInfo = (SSLimitOperatorInfo*) param;
taosArrayDestroy(pInfo->orderColumnList);
......@@ -5134,6 +5159,130 @@ static SSDataBlock* doSTableIntervalAgg(void* param, bool* newgroup) {
return pIntervalInfo->pRes;
}
static void doStateWindowAggImpl(SOperatorInfo* pOperator, SStateWindowOperatorInfo *pInfo, SSDataBlock *pSDataBlock) {
SQueryRuntimeEnv* pRuntimeEnv = pOperator->pRuntimeEnv;
STableQueryInfo* item = pRuntimeEnv->current;
SColumnInfoData* pColInfoData = taosArrayGet(pSDataBlock->pDataBlock, pInfo->colIndex);
SOptrBasicInfo* pBInfo = &pInfo->binfo;
bool masterScan = IS_MASTER_SCAN(pRuntimeEnv);
int16_t bytes = pColInfoData->info.bytes;
int16_t type = pColInfoData->info.type;
SColumnInfoData* pTsColInfoData = taosArrayGet(pSDataBlock->pDataBlock, 0);
TSKEY* tsList = (TSKEY*)pTsColInfoData->pData;
pInfo->numOfRows = 0;
for (int32_t j = 0; j < pSDataBlock->info.rows; ++j) {
char* val = ((char*)pColInfoData->pData) + bytes * j;
if (isNull(val, type)) {
continue;
}
if (pInfo->prevData == NULL) {
pInfo->prevData = malloc(bytes);
memcpy(pInfo->prevData, val, bytes);
pInfo->numOfRows = 1;
pInfo->curWindow.skey = tsList[j];
pInfo->curWindow.ekey = tsList[j];
pInfo->start = j;
} else if (memcmp(pInfo->prevData, val, bytes) == 0) {
pInfo->curWindow.ekey = tsList[j];
pInfo->numOfRows += 1;
//pInfo->start = j;
if (j == 0 && pInfo->start != 0) {
pInfo->numOfRows = 1;
pInfo->start = 0;
}
} else {
SResultRow* pResult = NULL;
pInfo->curWindow.ekey = pInfo->curWindow.skey;
int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan,
&pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput,
pBInfo->rowCellInfoOffset);
if (ret != TSDB_CODE_SUCCESS) { // null data, too many state code
longjmp(pRuntimeEnv->env, TSDB_CODE_QRY_APP_ERROR);
}
doApplyFunctions(pRuntimeEnv, pBInfo->pCtx, &pInfo->curWindow, pInfo->start, pInfo->numOfRows, tsList,
pSDataBlock->info.rows, pOperator->numOfOutput);
pInfo->curWindow.skey = tsList[j];
pInfo->curWindow.ekey = tsList[j];
memcpy(pInfo->prevData, val, bytes);
pInfo->numOfRows = 1;
pInfo->start = j;
}
}
SResultRow* pResult = NULL;
pInfo->curWindow.ekey = pInfo->curWindow.skey;
int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan,
&pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput,
pBInfo->rowCellInfoOffset);
if (ret != TSDB_CODE_SUCCESS) { // null data, too many state code
longjmp(pRuntimeEnv->env, TSDB_CODE_QRY_APP_ERROR);
}
doApplyFunctions(pRuntimeEnv, pBInfo->pCtx, &pInfo->curWindow, pInfo->start, pInfo->numOfRows, tsList,
pSDataBlock->info.rows, pOperator->numOfOutput);
}
static SSDataBlock* doStateWindowAgg(void *param, bool* newgroup) {
SOperatorInfo* pOperator = (SOperatorInfo*) param;
if (pOperator->status == OP_EXEC_DONE) {
return NULL;
}
SStateWindowOperatorInfo* pWindowInfo = pOperator->info;
SOptrBasicInfo* pBInfo = &pWindowInfo->binfo;
SQueryRuntimeEnv* pRuntimeEnv = pOperator->pRuntimeEnv;
if (pOperator->status == OP_RES_TO_RETURN) {
toSSDataBlock(&pRuntimeEnv->groupResInfo, pRuntimeEnv, pBInfo->pRes);
if (pBInfo->pRes->info.rows == 0 || !hasRemainDataInCurrentGroup(&pRuntimeEnv->groupResInfo)) {
pOperator->status = OP_EXEC_DONE;
}
return pBInfo->pRes;
}
SQueryAttr* pQueryAttr = pRuntimeEnv->pQueryAttr;
int32_t order = pQueryAttr->order.order;
STimeWindow win = pQueryAttr->window;
SOperatorInfo* upstream = pOperator->upstream[0];
while (1) {
SSDataBlock* pBlock = upstream->exec(upstream, newgroup);
if (pBlock == NULL) {
break;
}
setInputDataBlock(pOperator, pBInfo->pCtx, pBlock, pQueryAttr->order.order);
if (pWindowInfo->colIndex == -1) {
pWindowInfo->colIndex = getGroupbyColumnIndex(pRuntimeEnv->pQueryAttr->pGroupbyExpr, pBlock);
}
doStateWindowAggImpl(pOperator, pWindowInfo, pBlock);
}
// restore the value
pQueryAttr->order.order = order;
pQueryAttr->window = win;
pOperator->status = OP_RES_TO_RETURN;
closeAllResultRows(&pBInfo->resultRowInfo);
setQueryStatus(pRuntimeEnv, QUERY_COMPLETED);
finalizeQueryResult(pOperator, pBInfo->pCtx, &pBInfo->resultRowInfo, pBInfo->rowCellInfoOffset);
initGroupResInfo(&pRuntimeEnv->groupResInfo, &pBInfo->resultRowInfo);
toSSDataBlock(&pRuntimeEnv->groupResInfo, pRuntimeEnv, pBInfo->pRes);
if (pBInfo->pRes->info.rows == 0 || !hasRemainDataInCurrentGroup(&pRuntimeEnv->groupResInfo)) {
pOperator->status = OP_EXEC_DONE;
}
return pBInfo->pRes->info.rows == 0? NULL:pBInfo->pRes;
}
static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) {
SOperatorInfo* pOperator = (SOperatorInfo*) param;
if (pOperator->status == OP_EXEC_DONE) {
......@@ -5143,6 +5292,7 @@ static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) {
SSWindowOperatorInfo* pWindowInfo = pOperator->info;
SOptrBasicInfo* pBInfo = &pWindowInfo->binfo;
SQueryRuntimeEnv* pRuntimeEnv = pOperator->pRuntimeEnv;
if (pOperator->status == OP_RES_TO_RETURN) {
toSSDataBlock(&pRuntimeEnv->groupResInfo, pRuntimeEnv, pBInfo->pRes);
......@@ -5155,6 +5305,7 @@ static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) {
}
SQueryAttr* pQueryAttr = pRuntimeEnv->pQueryAttr;
//pQueryAttr->order.order = TSDB_ORDER_ASC;
int32_t order = pQueryAttr->order.order;
STimeWindow win = pQueryAttr->window;
......@@ -5392,7 +5543,7 @@ SOperatorInfo* createAggregateOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOpera
pOperator->pRuntimeEnv = pRuntimeEnv;
pOperator->exec = doAggregate;
pOperator->cleanup = destroyBasicOperatorInfo;
pOperator->cleanup = destroyAggOperatorInfo;
appendUpstream(pOperator, upstream);
return pOperator;
......@@ -5412,6 +5563,19 @@ static void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) {
SOptrBasicInfo* pInfo = (SOptrBasicInfo*) param;
doDestroyBasicInfo(pInfo, numOfOutput);
}
static void destroyStateWindowOperatorInfo(void* param, int32_t numOfOutput) {
SStateWindowOperatorInfo* pInfo = (SStateWindowOperatorInfo*) param;
doDestroyBasicInfo(&pInfo->binfo, numOfOutput);
tfree(pInfo->prevData);
}
static void destroyAggOperatorInfo(void* param, int32_t numOfOutput) {
SAggOperatorInfo* pInfo = (SAggOperatorInfo*) param;
doDestroyBasicInfo(&pInfo->binfo, numOfOutput);
}
static void destroySWindowOperatorInfo(void* param, int32_t numOfOutput) {
SSWindowOperatorInfo* pInfo = (SSWindowOperatorInfo*) param;
doDestroyBasicInfo(&pInfo->binfo, numOfOutput);
}
static void destroySFillOperatorInfo(void* param, int32_t numOfOutput) {
SFillOperatorInfo* pInfo = (SFillOperatorInfo*) param;
......@@ -5466,7 +5630,7 @@ SOperatorInfo* createMultiTableAggOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SO
pOperator->pRuntimeEnv = pRuntimeEnv;
pOperator->exec = doSTableAggregate;
pOperator->cleanup = destroyBasicOperatorInfo;
pOperator->cleanup = destroyAggOperatorInfo;
appendUpstream(pOperator, upstream);
return pOperator;
......@@ -5592,7 +5756,29 @@ SOperatorInfo* createTimeIntervalOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOp
appendUpstream(pOperator, upstream);
return pOperator;
}
SOperatorInfo* createStatewindowOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput) {
SStateWindowOperatorInfo* pInfo = calloc(1, sizeof(SStateWindowOperatorInfo));
pInfo->colIndex = -1;
pInfo->binfo.pCtx = createSQLFunctionCtx(pRuntimeEnv, pExpr, numOfOutput, &pInfo->binfo.rowCellInfoOffset);
pInfo->binfo.pRes = createOutputBuf(pExpr, numOfOutput, pRuntimeEnv->resultInfo.capacity);
initResultRowInfo(&pInfo->binfo.resultRowInfo, 8, TSDB_DATA_TYPE_INT);
SOperatorInfo* pOperator = calloc(1, sizeof(SOperatorInfo));
pOperator->name = "StateWindowOperator";
pOperator->operatorType = OP_StateWindow;
pOperator->blockingOptr = true;
pOperator->status = OP_IN_EXECUTING;
pOperator->pExpr = pExpr;
pOperator->numOfOutput = numOfOutput;
pOperator->info = pInfo;
pOperator->pRuntimeEnv = pRuntimeEnv;
pOperator->exec = doStateWindowAgg;
pOperator->cleanup = destroyStateWindowOperatorInfo;
appendUpstream(pOperator, upstream);
return pOperator;
}
SOperatorInfo* createSWindowOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput) {
SSWindowOperatorInfo* pInfo = calloc(1, sizeof(SSWindowOperatorInfo));
......@@ -5612,7 +5798,7 @@ SOperatorInfo* createSWindowOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperato
pOperator->info = pInfo;
pOperator->pRuntimeEnv = pRuntimeEnv;
pOperator->exec = doSessionWindowAgg;
pOperator->cleanup = destroyBasicOperatorInfo;
pOperator->cleanup = destroySWindowOperatorInfo;
appendUpstream(pOperator, upstream);
return pOperator;
......@@ -5988,10 +6174,7 @@ static int32_t getColumnIndexInSource(SQueriedTableInfo *pTableInfo, SSqlExpr *p
if (TSDB_COL_IS_TAG(pExpr->colInfo.flag)) {
if (pExpr->colInfo.colId == TSDB_TBNAME_COLUMN_INDEX) {
return TSDB_TBNAME_COLUMN_INDEX;
} else if (pExpr->colInfo.colId == TSDB_BLOCK_DIST_COLUMN_INDEX) {
return TSDB_BLOCK_DIST_COLUMN_INDEX;
}
while(j < pTableInfo->numOfTags) {
if (pExpr->colInfo.colId == pTagCols[j].colId) {
......@@ -6561,14 +6744,14 @@ int32_t createQueryFunc(SQueriedTableInfo* pTableInfo, int32_t numOfOutput, SExp
type = TSDB_DATA_TYPE_DOUBLE;
bytes = tDataTypes[type].bytes;
} else if (pExprs[i].base.functionId == TSDB_FUNC_BLKINFO) {
SSchema s = {.type=TSDB_DATA_TYPE_BINARY, .bytes=TSDB_MAX_BINARY_LEN};
type = s.type;
bytes = s.bytes;
} else if (pExprs[i].base.colInfo.colId == TSDB_TBNAME_COLUMN_INDEX && pExprs[i].base.functionId == TSDB_FUNC_TAGPRJ) { // parse the normal column
SSchema* s = tGetTbnameColumnSchema();
type = s->type;
bytes = s->bytes;
} else if (pExprs[i].base.colInfo.colId == TSDB_BLOCK_DIST_COLUMN_INDEX) {
SSchema s = tGetBlockDistColumnSchema();
type = s.type;
bytes = s.bytes;
} else if (pExprs[i].base.colInfo.colId <= TSDB_UD_COLUMN_INDEX && pExprs[i].base.colInfo.colId > TSDB_RES_COL_ID) {
// it is a user-defined constant value column
assert(pExprs[i].base.functionId == TSDB_FUNC_PRJ);
......@@ -6581,7 +6764,7 @@ int32_t createQueryFunc(SQueriedTableInfo* pTableInfo, int32_t numOfOutput, SExp
} else {
int32_t j = getColumnIndexInSource(pTableInfo, &pExprs[i].base, pTagCols);
if (TSDB_COL_IS_TAG(pExprs[i].base.colInfo.flag)) {
if (j < TSDB_BLOCK_DIST_COLUMN_INDEX || j >= pTableInfo->numOfTags) {
if (j < TSDB_TBNAME_COLUMN_INDEX || j >= pTableInfo->numOfTags) {
return TSDB_CODE_QRY_INVALID_MSG;
}
} else {
......@@ -6817,9 +7000,6 @@ static void doUpdateExprColumnIndex(SQueryAttr *pQueryAttr) {
assert(f < pQueryAttr->numOfCols);
} else if (pColIndex->colId <= TSDB_UD_COLUMN_INDEX) {
// do nothing for user-defined constant value result columns
} else if (pColIndex->colId == TSDB_BLOCK_DIST_COLUMN_INDEX) {
pColIndex->colIndex = 0;// only one source column, so it must be 0;
assert(pQueryAttr->numOfOutput == 1);
} else {
int32_t f = 0;
for (f = 0; f < pQueryAttr->numOfTags; ++f) {
......@@ -6829,7 +7009,7 @@ static void doUpdateExprColumnIndex(SQueryAttr *pQueryAttr) {
}
}
assert(f < pQueryAttr->numOfTags || pColIndex->colId == TSDB_TBNAME_COLUMN_INDEX || pColIndex->colId == TSDB_BLOCK_DIST_COLUMN_INDEX);
assert(f < pQueryAttr->numOfTags || pColIndex->colId == TSDB_TBNAME_COLUMN_INDEX);
}
}
}
......@@ -6910,6 +7090,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SGroupbyExpr* pGroupbyExpr, S
pQueryAttr->simpleAgg = pQueryMsg->simpleAgg;
pQueryAttr->pointInterpQuery = pQueryMsg->pointInterpQuery;
pQueryAttr->needReverseScan = pQueryMsg->needReverseScan;
pQueryAttr->stateWindow = pQueryMsg->stateWindow;
pQueryAttr->vgId = vgId;
pQueryAttr->tableCols = calloc(numOfCols, sizeof(SSingleColumnFilterInfo));
......@@ -7021,7 +7202,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SGroupbyExpr* pGroupbyExpr, S
colIdCheck(pQueryAttr, pQInfo->qId);
// todo refactor
pQInfo->query.queryBlockDist = (numOfOutput == 1 && pExprs[0].base.colInfo.colId == TSDB_BLOCK_DIST_COLUMN_INDEX);
pQInfo->query.queryBlockDist = (numOfOutput == 1 && pExprs[0].base.functionId == TSDB_FUNC_BLKINFO);
qDebug("qmsg:%p QInfo:0x%" PRIx64 "-%p created", pQueryMsg, pQInfo->qId, pQInfo);
return pQInfo;
......
......@@ -592,6 +592,14 @@ SArray* createExecOperatorPlan(SQueryAttr* pQueryAttr) {
op = OP_SessionWindow;
taosArrayPush(plan, &op);
if (pQueryAttr->pExpr2 != NULL) {
op = OP_Arithmetic;
taosArrayPush(plan, &op);
}
} else if (pQueryAttr->stateWindow) {
op = OP_StateWindow;
taosArrayPush(plan, &op);
if (pQueryAttr->pExpr2 != NULL) {
op = OP_Arithmetic;
taosArrayPush(plan, &op);
......
......@@ -726,9 +726,9 @@ void tSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
* extract the select info out of sql string
*/
SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelationInfo *pFrom, tSqlExpr *pWhere,
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *pSession,
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *psLimit,
tSqlExpr *pHaving) {
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval,
SSessionWindowVal *pSession, SWindowStateVal *pWindowStateVal, SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit,
SLimitVal *psLimit, tSqlExpr *pHaving) {
assert(pSelNodeList != NULL);
SSqlNode *pSqlNode = calloc(1, sizeof(SSqlNode));
......@@ -779,6 +779,12 @@ SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelat
TPARSER_SET_NONE_TOKEN(pSqlNode->sessionVal.col);
}
if (pWindowStateVal != NULL) {
pSqlNode->windowstateVal = *pWindowStateVal;
} else {
TPARSER_SET_NONE_TOKEN(pSqlNode->windowstateVal.col);
}
return pSqlNode;
}
......
......@@ -581,6 +581,9 @@ void blockDistInfoToBinary(STableBlockDist* pDist, struct SBufferWriter* bw) {
tbufWriteUint32(bw, pDist->numOfTables);
tbufWriteUint16(bw, pDist->numOfFiles);
tbufWriteUint64(bw, pDist->totalSize);
tbufWriteUint64(bw, pDist->totalRows);
tbufWriteInt32(bw, pDist->maxRows);
tbufWriteInt32(bw, pDist->minRows);
tbufWriteUint32(bw, pDist->numOfRowsInMemTable);
tbufWriteUint64(bw, taosArrayGetSize(pDist->dataBlockInfos));
......@@ -616,13 +619,16 @@ void blockDistInfoFromBinary(const char* data, int32_t len, STableBlockDist* pDi
pDist->numOfTables = tbufReadUint32(&br);
pDist->numOfFiles = tbufReadUint16(&br);
pDist->totalSize = tbufReadUint64(&br);
pDist->totalRows = tbufReadUint64(&br);
pDist->maxRows = tbufReadInt32(&br);
pDist->minRows = tbufReadInt32(&br);
pDist->numOfRowsInMemTable = tbufReadUint32(&br);
int64_t numOfBlocks = tbufReadUint64(&br);
int64_t numSteps = tbufReadUint64(&br);
bool comp = tbufReadUint8(&br);
uint32_t compLen = tbufReadUint32(&br);
size_t originalLen = (size_t) (numOfBlocks*sizeof(SFileBlockInfo));
size_t originalLen = (size_t) (numSteps *sizeof(SFileBlockInfo));
char* outputBuf = NULL;
if (comp) {
......@@ -633,12 +639,12 @@ void blockDistInfoFromBinary(const char* data, int32_t len, STableBlockDist* pDi
int32_t orignalLen = tsDecompressString(compStr, compLen, 1, outputBuf,
(int32_t)originalLen , ONE_STAGE_COMP, NULL, 0);
assert(orignalLen == numOfBlocks*sizeof(SFileBlockInfo));
assert(orignalLen == numSteps *sizeof(SFileBlockInfo));
} else {
outputBuf = (char*) tbufReadBinary(&br, &originalLen);
}
pDist->dataBlockInfos = taosArrayFromList(outputBuf, (uint32_t) numOfBlocks, sizeof(SFileBlockInfo));
pDist->dataBlockInfos = taosArrayFromList(outputBuf, (uint32_t)numSteps, sizeof(SFileBlockInfo));
if (comp) {
tfree(outputBuf);
}
......
......@@ -97,27 +97,28 @@
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
#define YYNOCODE 265
#define YYNOCODE 267
#define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken
typedef union {
int yyinit;
ParseTOKENTYPE yy0;
SCreatedTableInfo yy96;
SRelationInfo* yy148;
tSqlExpr* yy178;
SCreateAcctInfo yy187;
SArray* yy285;
TAOS_FIELD yy295;
SSqlNode* yy344;
tVariant yy362;
SIntervalVal yy376;
SLimitVal yy438;
int yy460;
SCreateTableSql* yy470;
SSessionWindowVal yy523;
int64_t yy525;
SCreateDbInfo yy526;
TAOS_FIELD yy27;
SWindowStateVal yy76;
SCreateDbInfo yy114;
SSqlNode* yy124;
SCreateAcctInfo yy183;
SCreatedTableInfo yy192;
SArray* yy193;
SCreateTableSql* yy270;
int yy312;
SRelationInfo* yy332;
SIntervalVal yy392;
tVariant yy442;
SSessionWindowVal yy447;
tSqlExpr* yy454;
int64_t yy473;
SLimitVal yy482;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
......@@ -127,17 +128,17 @@ typedef union {
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo
#define YYFALLBACK 1
#define YYNSTATE 323
#define YYNRULE 273
#define YYNTOKEN 187
#define YY_MAX_SHIFT 322
#define YY_MIN_SHIFTREDUCE 518
#define YY_MAX_SHIFTREDUCE 790
#define YY_ERROR_ACTION 791
#define YY_ACCEPT_ACTION 792
#define YY_NO_ACTION 793
#define YY_MIN_REDUCE 794
#define YY_MAX_REDUCE 1066
#define YYNSTATE 327
#define YYNRULE 275
#define YYNTOKEN 188
#define YY_MAX_SHIFT 326
#define YY_MIN_SHIFTREDUCE 523
#define YY_MAX_SHIFTREDUCE 797
#define YY_ERROR_ACTION 798
#define YY_ACCEPT_ACTION 799
#define YY_NO_ACTION 800
#define YY_MIN_REDUCE 801
#define YY_MAX_REDUCE 1075
/************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined
......@@ -203,266 +204,266 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (695)
#define YY_ACTTAB_COUNT (700)
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 962, 566, 209, 320, 70, 18, 215, 953, 186, 567,
/* 10 */ 792, 322, 184, 48, 49, 144, 52, 53, 218, 1048,
/* 20 */ 221, 42, 212, 51, 270, 56, 54, 58, 55, 927,
/* 30 */ 645, 186, 941, 47, 46, 186, 926, 45, 44, 43,
/* 40 */ 48, 49, 1047, 52, 53, 217, 1048, 221, 42, 566,
/* 50 */ 51, 270, 56, 54, 58, 55, 953, 567, 296, 295,
/* 60 */ 47, 46, 959, 144, 45, 44, 43, 49, 31, 52,
/* 70 */ 53, 248, 137, 221, 42, 83, 51, 270, 56, 54,
/* 80 */ 58, 55, 286, 997, 88, 265, 47, 46, 72, 306,
/* 90 */ 45, 44, 43, 519, 520, 521, 522, 523, 524, 525,
/* 100 */ 526, 527, 528, 529, 530, 531, 321, 233, 286, 210,
/* 110 */ 71, 566, 937, 48, 49, 31, 52, 53, 929, 567,
/* 120 */ 221, 42, 566, 51, 270, 56, 54, 58, 55, 267,
/* 130 */ 567, 81, 734, 47, 46, 255, 254, 45, 44, 43,
/* 140 */ 48, 50, 939, 52, 53, 232, 190, 221, 42, 240,
/* 150 */ 51, 270, 56, 54, 58, 55, 211, 244, 243, 938,
/* 160 */ 47, 46, 1, 158, 45, 44, 43, 24, 284, 315,
/* 170 */ 314, 283, 282, 281, 313, 280, 312, 311, 310, 279,
/* 180 */ 309, 308, 901, 31, 889, 890, 891, 892, 893, 894,
/* 190 */ 895, 896, 897, 898, 899, 900, 902, 903, 52, 53,
/* 200 */ 715, 716, 221, 42, 230, 51, 270, 56, 54, 58,
/* 210 */ 55, 935, 19, 1044, 234, 47, 46, 293, 292, 45,
/* 220 */ 44, 43, 220, 749, 224, 25, 738, 938, 741, 195,
/* 230 */ 744, 220, 749, 3, 171, 738, 196, 741, 740, 744,
/* 240 */ 743, 121, 120, 194, 45, 44, 43, 1043, 56, 54,
/* 250 */ 58, 55, 681, 227, 205, 206, 47, 46, 269, 8,
/* 260 */ 45, 44, 43, 205, 206, 1042, 77, 739, 24, 742,
/* 270 */ 315, 314, 77, 231, 37, 313, 288, 312, 311, 310,
/* 280 */ 37, 309, 308, 909, 108, 669, 907, 908, 666, 306,
/* 290 */ 667, 910, 668, 912, 913, 911, 85, 914, 915, 106,
/* 300 */ 100, 111, 247, 203, 69, 31, 110, 116, 119, 109,
/* 310 */ 202, 5, 34, 160, 226, 113, 235, 236, 159, 95,
/* 320 */ 90, 94, 228, 31, 31, 57, 684, 924, 925, 30,
/* 330 */ 928, 31, 750, 31, 57, 178, 176, 174, 746, 144,
/* 340 */ 941, 750, 173, 124, 123, 122, 225, 746, 941, 938,
/* 350 */ 747, 47, 46, 204, 745, 45, 44, 43, 319, 318,
/* 360 */ 129, 316, 144, 745, 289, 290, 271, 938, 938, 135,
/* 370 */ 133, 132, 294, 953, 298, 938, 13, 938, 188, 748,
/* 380 */ 87, 840, 84, 736, 74, 170, 849, 941, 213, 841,
/* 390 */ 170, 249, 251, 170, 670, 32, 700, 75, 219, 706,
/* 400 */ 139, 189, 707, 61, 688, 251, 21, 996, 770, 62,
/* 410 */ 751, 191, 20, 655, 20, 65, 273, 32, 657, 737,
/* 420 */ 32, 275, 61, 1058, 656, 86, 29, 185, 61, 276,
/* 430 */ 82, 63, 940, 99, 98, 66, 15, 14, 192, 105,
/* 440 */ 104, 68, 6, 644, 118, 117, 193, 17, 16, 673,
/* 450 */ 199, 674, 200, 671, 198, 672, 183, 197, 187, 1007,
/* 460 */ 245, 1006, 753, 222, 40, 1003, 1002, 223, 297, 136,
/* 470 */ 989, 961, 972, 969, 988, 970, 954, 252, 974, 138,
/* 480 */ 936, 142, 154, 134, 256, 214, 905, 155, 699, 150,
/* 490 */ 934, 258, 145, 156, 260, 157, 148, 146, 951, 147,
/* 500 */ 59, 852, 67, 278, 263, 38, 181, 64, 35, 268,
/* 510 */ 266, 287, 848, 264, 1063, 96, 1062, 1060, 161, 291,
/* 520 */ 1057, 102, 1056, 1054, 162, 870, 36, 33, 149, 262,
/* 530 */ 39, 182, 837, 112, 835, 114, 115, 833, 832, 237,
/* 540 */ 172, 830, 257, 829, 828, 827, 826, 825, 175, 177,
/* 550 */ 822, 820, 818, 816, 179, 813, 180, 41, 250, 73,
/* 560 */ 307, 78, 259, 107, 990, 299, 300, 301, 302, 303,
/* 570 */ 304, 207, 305, 229, 317, 277, 790, 238, 239, 789,
/* 580 */ 208, 201, 91, 92, 241, 242, 788, 776, 775, 246,
/* 590 */ 831, 251, 272, 125, 126, 824, 165, 164, 871, 168,
/* 600 */ 163, 166, 167, 169, 127, 823, 2, 128, 815, 814,
/* 610 */ 9, 26, 4, 676, 76, 701, 216, 151, 152, 153,
/* 620 */ 253, 79, 917, 140, 10, 704, 141, 80, 261, 754,
/* 630 */ 708, 143, 11, 89, 752, 27, 7, 28, 12, 22,
/* 640 */ 274, 23, 608, 604, 87, 602, 601, 600, 597, 570,
/* 650 */ 285, 93, 97, 32, 647, 60, 646, 643, 592, 590,
/* 660 */ 101, 103, 582, 588, 584, 586, 580, 578, 611, 610,
/* 670 */ 609, 607, 606, 605, 603, 599, 598, 61, 568, 535,
/* 680 */ 533, 794, 793, 793, 793, 793, 793, 793, 793, 793,
/* 690 */ 793, 793, 793, 130, 131,
/* 0 */ 969, 571, 211, 324, 934, 18, 217, 186, 188, 572,
/* 10 */ 799, 326, 192, 48, 49, 145, 52, 53, 220, 1057,
/* 20 */ 223, 42, 275, 51, 274, 56, 54, 58, 55, 1053,
/* 30 */ 650, 188, 948, 47, 46, 188, 228, 45, 44, 43,
/* 40 */ 48, 49, 1056, 52, 53, 219, 1057, 223, 42, 571,
/* 50 */ 51, 274, 56, 54, 58, 55, 960, 572, 300, 299,
/* 60 */ 47, 46, 948, 966, 45, 44, 43, 49, 31, 52,
/* 70 */ 53, 138, 250, 223, 42, 1067, 51, 274, 56, 54,
/* 80 */ 58, 55, 271, 290, 82, 1052, 47, 46, 89, 234,
/* 90 */ 45, 44, 43, 524, 525, 526, 527, 528, 529, 530,
/* 100 */ 531, 532, 533, 534, 535, 536, 325, 571, 290, 212,
/* 110 */ 71, 571, 944, 48, 49, 572, 52, 53, 760, 572,
/* 120 */ 223, 42, 936, 51, 274, 56, 54, 58, 55, 45,
/* 130 */ 44, 43, 741, 47, 46, 257, 256, 45, 44, 43,
/* 140 */ 48, 50, 145, 52, 53, 1, 160, 223, 42, 145,
/* 150 */ 51, 274, 56, 54, 58, 55, 323, 322, 130, 236,
/* 160 */ 47, 46, 297, 296, 45, 44, 43, 24, 288, 319,
/* 170 */ 318, 287, 286, 285, 317, 284, 316, 315, 314, 283,
/* 180 */ 313, 312, 908, 31, 896, 897, 898, 899, 900, 901,
/* 190 */ 902, 903, 904, 905, 906, 907, 909, 910, 52, 53,
/* 200 */ 847, 960, 223, 42, 172, 51, 274, 56, 54, 58,
/* 210 */ 55, 1005, 19, 86, 25, 47, 46, 214, 83, 45,
/* 220 */ 44, 43, 222, 756, 213, 310, 745, 945, 748, 197,
/* 230 */ 751, 222, 756, 230, 13, 745, 198, 748, 88, 751,
/* 240 */ 85, 122, 121, 196, 931, 932, 30, 935, 56, 54,
/* 250 */ 58, 55, 3, 173, 207, 208, 47, 46, 273, 948,
/* 260 */ 45, 44, 43, 207, 208, 242, 232, 747, 24, 750,
/* 270 */ 319, 318, 77, 246, 245, 317, 689, 316, 315, 314,
/* 280 */ 37, 313, 312, 62, 916, 47, 46, 914, 915, 45,
/* 290 */ 44, 43, 917, 942, 919, 920, 918, 145, 921, 922,
/* 300 */ 107, 101, 112, 249, 31, 69, 63, 111, 117, 120,
/* 310 */ 110, 204, 674, 109, 235, 671, 114, 672, 310, 673,
/* 320 */ 5, 34, 162, 1051, 70, 57, 31, 161, 96, 91,
/* 330 */ 95, 31, 757, 31, 57, 229, 233, 31, 753, 292,
/* 340 */ 746, 757, 749, 237, 238, 226, 31, 753, 945, 946,
/* 350 */ 180, 178, 176, 205, 693, 752, 933, 175, 125, 124,
/* 360 */ 123, 136, 134, 133, 752, 77, 1006, 227, 269, 320,
/* 370 */ 945, 84, 293, 37, 294, 945, 856, 945, 298, 754,
/* 380 */ 172, 945, 848, 960, 686, 72, 172, 302, 722, 723,
/* 390 */ 945, 8, 251, 743, 74, 948, 32, 75, 221, 215,
/* 400 */ 705, 206, 253, 713, 140, 253, 714, 61, 777, 758,
/* 410 */ 21, 65, 20, 20, 660, 678, 277, 679, 32, 662,
/* 420 */ 32, 675, 279, 61, 661, 190, 87, 29, 61, 744,
/* 430 */ 280, 191, 66, 100, 99, 15, 14, 119, 118, 106,
/* 440 */ 105, 68, 6, 649, 17, 16, 676, 193, 677, 187,
/* 450 */ 194, 195, 755, 201, 202, 200, 185, 199, 189, 947,
/* 460 */ 1016, 1015, 224, 1012, 1011, 247, 137, 40, 225, 301,
/* 470 */ 968, 979, 976, 977, 981, 139, 143, 961, 254, 998,
/* 480 */ 997, 943, 263, 156, 135, 157, 704, 258, 311, 941,
/* 490 */ 912, 306, 108, 303, 155, 150, 148, 958, 158, 159,
/* 500 */ 859, 67, 146, 216, 282, 38, 260, 183, 35, 267,
/* 510 */ 291, 64, 855, 1072, 97, 59, 1071, 1069, 163, 295,
/* 520 */ 1066, 103, 1065, 1063, 164, 877, 36, 272, 33, 270,
/* 530 */ 268, 39, 184, 844, 113, 842, 115, 116, 840, 839,
/* 540 */ 239, 174, 837, 836, 835, 834, 833, 832, 177, 179,
/* 550 */ 829, 827, 825, 266, 823, 181, 820, 182, 264, 252,
/* 560 */ 73, 78, 262, 261, 999, 259, 41, 304, 305, 307,
/* 570 */ 209, 231, 308, 309, 281, 321, 797, 240, 241, 210,
/* 580 */ 796, 92, 93, 203, 244, 243, 795, 783, 782, 838,
/* 590 */ 248, 253, 681, 276, 126, 171, 166, 878, 167, 165,
/* 600 */ 168, 169, 831, 170, 9, 127, 128, 830, 76, 129,
/* 610 */ 822, 821, 2, 26, 4, 255, 79, 706, 153, 151,
/* 620 */ 149, 147, 152, 154, 141, 924, 709, 142, 80, 218,
/* 630 */ 711, 81, 265, 761, 715, 144, 90, 10, 11, 27,
/* 640 */ 759, 28, 7, 12, 22, 88, 23, 613, 278, 609,
/* 650 */ 607, 606, 605, 602, 575, 289, 94, 32, 60, 98,
/* 660 */ 652, 651, 648, 102, 597, 595, 104, 587, 593, 589,
/* 670 */ 591, 585, 583, 616, 615, 614, 612, 611, 610, 608,
/* 680 */ 604, 603, 573, 540, 538, 61, 801, 800, 800, 800,
/* 690 */ 800, 800, 800, 800, 800, 800, 800, 800, 131, 132,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 191, 1, 190, 191, 197, 252, 210, 234, 252, 9,
/* 10 */ 188, 189, 252, 13, 14, 191, 16, 17, 262, 263,
/* 20 */ 20, 21, 249, 23, 24, 25, 26, 27, 28, 0,
/* 30 */ 5, 252, 236, 33, 34, 252, 229, 37, 38, 39,
/* 40 */ 13, 14, 263, 16, 17, 262, 263, 20, 21, 1,
/* 50 */ 23, 24, 25, 26, 27, 28, 234, 9, 33, 34,
/* 60 */ 33, 34, 253, 191, 37, 38, 39, 14, 191, 16,
/* 70 */ 17, 249, 191, 20, 21, 237, 23, 24, 25, 26,
/* 80 */ 27, 28, 79, 259, 197, 261, 33, 34, 250, 81,
/* 0 */ 192, 1, 191, 192, 0, 254, 211, 254, 254, 9,
/* 10 */ 189, 190, 254, 13, 14, 192, 16, 17, 264, 265,
/* 20 */ 20, 21, 15, 23, 24, 25, 26, 27, 28, 254,
/* 30 */ 5, 254, 237, 33, 34, 254, 211, 37, 38, 39,
/* 40 */ 13, 14, 265, 16, 17, 264, 265, 20, 21, 1,
/* 50 */ 23, 24, 25, 26, 27, 28, 235, 9, 33, 34,
/* 60 */ 33, 34, 237, 255, 37, 38, 39, 14, 192, 16,
/* 70 */ 17, 192, 251, 20, 21, 237, 23, 24, 25, 26,
/* 80 */ 27, 28, 259, 79, 261, 254, 33, 34, 198, 68,
/* 90 */ 37, 38, 39, 45, 46, 47, 48, 49, 50, 51,
/* 100 */ 52, 53, 54, 55, 56, 57, 58, 191, 79, 61,
/* 110 */ 110, 1, 235, 13, 14, 191, 16, 17, 231, 9,
/* 120 */ 20, 21, 1, 23, 24, 25, 26, 27, 28, 257,
/* 130 */ 9, 259, 105, 33, 34, 254, 255, 37, 38, 39,
/* 140 */ 13, 14, 226, 16, 17, 68, 252, 20, 21, 135,
/* 150 */ 23, 24, 25, 26, 27, 28, 232, 143, 144, 235,
/* 160 */ 33, 34, 198, 199, 37, 38, 39, 88, 89, 90,
/* 100 */ 52, 53, 54, 55, 56, 57, 58, 1, 79, 61,
/* 110 */ 110, 1, 236, 13, 14, 9, 16, 17, 111, 9,
/* 120 */ 20, 21, 232, 23, 24, 25, 26, 27, 28, 37,
/* 130 */ 38, 39, 105, 33, 34, 256, 257, 37, 38, 39,
/* 140 */ 13, 14, 192, 16, 17, 199, 200, 20, 21, 192,
/* 150 */ 23, 24, 25, 26, 27, 28, 65, 66, 67, 138,
/* 160 */ 33, 34, 141, 142, 37, 38, 39, 88, 89, 90,
/* 170 */ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
/* 180 */ 101, 102, 209, 191, 211, 212, 213, 214, 215, 216,
/* 190 */ 217, 218, 219, 220, 221, 222, 223, 224, 16, 17,
/* 200 */ 124, 125, 20, 21, 68, 23, 24, 25, 26, 27,
/* 210 */ 28, 191, 44, 252, 137, 33, 34, 140, 141, 37,
/* 220 */ 38, 39, 1, 2, 232, 104, 5, 235, 7, 61,
/* 230 */ 9, 1, 2, 194, 195, 5, 68, 7, 5, 9,
/* 240 */ 7, 73, 74, 75, 37, 38, 39, 252, 25, 26,
/* 250 */ 27, 28, 109, 233, 33, 34, 33, 34, 37, 116,
/* 260 */ 37, 38, 39, 33, 34, 252, 104, 5, 88, 7,
/* 270 */ 90, 91, 104, 137, 112, 95, 140, 97, 98, 99,
/* 280 */ 112, 101, 102, 209, 76, 2, 212, 213, 5, 81,
/* 290 */ 7, 217, 9, 219, 220, 221, 197, 223, 224, 62,
/* 300 */ 63, 64, 134, 252, 136, 191, 69, 70, 71, 72,
/* 310 */ 142, 62, 63, 64, 210, 78, 33, 34, 69, 70,
/* 320 */ 71, 72, 210, 191, 191, 104, 37, 228, 229, 230,
/* 330 */ 231, 191, 111, 191, 104, 62, 63, 64, 117, 191,
/* 340 */ 236, 111, 69, 70, 71, 72, 232, 117, 236, 235,
/* 350 */ 117, 33, 34, 252, 133, 37, 38, 39, 65, 66,
/* 360 */ 67, 210, 191, 133, 232, 232, 15, 235, 235, 62,
/* 370 */ 63, 64, 232, 234, 232, 235, 104, 235, 252, 117,
/* 380 */ 108, 196, 110, 1, 105, 200, 196, 236, 249, 196,
/* 390 */ 200, 105, 113, 200, 111, 109, 105, 105, 60, 105,
/* 400 */ 109, 252, 105, 109, 115, 113, 109, 259, 105, 109,
/* 410 */ 105, 252, 109, 105, 109, 109, 105, 109, 105, 37,
/* 420 */ 109, 105, 109, 236, 105, 109, 104, 252, 109, 107,
/* 430 */ 259, 131, 236, 138, 139, 129, 138, 139, 252, 138,
/* 440 */ 139, 104, 104, 106, 76, 77, 252, 138, 139, 5,
/* 450 */ 252, 7, 252, 5, 252, 7, 252, 252, 252, 227,
/* 460 */ 191, 227, 111, 227, 251, 227, 227, 227, 227, 191,
/* 470 */ 260, 191, 191, 191, 260, 191, 234, 234, 191, 191,
/* 480 */ 234, 191, 238, 60, 256, 256, 225, 191, 117, 242,
/* 490 */ 191, 256, 247, 191, 119, 191, 244, 246, 248, 245,
/* 500 */ 127, 191, 128, 191, 256, 191, 191, 130, 191, 122,
/* 510 */ 126, 191, 191, 121, 191, 191, 191, 191, 191, 191,
/* 520 */ 191, 191, 191, 191, 191, 191, 191, 191, 243, 120,
/* 530 */ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
/* 540 */ 191, 191, 118, 191, 191, 191, 191, 191, 191, 191,
/* 550 */ 191, 191, 191, 191, 191, 191, 191, 132, 192, 192,
/* 560 */ 103, 192, 192, 87, 192, 86, 50, 83, 85, 54,
/* 570 */ 84, 192, 82, 192, 79, 192, 5, 145, 5, 5,
/* 580 */ 192, 192, 197, 197, 145, 5, 5, 90, 89, 135,
/* 590 */ 192, 113, 107, 193, 193, 192, 202, 206, 208, 204,
/* 600 */ 207, 205, 203, 201, 193, 192, 198, 193, 192, 192,
/* 610 */ 104, 104, 194, 105, 114, 105, 1, 241, 240, 239,
/* 620 */ 109, 109, 225, 104, 123, 105, 109, 104, 104, 111,
/* 630 */ 105, 104, 123, 76, 105, 109, 104, 109, 104, 104,
/* 640 */ 107, 104, 9, 5, 108, 5, 5, 5, 5, 80,
/* 650 */ 15, 76, 139, 109, 5, 16, 5, 105, 5, 5,
/* 660 */ 139, 139, 5, 5, 5, 5, 5, 5, 5, 5,
/* 670 */ 5, 5, 5, 5, 5, 5, 5, 109, 80, 60,
/* 680 */ 59, 0, 264, 264, 264, 264, 264, 264, 264, 264,
/* 690 */ 264, 264, 264, 21, 21, 264, 264, 264, 264, 264,
/* 700 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 710 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 720 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 730 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 740 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 750 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 760 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 770 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 780 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 790 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 800 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 810 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 820 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 830 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 840 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 850 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 860 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 870 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264,
/* 880 */ 264, 264,
/* 180 */ 101, 102, 210, 192, 212, 213, 214, 215, 216, 217,
/* 190 */ 218, 219, 220, 221, 222, 223, 224, 225, 16, 17,
/* 200 */ 197, 235, 20, 21, 201, 23, 24, 25, 26, 27,
/* 210 */ 28, 261, 44, 198, 104, 33, 34, 251, 261, 37,
/* 220 */ 38, 39, 1, 2, 233, 81, 5, 236, 7, 61,
/* 230 */ 9, 1, 2, 211, 104, 5, 68, 7, 108, 9,
/* 240 */ 110, 73, 74, 75, 229, 230, 231, 232, 25, 26,
/* 250 */ 27, 28, 195, 196, 33, 34, 33, 34, 37, 237,
/* 260 */ 37, 38, 39, 33, 34, 136, 68, 5, 88, 7,
/* 270 */ 90, 91, 104, 144, 145, 95, 37, 97, 98, 99,
/* 280 */ 112, 101, 102, 109, 210, 33, 34, 213, 214, 37,
/* 290 */ 38, 39, 218, 192, 220, 221, 222, 192, 224, 225,
/* 300 */ 62, 63, 64, 135, 192, 137, 132, 69, 70, 71,
/* 310 */ 72, 143, 2, 76, 192, 5, 78, 7, 81, 9,
/* 320 */ 62, 63, 64, 254, 198, 104, 192, 69, 70, 71,
/* 330 */ 72, 192, 111, 192, 104, 234, 138, 192, 117, 141,
/* 340 */ 5, 111, 7, 33, 34, 233, 192, 117, 236, 227,
/* 350 */ 62, 63, 64, 254, 115, 134, 230, 69, 70, 71,
/* 360 */ 72, 62, 63, 64, 134, 104, 261, 233, 263, 211,
/* 370 */ 236, 238, 233, 112, 233, 236, 197, 236, 233, 117,
/* 380 */ 201, 236, 197, 235, 109, 252, 201, 233, 125, 126,
/* 390 */ 236, 116, 105, 1, 105, 237, 109, 105, 60, 251,
/* 400 */ 105, 254, 113, 105, 109, 113, 105, 109, 105, 105,
/* 410 */ 109, 109, 109, 109, 105, 5, 105, 7, 109, 105,
/* 420 */ 109, 111, 105, 109, 105, 254, 109, 104, 109, 37,
/* 430 */ 107, 254, 130, 139, 140, 139, 140, 76, 77, 139,
/* 440 */ 140, 104, 104, 106, 139, 140, 5, 254, 7, 254,
/* 450 */ 254, 254, 117, 254, 254, 254, 254, 254, 254, 237,
/* 460 */ 228, 228, 228, 228, 228, 192, 192, 253, 228, 228,
/* 470 */ 192, 192, 192, 192, 192, 192, 192, 235, 235, 262,
/* 480 */ 262, 235, 192, 239, 60, 192, 117, 258, 103, 192,
/* 490 */ 226, 85, 87, 86, 240, 245, 247, 250, 192, 192,
/* 500 */ 192, 129, 249, 258, 192, 192, 258, 192, 192, 258,
/* 510 */ 192, 131, 192, 192, 192, 128, 192, 192, 192, 192,
/* 520 */ 192, 192, 192, 192, 192, 192, 192, 123, 192, 127,
/* 530 */ 122, 192, 192, 192, 192, 192, 192, 192, 192, 192,
/* 540 */ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
/* 550 */ 192, 192, 192, 121, 192, 192, 192, 192, 120, 193,
/* 560 */ 193, 193, 119, 193, 193, 118, 133, 50, 83, 54,
/* 570 */ 193, 193, 84, 82, 193, 79, 5, 146, 5, 193,
/* 580 */ 5, 198, 198, 193, 5, 146, 5, 90, 89, 193,
/* 590 */ 136, 113, 105, 107, 194, 202, 207, 209, 203, 208,
/* 600 */ 206, 204, 193, 205, 104, 194, 194, 193, 114, 194,
/* 610 */ 193, 193, 199, 104, 195, 109, 109, 105, 242, 244,
/* 620 */ 246, 248, 243, 241, 104, 226, 105, 109, 104, 1,
/* 630 */ 105, 104, 104, 111, 105, 104, 76, 124, 124, 109,
/* 640 */ 105, 109, 104, 104, 104, 108, 104, 9, 107, 5,
/* 650 */ 5, 5, 5, 5, 80, 15, 76, 109, 16, 140,
/* 660 */ 5, 5, 105, 140, 5, 5, 140, 5, 5, 5,
/* 670 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 680 */ 5, 5, 80, 60, 59, 109, 0, 266, 266, 266,
/* 690 */ 266, 266, 266, 266, 266, 266, 266, 266, 21, 21,
/* 700 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 710 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 720 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 730 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 740 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 750 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 760 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 770 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 780 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 790 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 800 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 810 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 820 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 830 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 840 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 850 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 860 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 870 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 880 */ 266, 266, 266, 266, 266, 266, 266, 266,
};
#define YY_SHIFT_COUNT (322)
#define YY_SHIFT_COUNT (326)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (681)
#define YY_SHIFT_MAX (686)
static const unsigned short int yy_shift_ofst[] = {
/* 0 */ 168, 79, 79, 180, 180, 3, 221, 230, 121, 110,
/* 10 */ 110, 110, 110, 110, 110, 110, 110, 110, 0, 48,
/* 20 */ 230, 283, 283, 283, 283, 162, 162, 110, 110, 110,
/* 30 */ 29, 110, 110, 208, 3, 8, 8, 695, 695, 695,
/* 0 */ 168, 79, 79, 180, 180, 29, 221, 230, 110, 106,
/* 10 */ 106, 106, 106, 106, 106, 106, 106, 106, 0, 48,
/* 20 */ 230, 310, 310, 310, 310, 261, 261, 106, 106, 106,
/* 30 */ 4, 106, 106, 237, 29, 144, 144, 700, 700, 700,
/* 40 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
/* 50 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
/* 60 */ 283, 283, 25, 25, 25, 25, 25, 25, 25, 110,
/* 70 */ 110, 110, 289, 110, 110, 110, 162, 162, 110, 110,
/* 80 */ 110, 76, 76, 143, 162, 110, 110, 110, 110, 110,
/* 90 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
/* 100 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
/* 110 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
/* 120 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
/* 130 */ 110, 110, 110, 110, 110, 110, 423, 423, 423, 371,
/* 140 */ 371, 371, 423, 371, 423, 374, 377, 373, 387, 384,
/* 150 */ 392, 409, 375, 424, 425, 423, 423, 423, 457, 3,
/* 160 */ 3, 423, 423, 476, 479, 516, 484, 483, 515, 486,
/* 170 */ 490, 457, 423, 495, 495, 423, 495, 423, 495, 423,
/* 180 */ 423, 695, 695, 27, 100, 127, 100, 100, 53, 182,
/* 190 */ 223, 223, 223, 223, 237, 249, 273, 318, 318, 318,
/* 200 */ 318, 77, 14, 207, 207, 233, 262, 272, 136, 293,
/* 210 */ 307, 286, 279, 292, 291, 294, 297, 303, 305, 382,
/* 220 */ 338, 351, 300, 306, 308, 311, 313, 316, 319, 322,
/* 230 */ 295, 298, 301, 337, 309, 444, 448, 368, 571, 432,
/* 240 */ 573, 574, 439, 580, 581, 497, 499, 454, 478, 485,
/* 250 */ 506, 500, 508, 507, 511, 512, 510, 519, 520, 517,
/* 260 */ 523, 615, 524, 525, 527, 526, 501, 528, 509, 529,
/* 270 */ 532, 518, 534, 485, 535, 533, 537, 536, 557, 633,
/* 280 */ 638, 640, 641, 642, 643, 569, 635, 575, 513, 544,
/* 290 */ 544, 639, 521, 522, 544, 649, 651, 552, 544, 653,
/* 300 */ 654, 657, 658, 659, 660, 661, 662, 663, 664, 665,
/* 310 */ 666, 667, 668, 669, 670, 671, 568, 598, 672, 673,
/* 320 */ 619, 621, 681,
/* 60 */ 310, 310, 25, 25, 25, 25, 25, 25, 25, 106,
/* 70 */ 106, 106, 239, 106, 106, 106, 261, 261, 106, 106,
/* 80 */ 106, 106, 263, 263, 275, 261, 106, 106, 106, 106,
/* 90 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 100 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 110 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 120 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 130 */ 106, 106, 106, 106, 106, 106, 106, 424, 424, 424,
/* 140 */ 369, 369, 369, 424, 369, 424, 372, 380, 387, 404,
/* 150 */ 402, 408, 432, 438, 443, 447, 433, 424, 424, 424,
/* 160 */ 385, 29, 29, 424, 424, 405, 407, 517, 485, 406,
/* 170 */ 515, 488, 491, 385, 424, 496, 496, 424, 496, 424,
/* 180 */ 496, 424, 424, 700, 700, 27, 100, 127, 100, 100,
/* 190 */ 53, 182, 223, 223, 223, 223, 238, 258, 288, 252,
/* 200 */ 252, 252, 252, 21, 129, 92, 92, 262, 335, 130,
/* 210 */ 198, 91, 299, 287, 289, 292, 295, 298, 301, 303,
/* 220 */ 304, 392, 338, 7, 174, 302, 309, 311, 314, 317,
/* 230 */ 319, 323, 294, 296, 300, 337, 305, 410, 441, 361,
/* 240 */ 571, 431, 573, 575, 439, 579, 581, 497, 499, 454,
/* 250 */ 478, 486, 500, 494, 487, 509, 506, 507, 512, 520,
/* 260 */ 521, 518, 524, 525, 527, 628, 528, 529, 531, 530,
/* 270 */ 513, 532, 514, 535, 538, 522, 539, 486, 540, 541,
/* 280 */ 542, 537, 560, 638, 644, 645, 646, 647, 648, 574,
/* 290 */ 640, 580, 519, 548, 548, 642, 523, 526, 548, 655,
/* 300 */ 656, 557, 548, 659, 660, 662, 663, 664, 665, 666,
/* 310 */ 667, 668, 669, 670, 671, 672, 673, 674, 675, 676,
/* 320 */ 576, 602, 677, 678, 623, 625, 686,
};
#define YY_REDUCE_COUNT (182)
#define YY_REDUCE_MIN (-247)
#define YY_REDUCE_MAX (418)
#define YY_REDUCE_COUNT (184)
#define YY_REDUCE_MIN (-249)
#define YY_REDUCE_MAX (419)
static const short yy_reduce_ofst[] = {
/* 0 */ -178, -27, -27, 74, 74, 99, -244, -217, -119, -76,
/* 10 */ -176, -128, -8, 114, 132, 133, 140, 142, -191, -188,
/* 20 */ -221, -204, 104, 112, 151, -227, 139, 148, 171, 20,
/* 30 */ -113, -84, -123, 185, -193, 190, 193, -162, -36, 39,
/* 40 */ -247, -240, -106, -39, -5, 13, 51, 101, 126, 149,
/* 50 */ 159, 175, 186, 194, 198, 200, 202, 204, 205, 206,
/* 60 */ 187, 196, 232, 234, 236, 238, 239, 240, 241, 269,
/* 70 */ 278, 280, 213, 281, 282, 284, 242, 243, 287, 288,
/* 80 */ 290, 210, 214, 244, 246, 296, 299, 302, 304, 310,
/* 90 */ 312, 314, 315, 317, 320, 321, 323, 324, 325, 326,
/* 100 */ 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
/* 110 */ 339, 340, 341, 342, 343, 344, 345, 346, 347, 348,
/* 120 */ 349, 350, 352, 353, 354, 355, 356, 357, 358, 359,
/* 130 */ 360, 361, 362, 363, 364, 365, 366, 367, 369, 228,
/* 140 */ 229, 235, 370, 248, 372, 250, 245, 251, 254, 252,
/* 150 */ 285, 247, 376, 378, 380, 379, 381, 383, 261, 385,
/* 160 */ 386, 388, 389, 390, 393, 391, 394, 396, 399, 395,
/* 170 */ 402, 397, 398, 400, 401, 403, 411, 413, 414, 416,
/* 180 */ 417, 408, 418,
/* 0 */ -179, -28, -28, 74, 74, 15, -246, -219, -121, -9,
/* 10 */ 105, -177, 112, 134, 139, 141, 145, 154, -192, -189,
/* 20 */ -223, -205, -175, 22, 158, -34, 148, -50, -43, 101,
/* 30 */ -110, 122, -124, 3, 126, 179, 185, 133, -54, 57,
/* 40 */ -249, -247, -242, -225, -169, 69, 99, 147, 171, 177,
/* 50 */ 193, 195, 196, 197, 199, 200, 201, 202, 203, 204,
/* 60 */ -162, 222, 232, 233, 234, 235, 236, 240, 241, 273,
/* 70 */ 274, 278, 214, 279, 280, 281, 242, 243, 282, 283,
/* 80 */ 284, 290, 217, 218, 244, 246, 293, 297, 306, 307,
/* 90 */ 308, 312, 313, 315, 316, 318, 320, 321, 322, 324,
/* 100 */ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
/* 110 */ 336, 339, 340, 341, 342, 343, 344, 345, 346, 347,
/* 120 */ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
/* 130 */ 358, 359, 360, 362, 363, 364, 365, 366, 367, 368,
/* 140 */ 229, 245, 248, 370, 251, 371, 247, 253, 373, 249,
/* 150 */ 374, 250, 375, 379, 376, 382, 254, 377, 378, 381,
/* 160 */ 264, 383, 384, 386, 390, 388, 391, 389, 395, 394,
/* 170 */ 397, 398, 393, 399, 396, 400, 411, 409, 412, 414,
/* 180 */ 415, 417, 418, 413, 419,
};
static const YYACTIONTYPE yy_default[] = {
/* 0 */ 791, 904, 850, 916, 838, 847, 1050, 1050, 791, 791,
/* 10 */ 791, 791, 791, 791, 791, 791, 791, 791, 963, 810,
/* 20 */ 1050, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 30 */ 847, 791, 791, 853, 847, 853, 853, 958, 888, 906,
/* 40 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 50 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 60 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 70 */ 791, 791, 965, 971, 968, 791, 791, 791, 973, 791,
/* 80 */ 791, 993, 993, 956, 791, 791, 791, 791, 791, 791,
/* 90 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 100 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 110 */ 791, 791, 836, 791, 834, 791, 791, 791, 791, 791,
/* 120 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 821,
/* 130 */ 791, 791, 791, 791, 791, 791, 812, 812, 812, 791,
/* 140 */ 791, 791, 812, 791, 812, 1000, 1004, 998, 986, 994,
/* 150 */ 985, 981, 979, 978, 1008, 812, 812, 812, 851, 847,
/* 160 */ 847, 812, 812, 869, 867, 865, 857, 863, 859, 861,
/* 170 */ 855, 839, 812, 845, 845, 812, 845, 812, 845, 812,
/* 180 */ 812, 888, 906, 791, 1009, 791, 1049, 999, 1039, 1038,
/* 190 */ 1045, 1037, 1036, 1035, 791, 791, 791, 1031, 1032, 1034,
/* 200 */ 1033, 791, 791, 1041, 1040, 791, 791, 791, 791, 791,
/* 210 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 220 */ 1011, 791, 1005, 1001, 791, 791, 791, 791, 791, 791,
/* 230 */ 791, 791, 791, 918, 791, 791, 791, 791, 791, 791,
/* 240 */ 791, 791, 791, 791, 791, 791, 791, 791, 955, 791,
/* 250 */ 791, 791, 791, 791, 967, 966, 791, 791, 791, 791,
/* 260 */ 791, 791, 791, 791, 791, 995, 791, 987, 791, 791,
/* 270 */ 791, 791, 791, 930, 791, 791, 791, 791, 791, 791,
/* 280 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 1061,
/* 290 */ 1059, 791, 791, 791, 1055, 791, 791, 791, 1053, 791,
/* 300 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791,
/* 310 */ 791, 791, 791, 791, 791, 791, 872, 791, 819, 817,
/* 320 */ 791, 808, 791,
/* 0 */ 798, 911, 857, 923, 845, 854, 1059, 1059, 798, 798,
/* 10 */ 798, 798, 798, 798, 798, 798, 798, 798, 970, 817,
/* 20 */ 1059, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 30 */ 854, 798, 798, 860, 854, 860, 860, 965, 895, 913,
/* 40 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 50 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 60 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 70 */ 798, 798, 972, 978, 975, 798, 798, 798, 980, 798,
/* 80 */ 798, 798, 1002, 1002, 963, 798, 798, 798, 798, 798,
/* 90 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 100 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 110 */ 798, 798, 798, 843, 798, 841, 798, 798, 798, 798,
/* 120 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 130 */ 828, 798, 798, 798, 798, 798, 798, 819, 819, 819,
/* 140 */ 798, 798, 798, 819, 798, 819, 1009, 1013, 1007, 995,
/* 150 */ 1003, 994, 990, 988, 986, 985, 1017, 819, 819, 819,
/* 160 */ 858, 854, 854, 819, 819, 876, 874, 872, 864, 870,
/* 170 */ 866, 868, 862, 846, 819, 852, 852, 819, 852, 819,
/* 180 */ 852, 819, 819, 895, 913, 798, 1018, 798, 1058, 1008,
/* 190 */ 1048, 1047, 1054, 1046, 1045, 1044, 798, 798, 798, 1040,
/* 200 */ 1041, 1043, 1042, 798, 798, 1050, 1049, 798, 798, 798,
/* 210 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 220 */ 798, 798, 1020, 798, 1014, 1010, 798, 798, 798, 798,
/* 230 */ 798, 798, 798, 798, 798, 925, 798, 798, 798, 798,
/* 240 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 250 */ 962, 798, 798, 798, 798, 798, 974, 973, 798, 798,
/* 260 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 1004,
/* 270 */ 798, 996, 798, 798, 798, 798, 798, 937, 798, 798,
/* 280 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 290 */ 798, 798, 798, 1070, 1068, 798, 798, 798, 1064, 798,
/* 300 */ 798, 798, 1062, 798, 798, 798, 798, 798, 798, 798,
/* 310 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 320 */ 879, 798, 826, 824, 798, 815, 798,
};
/********** End of lemon-generated parsing tables *****************************/
......@@ -602,6 +603,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* VARIABLE => nothing */
0, /* INTERVAL => nothing */
0, /* SESSION => nothing */
0, /* STATE_WINDOW => nothing */
0, /* FILL => nothing */
0, /* SLIDING => nothing */
0, /* ORDER => nothing */
......@@ -875,150 +877,152 @@ static const char *const yyTokenName[] = {
/* 117 */ "VARIABLE",
/* 118 */ "INTERVAL",
/* 119 */ "SESSION",
/* 120 */ "FILL",
/* 121 */ "SLIDING",
/* 122 */ "ORDER",
/* 123 */ "BY",
/* 124 */ "ASC",
/* 125 */ "DESC",
/* 126 */ "GROUP",
/* 127 */ "HAVING",
/* 128 */ "LIMIT",
/* 129 */ "OFFSET",
/* 130 */ "SLIMIT",
/* 131 */ "SOFFSET",
/* 132 */ "WHERE",
/* 133 */ "NOW",
/* 134 */ "RESET",
/* 135 */ "QUERY",
/* 136 */ "SYNCDB",
/* 137 */ "ADD",
/* 138 */ "COLUMN",
/* 139 */ "TAG",
/* 140 */ "CHANGE",
/* 141 */ "SET",
/* 142 */ "KILL",
/* 143 */ "CONNECTION",
/* 144 */ "STREAM",
/* 145 */ "COLON",
/* 146 */ "ABORT",
/* 147 */ "AFTER",
/* 148 */ "ATTACH",
/* 149 */ "BEFORE",
/* 150 */ "BEGIN",
/* 151 */ "CASCADE",
/* 152 */ "CLUSTER",
/* 153 */ "CONFLICT",
/* 154 */ "COPY",
/* 155 */ "DEFERRED",
/* 156 */ "DELIMITERS",
/* 157 */ "DETACH",
/* 158 */ "EACH",
/* 159 */ "END",
/* 160 */ "EXPLAIN",
/* 161 */ "FAIL",
/* 162 */ "FOR",
/* 163 */ "IGNORE",
/* 164 */ "IMMEDIATE",
/* 165 */ "INITIALLY",
/* 166 */ "INSTEAD",
/* 167 */ "MATCH",
/* 168 */ "KEY",
/* 169 */ "OF",
/* 170 */ "RAISE",
/* 171 */ "REPLACE",
/* 172 */ "RESTRICT",
/* 173 */ "ROW",
/* 174 */ "STATEMENT",
/* 175 */ "TRIGGER",
/* 176 */ "VIEW",
/* 177 */ "SEMI",
/* 178 */ "NONE",
/* 179 */ "PREV",
/* 180 */ "LINEAR",
/* 181 */ "IMPORT",
/* 182 */ "TBNAME",
/* 183 */ "JOIN",
/* 184 */ "INSERT",
/* 185 */ "INTO",
/* 186 */ "VALUES",
/* 187 */ "error",
/* 188 */ "program",
/* 189 */ "cmd",
/* 190 */ "dbPrefix",
/* 191 */ "ids",
/* 192 */ "cpxName",
/* 193 */ "ifexists",
/* 194 */ "alter_db_optr",
/* 195 */ "alter_topic_optr",
/* 196 */ "acct_optr",
/* 197 */ "ifnotexists",
/* 198 */ "db_optr",
/* 199 */ "topic_optr",
/* 200 */ "pps",
/* 201 */ "tseries",
/* 202 */ "dbs",
/* 203 */ "streams",
/* 204 */ "storage",
/* 205 */ "qtime",
/* 206 */ "users",
/* 207 */ "conns",
/* 208 */ "state",
/* 209 */ "keep",
/* 210 */ "tagitemlist",
/* 211 */ "cache",
/* 212 */ "replica",
/* 213 */ "quorum",
/* 214 */ "days",
/* 215 */ "minrows",
/* 216 */ "maxrows",
/* 217 */ "blocks",
/* 218 */ "ctime",
/* 219 */ "wal",
/* 220 */ "fsync",
/* 221 */ "comp",
/* 222 */ "prec",
/* 223 */ "update",
/* 224 */ "cachelast",
/* 225 */ "partitions",
/* 226 */ "typename",
/* 227 */ "signed",
/* 228 */ "create_table_args",
/* 229 */ "create_stable_args",
/* 230 */ "create_table_list",
/* 231 */ "create_from_stable",
/* 232 */ "columnlist",
/* 233 */ "tagNamelist",
/* 234 */ "select",
/* 235 */ "column",
/* 236 */ "tagitem",
/* 237 */ "selcollist",
/* 238 */ "from",
/* 239 */ "where_opt",
/* 240 */ "interval_opt",
/* 241 */ "session_option",
/* 242 */ "fill_opt",
/* 243 */ "sliding_opt",
/* 244 */ "groupby_opt",
/* 245 */ "orderby_opt",
/* 246 */ "having_opt",
/* 247 */ "slimit_opt",
/* 248 */ "limit_opt",
/* 249 */ "union",
/* 250 */ "sclp",
/* 251 */ "distinct",
/* 252 */ "expr",
/* 253 */ "as",
/* 254 */ "tablelist",
/* 255 */ "sub",
/* 256 */ "tmvar",
/* 257 */ "sortlist",
/* 258 */ "sortitem",
/* 259 */ "item",
/* 260 */ "sortorder",
/* 261 */ "grouplist",
/* 262 */ "exprlist",
/* 263 */ "expritem",
/* 120 */ "STATE_WINDOW",
/* 121 */ "FILL",
/* 122 */ "SLIDING",
/* 123 */ "ORDER",
/* 124 */ "BY",
/* 125 */ "ASC",
/* 126 */ "DESC",
/* 127 */ "GROUP",
/* 128 */ "HAVING",
/* 129 */ "LIMIT",
/* 130 */ "OFFSET",
/* 131 */ "SLIMIT",
/* 132 */ "SOFFSET",
/* 133 */ "WHERE",
/* 134 */ "NOW",
/* 135 */ "RESET",
/* 136 */ "QUERY",
/* 137 */ "SYNCDB",
/* 138 */ "ADD",
/* 139 */ "COLUMN",
/* 140 */ "TAG",
/* 141 */ "CHANGE",
/* 142 */ "SET",
/* 143 */ "KILL",
/* 144 */ "CONNECTION",
/* 145 */ "STREAM",
/* 146 */ "COLON",
/* 147 */ "ABORT",
/* 148 */ "AFTER",
/* 149 */ "ATTACH",
/* 150 */ "BEFORE",
/* 151 */ "BEGIN",
/* 152 */ "CASCADE",
/* 153 */ "CLUSTER",
/* 154 */ "CONFLICT",
/* 155 */ "COPY",
/* 156 */ "DEFERRED",
/* 157 */ "DELIMITERS",
/* 158 */ "DETACH",
/* 159 */ "EACH",
/* 160 */ "END",
/* 161 */ "EXPLAIN",
/* 162 */ "FAIL",
/* 163 */ "FOR",
/* 164 */ "IGNORE",
/* 165 */ "IMMEDIATE",
/* 166 */ "INITIALLY",
/* 167 */ "INSTEAD",
/* 168 */ "MATCH",
/* 169 */ "KEY",
/* 170 */ "OF",
/* 171 */ "RAISE",
/* 172 */ "REPLACE",
/* 173 */ "RESTRICT",
/* 174 */ "ROW",
/* 175 */ "STATEMENT",
/* 176 */ "TRIGGER",
/* 177 */ "VIEW",
/* 178 */ "SEMI",
/* 179 */ "NONE",
/* 180 */ "PREV",
/* 181 */ "LINEAR",
/* 182 */ "IMPORT",
/* 183 */ "TBNAME",
/* 184 */ "JOIN",
/* 185 */ "INSERT",
/* 186 */ "INTO",
/* 187 */ "VALUES",
/* 188 */ "error",
/* 189 */ "program",
/* 190 */ "cmd",
/* 191 */ "dbPrefix",
/* 192 */ "ids",
/* 193 */ "cpxName",
/* 194 */ "ifexists",
/* 195 */ "alter_db_optr",
/* 196 */ "alter_topic_optr",
/* 197 */ "acct_optr",
/* 198 */ "ifnotexists",
/* 199 */ "db_optr",
/* 200 */ "topic_optr",
/* 201 */ "pps",
/* 202 */ "tseries",
/* 203 */ "dbs",
/* 204 */ "streams",
/* 205 */ "storage",
/* 206 */ "qtime",
/* 207 */ "users",
/* 208 */ "conns",
/* 209 */ "state",
/* 210 */ "keep",
/* 211 */ "tagitemlist",
/* 212 */ "cache",
/* 213 */ "replica",
/* 214 */ "quorum",
/* 215 */ "days",
/* 216 */ "minrows",
/* 217 */ "maxrows",
/* 218 */ "blocks",
/* 219 */ "ctime",
/* 220 */ "wal",
/* 221 */ "fsync",
/* 222 */ "comp",
/* 223 */ "prec",
/* 224 */ "update",
/* 225 */ "cachelast",
/* 226 */ "partitions",
/* 227 */ "typename",
/* 228 */ "signed",
/* 229 */ "create_table_args",
/* 230 */ "create_stable_args",
/* 231 */ "create_table_list",
/* 232 */ "create_from_stable",
/* 233 */ "columnlist",
/* 234 */ "tagNamelist",
/* 235 */ "select",
/* 236 */ "column",
/* 237 */ "tagitem",
/* 238 */ "selcollist",
/* 239 */ "from",
/* 240 */ "where_opt",
/* 241 */ "interval_opt",
/* 242 */ "session_option",
/* 243 */ "windowstate_option",
/* 244 */ "fill_opt",
/* 245 */ "sliding_opt",
/* 246 */ "groupby_opt",
/* 247 */ "orderby_opt",
/* 248 */ "having_opt",
/* 249 */ "slimit_opt",
/* 250 */ "limit_opt",
/* 251 */ "union",
/* 252 */ "sclp",
/* 253 */ "distinct",
/* 254 */ "expr",
/* 255 */ "as",
/* 256 */ "tablelist",
/* 257 */ "sub",
/* 258 */ "tmvar",
/* 259 */ "sortlist",
/* 260 */ "sortitem",
/* 261 */ "item",
/* 262 */ "sortorder",
/* 263 */ "grouplist",
/* 264 */ "exprlist",
/* 265 */ "expritem",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
......@@ -1183,7 +1187,7 @@ static const char *const yyRuleName[] = {
/* 154 */ "tagitem ::= MINUS FLOAT",
/* 155 */ "tagitem ::= PLUS INTEGER",
/* 156 */ "tagitem ::= PLUS FLOAT",
/* 157 */ "select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt",
/* 157 */ "select ::= SELECT selcollist from where_opt interval_opt session_option windowstate_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt",
/* 158 */ "select ::= LP select RP",
/* 159 */ "union ::= select",
/* 160 */ "union ::= union UNION ALL select",
......@@ -1213,92 +1217,94 @@ static const char *const yyRuleName[] = {
/* 184 */ "interval_opt ::=",
/* 185 */ "session_option ::=",
/* 186 */ "session_option ::= SESSION LP ids cpxName COMMA tmvar RP",
/* 187 */ "fill_opt ::=",
/* 188 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
/* 189 */ "fill_opt ::= FILL LP ID RP",
/* 190 */ "sliding_opt ::= SLIDING LP tmvar RP",
/* 191 */ "sliding_opt ::=",
/* 192 */ "orderby_opt ::=",
/* 193 */ "orderby_opt ::= ORDER BY sortlist",
/* 194 */ "sortlist ::= sortlist COMMA item sortorder",
/* 195 */ "sortlist ::= item sortorder",
/* 196 */ "item ::= ids cpxName",
/* 197 */ "sortorder ::= ASC",
/* 198 */ "sortorder ::= DESC",
/* 199 */ "sortorder ::=",
/* 200 */ "groupby_opt ::=",
/* 201 */ "groupby_opt ::= GROUP BY grouplist",
/* 202 */ "grouplist ::= grouplist COMMA item",
/* 203 */ "grouplist ::= item",
/* 204 */ "having_opt ::=",
/* 205 */ "having_opt ::= HAVING expr",
/* 206 */ "limit_opt ::=",
/* 207 */ "limit_opt ::= LIMIT signed",
/* 208 */ "limit_opt ::= LIMIT signed OFFSET signed",
/* 209 */ "limit_opt ::= LIMIT signed COMMA signed",
/* 210 */ "slimit_opt ::=",
/* 211 */ "slimit_opt ::= SLIMIT signed",
/* 212 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
/* 213 */ "slimit_opt ::= SLIMIT signed COMMA signed",
/* 214 */ "where_opt ::=",
/* 215 */ "where_opt ::= WHERE expr",
/* 216 */ "expr ::= LP expr RP",
/* 217 */ "expr ::= ID",
/* 218 */ "expr ::= ID DOT ID",
/* 219 */ "expr ::= ID DOT STAR",
/* 220 */ "expr ::= INTEGER",
/* 221 */ "expr ::= MINUS INTEGER",
/* 222 */ "expr ::= PLUS INTEGER",
/* 223 */ "expr ::= FLOAT",
/* 224 */ "expr ::= MINUS FLOAT",
/* 225 */ "expr ::= PLUS FLOAT",
/* 226 */ "expr ::= STRING",
/* 227 */ "expr ::= NOW",
/* 228 */ "expr ::= VARIABLE",
/* 229 */ "expr ::= PLUS VARIABLE",
/* 230 */ "expr ::= MINUS VARIABLE",
/* 231 */ "expr ::= BOOL",
/* 232 */ "expr ::= NULL",
/* 233 */ "expr ::= ID LP exprlist RP",
/* 234 */ "expr ::= ID LP STAR RP",
/* 235 */ "expr ::= expr IS NULL",
/* 236 */ "expr ::= expr IS NOT NULL",
/* 237 */ "expr ::= expr LT expr",
/* 238 */ "expr ::= expr GT expr",
/* 239 */ "expr ::= expr LE expr",
/* 240 */ "expr ::= expr GE expr",
/* 241 */ "expr ::= expr NE expr",
/* 242 */ "expr ::= expr EQ expr",
/* 243 */ "expr ::= expr BETWEEN expr AND expr",
/* 244 */ "expr ::= expr AND expr",
/* 245 */ "expr ::= expr OR expr",
/* 246 */ "expr ::= expr PLUS expr",
/* 247 */ "expr ::= expr MINUS expr",
/* 248 */ "expr ::= expr STAR expr",
/* 249 */ "expr ::= expr SLASH expr",
/* 250 */ "expr ::= expr REM expr",
/* 251 */ "expr ::= expr LIKE expr",
/* 252 */ "expr ::= expr IN LP exprlist RP",
/* 253 */ "exprlist ::= exprlist COMMA expritem",
/* 254 */ "exprlist ::= expritem",
/* 255 */ "expritem ::= expr",
/* 256 */ "expritem ::=",
/* 257 */ "cmd ::= RESET QUERY CACHE",
/* 258 */ "cmd ::= SYNCDB ids REPLICA",
/* 259 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
/* 260 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
/* 261 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
/* 262 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
/* 263 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
/* 264 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
/* 265 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist",
/* 266 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids",
/* 267 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist",
/* 268 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids",
/* 269 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids",
/* 270 */ "cmd ::= KILL CONNECTION INTEGER",
/* 271 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 272 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
/* 187 */ "windowstate_option ::=",
/* 188 */ "windowstate_option ::= STATE_WINDOW LP ids RP",
/* 189 */ "fill_opt ::=",
/* 190 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
/* 191 */ "fill_opt ::= FILL LP ID RP",
/* 192 */ "sliding_opt ::= SLIDING LP tmvar RP",
/* 193 */ "sliding_opt ::=",
/* 194 */ "orderby_opt ::=",
/* 195 */ "orderby_opt ::= ORDER BY sortlist",
/* 196 */ "sortlist ::= sortlist COMMA item sortorder",
/* 197 */ "sortlist ::= item sortorder",
/* 198 */ "item ::= ids cpxName",
/* 199 */ "sortorder ::= ASC",
/* 200 */ "sortorder ::= DESC",
/* 201 */ "sortorder ::=",
/* 202 */ "groupby_opt ::=",
/* 203 */ "groupby_opt ::= GROUP BY grouplist",
/* 204 */ "grouplist ::= grouplist COMMA item",
/* 205 */ "grouplist ::= item",
/* 206 */ "having_opt ::=",
/* 207 */ "having_opt ::= HAVING expr",
/* 208 */ "limit_opt ::=",
/* 209 */ "limit_opt ::= LIMIT signed",
/* 210 */ "limit_opt ::= LIMIT signed OFFSET signed",
/* 211 */ "limit_opt ::= LIMIT signed COMMA signed",
/* 212 */ "slimit_opt ::=",
/* 213 */ "slimit_opt ::= SLIMIT signed",
/* 214 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
/* 215 */ "slimit_opt ::= SLIMIT signed COMMA signed",
/* 216 */ "where_opt ::=",
/* 217 */ "where_opt ::= WHERE expr",
/* 218 */ "expr ::= LP expr RP",
/* 219 */ "expr ::= ID",
/* 220 */ "expr ::= ID DOT ID",
/* 221 */ "expr ::= ID DOT STAR",
/* 222 */ "expr ::= INTEGER",
/* 223 */ "expr ::= MINUS INTEGER",
/* 224 */ "expr ::= PLUS INTEGER",
/* 225 */ "expr ::= FLOAT",
/* 226 */ "expr ::= MINUS FLOAT",
/* 227 */ "expr ::= PLUS FLOAT",
/* 228 */ "expr ::= STRING",
/* 229 */ "expr ::= NOW",
/* 230 */ "expr ::= VARIABLE",
/* 231 */ "expr ::= PLUS VARIABLE",
/* 232 */ "expr ::= MINUS VARIABLE",
/* 233 */ "expr ::= BOOL",
/* 234 */ "expr ::= NULL",
/* 235 */ "expr ::= ID LP exprlist RP",
/* 236 */ "expr ::= ID LP STAR RP",
/* 237 */ "expr ::= expr IS NULL",
/* 238 */ "expr ::= expr IS NOT NULL",
/* 239 */ "expr ::= expr LT expr",
/* 240 */ "expr ::= expr GT expr",
/* 241 */ "expr ::= expr LE expr",
/* 242 */ "expr ::= expr GE expr",
/* 243 */ "expr ::= expr NE expr",
/* 244 */ "expr ::= expr EQ expr",
/* 245 */ "expr ::= expr BETWEEN expr AND expr",
/* 246 */ "expr ::= expr AND expr",
/* 247 */ "expr ::= expr OR expr",
/* 248 */ "expr ::= expr PLUS expr",
/* 249 */ "expr ::= expr MINUS expr",
/* 250 */ "expr ::= expr STAR expr",
/* 251 */ "expr ::= expr SLASH expr",
/* 252 */ "expr ::= expr REM expr",
/* 253 */ "expr ::= expr LIKE expr",
/* 254 */ "expr ::= expr IN LP exprlist RP",
/* 255 */ "exprlist ::= exprlist COMMA expritem",
/* 256 */ "exprlist ::= expritem",
/* 257 */ "expritem ::= expr",
/* 258 */ "expritem ::=",
/* 259 */ "cmd ::= RESET QUERY CACHE",
/* 260 */ "cmd ::= SYNCDB ids REPLICA",
/* 261 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
/* 262 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
/* 263 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
/* 264 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
/* 265 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
/* 266 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
/* 267 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist",
/* 268 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids",
/* 269 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist",
/* 270 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids",
/* 271 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids",
/* 272 */ "cmd ::= KILL CONNECTION INTEGER",
/* 273 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 274 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
};
#endif /* NDEBUG */
......@@ -1419,59 +1425,59 @@ static void yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
case 209: /* keep */
case 210: /* tagitemlist */
case 232: /* columnlist */
case 233: /* tagNamelist */
case 242: /* fill_opt */
case 244: /* groupby_opt */
case 245: /* orderby_opt */
case 257: /* sortlist */
case 261: /* grouplist */
case 210: /* keep */
case 211: /* tagitemlist */
case 233: /* columnlist */
case 234: /* tagNamelist */
case 244: /* fill_opt */
case 246: /* groupby_opt */
case 247: /* orderby_opt */
case 259: /* sortlist */
case 263: /* grouplist */
{
taosArrayDestroy((yypminor->yy285));
taosArrayDestroy((yypminor->yy193));
}
break;
case 230: /* create_table_list */
case 231: /* create_table_list */
{
destroyCreateTableSql((yypminor->yy470));
destroyCreateTableSql((yypminor->yy270));
}
break;
case 234: /* select */
case 235: /* select */
{
destroySqlNode((yypminor->yy344));
destroySqlNode((yypminor->yy124));
}
break;
case 237: /* selcollist */
case 250: /* sclp */
case 262: /* exprlist */
case 238: /* selcollist */
case 252: /* sclp */
case 264: /* exprlist */
{
tSqlExprListDestroy((yypminor->yy285));
tSqlExprListDestroy((yypminor->yy193));
}
break;
case 238: /* from */
case 254: /* tablelist */
case 255: /* sub */
case 239: /* from */
case 256: /* tablelist */
case 257: /* sub */
{
destroyRelationInfo((yypminor->yy148));
destroyRelationInfo((yypminor->yy332));
}
break;
case 239: /* where_opt */
case 246: /* having_opt */
case 252: /* expr */
case 263: /* expritem */
case 240: /* where_opt */
case 248: /* having_opt */
case 254: /* expr */
case 265: /* expritem */
{
tSqlExprDestroy((yypminor->yy178));
tSqlExprDestroy((yypminor->yy454));
}
break;
case 249: /* union */
case 251: /* union */
{
destroyAllSqlNode((yypminor->yy285));
destroyAllSqlNode((yypminor->yy193));
}
break;
case 258: /* sortitem */
case 260: /* sortitem */
{
tVariantDestroy(&(yypminor->yy362));
tVariantDestroy(&(yypminor->yy442));
}
break;
/********* End destructor definitions *****************************************/
......@@ -1765,279 +1771,281 @@ static const struct {
YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
signed char nrhs; /* Negative of the number of RHS symbols in the rule */
} yyRuleInfo[] = {
{ 188, -1 }, /* (0) program ::= cmd */
{ 189, -2 }, /* (1) cmd ::= SHOW DATABASES */
{ 189, -2 }, /* (2) cmd ::= SHOW TOPICS */
{ 189, -2 }, /* (3) cmd ::= SHOW MNODES */
{ 189, -2 }, /* (4) cmd ::= SHOW DNODES */
{ 189, -2 }, /* (5) cmd ::= SHOW ACCOUNTS */
{ 189, -2 }, /* (6) cmd ::= SHOW USERS */
{ 189, -2 }, /* (7) cmd ::= SHOW MODULES */
{ 189, -2 }, /* (8) cmd ::= SHOW QUERIES */
{ 189, -2 }, /* (9) cmd ::= SHOW CONNECTIONS */
{ 189, -2 }, /* (10) cmd ::= SHOW STREAMS */
{ 189, -2 }, /* (11) cmd ::= SHOW VARIABLES */
{ 189, -2 }, /* (12) cmd ::= SHOW SCORES */
{ 189, -2 }, /* (13) cmd ::= SHOW GRANTS */
{ 189, -2 }, /* (14) cmd ::= SHOW VNODES */
{ 189, -3 }, /* (15) cmd ::= SHOW VNODES IPTOKEN */
{ 190, 0 }, /* (16) dbPrefix ::= */
{ 190, -2 }, /* (17) dbPrefix ::= ids DOT */
{ 192, 0 }, /* (18) cpxName ::= */
{ 192, -2 }, /* (19) cpxName ::= DOT ids */
{ 189, -5 }, /* (20) cmd ::= SHOW CREATE TABLE ids cpxName */
{ 189, -5 }, /* (21) cmd ::= SHOW CREATE STABLE ids cpxName */
{ 189, -4 }, /* (22) cmd ::= SHOW CREATE DATABASE ids */
{ 189, -3 }, /* (23) cmd ::= SHOW dbPrefix TABLES */
{ 189, -5 }, /* (24) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{ 189, -3 }, /* (25) cmd ::= SHOW dbPrefix STABLES */
{ 189, -5 }, /* (26) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{ 189, -3 }, /* (27) cmd ::= SHOW dbPrefix VGROUPS */
{ 189, -4 }, /* (28) cmd ::= SHOW dbPrefix VGROUPS ids */
{ 189, -5 }, /* (29) cmd ::= DROP TABLE ifexists ids cpxName */
{ 189, -5 }, /* (30) cmd ::= DROP STABLE ifexists ids cpxName */
{ 189, -4 }, /* (31) cmd ::= DROP DATABASE ifexists ids */
{ 189, -4 }, /* (32) cmd ::= DROP TOPIC ifexists ids */
{ 189, -3 }, /* (33) cmd ::= DROP DNODE ids */
{ 189, -3 }, /* (34) cmd ::= DROP USER ids */
{ 189, -3 }, /* (35) cmd ::= DROP ACCOUNT ids */
{ 189, -2 }, /* (36) cmd ::= USE ids */
{ 189, -3 }, /* (37) cmd ::= DESCRIBE ids cpxName */
{ 189, -5 }, /* (38) cmd ::= ALTER USER ids PASS ids */
{ 189, -5 }, /* (39) cmd ::= ALTER USER ids PRIVILEGE ids */
{ 189, -4 }, /* (40) cmd ::= ALTER DNODE ids ids */
{ 189, -5 }, /* (41) cmd ::= ALTER DNODE ids ids ids */
{ 189, -3 }, /* (42) cmd ::= ALTER LOCAL ids */
{ 189, -4 }, /* (43) cmd ::= ALTER LOCAL ids ids */
{ 189, -4 }, /* (44) cmd ::= ALTER DATABASE ids alter_db_optr */
{ 189, -4 }, /* (45) cmd ::= ALTER TOPIC ids alter_topic_optr */
{ 189, -4 }, /* (46) cmd ::= ALTER ACCOUNT ids acct_optr */
{ 189, -6 }, /* (47) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ 191, -1 }, /* (48) ids ::= ID */
{ 191, -1 }, /* (49) ids ::= STRING */
{ 193, -2 }, /* (50) ifexists ::= IF EXISTS */
{ 193, 0 }, /* (51) ifexists ::= */
{ 197, -3 }, /* (52) ifnotexists ::= IF NOT EXISTS */
{ 197, 0 }, /* (53) ifnotexists ::= */
{ 189, -3 }, /* (54) cmd ::= CREATE DNODE ids */
{ 189, -6 }, /* (55) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ 189, -5 }, /* (56) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ 189, -5 }, /* (57) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */
{ 189, -5 }, /* (58) cmd ::= CREATE USER ids PASS ids */
{ 200, 0 }, /* (59) pps ::= */
{ 200, -2 }, /* (60) pps ::= PPS INTEGER */
{ 201, 0 }, /* (61) tseries ::= */
{ 201, -2 }, /* (62) tseries ::= TSERIES INTEGER */
{ 202, 0 }, /* (63) dbs ::= */
{ 202, -2 }, /* (64) dbs ::= DBS INTEGER */
{ 203, 0 }, /* (65) streams ::= */
{ 203, -2 }, /* (66) streams ::= STREAMS INTEGER */
{ 204, 0 }, /* (67) storage ::= */
{ 204, -2 }, /* (68) storage ::= STORAGE INTEGER */
{ 205, 0 }, /* (69) qtime ::= */
{ 205, -2 }, /* (70) qtime ::= QTIME INTEGER */
{ 206, 0 }, /* (71) users ::= */
{ 206, -2 }, /* (72) users ::= USERS INTEGER */
{ 207, 0 }, /* (73) conns ::= */
{ 207, -2 }, /* (74) conns ::= CONNS INTEGER */
{ 208, 0 }, /* (75) state ::= */
{ 208, -2 }, /* (76) state ::= STATE ids */
{ 196, -9 }, /* (77) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ 209, -2 }, /* (78) keep ::= KEEP tagitemlist */
{ 211, -2 }, /* (79) cache ::= CACHE INTEGER */
{ 212, -2 }, /* (80) replica ::= REPLICA INTEGER */
{ 213, -2 }, /* (81) quorum ::= QUORUM INTEGER */
{ 214, -2 }, /* (82) days ::= DAYS INTEGER */
{ 215, -2 }, /* (83) minrows ::= MINROWS INTEGER */
{ 216, -2 }, /* (84) maxrows ::= MAXROWS INTEGER */
{ 217, -2 }, /* (85) blocks ::= BLOCKS INTEGER */
{ 218, -2 }, /* (86) ctime ::= CTIME INTEGER */
{ 219, -2 }, /* (87) wal ::= WAL INTEGER */
{ 220, -2 }, /* (88) fsync ::= FSYNC INTEGER */
{ 221, -2 }, /* (89) comp ::= COMP INTEGER */
{ 222, -2 }, /* (90) prec ::= PRECISION STRING */
{ 223, -2 }, /* (91) update ::= UPDATE INTEGER */
{ 224, -2 }, /* (92) cachelast ::= CACHELAST INTEGER */
{ 225, -2 }, /* (93) partitions ::= PARTITIONS INTEGER */
{ 198, 0 }, /* (94) db_optr ::= */
{ 198, -2 }, /* (95) db_optr ::= db_optr cache */
{ 198, -2 }, /* (96) db_optr ::= db_optr replica */
{ 198, -2 }, /* (97) db_optr ::= db_optr quorum */
{ 198, -2 }, /* (98) db_optr ::= db_optr days */
{ 198, -2 }, /* (99) db_optr ::= db_optr minrows */
{ 198, -2 }, /* (100) db_optr ::= db_optr maxrows */
{ 198, -2 }, /* (101) db_optr ::= db_optr blocks */
{ 198, -2 }, /* (102) db_optr ::= db_optr ctime */
{ 198, -2 }, /* (103) db_optr ::= db_optr wal */
{ 198, -2 }, /* (104) db_optr ::= db_optr fsync */
{ 198, -2 }, /* (105) db_optr ::= db_optr comp */
{ 198, -2 }, /* (106) db_optr ::= db_optr prec */
{ 198, -2 }, /* (107) db_optr ::= db_optr keep */
{ 198, -2 }, /* (108) db_optr ::= db_optr update */
{ 198, -2 }, /* (109) db_optr ::= db_optr cachelast */
{ 199, -1 }, /* (110) topic_optr ::= db_optr */
{ 199, -2 }, /* (111) topic_optr ::= topic_optr partitions */
{ 194, 0 }, /* (112) alter_db_optr ::= */
{ 194, -2 }, /* (113) alter_db_optr ::= alter_db_optr replica */
{ 194, -2 }, /* (114) alter_db_optr ::= alter_db_optr quorum */
{ 194, -2 }, /* (115) alter_db_optr ::= alter_db_optr keep */
{ 194, -2 }, /* (116) alter_db_optr ::= alter_db_optr blocks */
{ 194, -2 }, /* (117) alter_db_optr ::= alter_db_optr comp */
{ 194, -2 }, /* (118) alter_db_optr ::= alter_db_optr wal */
{ 194, -2 }, /* (119) alter_db_optr ::= alter_db_optr fsync */
{ 194, -2 }, /* (120) alter_db_optr ::= alter_db_optr update */
{ 194, -2 }, /* (121) alter_db_optr ::= alter_db_optr cachelast */
{ 195, -1 }, /* (122) alter_topic_optr ::= alter_db_optr */
{ 195, -2 }, /* (123) alter_topic_optr ::= alter_topic_optr partitions */
{ 226, -1 }, /* (124) typename ::= ids */
{ 226, -4 }, /* (125) typename ::= ids LP signed RP */
{ 226, -2 }, /* (126) typename ::= ids UNSIGNED */
{ 227, -1 }, /* (127) signed ::= INTEGER */
{ 227, -2 }, /* (128) signed ::= PLUS INTEGER */
{ 227, -2 }, /* (129) signed ::= MINUS INTEGER */
{ 189, -3 }, /* (130) cmd ::= CREATE TABLE create_table_args */
{ 189, -3 }, /* (131) cmd ::= CREATE TABLE create_stable_args */
{ 189, -3 }, /* (132) cmd ::= CREATE STABLE create_stable_args */
{ 189, -3 }, /* (133) cmd ::= CREATE TABLE create_table_list */
{ 230, -1 }, /* (134) create_table_list ::= create_from_stable */
{ 230, -2 }, /* (135) create_table_list ::= create_table_list create_from_stable */
{ 228, -6 }, /* (136) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{ 229, -10 }, /* (137) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{ 231, -10 }, /* (138) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{ 231, -13 }, /* (139) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
{ 233, -3 }, /* (140) tagNamelist ::= tagNamelist COMMA ids */
{ 233, -1 }, /* (141) tagNamelist ::= ids */
{ 228, -5 }, /* (142) create_table_args ::= ifnotexists ids cpxName AS select */
{ 232, -3 }, /* (143) columnlist ::= columnlist COMMA column */
{ 232, -1 }, /* (144) columnlist ::= column */
{ 235, -2 }, /* (145) column ::= ids typename */
{ 210, -3 }, /* (146) tagitemlist ::= tagitemlist COMMA tagitem */
{ 210, -1 }, /* (147) tagitemlist ::= tagitem */
{ 236, -1 }, /* (148) tagitem ::= INTEGER */
{ 236, -1 }, /* (149) tagitem ::= FLOAT */
{ 236, -1 }, /* (150) tagitem ::= STRING */
{ 236, -1 }, /* (151) tagitem ::= BOOL */
{ 236, -1 }, /* (152) tagitem ::= NULL */
{ 236, -2 }, /* (153) tagitem ::= MINUS INTEGER */
{ 236, -2 }, /* (154) tagitem ::= MINUS FLOAT */
{ 236, -2 }, /* (155) tagitem ::= PLUS INTEGER */
{ 236, -2 }, /* (156) tagitem ::= PLUS FLOAT */
{ 234, -13 }, /* (157) select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{ 234, -3 }, /* (158) select ::= LP select RP */
{ 249, -1 }, /* (159) union ::= select */
{ 249, -4 }, /* (160) union ::= union UNION ALL select */
{ 189, -1 }, /* (161) cmd ::= union */
{ 234, -2 }, /* (162) select ::= SELECT selcollist */
{ 250, -2 }, /* (163) sclp ::= selcollist COMMA */
{ 250, 0 }, /* (164) sclp ::= */
{ 237, -4 }, /* (165) selcollist ::= sclp distinct expr as */
{ 237, -2 }, /* (166) selcollist ::= sclp STAR */
{ 253, -2 }, /* (167) as ::= AS ids */
{ 253, -1 }, /* (168) as ::= ids */
{ 253, 0 }, /* (169) as ::= */
{ 251, -1 }, /* (170) distinct ::= DISTINCT */
{ 251, 0 }, /* (171) distinct ::= */
{ 238, -2 }, /* (172) from ::= FROM tablelist */
{ 238, -2 }, /* (173) from ::= FROM sub */
{ 255, -3 }, /* (174) sub ::= LP union RP */
{ 255, -4 }, /* (175) sub ::= LP union RP ids */
{ 255, -6 }, /* (176) sub ::= sub COMMA LP union RP ids */
{ 254, -2 }, /* (177) tablelist ::= ids cpxName */
{ 254, -3 }, /* (178) tablelist ::= ids cpxName ids */
{ 254, -4 }, /* (179) tablelist ::= tablelist COMMA ids cpxName */
{ 254, -5 }, /* (180) tablelist ::= tablelist COMMA ids cpxName ids */
{ 256, -1 }, /* (181) tmvar ::= VARIABLE */
{ 240, -4 }, /* (182) interval_opt ::= INTERVAL LP tmvar RP */
{ 240, -6 }, /* (183) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{ 240, 0 }, /* (184) interval_opt ::= */
{ 241, 0 }, /* (185) session_option ::= */
{ 241, -7 }, /* (186) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{ 242, 0 }, /* (187) fill_opt ::= */
{ 242, -6 }, /* (188) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ 242, -4 }, /* (189) fill_opt ::= FILL LP ID RP */
{ 243, -4 }, /* (190) sliding_opt ::= SLIDING LP tmvar RP */
{ 243, 0 }, /* (191) sliding_opt ::= */
{ 245, 0 }, /* (192) orderby_opt ::= */
{ 245, -3 }, /* (193) orderby_opt ::= ORDER BY sortlist */
{ 257, -4 }, /* (194) sortlist ::= sortlist COMMA item sortorder */
{ 257, -2 }, /* (195) sortlist ::= item sortorder */
{ 259, -2 }, /* (196) item ::= ids cpxName */
{ 260, -1 }, /* (197) sortorder ::= ASC */
{ 260, -1 }, /* (198) sortorder ::= DESC */
{ 260, 0 }, /* (199) sortorder ::= */
{ 244, 0 }, /* (200) groupby_opt ::= */
{ 244, -3 }, /* (201) groupby_opt ::= GROUP BY grouplist */
{ 261, -3 }, /* (202) grouplist ::= grouplist COMMA item */
{ 261, -1 }, /* (203) grouplist ::= item */
{ 246, 0 }, /* (204) having_opt ::= */
{ 246, -2 }, /* (205) having_opt ::= HAVING expr */
{ 248, 0 }, /* (206) limit_opt ::= */
{ 248, -2 }, /* (207) limit_opt ::= LIMIT signed */
{ 248, -4 }, /* (208) limit_opt ::= LIMIT signed OFFSET signed */
{ 248, -4 }, /* (209) limit_opt ::= LIMIT signed COMMA signed */
{ 247, 0 }, /* (210) slimit_opt ::= */
{ 247, -2 }, /* (211) slimit_opt ::= SLIMIT signed */
{ 247, -4 }, /* (212) slimit_opt ::= SLIMIT signed SOFFSET signed */
{ 247, -4 }, /* (213) slimit_opt ::= SLIMIT signed COMMA signed */
{ 239, 0 }, /* (214) where_opt ::= */
{ 239, -2 }, /* (215) where_opt ::= WHERE expr */
{ 252, -3 }, /* (216) expr ::= LP expr RP */
{ 252, -1 }, /* (217) expr ::= ID */
{ 252, -3 }, /* (218) expr ::= ID DOT ID */
{ 252, -3 }, /* (219) expr ::= ID DOT STAR */
{ 252, -1 }, /* (220) expr ::= INTEGER */
{ 252, -2 }, /* (221) expr ::= MINUS INTEGER */
{ 252, -2 }, /* (222) expr ::= PLUS INTEGER */
{ 252, -1 }, /* (223) expr ::= FLOAT */
{ 252, -2 }, /* (224) expr ::= MINUS FLOAT */
{ 252, -2 }, /* (225) expr ::= PLUS FLOAT */
{ 252, -1 }, /* (226) expr ::= STRING */
{ 252, -1 }, /* (227) expr ::= NOW */
{ 252, -1 }, /* (228) expr ::= VARIABLE */
{ 252, -2 }, /* (229) expr ::= PLUS VARIABLE */
{ 252, -2 }, /* (230) expr ::= MINUS VARIABLE */
{ 252, -1 }, /* (231) expr ::= BOOL */
{ 252, -1 }, /* (232) expr ::= NULL */
{ 252, -4 }, /* (233) expr ::= ID LP exprlist RP */
{ 252, -4 }, /* (234) expr ::= ID LP STAR RP */
{ 252, -3 }, /* (235) expr ::= expr IS NULL */
{ 252, -4 }, /* (236) expr ::= expr IS NOT NULL */
{ 252, -3 }, /* (237) expr ::= expr LT expr */
{ 252, -3 }, /* (238) expr ::= expr GT expr */
{ 252, -3 }, /* (239) expr ::= expr LE expr */
{ 252, -3 }, /* (240) expr ::= expr GE expr */
{ 252, -3 }, /* (241) expr ::= expr NE expr */
{ 252, -3 }, /* (242) expr ::= expr EQ expr */
{ 252, -5 }, /* (243) expr ::= expr BETWEEN expr AND expr */
{ 252, -3 }, /* (244) expr ::= expr AND expr */
{ 252, -3 }, /* (245) expr ::= expr OR expr */
{ 252, -3 }, /* (246) expr ::= expr PLUS expr */
{ 252, -3 }, /* (247) expr ::= expr MINUS expr */
{ 252, -3 }, /* (248) expr ::= expr STAR expr */
{ 252, -3 }, /* (249) expr ::= expr SLASH expr */
{ 252, -3 }, /* (250) expr ::= expr REM expr */
{ 252, -3 }, /* (251) expr ::= expr LIKE expr */
{ 252, -5 }, /* (252) expr ::= expr IN LP exprlist RP */
{ 262, -3 }, /* (253) exprlist ::= exprlist COMMA expritem */
{ 262, -1 }, /* (254) exprlist ::= expritem */
{ 263, -1 }, /* (255) expritem ::= expr */
{ 263, 0 }, /* (256) expritem ::= */
{ 189, -3 }, /* (257) cmd ::= RESET QUERY CACHE */
{ 189, -3 }, /* (258) cmd ::= SYNCDB ids REPLICA */
{ 189, -7 }, /* (259) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ 189, -7 }, /* (260) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ 189, -7 }, /* (261) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ 189, -7 }, /* (262) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ 189, -8 }, /* (263) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ 189, -9 }, /* (264) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ 189, -7 }, /* (265) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{ 189, -7 }, /* (266) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{ 189, -7 }, /* (267) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{ 189, -7 }, /* (268) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{ 189, -8 }, /* (269) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{ 189, -3 }, /* (270) cmd ::= KILL CONNECTION INTEGER */
{ 189, -5 }, /* (271) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 189, -5 }, /* (272) cmd ::= KILL QUERY INTEGER COLON INTEGER */
{ 189, -1 }, /* (0) program ::= cmd */
{ 190, -2 }, /* (1) cmd ::= SHOW DATABASES */
{ 190, -2 }, /* (2) cmd ::= SHOW TOPICS */
{ 190, -2 }, /* (3) cmd ::= SHOW MNODES */
{ 190, -2 }, /* (4) cmd ::= SHOW DNODES */
{ 190, -2 }, /* (5) cmd ::= SHOW ACCOUNTS */
{ 190, -2 }, /* (6) cmd ::= SHOW USERS */
{ 190, -2 }, /* (7) cmd ::= SHOW MODULES */
{ 190, -2 }, /* (8) cmd ::= SHOW QUERIES */
{ 190, -2 }, /* (9) cmd ::= SHOW CONNECTIONS */
{ 190, -2 }, /* (10) cmd ::= SHOW STREAMS */
{ 190, -2 }, /* (11) cmd ::= SHOW VARIABLES */
{ 190, -2 }, /* (12) cmd ::= SHOW SCORES */
{ 190, -2 }, /* (13) cmd ::= SHOW GRANTS */
{ 190, -2 }, /* (14) cmd ::= SHOW VNODES */
{ 190, -3 }, /* (15) cmd ::= SHOW VNODES IPTOKEN */
{ 191, 0 }, /* (16) dbPrefix ::= */
{ 191, -2 }, /* (17) dbPrefix ::= ids DOT */
{ 193, 0 }, /* (18) cpxName ::= */
{ 193, -2 }, /* (19) cpxName ::= DOT ids */
{ 190, -5 }, /* (20) cmd ::= SHOW CREATE TABLE ids cpxName */
{ 190, -5 }, /* (21) cmd ::= SHOW CREATE STABLE ids cpxName */
{ 190, -4 }, /* (22) cmd ::= SHOW CREATE DATABASE ids */
{ 190, -3 }, /* (23) cmd ::= SHOW dbPrefix TABLES */
{ 190, -5 }, /* (24) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{ 190, -3 }, /* (25) cmd ::= SHOW dbPrefix STABLES */
{ 190, -5 }, /* (26) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{ 190, -3 }, /* (27) cmd ::= SHOW dbPrefix VGROUPS */
{ 190, -4 }, /* (28) cmd ::= SHOW dbPrefix VGROUPS ids */
{ 190, -5 }, /* (29) cmd ::= DROP TABLE ifexists ids cpxName */
{ 190, -5 }, /* (30) cmd ::= DROP STABLE ifexists ids cpxName */
{ 190, -4 }, /* (31) cmd ::= DROP DATABASE ifexists ids */
{ 190, -4 }, /* (32) cmd ::= DROP TOPIC ifexists ids */
{ 190, -3 }, /* (33) cmd ::= DROP DNODE ids */
{ 190, -3 }, /* (34) cmd ::= DROP USER ids */
{ 190, -3 }, /* (35) cmd ::= DROP ACCOUNT ids */
{ 190, -2 }, /* (36) cmd ::= USE ids */
{ 190, -3 }, /* (37) cmd ::= DESCRIBE ids cpxName */
{ 190, -5 }, /* (38) cmd ::= ALTER USER ids PASS ids */
{ 190, -5 }, /* (39) cmd ::= ALTER USER ids PRIVILEGE ids */
{ 190, -4 }, /* (40) cmd ::= ALTER DNODE ids ids */
{ 190, -5 }, /* (41) cmd ::= ALTER DNODE ids ids ids */
{ 190, -3 }, /* (42) cmd ::= ALTER LOCAL ids */
{ 190, -4 }, /* (43) cmd ::= ALTER LOCAL ids ids */
{ 190, -4 }, /* (44) cmd ::= ALTER DATABASE ids alter_db_optr */
{ 190, -4 }, /* (45) cmd ::= ALTER TOPIC ids alter_topic_optr */
{ 190, -4 }, /* (46) cmd ::= ALTER ACCOUNT ids acct_optr */
{ 190, -6 }, /* (47) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ 192, -1 }, /* (48) ids ::= ID */
{ 192, -1 }, /* (49) ids ::= STRING */
{ 194, -2 }, /* (50) ifexists ::= IF EXISTS */
{ 194, 0 }, /* (51) ifexists ::= */
{ 198, -3 }, /* (52) ifnotexists ::= IF NOT EXISTS */
{ 198, 0 }, /* (53) ifnotexists ::= */
{ 190, -3 }, /* (54) cmd ::= CREATE DNODE ids */
{ 190, -6 }, /* (55) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ 190, -5 }, /* (56) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ 190, -5 }, /* (57) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */
{ 190, -5 }, /* (58) cmd ::= CREATE USER ids PASS ids */
{ 201, 0 }, /* (59) pps ::= */
{ 201, -2 }, /* (60) pps ::= PPS INTEGER */
{ 202, 0 }, /* (61) tseries ::= */
{ 202, -2 }, /* (62) tseries ::= TSERIES INTEGER */
{ 203, 0 }, /* (63) dbs ::= */
{ 203, -2 }, /* (64) dbs ::= DBS INTEGER */
{ 204, 0 }, /* (65) streams ::= */
{ 204, -2 }, /* (66) streams ::= STREAMS INTEGER */
{ 205, 0 }, /* (67) storage ::= */
{ 205, -2 }, /* (68) storage ::= STORAGE INTEGER */
{ 206, 0 }, /* (69) qtime ::= */
{ 206, -2 }, /* (70) qtime ::= QTIME INTEGER */
{ 207, 0 }, /* (71) users ::= */
{ 207, -2 }, /* (72) users ::= USERS INTEGER */
{ 208, 0 }, /* (73) conns ::= */
{ 208, -2 }, /* (74) conns ::= CONNS INTEGER */
{ 209, 0 }, /* (75) state ::= */
{ 209, -2 }, /* (76) state ::= STATE ids */
{ 197, -9 }, /* (77) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ 210, -2 }, /* (78) keep ::= KEEP tagitemlist */
{ 212, -2 }, /* (79) cache ::= CACHE INTEGER */
{ 213, -2 }, /* (80) replica ::= REPLICA INTEGER */
{ 214, -2 }, /* (81) quorum ::= QUORUM INTEGER */
{ 215, -2 }, /* (82) days ::= DAYS INTEGER */
{ 216, -2 }, /* (83) minrows ::= MINROWS INTEGER */
{ 217, -2 }, /* (84) maxrows ::= MAXROWS INTEGER */
{ 218, -2 }, /* (85) blocks ::= BLOCKS INTEGER */
{ 219, -2 }, /* (86) ctime ::= CTIME INTEGER */
{ 220, -2 }, /* (87) wal ::= WAL INTEGER */
{ 221, -2 }, /* (88) fsync ::= FSYNC INTEGER */
{ 222, -2 }, /* (89) comp ::= COMP INTEGER */
{ 223, -2 }, /* (90) prec ::= PRECISION STRING */
{ 224, -2 }, /* (91) update ::= UPDATE INTEGER */
{ 225, -2 }, /* (92) cachelast ::= CACHELAST INTEGER */
{ 226, -2 }, /* (93) partitions ::= PARTITIONS INTEGER */
{ 199, 0 }, /* (94) db_optr ::= */
{ 199, -2 }, /* (95) db_optr ::= db_optr cache */
{ 199, -2 }, /* (96) db_optr ::= db_optr replica */
{ 199, -2 }, /* (97) db_optr ::= db_optr quorum */
{ 199, -2 }, /* (98) db_optr ::= db_optr days */
{ 199, -2 }, /* (99) db_optr ::= db_optr minrows */
{ 199, -2 }, /* (100) db_optr ::= db_optr maxrows */
{ 199, -2 }, /* (101) db_optr ::= db_optr blocks */
{ 199, -2 }, /* (102) db_optr ::= db_optr ctime */
{ 199, -2 }, /* (103) db_optr ::= db_optr wal */
{ 199, -2 }, /* (104) db_optr ::= db_optr fsync */
{ 199, -2 }, /* (105) db_optr ::= db_optr comp */
{ 199, -2 }, /* (106) db_optr ::= db_optr prec */
{ 199, -2 }, /* (107) db_optr ::= db_optr keep */
{ 199, -2 }, /* (108) db_optr ::= db_optr update */
{ 199, -2 }, /* (109) db_optr ::= db_optr cachelast */
{ 200, -1 }, /* (110) topic_optr ::= db_optr */
{ 200, -2 }, /* (111) topic_optr ::= topic_optr partitions */
{ 195, 0 }, /* (112) alter_db_optr ::= */
{ 195, -2 }, /* (113) alter_db_optr ::= alter_db_optr replica */
{ 195, -2 }, /* (114) alter_db_optr ::= alter_db_optr quorum */
{ 195, -2 }, /* (115) alter_db_optr ::= alter_db_optr keep */
{ 195, -2 }, /* (116) alter_db_optr ::= alter_db_optr blocks */
{ 195, -2 }, /* (117) alter_db_optr ::= alter_db_optr comp */
{ 195, -2 }, /* (118) alter_db_optr ::= alter_db_optr wal */
{ 195, -2 }, /* (119) alter_db_optr ::= alter_db_optr fsync */
{ 195, -2 }, /* (120) alter_db_optr ::= alter_db_optr update */
{ 195, -2 }, /* (121) alter_db_optr ::= alter_db_optr cachelast */
{ 196, -1 }, /* (122) alter_topic_optr ::= alter_db_optr */
{ 196, -2 }, /* (123) alter_topic_optr ::= alter_topic_optr partitions */
{ 227, -1 }, /* (124) typename ::= ids */
{ 227, -4 }, /* (125) typename ::= ids LP signed RP */
{ 227, -2 }, /* (126) typename ::= ids UNSIGNED */
{ 228, -1 }, /* (127) signed ::= INTEGER */
{ 228, -2 }, /* (128) signed ::= PLUS INTEGER */
{ 228, -2 }, /* (129) signed ::= MINUS INTEGER */
{ 190, -3 }, /* (130) cmd ::= CREATE TABLE create_table_args */
{ 190, -3 }, /* (131) cmd ::= CREATE TABLE create_stable_args */
{ 190, -3 }, /* (132) cmd ::= CREATE STABLE create_stable_args */
{ 190, -3 }, /* (133) cmd ::= CREATE TABLE create_table_list */
{ 231, -1 }, /* (134) create_table_list ::= create_from_stable */
{ 231, -2 }, /* (135) create_table_list ::= create_table_list create_from_stable */
{ 229, -6 }, /* (136) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{ 230, -10 }, /* (137) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{ 232, -10 }, /* (138) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{ 232, -13 }, /* (139) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
{ 234, -3 }, /* (140) tagNamelist ::= tagNamelist COMMA ids */
{ 234, -1 }, /* (141) tagNamelist ::= ids */
{ 229, -5 }, /* (142) create_table_args ::= ifnotexists ids cpxName AS select */
{ 233, -3 }, /* (143) columnlist ::= columnlist COMMA column */
{ 233, -1 }, /* (144) columnlist ::= column */
{ 236, -2 }, /* (145) column ::= ids typename */
{ 211, -3 }, /* (146) tagitemlist ::= tagitemlist COMMA tagitem */
{ 211, -1 }, /* (147) tagitemlist ::= tagitem */
{ 237, -1 }, /* (148) tagitem ::= INTEGER */
{ 237, -1 }, /* (149) tagitem ::= FLOAT */
{ 237, -1 }, /* (150) tagitem ::= STRING */
{ 237, -1 }, /* (151) tagitem ::= BOOL */
{ 237, -1 }, /* (152) tagitem ::= NULL */
{ 237, -2 }, /* (153) tagitem ::= MINUS INTEGER */
{ 237, -2 }, /* (154) tagitem ::= MINUS FLOAT */
{ 237, -2 }, /* (155) tagitem ::= PLUS INTEGER */
{ 237, -2 }, /* (156) tagitem ::= PLUS FLOAT */
{ 235, -14 }, /* (157) select ::= SELECT selcollist from where_opt interval_opt session_option windowstate_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{ 235, -3 }, /* (158) select ::= LP select RP */
{ 251, -1 }, /* (159) union ::= select */
{ 251, -4 }, /* (160) union ::= union UNION ALL select */
{ 190, -1 }, /* (161) cmd ::= union */
{ 235, -2 }, /* (162) select ::= SELECT selcollist */
{ 252, -2 }, /* (163) sclp ::= selcollist COMMA */
{ 252, 0 }, /* (164) sclp ::= */
{ 238, -4 }, /* (165) selcollist ::= sclp distinct expr as */
{ 238, -2 }, /* (166) selcollist ::= sclp STAR */
{ 255, -2 }, /* (167) as ::= AS ids */
{ 255, -1 }, /* (168) as ::= ids */
{ 255, 0 }, /* (169) as ::= */
{ 253, -1 }, /* (170) distinct ::= DISTINCT */
{ 253, 0 }, /* (171) distinct ::= */
{ 239, -2 }, /* (172) from ::= FROM tablelist */
{ 239, -2 }, /* (173) from ::= FROM sub */
{ 257, -3 }, /* (174) sub ::= LP union RP */
{ 257, -4 }, /* (175) sub ::= LP union RP ids */
{ 257, -6 }, /* (176) sub ::= sub COMMA LP union RP ids */
{ 256, -2 }, /* (177) tablelist ::= ids cpxName */
{ 256, -3 }, /* (178) tablelist ::= ids cpxName ids */
{ 256, -4 }, /* (179) tablelist ::= tablelist COMMA ids cpxName */
{ 256, -5 }, /* (180) tablelist ::= tablelist COMMA ids cpxName ids */
{ 258, -1 }, /* (181) tmvar ::= VARIABLE */
{ 241, -4 }, /* (182) interval_opt ::= INTERVAL LP tmvar RP */
{ 241, -6 }, /* (183) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{ 241, 0 }, /* (184) interval_opt ::= */
{ 242, 0 }, /* (185) session_option ::= */
{ 242, -7 }, /* (186) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{ 243, 0 }, /* (187) windowstate_option ::= */
{ 243, -4 }, /* (188) windowstate_option ::= STATE_WINDOW LP ids RP */
{ 244, 0 }, /* (189) fill_opt ::= */
{ 244, -6 }, /* (190) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ 244, -4 }, /* (191) fill_opt ::= FILL LP ID RP */
{ 245, -4 }, /* (192) sliding_opt ::= SLIDING LP tmvar RP */
{ 245, 0 }, /* (193) sliding_opt ::= */
{ 247, 0 }, /* (194) orderby_opt ::= */
{ 247, -3 }, /* (195) orderby_opt ::= ORDER BY sortlist */
{ 259, -4 }, /* (196) sortlist ::= sortlist COMMA item sortorder */
{ 259, -2 }, /* (197) sortlist ::= item sortorder */
{ 261, -2 }, /* (198) item ::= ids cpxName */
{ 262, -1 }, /* (199) sortorder ::= ASC */
{ 262, -1 }, /* (200) sortorder ::= DESC */
{ 262, 0 }, /* (201) sortorder ::= */
{ 246, 0 }, /* (202) groupby_opt ::= */
{ 246, -3 }, /* (203) groupby_opt ::= GROUP BY grouplist */
{ 263, -3 }, /* (204) grouplist ::= grouplist COMMA item */
{ 263, -1 }, /* (205) grouplist ::= item */
{ 248, 0 }, /* (206) having_opt ::= */
{ 248, -2 }, /* (207) having_opt ::= HAVING expr */
{ 250, 0 }, /* (208) limit_opt ::= */
{ 250, -2 }, /* (209) limit_opt ::= LIMIT signed */
{ 250, -4 }, /* (210) limit_opt ::= LIMIT signed OFFSET signed */
{ 250, -4 }, /* (211) limit_opt ::= LIMIT signed COMMA signed */
{ 249, 0 }, /* (212) slimit_opt ::= */
{ 249, -2 }, /* (213) slimit_opt ::= SLIMIT signed */
{ 249, -4 }, /* (214) slimit_opt ::= SLIMIT signed SOFFSET signed */
{ 249, -4 }, /* (215) slimit_opt ::= SLIMIT signed COMMA signed */
{ 240, 0 }, /* (216) where_opt ::= */
{ 240, -2 }, /* (217) where_opt ::= WHERE expr */
{ 254, -3 }, /* (218) expr ::= LP expr RP */
{ 254, -1 }, /* (219) expr ::= ID */
{ 254, -3 }, /* (220) expr ::= ID DOT ID */
{ 254, -3 }, /* (221) expr ::= ID DOT STAR */
{ 254, -1 }, /* (222) expr ::= INTEGER */
{ 254, -2 }, /* (223) expr ::= MINUS INTEGER */
{ 254, -2 }, /* (224) expr ::= PLUS INTEGER */
{ 254, -1 }, /* (225) expr ::= FLOAT */
{ 254, -2 }, /* (226) expr ::= MINUS FLOAT */
{ 254, -2 }, /* (227) expr ::= PLUS FLOAT */
{ 254, -1 }, /* (228) expr ::= STRING */
{ 254, -1 }, /* (229) expr ::= NOW */
{ 254, -1 }, /* (230) expr ::= VARIABLE */
{ 254, -2 }, /* (231) expr ::= PLUS VARIABLE */
{ 254, -2 }, /* (232) expr ::= MINUS VARIABLE */
{ 254, -1 }, /* (233) expr ::= BOOL */
{ 254, -1 }, /* (234) expr ::= NULL */
{ 254, -4 }, /* (235) expr ::= ID LP exprlist RP */
{ 254, -4 }, /* (236) expr ::= ID LP STAR RP */
{ 254, -3 }, /* (237) expr ::= expr IS NULL */
{ 254, -4 }, /* (238) expr ::= expr IS NOT NULL */
{ 254, -3 }, /* (239) expr ::= expr LT expr */
{ 254, -3 }, /* (240) expr ::= expr GT expr */
{ 254, -3 }, /* (241) expr ::= expr LE expr */
{ 254, -3 }, /* (242) expr ::= expr GE expr */
{ 254, -3 }, /* (243) expr ::= expr NE expr */
{ 254, -3 }, /* (244) expr ::= expr EQ expr */
{ 254, -5 }, /* (245) expr ::= expr BETWEEN expr AND expr */
{ 254, -3 }, /* (246) expr ::= expr AND expr */
{ 254, -3 }, /* (247) expr ::= expr OR expr */
{ 254, -3 }, /* (248) expr ::= expr PLUS expr */
{ 254, -3 }, /* (249) expr ::= expr MINUS expr */
{ 254, -3 }, /* (250) expr ::= expr STAR expr */
{ 254, -3 }, /* (251) expr ::= expr SLASH expr */
{ 254, -3 }, /* (252) expr ::= expr REM expr */
{ 254, -3 }, /* (253) expr ::= expr LIKE expr */
{ 254, -5 }, /* (254) expr ::= expr IN LP exprlist RP */
{ 264, -3 }, /* (255) exprlist ::= exprlist COMMA expritem */
{ 264, -1 }, /* (256) exprlist ::= expritem */
{ 265, -1 }, /* (257) expritem ::= expr */
{ 265, 0 }, /* (258) expritem ::= */
{ 190, -3 }, /* (259) cmd ::= RESET QUERY CACHE */
{ 190, -3 }, /* (260) cmd ::= SYNCDB ids REPLICA */
{ 190, -7 }, /* (261) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ 190, -7 }, /* (262) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ 190, -7 }, /* (263) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ 190, -7 }, /* (264) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ 190, -8 }, /* (265) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ 190, -9 }, /* (266) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ 190, -7 }, /* (267) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{ 190, -7 }, /* (268) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{ 190, -7 }, /* (269) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{ 190, -7 }, /* (270) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{ 190, -8 }, /* (271) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{ 190, -3 }, /* (272) cmd ::= KILL CONNECTION INTEGER */
{ 190, -5 }, /* (273) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 190, -5 }, /* (274) cmd ::= KILL QUERY INTEGER COLON INTEGER */
};
static void yy_accept(yyParser*); /* Forward Declaration */
......@@ -2290,13 +2298,13 @@ static void yy_reduce(
break;
case 44: /* cmd ::= ALTER DATABASE ids alter_db_optr */
case 45: /* cmd ::= ALTER TOPIC ids alter_topic_optr */ yytestcase(yyruleno==45);
{ SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy526, &t);}
{ SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy114, &t);}
break;
case 46: /* cmd ::= ALTER ACCOUNT ids acct_optr */
{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy187);}
{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy183);}
break;
case 47: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy187);}
{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy183);}
break;
case 48: /* ids ::= ID */
case 49: /* ids ::= STRING */ yytestcase(yyruleno==49);
......@@ -2318,11 +2326,11 @@ static void yy_reduce(
{ setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);}
break;
case 55: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy187);}
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy183);}
break;
case 56: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
case 57: /* cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ yytestcase(yyruleno==57);
{ setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy526, &yymsp[-2].minor.yy0);}
{ setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy114, &yymsp[-2].minor.yy0);}
break;
case 58: /* cmd ::= CREATE USER ids PASS ids */
{ setCreateUserSql(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
......@@ -2351,20 +2359,20 @@ static void yy_reduce(
break;
case 77: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
yylhsminor.yy187.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
yylhsminor.yy187.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
yylhsminor.yy187.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
yylhsminor.yy187.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
yylhsminor.yy187.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
yylhsminor.yy187.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy187.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy187.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
yylhsminor.yy187.stat = yymsp[0].minor.yy0;
}
yymsp[-8].minor.yy187 = yylhsminor.yy187;
yylhsminor.yy183.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
yylhsminor.yy183.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
yylhsminor.yy183.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
yylhsminor.yy183.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
yylhsminor.yy183.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
yylhsminor.yy183.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy183.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy183.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
yylhsminor.yy183.stat = yymsp[0].minor.yy0;
}
yymsp[-8].minor.yy183 = yylhsminor.yy183;
break;
case 78: /* keep ::= KEEP tagitemlist */
{ yymsp[-1].minor.yy285 = yymsp[0].minor.yy285; }
{ yymsp[-1].minor.yy193 = yymsp[0].minor.yy193; }
break;
case 79: /* cache ::= CACHE INTEGER */
case 80: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==80);
......@@ -2384,234 +2392,234 @@ static void yy_reduce(
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break;
case 94: /* db_optr ::= */
{setDefaultCreateDbOption(&yymsp[1].minor.yy526); yymsp[1].minor.yy526.dbType = TSDB_DB_TYPE_DEFAULT;}
{setDefaultCreateDbOption(&yymsp[1].minor.yy114); yymsp[1].minor.yy114.dbType = TSDB_DB_TYPE_DEFAULT;}
break;
case 95: /* db_optr ::= db_optr cache */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 96: /* db_optr ::= db_optr replica */
case 113: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==113);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 97: /* db_optr ::= db_optr quorum */
case 114: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==114);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 98: /* db_optr ::= db_optr days */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 99: /* db_optr ::= db_optr minrows */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 100: /* db_optr ::= db_optr maxrows */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 101: /* db_optr ::= db_optr blocks */
case 116: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==116);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 102: /* db_optr ::= db_optr ctime */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 103: /* db_optr ::= db_optr wal */
case 118: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==118);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 104: /* db_optr ::= db_optr fsync */
case 119: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==119);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 105: /* db_optr ::= db_optr comp */
case 117: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==117);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 106: /* db_optr ::= db_optr prec */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.precision = yymsp[0].minor.yy0; }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.precision = yymsp[0].minor.yy0; }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 107: /* db_optr ::= db_optr keep */
case 115: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==115);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.keep = yymsp[0].minor.yy285; }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.keep = yymsp[0].minor.yy193; }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 108: /* db_optr ::= db_optr update */
case 120: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==120);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 109: /* db_optr ::= db_optr cachelast */
case 121: /* alter_db_optr ::= alter_db_optr cachelast */ yytestcase(yyruleno==121);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 110: /* topic_optr ::= db_optr */
case 122: /* alter_topic_optr ::= alter_db_optr */ yytestcase(yyruleno==122);
{ yylhsminor.yy526 = yymsp[0].minor.yy526; yylhsminor.yy526.dbType = TSDB_DB_TYPE_TOPIC; }
yymsp[0].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[0].minor.yy114; yylhsminor.yy114.dbType = TSDB_DB_TYPE_TOPIC; }
yymsp[0].minor.yy114 = yylhsminor.yy114;
break;
case 111: /* topic_optr ::= topic_optr partitions */
case 123: /* alter_topic_optr ::= alter_topic_optr partitions */ yytestcase(yyruleno==123);
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.partitions = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526;
{ yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.partitions = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
case 112: /* alter_db_optr ::= */
{ setDefaultCreateDbOption(&yymsp[1].minor.yy526); yymsp[1].minor.yy526.dbType = TSDB_DB_TYPE_DEFAULT;}
{ setDefaultCreateDbOption(&yymsp[1].minor.yy114); yymsp[1].minor.yy114.dbType = TSDB_DB_TYPE_DEFAULT;}
break;
case 124: /* typename ::= ids */
{
yymsp[0].minor.yy0.type = 0;
tSetColumnType (&yylhsminor.yy295, &yymsp[0].minor.yy0);
tSetColumnType (&yylhsminor.yy27, &yymsp[0].minor.yy0);
}
yymsp[0].minor.yy295 = yylhsminor.yy295;
yymsp[0].minor.yy27 = yylhsminor.yy27;
break;
case 125: /* typename ::= ids LP signed RP */
{
if (yymsp[-1].minor.yy525 <= 0) {
if (yymsp[-1].minor.yy473 <= 0) {
yymsp[-3].minor.yy0.type = 0;
tSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
tSetColumnType(&yylhsminor.yy27, &yymsp[-3].minor.yy0);
} else {
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy525; // negative value of name length
tSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0);
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy473; // negative value of name length
tSetColumnType(&yylhsminor.yy27, &yymsp[-3].minor.yy0);
}
}
yymsp[-3].minor.yy295 = yylhsminor.yy295;
yymsp[-3].minor.yy27 = yylhsminor.yy27;
break;
case 126: /* typename ::= ids UNSIGNED */
{
yymsp[-1].minor.yy0.type = 0;
yymsp[-1].minor.yy0.n = ((yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z);
tSetColumnType (&yylhsminor.yy295, &yymsp[-1].minor.yy0);
tSetColumnType (&yylhsminor.yy27, &yymsp[-1].minor.yy0);
}
yymsp[-1].minor.yy295 = yylhsminor.yy295;
yymsp[-1].minor.yy27 = yylhsminor.yy27;
break;
case 127: /* signed ::= INTEGER */
{ yylhsminor.yy525 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy525 = yylhsminor.yy525;
{ yylhsminor.yy473 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy473 = yylhsminor.yy473;
break;
case 128: /* signed ::= PLUS INTEGER */
{ yymsp[-1].minor.yy525 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
{ yymsp[-1].minor.yy473 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
break;
case 129: /* signed ::= MINUS INTEGER */
{ yymsp[-1].minor.yy525 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
{ yymsp[-1].minor.yy473 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
break;
case 133: /* cmd ::= CREATE TABLE create_table_list */
{ pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy470;}
{ pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy270;}
break;
case 134: /* create_table_list ::= create_from_stable */
{
SCreateTableSql* pCreateTable = calloc(1, sizeof(SCreateTableSql));
pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo));
taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy96);
taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy192);
pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE;
yylhsminor.yy470 = pCreateTable;
yylhsminor.yy270 = pCreateTable;
}
yymsp[0].minor.yy470 = yylhsminor.yy470;
yymsp[0].minor.yy270 = yylhsminor.yy270;
break;
case 135: /* create_table_list ::= create_table_list create_from_stable */
{
taosArrayPush(yymsp[-1].minor.yy470->childTableInfo, &yymsp[0].minor.yy96);
yylhsminor.yy470 = yymsp[-1].minor.yy470;
taosArrayPush(yymsp[-1].minor.yy270->childTableInfo, &yymsp[0].minor.yy192);
yylhsminor.yy270 = yymsp[-1].minor.yy270;
}
yymsp[-1].minor.yy470 = yylhsminor.yy470;
yymsp[-1].minor.yy270 = yylhsminor.yy270;
break;
case 136: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
yylhsminor.yy470 = tSetCreateTableInfo(yymsp[-1].minor.yy285, NULL, NULL, TSQL_CREATE_TABLE);
setSqlInfo(pInfo, yylhsminor.yy470, NULL, TSDB_SQL_CREATE_TABLE);
yylhsminor.yy270 = tSetCreateTableInfo(yymsp[-1].minor.yy193, NULL, NULL, TSQL_CREATE_TABLE);
setSqlInfo(pInfo, yylhsminor.yy270, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-5].minor.yy0);
}
yymsp[-5].minor.yy470 = yylhsminor.yy470;
yymsp[-5].minor.yy270 = yylhsminor.yy270;
break;
case 137: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
yylhsminor.yy470 = tSetCreateTableInfo(yymsp[-5].minor.yy285, yymsp[-1].minor.yy285, NULL, TSQL_CREATE_STABLE);
setSqlInfo(pInfo, yylhsminor.yy470, NULL, TSDB_SQL_CREATE_TABLE);
yylhsminor.yy270 = tSetCreateTableInfo(yymsp[-5].minor.yy193, yymsp[-1].minor.yy193, NULL, TSQL_CREATE_STABLE);
setSqlInfo(pInfo, yylhsminor.yy270, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
}
yymsp[-9].minor.yy470 = yylhsminor.yy470;
yymsp[-9].minor.yy270 = yylhsminor.yy270;
break;
case 138: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
yylhsminor.yy96 = createNewChildTableInfo(&yymsp[-5].minor.yy0, NULL, yymsp[-1].minor.yy285, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
yylhsminor.yy192 = createNewChildTableInfo(&yymsp[-5].minor.yy0, NULL, yymsp[-1].minor.yy193, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
}
yymsp[-9].minor.yy96 = yylhsminor.yy96;
yymsp[-9].minor.yy192 = yylhsminor.yy192;
break;
case 139: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
{
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
yymsp[-11].minor.yy0.n += yymsp[-10].minor.yy0.n;
yylhsminor.yy96 = createNewChildTableInfo(&yymsp[-8].minor.yy0, yymsp[-5].minor.yy285, yymsp[-1].minor.yy285, &yymsp[-11].minor.yy0, &yymsp[-12].minor.yy0);
yylhsminor.yy192 = createNewChildTableInfo(&yymsp[-8].minor.yy0, yymsp[-5].minor.yy193, yymsp[-1].minor.yy193, &yymsp[-11].minor.yy0, &yymsp[-12].minor.yy0);
}
yymsp[-12].minor.yy96 = yylhsminor.yy96;
yymsp[-12].minor.yy192 = yylhsminor.yy192;
break;
case 140: /* tagNamelist ::= tagNamelist COMMA ids */
{taosArrayPush(yymsp[-2].minor.yy285, &yymsp[0].minor.yy0); yylhsminor.yy285 = yymsp[-2].minor.yy285; }
yymsp[-2].minor.yy285 = yylhsminor.yy285;
{taosArrayPush(yymsp[-2].minor.yy193, &yymsp[0].minor.yy0); yylhsminor.yy193 = yymsp[-2].minor.yy193; }
yymsp[-2].minor.yy193 = yylhsminor.yy193;
break;
case 141: /* tagNamelist ::= ids */
{yylhsminor.yy285 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy285, &yymsp[0].minor.yy0);}
yymsp[0].minor.yy285 = yylhsminor.yy285;
{yylhsminor.yy193 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy193, &yymsp[0].minor.yy0);}
yymsp[0].minor.yy193 = yylhsminor.yy193;
break;
case 142: /* create_table_args ::= ifnotexists ids cpxName AS select */
{
yylhsminor.yy470 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy344, TSQL_CREATE_STREAM);
setSqlInfo(pInfo, yylhsminor.yy470, NULL, TSDB_SQL_CREATE_TABLE);
yylhsminor.yy270 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy124, TSQL_CREATE_STREAM);
setSqlInfo(pInfo, yylhsminor.yy270, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-3].minor.yy0, &yymsp[-4].minor.yy0);
}
yymsp[-4].minor.yy470 = yylhsminor.yy470;
yymsp[-4].minor.yy270 = yylhsminor.yy270;
break;
case 143: /* columnlist ::= columnlist COMMA column */
{taosArrayPush(yymsp[-2].minor.yy285, &yymsp[0].minor.yy295); yylhsminor.yy285 = yymsp[-2].minor.yy285; }
yymsp[-2].minor.yy285 = yylhsminor.yy285;
{taosArrayPush(yymsp[-2].minor.yy193, &yymsp[0].minor.yy27); yylhsminor.yy193 = yymsp[-2].minor.yy193; }
yymsp[-2].minor.yy193 = yylhsminor.yy193;
break;
case 144: /* columnlist ::= column */
{yylhsminor.yy285 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy285, &yymsp[0].minor.yy295);}
yymsp[0].minor.yy285 = yylhsminor.yy285;
{yylhsminor.yy193 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy193, &yymsp[0].minor.yy27);}
yymsp[0].minor.yy193 = yylhsminor.yy193;
break;
case 145: /* column ::= ids typename */
{
tSetColumnInfo(&yylhsminor.yy295, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy295);
tSetColumnInfo(&yylhsminor.yy27, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy27);
}
yymsp[-1].minor.yy295 = yylhsminor.yy295;
yymsp[-1].minor.yy27 = yylhsminor.yy27;
break;
case 146: /* tagitemlist ::= tagitemlist COMMA tagitem */
{ yylhsminor.yy285 = tVariantListAppend(yymsp[-2].minor.yy285, &yymsp[0].minor.yy362, -1); }
yymsp[-2].minor.yy285 = yylhsminor.yy285;
{ yylhsminor.yy193 = tVariantListAppend(yymsp[-2].minor.yy193, &yymsp[0].minor.yy442, -1); }
yymsp[-2].minor.yy193 = yylhsminor.yy193;
break;
case 147: /* tagitemlist ::= tagitem */
{ yylhsminor.yy285 = tVariantListAppend(NULL, &yymsp[0].minor.yy362, -1); }
yymsp[0].minor.yy285 = yylhsminor.yy285;
{ yylhsminor.yy193 = tVariantListAppend(NULL, &yymsp[0].minor.yy442, -1); }
yymsp[0].minor.yy193 = yylhsminor.yy193;
break;
case 148: /* tagitem ::= INTEGER */
case 149: /* tagitem ::= FLOAT */ yytestcase(yyruleno==149);
case 150: /* tagitem ::= STRING */ yytestcase(yyruleno==150);
case 151: /* tagitem ::= BOOL */ yytestcase(yyruleno==151);
{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy362, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy362 = yylhsminor.yy362;
{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy442, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy442 = yylhsminor.yy442;
break;
case 152: /* tagitem ::= NULL */
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy362, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy362 = yylhsminor.yy362;
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy442, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy442 = yylhsminor.yy442;
break;
case 153: /* tagitem ::= MINUS INTEGER */
case 154: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==154);
......@@ -2621,56 +2629,56 @@ static void yy_reduce(
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type;
toTSDBType(yymsp[-1].minor.yy0.type);
tVariantCreate(&yylhsminor.yy362, &yymsp[-1].minor.yy0);
tVariantCreate(&yylhsminor.yy442, &yymsp[-1].minor.yy0);
}
yymsp[-1].minor.yy362 = yylhsminor.yy362;
yymsp[-1].minor.yy442 = yylhsminor.yy442;
break;
case 157: /* select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
case 157: /* select ::= SELECT selcollist from where_opt interval_opt session_option windowstate_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
yylhsminor.yy344 = tSetQuerySqlNode(&yymsp[-12].minor.yy0, yymsp[-11].minor.yy285, yymsp[-10].minor.yy148, yymsp[-9].minor.yy178, yymsp[-4].minor.yy285, yymsp[-3].minor.yy285, &yymsp[-8].minor.yy376, &yymsp[-7].minor.yy523, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy285, &yymsp[0].minor.yy438, &yymsp[-1].minor.yy438, yymsp[-2].minor.yy178);
yylhsminor.yy124 = tSetQuerySqlNode(&yymsp[-13].minor.yy0, yymsp[-12].minor.yy193, yymsp[-11].minor.yy332, yymsp[-10].minor.yy454, yymsp[-4].minor.yy193, yymsp[-3].minor.yy193, &yymsp[-9].minor.yy392, &yymsp[-8].minor.yy447, &yymsp[-7].minor.yy76, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy193, &yymsp[0].minor.yy482, &yymsp[-1].minor.yy482, yymsp[-2].minor.yy454);
}
yymsp[-12].minor.yy344 = yylhsminor.yy344;
yymsp[-13].minor.yy124 = yylhsminor.yy124;
break;
case 158: /* select ::= LP select RP */
{yymsp[-2].minor.yy344 = yymsp[-1].minor.yy344;}
{yymsp[-2].minor.yy124 = yymsp[-1].minor.yy124;}
break;
case 159: /* union ::= select */
{ yylhsminor.yy285 = setSubclause(NULL, yymsp[0].minor.yy344); }
yymsp[0].minor.yy285 = yylhsminor.yy285;
{ yylhsminor.yy193 = setSubclause(NULL, yymsp[0].minor.yy124); }
yymsp[0].minor.yy193 = yylhsminor.yy193;
break;
case 160: /* union ::= union UNION ALL select */
{ yylhsminor.yy285 = appendSelectClause(yymsp[-3].minor.yy285, yymsp[0].minor.yy344); }
yymsp[-3].minor.yy285 = yylhsminor.yy285;
{ yylhsminor.yy193 = appendSelectClause(yymsp[-3].minor.yy193, yymsp[0].minor.yy124); }
yymsp[-3].minor.yy193 = yylhsminor.yy193;
break;
case 161: /* cmd ::= union */
{ setSqlInfo(pInfo, yymsp[0].minor.yy285, NULL, TSDB_SQL_SELECT); }
{ setSqlInfo(pInfo, yymsp[0].minor.yy193, NULL, TSDB_SQL_SELECT); }
break;
case 162: /* select ::= SELECT selcollist */
{
yylhsminor.yy344 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy285, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
yylhsminor.yy124 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy193, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
}
yymsp[-1].minor.yy344 = yylhsminor.yy344;
yymsp[-1].minor.yy124 = yylhsminor.yy124;
break;
case 163: /* sclp ::= selcollist COMMA */
{yylhsminor.yy285 = yymsp[-1].minor.yy285;}
yymsp[-1].minor.yy285 = yylhsminor.yy285;
{yylhsminor.yy193 = yymsp[-1].minor.yy193;}
yymsp[-1].minor.yy193 = yylhsminor.yy193;
break;
case 164: /* sclp ::= */
case 192: /* orderby_opt ::= */ yytestcase(yyruleno==192);
{yymsp[1].minor.yy285 = 0;}
case 194: /* orderby_opt ::= */ yytestcase(yyruleno==194);
{yymsp[1].minor.yy193 = 0;}
break;
case 165: /* selcollist ::= sclp distinct expr as */
{
yylhsminor.yy285 = tSqlExprListAppend(yymsp[-3].minor.yy285, yymsp[-1].minor.yy178, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
yylhsminor.yy193 = tSqlExprListAppend(yymsp[-3].minor.yy193, yymsp[-1].minor.yy454, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
}
yymsp[-3].minor.yy285 = yylhsminor.yy285;
yymsp[-3].minor.yy193 = yylhsminor.yy193;
break;
case 166: /* selcollist ::= sclp STAR */
{
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL);
yylhsminor.yy285 = tSqlExprListAppend(yymsp[-1].minor.yy285, pNode, 0, 0);
yylhsminor.yy193 = tSqlExprListAppend(yymsp[-1].minor.yy193, pNode, 0, 0);
}
yymsp[-1].minor.yy285 = yylhsminor.yy285;
yymsp[-1].minor.yy193 = yylhsminor.yy193;
break;
case 167: /* as ::= AS ids */
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
......@@ -2688,339 +2696,347 @@ static void yy_reduce(
break;
case 172: /* from ::= FROM tablelist */
case 173: /* from ::= FROM sub */ yytestcase(yyruleno==173);
{yymsp[-1].minor.yy148 = yymsp[0].minor.yy148;}
{yymsp[-1].minor.yy332 = yymsp[0].minor.yy332;}
break;
case 174: /* sub ::= LP union RP */
{yymsp[-2].minor.yy148 = addSubqueryElem(NULL, yymsp[-1].minor.yy285, NULL);}
{yymsp[-2].minor.yy332 = addSubqueryElem(NULL, yymsp[-1].minor.yy193, NULL);}
break;
case 175: /* sub ::= LP union RP ids */
{yymsp[-3].minor.yy148 = addSubqueryElem(NULL, yymsp[-2].minor.yy285, &yymsp[0].minor.yy0);}
{yymsp[-3].minor.yy332 = addSubqueryElem(NULL, yymsp[-2].minor.yy193, &yymsp[0].minor.yy0);}
break;
case 176: /* sub ::= sub COMMA LP union RP ids */
{yylhsminor.yy148 = addSubqueryElem(yymsp[-5].minor.yy148, yymsp[-2].minor.yy285, &yymsp[0].minor.yy0);}
yymsp[-5].minor.yy148 = yylhsminor.yy148;
{yylhsminor.yy332 = addSubqueryElem(yymsp[-5].minor.yy332, yymsp[-2].minor.yy193, &yymsp[0].minor.yy0);}
yymsp[-5].minor.yy332 = yylhsminor.yy332;
break;
case 177: /* tablelist ::= ids cpxName */
{
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy148 = setTableNameList(NULL, &yymsp[-1].minor.yy0, NULL);
yylhsminor.yy332 = setTableNameList(NULL, &yymsp[-1].minor.yy0, NULL);
}
yymsp[-1].minor.yy148 = yylhsminor.yy148;
yymsp[-1].minor.yy332 = yylhsminor.yy332;
break;
case 178: /* tablelist ::= ids cpxName ids */
{
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy148 = setTableNameList(NULL, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
yylhsminor.yy332 = setTableNameList(NULL, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
}
yymsp[-2].minor.yy148 = yylhsminor.yy148;
yymsp[-2].minor.yy332 = yylhsminor.yy332;
break;
case 179: /* tablelist ::= tablelist COMMA ids cpxName */
{
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy148 = setTableNameList(yymsp[-3].minor.yy148, &yymsp[-1].minor.yy0, NULL);
yylhsminor.yy332 = setTableNameList(yymsp[-3].minor.yy332, &yymsp[-1].minor.yy0, NULL);
}
yymsp[-3].minor.yy148 = yylhsminor.yy148;
yymsp[-3].minor.yy332 = yylhsminor.yy332;
break;
case 180: /* tablelist ::= tablelist COMMA ids cpxName ids */
{
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy148 = setTableNameList(yymsp[-4].minor.yy148, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
yylhsminor.yy332 = setTableNameList(yymsp[-4].minor.yy332, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
}
yymsp[-4].minor.yy148 = yylhsminor.yy148;
yymsp[-4].minor.yy332 = yylhsminor.yy332;
break;
case 181: /* tmvar ::= VARIABLE */
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
case 182: /* interval_opt ::= INTERVAL LP tmvar RP */
{yymsp[-3].minor.yy376.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy376.offset.n = 0;}
{yymsp[-3].minor.yy392.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy392.offset.n = 0;}
break;
case 183: /* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{yymsp[-5].minor.yy376.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy376.offset = yymsp[-1].minor.yy0;}
{yymsp[-5].minor.yy392.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy392.offset = yymsp[-1].minor.yy0;}
break;
case 184: /* interval_opt ::= */
{memset(&yymsp[1].minor.yy376, 0, sizeof(yymsp[1].minor.yy376));}
{memset(&yymsp[1].minor.yy392, 0, sizeof(yymsp[1].minor.yy392));}
break;
case 185: /* session_option ::= */
{yymsp[1].minor.yy523.col.n = 0; yymsp[1].minor.yy523.gap.n = 0;}
{yymsp[1].minor.yy447.col.n = 0; yymsp[1].minor.yy447.gap.n = 0;}
break;
case 186: /* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
yymsp[-6].minor.yy523.col = yymsp[-4].minor.yy0;
yymsp[-6].minor.yy523.gap = yymsp[-1].minor.yy0;
yymsp[-6].minor.yy447.col = yymsp[-4].minor.yy0;
yymsp[-6].minor.yy447.gap = yymsp[-1].minor.yy0;
}
break;
case 187: /* fill_opt ::= */
{ yymsp[1].minor.yy285 = 0; }
case 187: /* windowstate_option ::= */
{yymsp[1].minor.yy76.col.n = 0;}
break;
case 188: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
case 188: /* windowstate_option ::= STATE_WINDOW LP ids RP */
{
yymsp[-3].minor.yy76.col = yymsp[-1].minor.yy0;
}
break;
case 189: /* fill_opt ::= */
{ yymsp[1].minor.yy193 = 0; }
break;
case 190: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
tVariant A = {0};
toTSDBType(yymsp[-3].minor.yy0.type);
tVariantCreate(&A, &yymsp[-3].minor.yy0);
tVariantListInsert(yymsp[-1].minor.yy285, &A, -1, 0);
yymsp[-5].minor.yy285 = yymsp[-1].minor.yy285;
tVariantListInsert(yymsp[-1].minor.yy193, &A, -1, 0);
yymsp[-5].minor.yy193 = yymsp[-1].minor.yy193;
}
break;
case 189: /* fill_opt ::= FILL LP ID RP */
case 191: /* fill_opt ::= FILL LP ID RP */
{
toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-3].minor.yy285 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
yymsp[-3].minor.yy193 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
}
break;
case 190: /* sliding_opt ::= SLIDING LP tmvar RP */
case 192: /* sliding_opt ::= SLIDING LP tmvar RP */
{yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; }
break;
case 191: /* sliding_opt ::= */
case 193: /* sliding_opt ::= */
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; }
break;
case 193: /* orderby_opt ::= ORDER BY sortlist */
{yymsp[-2].minor.yy285 = yymsp[0].minor.yy285;}
case 195: /* orderby_opt ::= ORDER BY sortlist */
{yymsp[-2].minor.yy193 = yymsp[0].minor.yy193;}
break;
case 194: /* sortlist ::= sortlist COMMA item sortorder */
case 196: /* sortlist ::= sortlist COMMA item sortorder */
{
yylhsminor.yy285 = tVariantListAppend(yymsp[-3].minor.yy285, &yymsp[-1].minor.yy362, yymsp[0].minor.yy460);
yylhsminor.yy193 = tVariantListAppend(yymsp[-3].minor.yy193, &yymsp[-1].minor.yy442, yymsp[0].minor.yy312);
}
yymsp[-3].minor.yy285 = yylhsminor.yy285;
yymsp[-3].minor.yy193 = yylhsminor.yy193;
break;
case 195: /* sortlist ::= item sortorder */
case 197: /* sortlist ::= item sortorder */
{
yylhsminor.yy285 = tVariantListAppend(NULL, &yymsp[-1].minor.yy362, yymsp[0].minor.yy460);
yylhsminor.yy193 = tVariantListAppend(NULL, &yymsp[-1].minor.yy442, yymsp[0].minor.yy312);
}
yymsp[-1].minor.yy285 = yylhsminor.yy285;
yymsp[-1].minor.yy193 = yylhsminor.yy193;
break;
case 196: /* item ::= ids cpxName */
case 198: /* item ::= ids cpxName */
{
toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
tVariantCreate(&yylhsminor.yy362, &yymsp[-1].minor.yy0);
tVariantCreate(&yylhsminor.yy442, &yymsp[-1].minor.yy0);
}
yymsp[-1].minor.yy362 = yylhsminor.yy362;
yymsp[-1].minor.yy442 = yylhsminor.yy442;
break;
case 197: /* sortorder ::= ASC */
{ yymsp[0].minor.yy460 = TSDB_ORDER_ASC; }
case 199: /* sortorder ::= ASC */
{ yymsp[0].minor.yy312 = TSDB_ORDER_ASC; }
break;
case 198: /* sortorder ::= DESC */
{ yymsp[0].minor.yy460 = TSDB_ORDER_DESC;}
case 200: /* sortorder ::= DESC */
{ yymsp[0].minor.yy312 = TSDB_ORDER_DESC;}
break;
case 199: /* sortorder ::= */
{ yymsp[1].minor.yy460 = TSDB_ORDER_ASC; }
case 201: /* sortorder ::= */
{ yymsp[1].minor.yy312 = TSDB_ORDER_ASC; }
break;
case 200: /* groupby_opt ::= */
{ yymsp[1].minor.yy285 = 0;}
case 202: /* groupby_opt ::= */
{ yymsp[1].minor.yy193 = 0;}
break;
case 201: /* groupby_opt ::= GROUP BY grouplist */
{ yymsp[-2].minor.yy285 = yymsp[0].minor.yy285;}
case 203: /* groupby_opt ::= GROUP BY grouplist */
{ yymsp[-2].minor.yy193 = yymsp[0].minor.yy193;}
break;
case 202: /* grouplist ::= grouplist COMMA item */
case 204: /* grouplist ::= grouplist COMMA item */
{
yylhsminor.yy285 = tVariantListAppend(yymsp[-2].minor.yy285, &yymsp[0].minor.yy362, -1);
yylhsminor.yy193 = tVariantListAppend(yymsp[-2].minor.yy193, &yymsp[0].minor.yy442, -1);
}
yymsp[-2].minor.yy285 = yylhsminor.yy285;
yymsp[-2].minor.yy193 = yylhsminor.yy193;
break;
case 203: /* grouplist ::= item */
case 205: /* grouplist ::= item */
{
yylhsminor.yy285 = tVariantListAppend(NULL, &yymsp[0].minor.yy362, -1);
yylhsminor.yy193 = tVariantListAppend(NULL, &yymsp[0].minor.yy442, -1);
}
yymsp[0].minor.yy285 = yylhsminor.yy285;
yymsp[0].minor.yy193 = yylhsminor.yy193;
break;
case 204: /* having_opt ::= */
case 214: /* where_opt ::= */ yytestcase(yyruleno==214);
case 256: /* expritem ::= */ yytestcase(yyruleno==256);
{yymsp[1].minor.yy178 = 0;}
case 206: /* having_opt ::= */
case 216: /* where_opt ::= */ yytestcase(yyruleno==216);
case 258: /* expritem ::= */ yytestcase(yyruleno==258);
{yymsp[1].minor.yy454 = 0;}
break;
case 205: /* having_opt ::= HAVING expr */
case 215: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==215);
{yymsp[-1].minor.yy178 = yymsp[0].minor.yy178;}
case 207: /* having_opt ::= HAVING expr */
case 217: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==217);
{yymsp[-1].minor.yy454 = yymsp[0].minor.yy454;}
break;
case 206: /* limit_opt ::= */
case 210: /* slimit_opt ::= */ yytestcase(yyruleno==210);
{yymsp[1].minor.yy438.limit = -1; yymsp[1].minor.yy438.offset = 0;}
case 208: /* limit_opt ::= */
case 212: /* slimit_opt ::= */ yytestcase(yyruleno==212);
{yymsp[1].minor.yy482.limit = -1; yymsp[1].minor.yy482.offset = 0;}
break;
case 207: /* limit_opt ::= LIMIT signed */
case 211: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==211);
{yymsp[-1].minor.yy438.limit = yymsp[0].minor.yy525; yymsp[-1].minor.yy438.offset = 0;}
case 209: /* limit_opt ::= LIMIT signed */
case 213: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==213);
{yymsp[-1].minor.yy482.limit = yymsp[0].minor.yy473; yymsp[-1].minor.yy482.offset = 0;}
break;
case 208: /* limit_opt ::= LIMIT signed OFFSET signed */
{ yymsp[-3].minor.yy438.limit = yymsp[-2].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[0].minor.yy525;}
case 210: /* limit_opt ::= LIMIT signed OFFSET signed */
{ yymsp[-3].minor.yy482.limit = yymsp[-2].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[0].minor.yy473;}
break;
case 209: /* limit_opt ::= LIMIT signed COMMA signed */
{ yymsp[-3].minor.yy438.limit = yymsp[0].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[-2].minor.yy525;}
case 211: /* limit_opt ::= LIMIT signed COMMA signed */
{ yymsp[-3].minor.yy482.limit = yymsp[0].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[-2].minor.yy473;}
break;
case 212: /* slimit_opt ::= SLIMIT signed SOFFSET signed */
{yymsp[-3].minor.yy438.limit = yymsp[-2].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[0].minor.yy525;}
case 214: /* slimit_opt ::= SLIMIT signed SOFFSET signed */
{yymsp[-3].minor.yy482.limit = yymsp[-2].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[0].minor.yy473;}
break;
case 213: /* slimit_opt ::= SLIMIT signed COMMA signed */
{yymsp[-3].minor.yy438.limit = yymsp[0].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[-2].minor.yy525;}
case 215: /* slimit_opt ::= SLIMIT signed COMMA signed */
{yymsp[-3].minor.yy482.limit = yymsp[0].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[-2].minor.yy473;}
break;
case 216: /* expr ::= LP expr RP */
{yylhsminor.yy178 = yymsp[-1].minor.yy178; yylhsminor.yy178->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy178->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 218: /* expr ::= LP expr RP */
{yylhsminor.yy454 = yymsp[-1].minor.yy454; yylhsminor.yy454->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy454->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 217: /* expr ::= ID */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 219: /* expr ::= ID */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 218: /* expr ::= ID DOT ID */
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ID);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 220: /* expr ::= ID DOT ID */
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ID);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 219: /* expr ::= ID DOT STAR */
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ALL);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 221: /* expr ::= ID DOT STAR */
{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ALL);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 220: /* expr ::= INTEGER */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 222: /* expr ::= INTEGER */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 221: /* expr ::= MINUS INTEGER */
case 222: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==222);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_INTEGER);}
yymsp[-1].minor.yy178 = yylhsminor.yy178;
case 223: /* expr ::= MINUS INTEGER */
case 224: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==224);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_INTEGER);}
yymsp[-1].minor.yy454 = yylhsminor.yy454;
break;
case 223: /* expr ::= FLOAT */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 225: /* expr ::= FLOAT */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 224: /* expr ::= MINUS FLOAT */
case 225: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==225);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_FLOAT);}
yymsp[-1].minor.yy178 = yylhsminor.yy178;
case 226: /* expr ::= MINUS FLOAT */
case 227: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==227);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_FLOAT);}
yymsp[-1].minor.yy454 = yylhsminor.yy454;
break;
case 226: /* expr ::= STRING */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 228: /* expr ::= STRING */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 227: /* expr ::= NOW */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 229: /* expr ::= NOW */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 228: /* expr ::= VARIABLE */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 230: /* expr ::= VARIABLE */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 229: /* expr ::= PLUS VARIABLE */
case 230: /* expr ::= MINUS VARIABLE */ yytestcase(yyruleno==230);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_VARIABLE; yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_VARIABLE);}
yymsp[-1].minor.yy178 = yylhsminor.yy178;
case 231: /* expr ::= PLUS VARIABLE */
case 232: /* expr ::= MINUS VARIABLE */ yytestcase(yyruleno==232);
{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_VARIABLE; yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_VARIABLE);}
yymsp[-1].minor.yy454 = yylhsminor.yy454;
break;
case 231: /* expr ::= BOOL */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 233: /* expr ::= BOOL */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 232: /* expr ::= NULL */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NULL);}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 234: /* expr ::= NULL */
{ yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NULL);}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 233: /* expr ::= ID LP exprlist RP */
{ yylhsminor.yy178 = tSqlExprCreateFunction(yymsp[-1].minor.yy285, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy178 = yylhsminor.yy178;
case 235: /* expr ::= ID LP exprlist RP */
{ yylhsminor.yy454 = tSqlExprCreateFunction(yymsp[-1].minor.yy193, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy454 = yylhsminor.yy454;
break;
case 234: /* expr ::= ID LP STAR RP */
{ yylhsminor.yy178 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy178 = yylhsminor.yy178;
case 236: /* expr ::= ID LP STAR RP */
{ yylhsminor.yy454 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy454 = yylhsminor.yy454;
break;
case 235: /* expr ::= expr IS NULL */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, NULL, TK_ISNULL);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 237: /* expr ::= expr IS NULL */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, NULL, TK_ISNULL);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 236: /* expr ::= expr IS NOT NULL */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-3].minor.yy178, NULL, TK_NOTNULL);}
yymsp[-3].minor.yy178 = yylhsminor.yy178;
case 238: /* expr ::= expr IS NOT NULL */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-3].minor.yy454, NULL, TK_NOTNULL);}
yymsp[-3].minor.yy454 = yylhsminor.yy454;
break;
case 237: /* expr ::= expr LT expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_LT);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 239: /* expr ::= expr LT expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_LT);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 238: /* expr ::= expr GT expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_GT);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 240: /* expr ::= expr GT expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_GT);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 239: /* expr ::= expr LE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_LE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 241: /* expr ::= expr LE expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_LE);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 240: /* expr ::= expr GE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_GE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 242: /* expr ::= expr GE expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_GE);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 241: /* expr ::= expr NE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_NE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 243: /* expr ::= expr NE expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_NE);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 242: /* expr ::= expr EQ expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_EQ);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 244: /* expr ::= expr EQ expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_EQ);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 243: /* expr ::= expr BETWEEN expr AND expr */
{ tSqlExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy178); yylhsminor.yy178 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy178, yymsp[-2].minor.yy178, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy178, TK_LE), TK_AND);}
yymsp[-4].minor.yy178 = yylhsminor.yy178;
case 245: /* expr ::= expr BETWEEN expr AND expr */
{ tSqlExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy454); yylhsminor.yy454 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy454, yymsp[-2].minor.yy454, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy454, TK_LE), TK_AND);}
yymsp[-4].minor.yy454 = yylhsminor.yy454;
break;
case 244: /* expr ::= expr AND expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_AND);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 246: /* expr ::= expr AND expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_AND);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 245: /* expr ::= expr OR expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_OR); }
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 247: /* expr ::= expr OR expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_OR); }
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 246: /* expr ::= expr PLUS expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_PLUS); }
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 248: /* expr ::= expr PLUS expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_PLUS); }
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 247: /* expr ::= expr MINUS expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_MINUS); }
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 249: /* expr ::= expr MINUS expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_MINUS); }
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 248: /* expr ::= expr STAR expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_STAR); }
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 250: /* expr ::= expr STAR expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_STAR); }
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 249: /* expr ::= expr SLASH expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_DIVIDE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 251: /* expr ::= expr SLASH expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_DIVIDE);}
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 250: /* expr ::= expr REM expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_REM); }
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 252: /* expr ::= expr REM expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_REM); }
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 251: /* expr ::= expr LIKE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_LIKE); }
yymsp[-2].minor.yy178 = yylhsminor.yy178;
case 253: /* expr ::= expr LIKE expr */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_LIKE); }
yymsp[-2].minor.yy454 = yylhsminor.yy454;
break;
case 252: /* expr ::= expr IN LP exprlist RP */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-4].minor.yy178, (tSqlExpr*)yymsp[-1].minor.yy285, TK_IN); }
yymsp[-4].minor.yy178 = yylhsminor.yy178;
case 254: /* expr ::= expr IN LP exprlist RP */
{yylhsminor.yy454 = tSqlExprCreate(yymsp[-4].minor.yy454, (tSqlExpr*)yymsp[-1].minor.yy193, TK_IN); }
yymsp[-4].minor.yy454 = yylhsminor.yy454;
break;
case 253: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy285 = tSqlExprListAppend(yymsp[-2].minor.yy285,yymsp[0].minor.yy178,0, 0);}
yymsp[-2].minor.yy285 = yylhsminor.yy285;
case 255: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy193 = tSqlExprListAppend(yymsp[-2].minor.yy193,yymsp[0].minor.yy454,0, 0);}
yymsp[-2].minor.yy193 = yylhsminor.yy193;
break;
case 254: /* exprlist ::= expritem */
{yylhsminor.yy285 = tSqlExprListAppend(0,yymsp[0].minor.yy178,0, 0);}
yymsp[0].minor.yy285 = yylhsminor.yy285;
case 256: /* exprlist ::= expritem */
{yylhsminor.yy193 = tSqlExprListAppend(0,yymsp[0].minor.yy454,0, 0);}
yymsp[0].minor.yy193 = yylhsminor.yy193;
break;
case 255: /* expritem ::= expr */
{yylhsminor.yy178 = yymsp[0].minor.yy178;}
yymsp[0].minor.yy178 = yylhsminor.yy178;
case 257: /* expritem ::= expr */
{yylhsminor.yy454 = yymsp[0].minor.yy454;}
yymsp[0].minor.yy454 = yylhsminor.yy454;
break;
case 257: /* cmd ::= RESET QUERY CACHE */
case 259: /* cmd ::= RESET QUERY CACHE */
{ setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
break;
case 258: /* cmd ::= SYNCDB ids REPLICA */
case 260: /* cmd ::= SYNCDB ids REPLICA */
{ setDCLSqlElems(pInfo, TSDB_SQL_SYNC_DB_REPLICA, 1, &yymsp[-1].minor.yy0);}
break;
case 259: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
case 261: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy193, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 260: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
case 262: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
......@@ -3031,14 +3047,14 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 261: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
case 263: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy193, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 262: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
case 264: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
......@@ -3049,7 +3065,7 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 263: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
case 265: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
......@@ -3063,26 +3079,26 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 264: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
case 266: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n;
toTSDBType(yymsp[-2].minor.yy0.type);
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
A = tVariantListAppend(A, &yymsp[0].minor.yy362, -1);
A = tVariantListAppend(A, &yymsp[0].minor.yy442, -1);
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 265: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
case 267: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy193, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 266: /* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
case 268: /* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
......@@ -3093,14 +3109,14 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 267: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
case 269: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy285, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy193, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 268: /* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
case 270: /* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
......@@ -3111,7 +3127,7 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 269: /* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
case 271: /* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
......@@ -3125,13 +3141,13 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
case 270: /* cmd ::= KILL CONNECTION INTEGER */
case 272: /* cmd ::= KILL CONNECTION INTEGER */
{setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);}
break;
case 271: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */
case 273: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */
{yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSql(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);}
break;
case 272: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */
case 274: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */
{yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSql(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);}
break;
default:
......
......@@ -2128,6 +2128,7 @@ int32_t tsdbGetFileBlocksDistInfo(TsdbQueryHandleT* queryHandle, STableBlockDist
STsdbQueryHandle* pQueryHandle = (STsdbQueryHandle*) queryHandle;
pTableBlockInfo->totalSize = 0;
pTableBlockInfo->totalRows = 0;
STsdbFS* pFileHandle = REPO_FS(pQueryHandle->pTsdb);
// find the start data block in file
......@@ -2201,7 +2202,12 @@ int32_t tsdbGetFileBlocksDistInfo(TsdbQueryHandleT* queryHandle, STableBlockDist
pTableBlockInfo->totalSize += pBlock[j].len;
int32_t numOfRows = pBlock[j].numOfRows;
taosArrayPush(pTableBlockInfo->dataBlockInfos, &numOfRows);
pTableBlockInfo->totalRows += numOfRows;
if (numOfRows > pTableBlockInfo->maxRows) pTableBlockInfo->maxRows = numOfRows;
if (numOfRows < pTableBlockInfo->minRows) pTableBlockInfo->minRows = numOfRows;
int32_t stepIndex = (numOfRows-1)/TSDB_BLOCK_DIST_STEP_ROWS;
SFileBlockInfo *blockInfo = (SFileBlockInfo*)taosArrayGet(pTableBlockInfo->dataBlockInfos, stepIndex);
blockInfo->numBlocksOfStep++;
}
}
}
......
......@@ -106,6 +106,14 @@ void* taosArrayGetLast(const SArray* pArray);
*/
size_t taosArrayGetSize(const SArray* pArray);
/**
* set the size of array
* @param pArray
* @param size size of the array
* @return
*/
void taosArraySetSize(SArray* pArray, size_t size);
/**
* insert data into array
* @param pArray
......
......@@ -115,6 +115,11 @@ void* taosArrayGetLast(const SArray* pArray) {
size_t taosArrayGetSize(const SArray* pArray) { return pArray->size; }
void taosArraySetSize(SArray* pArray, size_t size) {
assert(size <= pArray->capacity);
pArray->size = size;
}
void* taosArrayInsert(SArray* pArray, size_t index, void* pData) {
if (pArray == NULL || pData == NULL) {
return NULL;
......
......@@ -141,6 +141,7 @@ static SKeyword keywordTable[] = {
{"VARIABLE", TK_VARIABLE},
{"INTERVAL", TK_INTERVAL},
{"SESSION", TK_SESSION},
{"STATE_WINDOW", TK_STATE_WINDOW},
{"FILL", TK_FILL},
{"SLIDING", TK_SLIDING},
{"ORDER", TK_ORDER},
......
......@@ -29,8 +29,8 @@ pipeline {
agent none
environment{
WK = '/var/lib/jenkins/workspace/TDinternal'
WKC= '/var/lib/jenkins/workspace/TDinternal/community'
WK = '/data/lib/jenkins/workspace/TDinternal'
WKC= '/data/lib/jenkins/workspace/TDinternal/community'
}
stages {
......
......@@ -402,6 +402,471 @@ void verify_prepare(TAOS* taos) {
taos_stmt_close(stmt);
}
void verify_prepare2(TAOS* taos) {
TAOS_RES* result = taos_query(taos, "drop database if exists test;");
taos_free_result(result);
usleep(100000);
result = taos_query(taos, "create database test;");
int code = taos_errno(result);
if (code != 0) {
printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
taos_free_result(result);
return;
}
taos_free_result(result);
usleep(100000);
taos_select_db(taos, "test");
// create table
const char* sql = "create table m1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin binary(40), blob nchar(10))";
result = taos_query(taos, sql);
code = taos_errno(result);
if (code != 0) {
printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
taos_free_result(result);
return;
}
taos_free_result(result);
// insert 10 records
struct {
int64_t ts[10];
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
char blob[10][80];
} v;
int32_t *t8_len = malloc(sizeof(int32_t) * 10);
int32_t *t16_len = malloc(sizeof(int32_t) * 10);
int32_t *t32_len = malloc(sizeof(int32_t) * 10);
int32_t *t64_len = malloc(sizeof(int32_t) * 10);
int32_t *float_len = malloc(sizeof(int32_t) * 10);
int32_t *double_len = malloc(sizeof(int32_t) * 10);
int32_t *bin_len = malloc(sizeof(int32_t) * 10);
int32_t *blob_len = malloc(sizeof(int32_t) * 10);
TAOS_STMT* stmt = taos_stmt_init(taos);
TAOS_MULTI_BIND params[10];
char is_null[10] = {0};
params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
params[0].buffer_length = sizeof(v.ts[0]);
params[0].buffer = v.ts;
params[0].length = t64_len;
params[0].is_null = is_null;
params[0].num = 10;
params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
params[1].buffer_length = sizeof(v.b[0]);
params[1].buffer = v.b;
params[1].length = t8_len;
params[1].is_null = is_null;
params[1].num = 10;
params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
params[2].buffer_length = sizeof(v.v1[0]);
params[2].buffer = v.v1;
params[2].length = t8_len;
params[2].is_null = is_null;
params[2].num = 10;
params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
params[3].buffer_length = sizeof(v.v2[0]);
params[3].buffer = v.v2;
params[3].length = t16_len;
params[3].is_null = is_null;
params[3].num = 10;
params[4].buffer_type = TSDB_DATA_TYPE_INT;
params[4].buffer_length = sizeof(v.v4[0]);
params[4].buffer = v.v4;
params[4].length = t32_len;
params[4].is_null = is_null;
params[4].num = 10;
params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
params[5].buffer_length = sizeof(v.v8[0]);
params[5].buffer = v.v8;
params[5].length = t64_len;
params[5].is_null = is_null;
params[5].num = 10;
params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
params[6].buffer_length = sizeof(v.f4[0]);
params[6].buffer = v.f4;
params[6].length = float_len;
params[6].is_null = is_null;
params[6].num = 10;
params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
params[7].buffer_length = sizeof(v.f8[0]);
params[7].buffer = v.f8;
params[7].length = double_len;
params[7].is_null = is_null;
params[7].num = 10;
params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
params[8].buffer_length = sizeof(v.bin[0]);
params[8].buffer = v.bin;
params[8].length = bin_len;
params[8].is_null = is_null;
params[8].num = 10;
params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
params[9].buffer_length = sizeof(v.blob[0]);
params[9].buffer = v.blob;
params[9].length = blob_len;
params[9].is_null = is_null;
params[9].num = 10;
sql = "insert into ? values(?,?,?,?,?,?,?,?,?,?)";
code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("\033[31mfailed to execute taos_stmt_prepare. code:0x%x\033[0m\n", code);
}
code = taos_stmt_set_tbname(stmt, "m1");
if (code != 0){
printf("\033[31mfailed to execute taos_stmt_prepare. code:0x%x\033[0m\n", code);
}
int64_t ts = 1591060628000;
for (int i = 0; i < 10; ++i) {
v.ts[i] = ts++;
is_null[i] = 0;
v.b[i] = (int8_t)i % 2;
v.v1[i] = (int8_t)i;
v.v2[i] = (int16_t)(i * 2);
v.v4[i] = (int32_t)(i * 4);
v.v8[i] = (int64_t)(i * 8);
v.f4[i] = (float)(i * 40);
v.f8[i] = (double)(i * 80);
for (int j = 0; j < sizeof(v.bin[0]) - 1; ++j) {
v.bin[i][j] = (char)(i + '0');
}
strcpy(v.blob[i], "一二三四五六七八九十");
t8_len[i] = sizeof(int8_t);
t16_len[i] = sizeof(int16_t);
t32_len[i] = sizeof(int32_t);
t64_len[i] = sizeof(int64_t);
float_len[i] = sizeof(float);
double_len[i] = sizeof(double);
bin_len[i] = sizeof(v.bin[0]);
blob_len[i] = (int32_t)strlen(v.blob[i]);
}
taos_stmt_bind_param_batch(stmt, params);
taos_stmt_add_batch(stmt);
if (taos_stmt_execute(stmt) != 0) {
printf("\033[31mfailed to execute insert statement.\033[0m\n");
return;
}
taos_stmt_close(stmt);
// query the records
stmt = taos_stmt_init(taos);
taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
TAOS_BIND qparams[2];
int8_t v1 = 5;
int16_t v2 = 15;
qparams[0].buffer_type = TSDB_DATA_TYPE_TINYINT;
qparams[0].buffer_length = sizeof(v1);
qparams[0].buffer = &v1;
qparams[0].length = &qparams[0].buffer_length;
qparams[0].is_null = NULL;
qparams[1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
qparams[1].buffer_length = sizeof(v2);
qparams[1].buffer = &v2;
qparams[1].length = &qparams[1].buffer_length;
qparams[1].is_null = NULL;
taos_stmt_bind_param(stmt, qparams);
if (taos_stmt_execute(stmt) != 0) {
printf("\033[31mfailed to execute select statement.\033[0m\n");
return;
}
result = taos_stmt_use_result(stmt);
TAOS_ROW row;
int rows = 0;
int num_fields = taos_num_fields(result);
TAOS_FIELD *fields = taos_fetch_fields(result);
char temp[256];
// fetch the records row by row
while ((row = taos_fetch_row(result))) {
rows++;
taos_print_row(temp, row, fields, num_fields);
printf("%s\n", temp);
}
taos_free_result(result);
taos_stmt_close(stmt);
}
void verify_prepare3(TAOS* taos) {
TAOS_RES* result = taos_query(taos, "drop database if exists test;");
taos_free_result(result);
usleep(100000);
result = taos_query(taos, "create database test;");
int code = taos_errno(result);
if (code != 0) {
printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
taos_free_result(result);
return;
}
taos_free_result(result);
usleep(100000);
taos_select_db(taos, "test");
// create table
const char* sql = "create stable st1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin binary(40), blob nchar(10)) tags (id1 int, id2 binary(40))";
result = taos_query(taos, sql);
code = taos_errno(result);
if (code != 0) {
printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
taos_free_result(result);
return;
}
taos_free_result(result);
TAOS_BIND tags[2];
int32_t id1 = 1;
char id2[40] = "abcdefghijklmnopqrstuvwxyz0123456789";
uintptr_t id2_len = strlen(id2);
tags[0].buffer_type = TSDB_DATA_TYPE_INT;
tags[0].buffer_length = sizeof(int);
tags[0].buffer = &id1;
tags[0].length = NULL;
tags[0].is_null = NULL;
tags[1].buffer_type = TSDB_DATA_TYPE_BINARY;
tags[1].buffer_length = sizeof(id2);
tags[1].buffer = id2;
tags[1].length = &id2_len;
tags[1].is_null = NULL;
// insert 10 records
struct {
int64_t ts[10];
int8_t b[10];
int8_t v1[10];
int16_t v2[10];
int32_t v4[10];
int64_t v8[10];
float f4[10];
double f8[10];
char bin[10][40];
char blob[10][80];
} v;
int32_t *t8_len = malloc(sizeof(int32_t) * 10);
int32_t *t16_len = malloc(sizeof(int32_t) * 10);
int32_t *t32_len = malloc(sizeof(int32_t) * 10);
int32_t *t64_len = malloc(sizeof(int32_t) * 10);
int32_t *float_len = malloc(sizeof(int32_t) * 10);
int32_t *double_len = malloc(sizeof(int32_t) * 10);
int32_t *bin_len = malloc(sizeof(int32_t) * 10);
int32_t *blob_len = malloc(sizeof(int32_t) * 10);
TAOS_STMT* stmt = taos_stmt_init(taos);
TAOS_MULTI_BIND params[10];
char is_null[10] = {0};
params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
params[0].buffer_length = sizeof(v.ts[0]);
params[0].buffer = v.ts;
params[0].length = t64_len;
params[0].is_null = is_null;
params[0].num = 10;
params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
params[1].buffer_length = sizeof(v.b[0]);
params[1].buffer = v.b;
params[1].length = t8_len;
params[1].is_null = is_null;
params[1].num = 10;
params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
params[2].buffer_length = sizeof(v.v1[0]);
params[2].buffer = v.v1;
params[2].length = t8_len;
params[2].is_null = is_null;
params[2].num = 10;
params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
params[3].buffer_length = sizeof(v.v2[0]);
params[3].buffer = v.v2;
params[3].length = t16_len;
params[3].is_null = is_null;
params[3].num = 10;
params[4].buffer_type = TSDB_DATA_TYPE_INT;
params[4].buffer_length = sizeof(v.v4[0]);
params[4].buffer = v.v4;
params[4].length = t32_len;
params[4].is_null = is_null;
params[4].num = 10;
params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
params[5].buffer_length = sizeof(v.v8[0]);
params[5].buffer = v.v8;
params[5].length = t64_len;
params[5].is_null = is_null;
params[5].num = 10;
params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
params[6].buffer_length = sizeof(v.f4[0]);
params[6].buffer = v.f4;
params[6].length = float_len;
params[6].is_null = is_null;
params[6].num = 10;
params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
params[7].buffer_length = sizeof(v.f8[0]);
params[7].buffer = v.f8;
params[7].length = double_len;
params[7].is_null = is_null;
params[7].num = 10;
params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
params[8].buffer_length = sizeof(v.bin[0]);
params[8].buffer = v.bin;
params[8].length = bin_len;
params[8].is_null = is_null;
params[8].num = 10;
params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
params[9].buffer_length = sizeof(v.blob[0]);
params[9].buffer = v.blob;
params[9].length = blob_len;
params[9].is_null = is_null;
params[9].num = 10;
sql = "insert into ? using st1 tags(?,?) values(?,?,?,?,?,?,?,?,?,?)";
code = taos_stmt_prepare(stmt, sql, 0);
if (code != 0){
printf("\033[31mfailed to execute taos_stmt_prepare. code:0x%x\033[0m\n", code);
}
code = taos_stmt_set_tbname_tags(stmt, "m1", tags);
if (code != 0){
printf("\033[31mfailed to execute taos_stmt_prepare. code:0x%x\033[0m\n", code);
}
int64_t ts = 1591060628000;
for (int i = 0; i < 10; ++i) {
v.ts[i] = ts++;
is_null[i] = 0;
v.b[i] = (int8_t)i % 2;
v.v1[i] = (int8_t)i;
v.v2[i] = (int16_t)(i * 2);
v.v4[i] = (int32_t)(i * 4);
v.v8[i] = (int64_t)(i * 8);
v.f4[i] = (float)(i * 40);
v.f8[i] = (double)(i * 80);
for (int j = 0; j < sizeof(v.bin[0]) - 1; ++j) {
v.bin[i][j] = (char)(i + '0');
}
strcpy(v.blob[i], "一二三四五六七八九十");
t8_len[i] = sizeof(int8_t);
t16_len[i] = sizeof(int16_t);
t32_len[i] = sizeof(int32_t);
t64_len[i] = sizeof(int64_t);
float_len[i] = sizeof(float);
double_len[i] = sizeof(double);
bin_len[i] = sizeof(v.bin[0]);
blob_len[i] = (int32_t)strlen(v.blob[i]);
}
taos_stmt_bind_param_batch(stmt, params);
taos_stmt_add_batch(stmt);
if (taos_stmt_execute(stmt) != 0) {
printf("\033[31mfailed to execute insert statement.\033[0m\n");
return;
}
taos_stmt_close(stmt);
// query the records
stmt = taos_stmt_init(taos);
taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
TAOS_BIND qparams[2];
int8_t v1 = 5;
int16_t v2 = 15;
qparams[0].buffer_type = TSDB_DATA_TYPE_TINYINT;
qparams[0].buffer_length = sizeof(v1);
qparams[0].buffer = &v1;
qparams[0].length = &qparams[0].buffer_length;
qparams[0].is_null = NULL;
qparams[1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
qparams[1].buffer_length = sizeof(v2);
qparams[1].buffer = &v2;
qparams[1].length = &qparams[1].buffer_length;
qparams[1].is_null = NULL;
taos_stmt_bind_param(stmt, qparams);
if (taos_stmt_execute(stmt) != 0) {
printf("\033[31mfailed to execute select statement.\033[0m\n");
return;
}
result = taos_stmt_use_result(stmt);
TAOS_ROW row;
int rows = 0;
int num_fields = taos_num_fields(result);
TAOS_FIELD *fields = taos_fetch_fields(result);
char temp[256];
// fetch the records row by row
while ((row = taos_fetch_row(result))) {
rows++;
taos_print_row(temp, row, fields, num_fields);
printf("%s\n", temp);
}
taos_free_result(result);
taos_stmt_close(stmt);
}
void retrieve_callback(void *param, TAOS_RES *tres, int numOfRows)
{
if (numOfRows > 0) {
......@@ -493,6 +958,12 @@ int main(int argc, char *argv[]) {
printf("************ verify prepare *************\n");
verify_prepare(taos);
printf("************ verify prepare2 *************\n");
verify_prepare2(taos);
printf("************ verify prepare3 *************\n");
verify_prepare3(taos);
printf("************ verify stream *************\n");
verify_stream(taos);
printf("done\n");
......
......@@ -6,9 +6,9 @@ events {
}
http {
lua_package_path '$prefix/lua/?.lua;$prefix/rest/?.lua;/blah/?.lua;;';
lua_package_path '$prefix/lua/?.lua;$prefix/rest/?.lua;$prefix/rest/?/init.lua;;';
lua_package_cpath "$prefix/so/?.so;;";
lua_code_cache off;
lua_code_cache on;
server {
listen 7000;
server_name restapi;
......
local config = {
host = "127.0.0.1",
port = 6030,
database = "",
user = "root",
password = "taosdata",
max_packet_size = 1024 * 1024 ,
connection_pool_size = 64
}
return config
local _M = {}
local driver = require "luaconnector51"
local water_mark = 0
local occupied = 0
local connection_pool = {}
function _M.new(o,config)
o = o or {}
o.connection_pool = connection_pool
o.water_mark = water_mark
o.occupied = occupied
if #connection_pool == 0 then
for i = 1, config.connection_pool_size do
local res = driver.connect(config)
if res.code ~= 0 then
ngx.log(ngx.ERR, "connect--- failed:"..res.error)
return nil
else
local object = {obj = res.conn, state = 0}
table.insert(o.connection_pool,i, object)
ngx.log(ngx.INFO, "add connection, now pool size:"..#(o.connection_pool))
end
end
end
return setmetatable(o, { __index = _M })
end
function _M:get_connection()
local connection_obj
for i = 1, #connection_pool do
connection_obj = connection_pool[i]
if connection_obj.state == 0 then
connection_obj.state = 1
occupied = occupied +1
if occupied > water_mark then
water_mark = occupied
end
return connection_obj["obj"]
end
end
ngx.log(ngx.ERR,"ALERT! NO FREE CONNECTION.")
return nil
end
function _M:get_water_mark()
return water_mark
end
function _M:release_connection(conn)
local connection_obj
for i = 1, #connection_pool do
connection_obj = connection_pool[i]
if connection_obj["obj"] == conn then
connection_obj["state"] = 0
occupied = occupied -1
return
end
end
end
return _M
local driver = require "luaconnector51"
local cjson = require "cjson"
local Pool = require "tdpool"
local config = require "config"
ngx.say("start time:"..os.time())
local config = {
host = "127.0.0.1",
port = 6030,
database = "",
user = "root",
password = "taosdata",
max_packet_size = 1024 * 1024
}
local conn
local res = driver.connect(config)
if res.code ~=0 then
ngx.say("connect--- failed: "..res.error)
return
else
conn = res.conn
ngx.say("connect--- pass.")
end
local pool = Pool.new(Pool,config)
local conn = pool:get_connection()
local res = driver.query(conn,"drop database if exists nginx")
if res.code ~=0 then
......@@ -51,7 +36,7 @@ else
ngx.say("create table--- pass.")
end
res = driver.query(conn,"insert into m1 values ('2019-09-01 00:00:00.001',0,'robotspace'), ('2019-09-01 00:00:00.002',1,'Hilink'),('2019-09-01 00:00:00.003',2,'Harmony')")
res = driver.query(conn,"insert into m1 values ('2019-09-01 00:00:00.001', 0, 'robotspace'), ('2019-09-01 00:00:00.002',1,'Hilink'),('2019-09-01 00:00:00.003',2,'Harmony')")
if res.code ~=0 then
ngx.say("insert records failed: "..res.error)
return
......@@ -77,7 +62,29 @@ else
end
end
driver.close(conn)
ngx.say("end time:"..os.time())
--ngx.log(ngx.ERR,"in test file.")
local flag = false
function query_callback(res)
if res.code ~=0 then
ngx.say("async_query_callback--- failed:"..res.error)
else
if(res.affected == 3) then
ngx.say("async_query_callback, insert records--- pass")
else
ngx.say("async_query_callback, insert records---failed: expect 3 affected records, actually affected "..res.affected)
end
end
flag = true
end
driver.query_a(conn,"insert into m1 values ('2019-09-01 00:00:00.001', 3, 'robotspace'),('2019-09-01 00:00:00.006', 4, 'Hilink'),('2019-09-01 00:00:00.007', 6, 'Harmony')", query_callback)
while not flag do
-- ngx.say("i am here once...")
ngx.sleep(0.001) -- time unit is second
end
ngx.say("pool water_mark:"..pool:get_water_mark())
pool:release_connection(conn)
ngx.say("end time:"..os.time())
gcc -std=c99 lua_connector.c -fPIC -shared -o luaconnector.so -Wall -ltaos
lua_header_installed=`apt-cache policy liblua5.3-dev|grep Installed|grep none > /dev/null; echo $?`
if [ "$lua_header_installed" = "0" ]; then
echo "If need, please input root password to install liblua5.3-dev for build the connector.."
sudo apt install -y liblua5.3-dev
fi
gcc -std=c99 lua_connector.c -fPIC -shared -o luaconnector.so -Wall -ltaos -I/usr/include/lua5.3
......@@ -13,6 +13,11 @@ struct cb_param{
void * stream;
};
struct async_query_callback_param{
lua_State* state;
int callback;
};
static int l_connect(lua_State *L){
TAOS * taos=NULL;
const char* host;
......@@ -23,7 +28,7 @@ static int l_connect(lua_State *L){
luaL_checktype(L, 1, LUA_TTABLE);
lua_getfield(L,-1,"host");
lua_getfield(L, 1,"host");
if (lua_isstring(L,-1)){
host = lua_tostring(L, -1);
// printf("host = %s\n", host);
......@@ -178,6 +183,58 @@ static int l_query(lua_State *L){
return 1;
}
void async_query_callback(void *param, TAOS_RES *result, int code){
struct async_query_callback_param* p = (struct async_query_callback_param*) param;
//printf("\nin c,numfields:%d\n", numFields);
//printf("\nin c, code:%d\n", code);
lua_State *L = p->state;
lua_rawgeti(L, LUA_REGISTRYINDEX, p->callback);
lua_newtable(L);
int table_index = lua_gettop(L);
if( code < 0){
printf("failed, reason:%s\n", taos_errstr(result));
lua_pushinteger(L, -1);
lua_setfield(L, table_index, "code");
lua_pushstring(L,"something is wrong");// taos_errstr(taos));
lua_setfield(L, table_index, "error");
}else{
//printf("success to async query.\n");
const int affectRows = taos_affected_rows(result);
//printf(" affect rows:%d\r\n", affectRows);
lua_pushinteger(L, 0);
lua_setfield(L, table_index, "code");
lua_pushinteger(L, affectRows);
lua_setfield(L, table_index, "affected");
}
lua_call(L, 1, 0);
}
static int l_async_query(lua_State *L){
int r = luaL_ref(L, LUA_REGISTRYINDEX);
TAOS * taos = (TAOS*)lua_topointer(L,1);
const char * sqlstr = lua_tostring(L,2);
// int stime = luaL_checknumber(L,3);
lua_newtable(L);
int table_index = lua_gettop(L);
struct async_query_callback_param *p = malloc(sizeof(struct async_query_callback_param));
p->state = L;
p->callback=r;
// printf("r:%d, L:%d\n",r,L);
taos_query_a(taos,sqlstr,async_query_callback,p);
lua_pushnumber(L, 0);
lua_setfield(L, table_index, "code");
lua_pushstring(L, "ok");
lua_setfield(L, table_index, "error");
return 1;
}
void stream_cb(void *param, TAOS_RES *result, TAOS_ROW row){
struct cb_param* p = (struct cb_param*) param;
TAOS_FIELD *fields = taos_fetch_fields(result);
......@@ -308,6 +365,7 @@ static int l_close(lua_State *L){
static const struct luaL_Reg lib[] = {
{"connect", l_connect},
{"query", l_query},
{"query_a",l_async_query},
{"close", l_close},
{"open_stream", l_open_stream},
{"close_stream", l_close_stream},
......
......@@ -13,6 +13,11 @@ struct cb_param{
void * stream;
};
struct async_query_callback_param{
lua_State* state;
int callback;
};
static int l_connect(lua_State *L){
TAOS * taos=NULL;
const char* host;
......@@ -56,6 +61,7 @@ static int l_connect(lua_State *L){
lua_settop(L,0);
taos_init();
lua_newtable(L);
int table_index = lua_gettop(L);
......@@ -177,6 +183,58 @@ static int l_query(lua_State *L){
return 1;
}
void async_query_callback(void *param, TAOS_RES *result, int code){
struct async_query_callback_param* p = (struct async_query_callback_param*) param;
//printf("\nin c,numfields:%d\n", numFields);
//printf("\nin c, code:%d\n", code);
lua_State *L = p->state;
lua_rawgeti(L, LUA_REGISTRYINDEX, p->callback);
lua_newtable(L);
int table_index = lua_gettop(L);
if( code < 0){
printf("failed, reason:%s\n", taos_errstr(result));
lua_pushinteger(L, -1);
lua_setfield(L, table_index, "code");
lua_pushstring(L,"something is wrong");// taos_errstr(taos));
lua_setfield(L, table_index, "error");
}else{
//printf("success to async query.\n");
const int affectRows = taos_affected_rows(result);
//printf(" affect rows:%d\r\n", affectRows);
lua_pushinteger(L, 0);
lua_setfield(L, table_index, "code");
lua_pushinteger(L, affectRows);
lua_setfield(L, table_index, "affected");
}
lua_call(L, 1, 0);
}
static int l_async_query(lua_State *L){
int r = luaL_ref(L, LUA_REGISTRYINDEX);
TAOS * taos = (TAOS*)lua_topointer(L,1);
const char * sqlstr = lua_tostring(L,2);
// int stime = luaL_checknumber(L,3);
lua_newtable(L);
int table_index = lua_gettop(L);
struct async_query_callback_param *p = malloc(sizeof(struct async_query_callback_param));
p->state = L;
p->callback=r;
// printf("r:%d, L:%d\n",r,L);
taos_query_a(taos,sqlstr,async_query_callback,p);
lua_pushnumber(L, 0);
lua_setfield(L, table_index, "code");
lua_pushstring(L, "ok");
lua_setfield(L, table_index, "error");
return 1;
}
void stream_cb(void *param, TAOS_RES *result, TAOS_ROW row){
struct cb_param* p = (struct cb_param*) param;
TAOS_FIELD *fields = taos_fetch_fields(result);
......@@ -307,6 +365,7 @@ static int l_close(lua_State *L){
static const struct luaL_Reg lib[] = {
{"connect", l_connect},
{"query", l_query},
{"query_a",l_async_query},
{"close", l_close},
{"open_stream", l_open_stream},
{"close_stream", l_close_stream},
......
......@@ -110,7 +110,25 @@ else
end
end
function callback(t)
function async_query_callback(res)
if res.code ~=0 then
print("async_query_callback--- failed:"..res.error)
return
else
if(res.affected == 3) then
print("async_query_callback, insert records--- pass")
else
print("async_query_callback, insert records---failed: expect 3 affected records, actually affected "..res.affected)
end
end
end
driver.query_a(conn,"INSERT INTO therm1 VALUES ('2019-09-01 00:00:00.005', 100),('2019-09-01 00:00:00.006', 101),('2019-09-01 00:00:00.007', 102)", async_query_callback)
function stream_callback(t)
print("------------------------")
print("continuous query result:")
for key, value in pairs(t) do
......@@ -119,7 +137,7 @@ function callback(t)
end
local stream
res = driver.open_stream(conn,"SELECT COUNT(*) as count, AVG(degree) as avg, MAX(degree) as max, MIN(degree) as min FROM thermometer interval(2s) sliding(2s);)",0,callback)
res = driver.open_stream(conn,"SELECT COUNT(*) as count, AVG(degree) as avg, MAX(degree) as max, MIN(degree) as min FROM thermometer interval(2s) sliding(2s);)",0, stream_callback)
if res.code ~=0 then
print("open stream--- failed:"..res.error)
return
......@@ -146,4 +164,5 @@ while loop_index < 30 do
end
driver.close_stream(stream)
driver.close(conn)
......@@ -29,8 +29,8 @@ pipeline {
agent none
environment{
WK = '/var/lib/jenkins/workspace/TDinternal'
WKC= '/var/lib/jenkins/workspace/TDinternal/community'
WK = '/data/lib/jenkins/workspace/TDinternal'
WKC= '/data/lib/jenkins/workspace/TDinternal/community'
}
stages {
......
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import sys
from util.log import *
from util.cases import *
from util.sql import *
class TDTestCase:
def init(self, conn, logSql):
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor(), logSql)
def getBuildPath(self):
selfPath = os.path.dirname(os.path.realpath(__file__))
if ("community" in selfPath):
projPath = selfPath[:selfPath.find("community")]
else:
projPath = selfPath[:selfPath.find("tests")]
for root, dirs, files in os.walk(projPath):
if ("taosd" in files):
rootRealPath = os.path.dirname(os.path.realpath(root))
if ("packaging" not in rootRealPath):
buildPath = root[:len(root) - len("/build/bin")]
break
return buildPath
def isLuaInstalled(self):
if not which('lua'):
tdLog.exit("Lua not found!")
return False
else:
return True
def run(self):
tdSql.prepare()
# tdLog.info("Check if Lua installed")
# if not self.isLuaInstalled():
# sys.exit(1)
buildPath = self.getBuildPath()
if (buildPath == ""):
tdLog.exit("taosd not found!")
else:
tdLog.info("taosd found in %s" % buildPath)
targetPath = buildPath + "/../tests/examples/lua"
tdLog.info(targetPath)
currentPath = os.getcwd()
os.chdir(targetPath)
os.system('./build.sh')
os.system('lua test.lua')
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
#tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())
......@@ -334,5 +334,6 @@ python3 ./test.py -f tag_lite/alter_tag.py
python3 test.py -f tools/taosdemoAllTest/taosdemoTestInsertWithJson.py
python3 test.py -f tools/taosdemoAllTest/taosdemoTestQueryWithJson.py
python3 test.py -f insert/insert_before_use_db.py
#======================p4-end===============
......@@ -82,6 +82,8 @@ class TDTestCase:
tdSql.execute("import into tbx file \'%s\'"%(self.csvfile))
tdSql.query('select * from tbx')
tdSql.checkRows(self.rows)
#TD-4447 import the same csv twice
tdSql.execute("import into tbx file \'%s\'"%(self.csvfile))
def stop(self):
self.destroyCSVFile()
......
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import sys
from util.log import *
from util.cases import *
from util.sql import *
class TDTestCase:
def init(self, conn, logSql):
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor(), logSql)
def run(self):
tdSql.error('insert into tb values (now + 10m, 10)')
tdSql.prepare()
tdSql.error('insert into tb values (now + 10m, 10)')
tdSql.execute('drop database db')
tdSql.error('insert into tb values (now + 10m, 10)')
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())
......@@ -35,3 +35,5 @@ python3.8 ./test.py $1 -s && sleep 1
python3.8 ./test.py $1 -f client/client.py
python3.8 ./test.py $1 -s && sleep 1
# connector
python3.8 ./test.py $1 -f connector/lua.py
......@@ -1046,6 +1046,7 @@ int stmt_funcb_autoctb1(TAOS_STMT *stmt) {
free(params);
free(is_null);
free(no_null);
free(tags);
return 0;
}
......@@ -1258,6 +1259,7 @@ int stmt_funcb_autoctb2(TAOS_STMT *stmt) {
free(params);
free(is_null);
free(no_null);
free(tags);
return 0;
}
......@@ -1446,6 +1448,7 @@ int stmt_funcb_autoctb3(TAOS_STMT *stmt) {
free(params);
free(is_null);
free(no_null);
free(tags);
return 0;
}
......@@ -1635,6 +1638,7 @@ int stmt_funcb_autoctb_e1(TAOS_STMT *stmt) {
free(params);
free(is_null);
free(no_null);
free(tags);
return 0;
}
......@@ -1849,6 +1853,7 @@ int stmt_funcb_autoctb_e2(TAOS_STMT *stmt) {
free(params);
free(is_null);
free(no_null);
free(tags);
return 0;
}
......
......@@ -33,6 +33,7 @@ run general/compute/percentile.sim
run general/compute/stddev.sim
run general/compute/sum.sim
run general/compute/top.sim
run general/compute/block_dist.sim
run general/db/alter_option.sim
run general/db/alter_tables_d2.sim
run general/db/alter_tables_v1.sim
......
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
$dbPrefix = m_di_db
$tbPrefix = m_di_tb
$mtPrefix = m_di_mt
$ntPrefix = m_di_nt
$tbNum = 1
$rowNum = 2000
print =============== step1
$i = 0
$db = $dbPrefix . $i
$mt = $mtPrefix . $i
$nt = $ntPrefix . $i
sql drop database $db -x step1
step1:
sql create database $db
sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
$i = 0
while $i < $tbNum
$tb = $tbPrefix . $i
sql create table $tb using $mt tags( $i )
$x = 0
while $x < $rowNum
$cc = $x * 60000
$ms = 1601481600000 + $cc
sql insert into $tb values ($ms , $x )
$x = $x + 1
endw
$i = $i + 1
endw
sql create table $nt (ts timestamp, tbcol int)
$x = 0
while $x < $rowNum
$cc = $x * 60000
$ms = 1601481600000 + $cc
sql insert into $nt values ($ms , $x )
$x = $x + 1
endw
sleep 100
print =============== step2
$i = 0
$tb = $tbPrefix . $i
sql select _block_dist() from $tb
if $rows != 1 then
print expect 1, actual:$rows
return -1
endi
print =============== step3
$i = 0
$mt = $mtPrefix . $i
sql select _block_dist() from $mt
if $rows != 1 then
print expect 1, actual:$rows
return -1
endi
print =============== step4
$i = 0
$nt = $ntPrefix . $i
sql select _block_dist() from $nt
if $rows != 1 then
print expect 1, actual:$rows
return -1
endi
print =============== clear
sql drop database $db
sql show databases
if $rows != 0 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
......@@ -14,3 +14,4 @@ run general/compute/percentile.sim
run general/compute/stddev.sim
run general/compute/sum.sim
run general/compute/top.sim
run general/compute/block_dist.sim
......@@ -32,6 +32,7 @@ run general/compute/percentile.sim
run general/compute/stddev.sim
run general/compute/sum.sim
run general/compute/top.sim
run general/compute/block_dist.sim
run general/db/alter_option.sim
run general/db/alter_tables_d2.sim
run general/db/alter_tables_v1.sim
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册