提交 56d77cc3 编写于 作者: S Shengliang Guan

Merge from master

...@@ -10,3 +10,6 @@ ...@@ -10,3 +10,6 @@
[submodule "tests/examples/rust"] [submodule "tests/examples/rust"]
path = tests/examples/rust path = tests/examples/rust
url = https://github.com/songtianyi/tdengine-rust-bindings.git 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) ...@@ -59,6 +59,11 @@ IF (TD_LINUX_64)
MESSAGE(STATUS "linux64 is defined") 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") SET(COMMON_FLAGS "-std=gnu99 -Wall -Werror -fPIC -gdwarf-2 -msse4.2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE")
ADD_DEFINITIONS(-DUSE_LIBICONV) 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 () ENDIF ()
IF (TD_LINUX_32) IF (TD_LINUX_32)
......
...@@ -72,3 +72,8 @@ IF (${RANDOM_NETWORK_FAIL} MATCHES "true") ...@@ -72,3 +72,8 @@ IF (${RANDOM_NETWORK_FAIL} MATCHES "true")
SET(TD_RANDOM_NETWORK_FAIL TRUE) SET(TD_RANDOM_NETWORK_FAIL TRUE)
MESSAGE(STATUS "build with random-network-fail enabled") MESSAGE(STATUS "build with random-network-fail enabled")
ENDIF () ENDIF ()
IF (${JEMALLOC_ENABLED} MATCHES "true")
SET(TD_JEMALLOC_ENABLED TRUE)
MESSAGE(STATUS "build with jemalloc enabled")
ENDIF ()
...@@ -18,3 +18,16 @@ ENDIF () ...@@ -18,3 +18,16 @@ ENDIF ()
IF (TD_DARWIN AND TD_MQTT) IF (TD_DARWIN AND TD_MQTT)
ADD_SUBDIRECTORY(MQTT-C) ADD_SUBDIRECTORY(MQTT-C)
ENDIF () 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
...@@ -6,7 +6,7 @@ set -e ...@@ -6,7 +6,7 @@ set -e
#set -x #set -x
# release.sh -v [cluster | edge] # 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 |...] # -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
# -V [stable | beta] # -V [stable | beta]
# -l [full | lite] # -l [full | lite]
...@@ -22,11 +22,12 @@ cpuType=x64 # [aarch32 | aarch64 | x64 | x86 | mips64 ...] ...@@ -22,11 +22,12 @@ cpuType=x64 # [aarch32 | aarch64 | x64 | x86 | mips64 ...]
osType=Linux # [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...] osType=Linux # [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
pagMode=full # [full | lite] pagMode=full # [full | lite]
soMode=dynamic # [static | dynamic] soMode=dynamic # [static | dynamic]
allocator=glibc # [glibc | jemalloc]
dbName=taos # [taos | power] dbName=taos # [taos | power]
verNumber="" verNumber=""
verNumberComp="2.0.0.0" 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 do
case $arg in case $arg in
v) v)
...@@ -53,6 +54,10 @@ do ...@@ -53,6 +54,10 @@ do
#echo "dbName=$OPTARG" #echo "dbName=$OPTARG"
dbName=$(echo $OPTARG) dbName=$(echo $OPTARG)
;; ;;
a)
#echo "allocator=$OPTARG"
allocator=$(echo $OPTARG)
;;
n) n)
#echo "verNumber=$OPTARG" #echo "verNumber=$OPTARG"
verNumber=$(echo $OPTARG) verNumber=$(echo $OPTARG)
...@@ -71,20 +76,21 @@ do ...@@ -71,20 +76,21 @@ do
echo " -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...] " echo " -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...] "
echo " -V [stable | beta] " echo " -V [stable | beta] "
echo " -l [full | lite] " echo " -l [full | lite] "
echo " -a [glibc | jemalloc] "
echo " -s [static | dynamic] " echo " -s [static | dynamic] "
echo " -d [taos | power] " echo " -d [taos | power] "
echo " -n [version number] " echo " -n [version number] "
echo " -m [compatible version number] " echo " -m [compatible version number] "
exit 0 exit 0
;; ;;
?) #unknow option ?) #unknow option
echo "unkonw argument" echo "unkonw argument"
exit 1 exit 1
;; ;;
esac esac
done 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) curr_dir=$(pwd)
...@@ -118,7 +124,7 @@ function vercomp () { ...@@ -118,7 +124,7 @@ function vercomp () {
echo 0 echo 0
exit 0 exit 0
fi fi
local IFS=. local IFS=.
local i ver1=($1) ver2=($2) local i ver1=($1) ver2=($2)
...@@ -164,7 +170,7 @@ if [[ "$verMode" == "cluster" ]]; then ...@@ -164,7 +170,7 @@ if [[ "$verMode" == "cluster" ]]; then
else else
gitinfoOfInternal=NULL gitinfoOfInternal=NULL
fi fi
cd ${curr_dir} cd ${curr_dir}
# 2. cmake executable file # 2. cmake executable file
...@@ -180,12 +186,18 @@ else ...@@ -180,12 +186,18 @@ else
fi fi
cd ${compile_dir} cd ${compile_dir}
if [[ "$allocator" == "jemalloc" ]]; then
allocator_macro="-DJEMALLOC_ENABLED=true"
else
allocator_macro=""
fi
# check support cpu type # check support cpu type
if [[ "$cpuType" == "x64" ]] || [[ "$cpuType" == "aarch64" ]] || [[ "$cpuType" == "aarch32" ]] || [[ "$cpuType" == "mips64" ]] ; then if [[ "$cpuType" == "x64" ]] || [[ "$cpuType" == "aarch64" ]] || [[ "$cpuType" == "aarch32" ]] || [[ "$cpuType" == "mips64" ]] ; then
if [ "$verMode" != "cluster" ]; 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 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 fi
else else
echo "input cpuType=${cpuType} error!!!" echo "input cpuType=${cpuType} error!!!"
...@@ -199,9 +211,9 @@ cd ${curr_dir} ...@@ -199,9 +211,9 @@ cd ${curr_dir}
# 3. Call the corresponding script for packaging # 3. Call the corresponding script for packaging
if [ "$osType" != "Darwin" ]; then if [ "$osType" != "Darwin" ]; then
if [[ "$verMode" != "cluster" ]] && [[ "$cpuType" == "x64" ]] && [[ "$dbName" == "taos" ]]; then if [[ "$verMode" != "cluster" ]] && [[ "$cpuType" == "x64" ]] && [[ "$dbName" == "taos" ]]; then
ret='0' ret='0'
command -v dpkg >/dev/null 2>&1 || { ret='1'; } 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====" echo "====do deb package for the ubuntu system===="
output_dir="${top_dir}/debs" output_dir="${top_dir}/debs"
if [ -d ${output_dir} ]; then if [ -d ${output_dir} ]; then
...@@ -214,9 +226,9 @@ if [ "$osType" != "Darwin" ]; then ...@@ -214,9 +226,9 @@ if [ "$osType" != "Darwin" ]; then
echo "==========dpkg command not exist, so not release deb package!!!" echo "==========dpkg command not exist, so not release deb package!!!"
fi fi
ret='0' ret='0'
command -v rpmbuild >/dev/null 2>&1 || { ret='1'; } 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====" echo "====do rpm package for the centos system===="
output_dir="${top_dir}/rpms" output_dir="${top_dir}/rpms"
if [ -d ${output_dir} ]; then if [ -d ${output_dir} ]; then
...@@ -229,11 +241,11 @@ if [ "$osType" != "Darwin" ]; then ...@@ -229,11 +241,11 @@ if [ "$osType" != "Darwin" ]; then
echo "==========rpmbuild command not exist, so not release rpm package!!!" echo "==========rpmbuild command not exist, so not release rpm package!!!"
fi fi
fi fi
echo "====do tar.gz package for all systems====" echo "====do tar.gz package for all systems===="
cd ${script_dir}/tools 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} ./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} ./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} ${csudo} ./makearbi.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode}
......
#!/bin/bash #!/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 # is required to use systemd to manage services at boot
set -e set -e
# set -x # set -x
# -----------------------Variables definition--------------------- # -----------------------Variables definition
source_dir=$1 source_dir=$1
binary_dir=$2 binary_dir=$2
osType=$3 osType=$3
...@@ -71,9 +71,9 @@ if [ "$osType" != "Darwin" ]; then ...@@ -71,9 +71,9 @@ if [ "$osType" != "Darwin" ]; then
service_mod=0 service_mod=0
elif $(which service &> /dev/null); then elif $(which service &> /dev/null); then
service_mod=1 service_mod=1
service_config_dir="/etc/init.d" service_config_dir="/etc/init.d"
if $(which chkconfig &> /dev/null); then if $(which chkconfig &> /dev/null); then
initd_mod=1 initd_mod=1
elif $(which insserv &> /dev/null); then elif $(which insserv &> /dev/null); then
initd_mod=2 initd_mod=2
elif $(which update-rc.d &> /dev/null); then elif $(which update-rc.d &> /dev/null); then
...@@ -123,9 +123,9 @@ function kill_taosd() { ...@@ -123,9 +123,9 @@ function kill_taosd() {
function install_main_path() { function install_main_path() {
#create install main dir and all sub dir #create install main dir and all sub dir
${csudo} rm -rf ${install_main_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}/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}/connector
${csudo} mkdir -p ${install_main_dir}/driver ${csudo} mkdir -p ${install_main_dir}/driver
${csudo} mkdir -p ${install_main_dir}/examples ${csudo} mkdir -p ${install_main_dir}/examples
...@@ -176,6 +176,49 @@ function install_bin() { ...@@ -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 || : [ -x ${install_main_dir}/bin/remove_client.sh ] && ${csudo} ln -s ${install_main_dir}/bin/remove_client.sh ${bin_link_dir}/rmtaos || :
fi 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() { function install_lib() {
# Remove links # Remove links
...@@ -183,12 +226,12 @@ function install_lib() { ...@@ -183,12 +226,12 @@ function install_lib() {
if [ "$osType" != "Darwin" ]; then if [ "$osType" != "Darwin" ]; then
${csudo} rm -f ${lib64_link_dir}/libtaos.* || : ${csudo} rm -f ${lib64_link_dir}/libtaos.* || :
fi fi
if [ "$osType" != "Darwin" ]; then 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} 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 ${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 ${csudo} ln -sf ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so
if [ -d "${lib64_link_dir}" ]; then if [ -d "${lib64_link_dir}" ]; then
${csudo} ln -sf ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1 ${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 ${csudo} ln -sf ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so
...@@ -198,7 +241,9 @@ function install_lib() { ...@@ -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 ${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 ${csudo} ln -sf ${lib_link_dir}/libtaos.1.dylib ${lib_link_dir}/libtaos.dylib
fi fi
install_jemalloc
if [ "$osType" != "Darwin" ]; then if [ "$osType" != "Darwin" ]; then
${csudo} ldconfig ${csudo} ldconfig
fi fi
...@@ -206,26 +251,26 @@ function install_lib() { ...@@ -206,26 +251,26 @@ function install_lib() {
function install_header() { function install_header() {
${csudo} rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taoserror.h || : ${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} 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/taos.h ${inc_link_dir}/taos.h
${csudo} ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h ${csudo} ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
} }
function install_config() { function install_config() {
#${csudo} rm -f ${install_main_dir}/cfg/taos.cfg || : #${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} ${csudo} mkdir -p ${cfg_install_dir}
[ -f ${script_dir}/../cfg/taos.cfg ] && ${csudo} cp ${script_dir}/../cfg/taos.cfg ${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}/* ${csudo} chmod 644 ${cfg_install_dir}/*
fi fi
${csudo} cp -f ${script_dir}/../cfg/taos.cfg ${install_main_dir}/cfg/taos.cfg.org ${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} || : ${csudo} rm -rf ${log_dir} || :
if [ "$osType" != "Darwin" ]; then if [ "$osType" != "Darwin" ]; then
...@@ -239,7 +284,7 @@ function install_log() { ...@@ -239,7 +284,7 @@ function install_log() {
function install_data() { function install_data() {
${csudo} mkdir -p ${data_dir} ${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() { function install_connector() {
...@@ -254,8 +299,8 @@ function install_connector() { ...@@ -254,8 +299,8 @@ function install_connector() {
echo "WARNING: go connector not found, please check if want to use it!" echo "WARNING: go connector not found, please check if want to use it!"
fi fi
${csudo} cp -rf ${source_dir}/src/connector/python ${install_main_dir}/connector ${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() { function install_examples() {
...@@ -264,8 +309,8 @@ function install_examples() { ...@@ -264,8 +309,8 @@ function install_examples() {
function clean_service_on_sysvinit() { function clean_service_on_sysvinit() {
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start" #restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
#${csudo} sed -i "\|${restart_config_str}|d" /etc/inittab || : #${csudo} sed -i "\|${restart_config_str}|d" /etc/inittab || :
if pidof taosd &> /dev/null; then if pidof taosd &> /dev/null; then
${csudo} service taosd stop || : ${csudo} service taosd stop || :
fi fi
...@@ -277,9 +322,9 @@ function clean_service_on_sysvinit() { ...@@ -277,9 +322,9 @@ function clean_service_on_sysvinit() {
elif ((${initd_mod}==3)); then elif ((${initd_mod}==3)); then
${csudo} update-rc.d -f taosd remove || : ${csudo} update-rc.d -f taosd remove || :
fi fi
${csudo} rm -f ${service_config_dir}/taosd || : ${csudo} rm -f ${service_config_dir}/taosd || :
if $(which init &> /dev/null); then if $(which init &> /dev/null); then
${csudo} init q || : ${csudo} init q || :
fi fi
...@@ -298,10 +343,10 @@ function install_service_on_sysvinit() { ...@@ -298,10 +343,10 @@ function install_service_on_sysvinit() {
${csudo} cp -f ${script_dir}/../rpm/taosd ${install_main_dir}/init.d ${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 ${csudo} cp ${script_dir}/../rpm/taosd ${service_config_dir} && ${csudo} chmod a+x ${service_config_dir}/taosd
fi fi
#restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start" #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" #${csudo} grep -q -F "$restart_config_str" /etc/inittab || ${csudo} bash -c "echo '${restart_config_str}' >> /etc/inittab"
if ((${initd_mod}==1)); then if ((${initd_mod}==1)); then
${csudo} chkconfig --add taosd || : ${csudo} chkconfig --add taosd || :
${csudo} chkconfig --level 2345 taosd on || : ${csudo} chkconfig --level 2345 taosd on || :
...@@ -323,7 +368,7 @@ function clean_service_on_systemd() { ...@@ -323,7 +368,7 @@ function clean_service_on_systemd() {
${csudo} systemctl disable taosd &> /dev/null || echo &> /dev/null ${csudo} systemctl disable taosd &> /dev/null || echo &> /dev/null
${csudo} rm -f ${taosd_service_config} ${csudo} rm -f ${taosd_service_config}
} }
# taos:2345:respawn:/etc/init.d/taosd start # taos:2345:respawn:/etc/init.d/taosd start
...@@ -383,7 +428,7 @@ function update_TDengine() { ...@@ -383,7 +428,7 @@ function update_TDengine() {
sleep 1 sleep 1
fi fi
fi fi
install_main_path install_main_path
install_log install_log
...@@ -431,16 +476,16 @@ function install_TDengine() { ...@@ -431,16 +476,16 @@ function install_TDengine() {
# Start to install # Start to install
if [ "$osType" != "Darwin" ]; then if [ "$osType" != "Darwin" ]; then
echo -e "${GREEN}Start to install TDEngine...${NC}" echo -e "${GREEN}Start to install TDEngine...${NC}"
else else
echo -e "${GREEN}Start to install TDEngine Client ...${NC}" echo -e "${GREEN}Start to install TDEngine Client ...${NC}"
fi fi
install_main_path install_main_path
if [ "$osType" != "Darwin" ]; then if [ "$osType" != "Darwin" ]; then
install_data install_data
fi fi
install_log install_log
install_header install_header
install_lib install_lib
install_connector install_connector
...@@ -452,7 +497,7 @@ function install_TDengine() { ...@@ -452,7 +497,7 @@ function install_TDengine() {
install_service install_service
fi fi
install_config install_config
if [ "$osType" != "Darwin" ]; then if [ "$osType" != "Darwin" ]; then
# Ask if to start the service # Ask if to start the service
......
...@@ -123,6 +123,8 @@ int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, i ...@@ -123,6 +123,8 @@ int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, i
*/ */
bool tscIsPointInterpQuery(SQueryInfo* pQueryInfo); bool tscIsPointInterpQuery(SQueryInfo* pQueryInfo);
bool tscIsTWAQuery(SQueryInfo* pQueryInfo); bool tscIsTWAQuery(SQueryInfo* pQueryInfo);
bool tscIsSessionWindowQuery(SQueryInfo* pQueryInfo);
bool tscIsSecondStageQuery(SQueryInfo* pQueryInfo);
bool tsIsArithmeticQueryOnAggResult(SQueryInfo* pQueryInfo); bool tsIsArithmeticQueryOnAggResult(SQueryInfo* pQueryInfo);
bool tscGroupbyColumn(SQueryInfo* pQueryInfo); bool tscGroupbyColumn(SQueryInfo* pQueryInfo);
bool tscIsTopBotQuery(SQueryInfo* pQueryInfo); bool tscIsTopBotQuery(SQueryInfo* pQueryInfo);
......
...@@ -1286,7 +1286,7 @@ int stmtParseInsertTbTags(SSqlObj* pSql, STscStmt* pStmt) { ...@@ -1286,7 +1286,7 @@ int stmtParseInsertTbTags(SSqlObj* pSql, STscStmt* pStmt) {
} }
sToken = tStrGetToken(pCmd->insertParam.sql, &index, false); 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; return TSDB_CODE_TSC_INVALID_OPERATION;
} }
......
...@@ -90,6 +90,7 @@ static int32_t validateGroupbyNode(SQueryInfo* pQueryInfo, SArray* pList, SSqlCm ...@@ -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 validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pSqlNode);
static int32_t parseIntervalOffset(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SStrToken* offsetToken); static int32_t parseIntervalOffset(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SStrToken* offsetToken);
static int32_t parseSlidingClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SStrToken* pSliding); 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); static int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSqlExprItem* pItem);
...@@ -858,6 +859,59 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS ...@@ -858,6 +859,59 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS
// The following part is used to check for the invalid query expression. // The following part is used to check for the invalid query expression.
return checkInvalidExprForTimeWindow(pCmd, pQueryInfo); 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) { int32_t validateSessionNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode * pSqlNode) {
const char* msg1 = "gap should be fixed time window"; const char* msg1 = "gap should be fixed time window";
...@@ -892,11 +946,17 @@ int32_t validateSessionNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode * pS ...@@ -892,11 +946,17 @@ int32_t validateSessionNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode * pS
if (pQueryInfo->sessionWindow.gap != 0 && pQueryInfo->interval.interval != 0) { if (pQueryInfo->sessionWindow.gap != 0 && pQueryInfo->interval.interval != 0) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
} }
if (pQueryInfo->sessionWindow.gap == 0) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4);
}
SColumnIndex index = COLUMN_INDEX_INITIALIZER; SColumnIndex index = COLUMN_INDEX_INITIALIZER;
if (getColumnIndexByName(pCmd, col, pQueryInfo, &index) != TSDB_CODE_SUCCESS) { if (getColumnIndexByName(pCmd, col, pQueryInfo, &index) != TSDB_CODE_SUCCESS) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
} }
if (index.columnIndex != PRIMARYKEY_TIMESTAMP_COL_INDEX) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
pQueryInfo->sessionWindow.primaryColId = PRIMARYKEY_TIMESTAMP_COL_INDEX; pQueryInfo->sessionWindow.primaryColId = PRIMARYKEY_TIMESTAMP_COL_INDEX;
...@@ -2903,6 +2963,9 @@ bool hasUnsupportFunctionsForSTableQuery(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) ...@@ -2903,6 +2963,9 @@ bool hasUnsupportFunctionsForSTableQuery(SSqlCmd* pCmd, SQueryInfo* pQueryInfo)
return true; return true;
} }
} }
} else if (tscIsSessionWindowQuery(pQueryInfo)) {
invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
return true;
} }
return false; return false;
...@@ -6163,7 +6226,7 @@ static int32_t doTagFunctionCheck(SQueryInfo* pQueryInfo) { ...@@ -6163,7 +6226,7 @@ static int32_t doTagFunctionCheck(SQueryInfo* pQueryInfo) {
int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) { int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) {
const char* msg1 = "functions/columns not allowed in group by query"; const char* msg1 = "functions/columns not allowed in group by query";
const char* msg2 = "projection query on columns not allowed"; 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* msg4 = "retrieve tags not compatible with group by or interval query";
const char* msg5 = "functions can not be mixed up"; const char* msg5 = "functions can not be mixed up";
...@@ -6179,6 +6242,9 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) { ...@@ -6179,6 +6242,9 @@ int32_t doFunctionsCompatibleCheck(SSqlCmd* pCmd, SQueryInfo* pQueryInfo) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
} }
if (tscIsProjectionQuery(pQueryInfo) && tscIsSessionWindowQuery(pQueryInfo)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
if (pQueryInfo->groupbyExpr.numOfGroupCols > 0) { if (pQueryInfo->groupbyExpr.numOfGroupCols > 0) {
// check if all the tags prj columns belongs to the group by columns // check if all the tags prj columns belongs to the group by columns
...@@ -6748,6 +6814,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) { ...@@ -6748,6 +6814,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
return TSDB_CODE_TSC_INVALID_OPERATION; return TSDB_CODE_TSC_INVALID_OPERATION;
} }
if (isTimeWindowQuery(pQueryInfo) && (validateFunctionsInIntervalOrGroupbyQuery(pCmd, pQueryInfo) != TSDB_CODE_SUCCESS)) { if (isTimeWindowQuery(pQueryInfo) && (validateFunctionsInIntervalOrGroupbyQuery(pCmd, pQueryInfo) != TSDB_CODE_SUCCESS)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
} }
...@@ -7536,7 +7603,10 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf ...@@ -7536,7 +7603,10 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf
TSDB_CODE_SUCCESS) { TSDB_CODE_SUCCESS) {
return TSDB_CODE_TSC_INVALID_OPERATION; 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 // set order by info
if (validateOrderbyNode(pCmd, pQueryInfo, pSqlNode, tscGetTableSchema(pTableMetaInfo->pTableMeta)) != if (validateOrderbyNode(pCmd, pQueryInfo, pSqlNode, tscGetTableSchema(pTableMetaInfo->pTableMeta)) !=
TSDB_CODE_SUCCESS) { TSDB_CODE_SUCCESS) {
...@@ -7577,6 +7647,10 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf ...@@ -7577,6 +7647,10 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf
* transfer sql functions that need secondary merge into another format * transfer sql functions that need secondary merge into another format
* in dealing with super table queries such as: count/first/last * 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) { if (isSTable) {
tscTansformFuncForSTableQuery(pQueryInfo); tscTansformFuncForSTableQuery(pQueryInfo);
if (hasUnsupportFunctionsForSTableQuery(pCmd, pQueryInfo)) { if (hasUnsupportFunctionsForSTableQuery(pCmd, pQueryInfo)) {
...@@ -7584,10 +7658,6 @@ int32_t validateSqlNode(SSqlObj* pSql, SSqlNode* pSqlNode, SQueryInfo* pQueryInf ...@@ -7584,10 +7658,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 // no result due to invalid query time range
if (pQueryInfo->window.skey > pQueryInfo->window.ekey) { if (pQueryInfo->window.skey > pQueryInfo->window.ekey) {
pQueryInfo->command = TSDB_SQL_RETRIEVE_EMPTY_RESULT; pQueryInfo->command = TSDB_SQL_RETRIEVE_EMPTY_RESULT;
......
...@@ -857,6 +857,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) { ...@@ -857,6 +857,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pQueryMsg->simpleAgg = query.simpleAgg; pQueryMsg->simpleAgg = query.simpleAgg;
pQueryMsg->pointInterpQuery = query.pointInterpQuery; pQueryMsg->pointInterpQuery = query.pointInterpQuery;
pQueryMsg->needReverseScan = query.needReverseScan; pQueryMsg->needReverseScan = query.needReverseScan;
pQueryMsg->stateWindow = query.stateWindow;
pQueryMsg->numOfTags = htonl(numOfTags); pQueryMsg->numOfTags = htonl(numOfTags);
pQueryMsg->sqlstrLen = htonl(sqlLen); pQueryMsg->sqlstrLen = htonl(sqlLen);
......
...@@ -434,6 +434,9 @@ bool tscIsTWAQuery(SQueryInfo* pQueryInfo) { ...@@ -434,6 +434,9 @@ bool tscIsTWAQuery(SQueryInfo* pQueryInfo) {
return false; return false;
} }
bool tscIsSessionWindowQuery(SQueryInfo* pQueryInfo) {
return pQueryInfo->sessionWindow.gap > 0;
}
bool tscNeedReverseScan(SQueryInfo* pQueryInfo) { bool tscNeedReverseScan(SQueryInfo* pQueryInfo) {
size_t numOfExprs = tscNumOfExprs(pQueryInfo); size_t numOfExprs = tscNumOfExprs(pQueryInfo);
...@@ -4202,11 +4205,13 @@ int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAt ...@@ -4202,11 +4205,13 @@ int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAt
pQueryAttr->simpleAgg = isSimpleAggregate(pQueryInfo); pQueryAttr->simpleAgg = isSimpleAggregate(pQueryInfo);
pQueryAttr->needReverseScan = tscNeedReverseScan(pQueryInfo); pQueryAttr->needReverseScan = tscNeedReverseScan(pQueryInfo);
pQueryAttr->stableQuery = QUERY_IS_STABLE_QUERY(pQueryInfo->type); pQueryAttr->stableQuery = QUERY_IS_STABLE_QUERY(pQueryInfo->type);
pQueryAttr->groupbyColumn = tscGroupbyColumn(pQueryInfo); pQueryAttr->groupbyColumn = (!pQueryInfo->stateWindow) && tscGroupbyColumn(pQueryInfo);
pQueryAttr->queryBlockDist = isBlockDistQuery(pQueryInfo); pQueryAttr->queryBlockDist = isBlockDistQuery(pQueryInfo);
pQueryAttr->pointInterpQuery = tscIsPointInterpQuery(pQueryInfo); pQueryAttr->pointInterpQuery = tscIsPointInterpQuery(pQueryInfo);
pQueryAttr->timeWindowInterpo = timeWindowInterpoRequired(pQueryInfo); pQueryAttr->timeWindowInterpo = timeWindowInterpoRequired(pQueryInfo);
pQueryAttr->distinctTag = pQueryInfo->distinctTag; pQueryAttr->distinctTag = pQueryInfo->distinctTag;
pQueryAttr->sw = pQueryInfo->sessionWindow;
pQueryAttr->stateWindow = pQueryInfo->stateWindow;
pQueryAttr->numOfCols = numOfCols; pQueryAttr->numOfCols = numOfCols;
pQueryAttr->numOfOutput = numOfOutput; pQueryAttr->numOfOutput = numOfOutput;
...@@ -4214,8 +4219,8 @@ int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAt ...@@ -4214,8 +4219,8 @@ int32_t tscCreateQueryFromQueryInfo(SQueryInfo* pQueryInfo, SQueryAttr* pQueryAt
pQueryAttr->slimit = pQueryInfo->slimit; pQueryAttr->slimit = pQueryInfo->slimit;
pQueryAttr->order = pQueryInfo->order; pQueryAttr->order = pQueryInfo->order;
pQueryAttr->fillType = pQueryInfo->fillType; pQueryAttr->fillType = pQueryInfo->fillType;
pQueryAttr->groupbyColumn = tscGroupbyColumn(pQueryInfo);
pQueryAttr->havingNum = pQueryInfo->havingFieldNum; pQueryAttr->havingNum = pQueryInfo->havingFieldNum;
if (pQueryInfo->order.order == TSDB_ORDER_ASC) { // TODO refactor if (pQueryInfo->order.order == TSDB_ORDER_ASC) { // TODO refactor
pQueryAttr->window = pQueryInfo->window; pQueryAttr->window = pQueryInfo->window;
......
Subproject commit 32e2c97a4cf7bedaa99f5d6dd8cb036e7f4470df Subproject commit 3530c6df097134a410bacec6b3cd013ef38a61aa
...@@ -10,8 +10,15 @@ INCLUDE_DIRECTORIES(${TD_ENTERPRISE_DIR}/src/inc) ...@@ -10,8 +10,15 @@ INCLUDE_DIRECTORIES(${TD_ENTERPRISE_DIR}/src/inc)
INCLUDE_DIRECTORIES(inc) INCLUDE_DIRECTORIES(inc)
AUX_SOURCE_DIRECTORY(src SRC) 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}) 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) IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(taosd taos_static) TARGET_LINK_LIBRARIES(taosd taos_static)
......
...@@ -473,6 +473,7 @@ typedef struct { ...@@ -473,6 +473,7 @@ typedef struct {
bool simpleAgg; bool simpleAgg;
bool pointInterpQuery; // point interpolation query bool pointInterpQuery; // point interpolation query
bool needReverseScan; // need reverse scan bool needReverseScan; // need reverse scan
bool stateWindow; // state window flag
STimeWindow window; STimeWindow window;
int32_t numOfTables; int32_t numOfTables;
......
...@@ -136,74 +136,74 @@ ...@@ -136,74 +136,74 @@
#define TK_VARIABLE 117 #define TK_VARIABLE 117
#define TK_INTERVAL 118 #define TK_INTERVAL 118
#define TK_SESSION 119 #define TK_SESSION 119
#define TK_FILL 120 #define TK_STATE_WINDOW 120
#define TK_SLIDING 121 #define TK_FILL 121
#define TK_ORDER 122 #define TK_SLIDING 122
#define TK_BY 123 #define TK_ORDER 123
#define TK_ASC 124 #define TK_BY 124
#define TK_DESC 125 #define TK_ASC 125
#define TK_GROUP 126 #define TK_DESC 126
#define TK_HAVING 127 #define TK_GROUP 127
#define TK_LIMIT 128 #define TK_HAVING 128
#define TK_OFFSET 129 #define TK_LIMIT 129
#define TK_SLIMIT 130 #define TK_OFFSET 130
#define TK_SOFFSET 131 #define TK_SLIMIT 131
#define TK_WHERE 132 #define TK_SOFFSET 132
#define TK_NOW 133 #define TK_WHERE 133
#define TK_RESET 134 #define TK_NOW 134
#define TK_QUERY 135 #define TK_RESET 135
#define TK_SYNCDB 136 #define TK_QUERY 136
#define TK_ADD 137 #define TK_SYNCDB 137
#define TK_COLUMN 138 #define TK_ADD 138
#define TK_TAG 139 #define TK_COLUMN 139
#define TK_CHANGE 140 #define TK_TAG 140
#define TK_SET 141 #define TK_CHANGE 141
#define TK_KILL 142 #define TK_SET 142
#define TK_CONNECTION 143 #define TK_KILL 143
#define TK_STREAM 144 #define TK_CONNECTION 144
#define TK_COLON 145 #define TK_STREAM 145
#define TK_ABORT 146 #define TK_COLON 146
#define TK_AFTER 147 #define TK_ABORT 147
#define TK_ATTACH 148 #define TK_AFTER 148
#define TK_BEFORE 149 #define TK_ATTACH 149
#define TK_BEGIN 150 #define TK_BEFORE 150
#define TK_CASCADE 151 #define TK_BEGIN 151
#define TK_CLUSTER 152 #define TK_CASCADE 152
#define TK_CONFLICT 153 #define TK_CLUSTER 153
#define TK_COPY 154 #define TK_CONFLICT 154
#define TK_DEFERRED 155 #define TK_COPY 155
#define TK_DELIMITERS 156 #define TK_DEFERRED 156
#define TK_DETACH 157 #define TK_DELIMITERS 157
#define TK_EACH 158 #define TK_DETACH 158
#define TK_END 159 #define TK_EACH 159
#define TK_EXPLAIN 160 #define TK_END 160
#define TK_FAIL 161 #define TK_EXPLAIN 161
#define TK_FOR 162 #define TK_FAIL 162
#define TK_IGNORE 163 #define TK_FOR 163
#define TK_IMMEDIATE 164 #define TK_IGNORE 164
#define TK_INITIALLY 165 #define TK_IMMEDIATE 165
#define TK_INSTEAD 166 #define TK_INITIALLY 166
#define TK_MATCH 167 #define TK_INSTEAD 167
#define TK_KEY 168 #define TK_MATCH 168
#define TK_OF 169 #define TK_KEY 169
#define TK_RAISE 170 #define TK_OF 170
#define TK_REPLACE 171 #define TK_RAISE 171
#define TK_RESTRICT 172 #define TK_REPLACE 172
#define TK_ROW 173 #define TK_RESTRICT 173
#define TK_STATEMENT 174 #define TK_ROW 174
#define TK_TRIGGER 175 #define TK_STATEMENT 175
#define TK_VIEW 176 #define TK_TRIGGER 176
#define TK_SEMI 177 #define TK_VIEW 177
#define TK_NONE 178 #define TK_SEMI 178
#define TK_PREV 179 #define TK_NONE 179
#define TK_LINEAR 180 #define TK_PREV 180
#define TK_IMPORT 181 #define TK_LINEAR 181
#define TK_TBNAME 182 #define TK_IMPORT 182
#define TK_JOIN 183 #define TK_TBNAME 183
#define TK_INSERT 184 #define TK_JOIN 184
#define TK_INTO 185 #define TK_INSERT 185
#define TK_VALUES 186 #define TK_INTO 186
#define TK_VALUES 187
#define TK_SPACE 300 #define TK_SPACE 300
#define TK_COMMENT 301 #define TK_COMMENT 301
......
...@@ -11,10 +11,17 @@ IF (TD_LINUX) ...@@ -11,10 +11,17 @@ IF (TD_LINUX)
LIST(REMOVE_ITEM SRC ./src/shellDarwin.c) LIST(REMOVE_ITEM SRC ./src/shellDarwin.c)
ADD_EXECUTABLE(shell ${SRC}) 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) IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(shell taos_static) TARGET_LINK_LIBRARIES(shell taos_static ${LINK_JEMALLOC})
ELSE () ELSE ()
TARGET_LINK_LIBRARIES(shell taos) TARGET_LINK_LIBRARIES(shell taos ${LINK_JEMALLOC})
ENDIF () ENDIF ()
SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos) SET_TARGET_PROPERTIES(shell PROPERTIES OUTPUT_NAME taos)
......
...@@ -55,14 +55,21 @@ ENDIF () ...@@ -55,14 +55,21 @@ ENDIF ()
MESSAGE("TD_VERSION_NUMBER is:" ${TD_VERSION_NUMBER}) MESSAGE("TD_VERSION_NUMBER is:" ${TD_VERSION_NUMBER})
ADD_DEFINITIONS(-DTD_VERNUMBER="${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) IF (TD_LINUX)
AUX_SOURCE_DIRECTORY(. SRC) AUX_SOURCE_DIRECTORY(. SRC)
ADD_EXECUTABLE(taosdemo ${SRC}) ADD_EXECUTABLE(taosdemo ${SRC})
IF (TD_SOMODE_STATIC) IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(taosdemo taos_static cJson) TARGET_LINK_LIBRARIES(taosdemo taos_static cJson ${LINK_JEMALLOC})
ELSE () ELSE ()
TARGET_LINK_LIBRARIES(taosdemo taos cJson) TARGET_LINK_LIBRARIES(taosdemo taos cJson ${LINK_JEMALLOC})
ENDIF () ENDIF ()
ELSEIF (TD_WINDOWS) ELSEIF (TD_WINDOWS)
AUX_SOURCE_DIRECTORY(. SRC) AUX_SOURCE_DIRECTORY(. SRC)
...@@ -71,7 +78,7 @@ ELSEIF (TD_WINDOWS) ...@@ -71,7 +78,7 @@ ELSEIF (TD_WINDOWS)
IF (TD_SOMODE_STATIC) IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(taosdemo taos_static cJson) TARGET_LINK_LIBRARIES(taosdemo taos_static cJson)
ELSE () ELSE ()
TARGET_LINK_LIBRARIES(taosdemo taos cJson}) TARGET_LINK_LIBRARIES(taosdemo taos cJson)
ENDIF () ENDIF ()
ELSEIF (TD_DARWIN) ELSEIF (TD_DARWIN)
# missing a few dependencies, such as <argp.h> # missing a few dependencies, such as <argp.h>
......
...@@ -22,6 +22,10 @@ ...@@ -22,6 +22,10 @@
extern "C" { extern "C" {
#endif #endif
#ifdef TD_JEMALLOC_ENABLED
#include <jemalloc/jemalloc.h>
#endif
typedef enum { typedef enum {
TAOS_ALLOC_MODE_DEFAULT = 0, TAOS_ALLOC_MODE_DEFAULT = 0,
TAOS_ALLOC_MODE_RANDOM_FAIL = 1, TAOS_ALLOC_MODE_RANDOM_FAIL = 1,
......
...@@ -189,6 +189,7 @@ typedef struct SQueryAttr { ...@@ -189,6 +189,7 @@ typedef struct SQueryAttr {
bool pointInterpQuery; // point interpolation query bool pointInterpQuery; // point interpolation query
bool needReverseScan; // need reverse scan bool needReverseScan; // need reverse scan
bool distinctTag; // distinct tag query bool distinctTag; // distinct tag query
bool stateWindow; // window State on sub/normal table
int32_t interBufSize; // intermediate buffer sizse int32_t interBufSize; // intermediate buffer sizse
int32_t havingNum; // having expr number int32_t havingNum; // having expr number
...@@ -296,6 +297,7 @@ enum OPERATOR_TYPE_E { ...@@ -296,6 +297,7 @@ enum OPERATOR_TYPE_E {
OP_Filter = 19, OP_Filter = 19,
OP_Distinct = 20, OP_Distinct = 20,
OP_Join = 21, OP_Join = 21,
OP_StateWindow = 22,
}; };
typedef struct SOperatorInfo { typedef struct SOperatorInfo {
...@@ -460,6 +462,16 @@ typedef struct SSWindowOperatorInfo { ...@@ -460,6 +462,16 @@ typedef struct SSWindowOperatorInfo {
int32_t start; // start row index int32_t start; // start row index
} SSWindowOperatorInfo; } 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 { typedef struct SDistinctOperatorInfo {
SHashObj *pSet; SHashObj *pSet;
SSDataBlock *pRes; SSDataBlock *pRes;
...@@ -509,6 +521,7 @@ SOperatorInfo* createDistinctOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperat ...@@ -509,6 +521,7 @@ SOperatorInfo* createDistinctOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperat
SOperatorInfo* createTableBlockInfoScanOperator(void* pTsdbQueryHandle, SQueryRuntimeEnv* pRuntimeEnv); SOperatorInfo* createTableBlockInfoScanOperator(void* pTsdbQueryHandle, SQueryRuntimeEnv* pRuntimeEnv);
SOperatorInfo* createMultiwaySortOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SExprInfo* pExpr, int32_t numOfOutput, SOperatorInfo* createMultiwaySortOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SExprInfo* pExpr, int32_t numOfOutput,
int32_t numOfRows, void* merger, bool groupMix); 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* 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* createSLimitOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput, void* merger);
SOperatorInfo* createFilterOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, SOperatorInfo* createFilterOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr,
......
...@@ -89,6 +89,10 @@ typedef struct SSessionWindowVal { ...@@ -89,6 +89,10 @@ typedef struct SSessionWindowVal {
SStrToken gap; SStrToken gap;
} SSessionWindowVal; } SSessionWindowVal;
typedef struct SWindowStateVal {
SStrToken col;
} SWindowStateVal;
struct SRelationInfo; struct SRelationInfo;
typedef struct SSqlNode { typedef struct SSqlNode {
...@@ -100,6 +104,7 @@ typedef struct SSqlNode { ...@@ -100,6 +104,7 @@ typedef struct SSqlNode {
SArray *fillType; // fill type[optional], SArray<tVariantListItem> SArray *fillType; // fill type[optional], SArray<tVariantListItem>
SIntervalVal interval; // (interval, interval_offset) [optional] SIntervalVal interval; // (interval, interval_offset) [optional]
SSessionWindowVal sessionVal; // session window [optional] SSessionWindowVal sessionVal; // session window [optional]
SWindowStateVal windowstateVal; // window_state(col) [optional]
SStrToken sliding; // sliding window [optional] SStrToken sliding; // sliding window [optional]
SLimitVal limit; // limit offset [optional] SLimitVal limit; // limit offset [optional]
SLimitVal slimit; // group limit offset [optional] SLimitVal slimit; // group limit offset [optional]
...@@ -275,7 +280,7 @@ SArray *tSqlExprListAppend(SArray *pList, tSqlExpr *pNode, SStrToken *pDistinc ...@@ -275,7 +280,7 @@ SArray *tSqlExprListAppend(SArray *pList, tSqlExpr *pNode, SStrToken *pDistinc
void tSqlExprListDestroy(SArray *pList); void tSqlExprListDestroy(SArray *pList);
SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelationInfo *pFrom, tSqlExpr *pWhere, 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); SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *pgLimit, tSqlExpr *pHaving);
int32_t tSqlExprCompare(tSqlExpr *left, tSqlExpr *right); int32_t tSqlExprCompare(tSqlExpr *left, tSqlExpr *right);
......
...@@ -138,6 +138,7 @@ typedef struct SQueryInfo { ...@@ -138,6 +138,7 @@ typedef struct SQueryInfo {
bool hasFilter; bool hasFilter;
bool onlyTagQuery; bool onlyTagQuery;
bool orderProjectQuery; bool orderProjectQuery;
bool stateWindow;
} SQueryInfo; } SQueryInfo;
/** /**
......
...@@ -456,8 +456,8 @@ tagitem(A) ::= PLUS(X) FLOAT(Y). { ...@@ -456,8 +456,8 @@ tagitem(A) ::= PLUS(X) FLOAT(Y). {
//////////////////////// The SELECT statement ///////////////////////////////// //////////////////////// The SELECT statement /////////////////////////////////
%type select {SSqlNode*} %type select {SSqlNode*}
%destructor select {destroySqlNode($$);} %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). { 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, &S, F, &L, &G, N); A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &D, &S, F, &L, &G, N);
} }
select(A) ::= LP select(B) RP. {A = B;} select(A) ::= LP select(B) RP. {A = B;}
...@@ -475,7 +475,7 @@ cmd ::= union(X). { setSqlInfo(pInfo, X, NULL, TSDB_SQL_SELECT); } ...@@ -475,7 +475,7 @@ cmd ::= union(X). { setSqlInfo(pInfo, X, NULL, TSDB_SQL_SELECT); }
// select client_version() // select client_version()
// select server_state() // select server_state()
select(A) ::= SELECT(T) selcollist(W). { 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 // 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. { ...@@ -558,6 +558,11 @@ session_option(X) ::= SESSION LP ids(V) cpxName(Z) COMMA tmvar(Y) RP. {
X.col = V; X.col = V;
X.gap = Y; 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*} %type fill_opt {SArray*}
%destructor fill_opt {taosArrayDestroy($$);} %destructor fill_opt {taosArrayDestroy($$);}
......
...@@ -3299,8 +3299,12 @@ static void col_project_function(SQLFunctionCtx *pCtx) { ...@@ -3299,8 +3299,12 @@ static void col_project_function(SQLFunctionCtx *pCtx) {
if (pCtx->numOfParams == 2) { if (pCtx->numOfParams == 2) {
return; 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); char *pData = GET_INPUT_DATA_LIST(pCtx);
if (pCtx->order == TSDB_ORDER_ASC) { if (pCtx->order == TSDB_ORDER_ASC) {
......
...@@ -189,12 +189,16 @@ static void destroySFillOperatorInfo(void* param, int32_t numOfOutput); ...@@ -189,12 +189,16 @@ static void destroySFillOperatorInfo(void* param, int32_t numOfOutput);
static void destroyGroupbyOperatorInfo(void* param, int32_t numOfOutput); static void destroyGroupbyOperatorInfo(void* param, int32_t numOfOutput);
static void destroyArithOperatorInfo(void* param, int32_t numOfOutput); static void destroyArithOperatorInfo(void* param, int32_t numOfOutput);
static void destroyTagScanOperatorInfo(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 void destroyOperatorInfo(SOperatorInfo* pOperator);
static int32_t doCopyToSDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SGroupResInfo* pGroupResInfo, int32_t orderType, SSDataBlock* pBlock); static int32_t doCopyToSDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SGroupResInfo* pGroupResInfo, int32_t orderType, SSDataBlock* pBlock);
static int32_t getGroupbyColumnIndex(SGroupbyExpr *pGroupbyExpr, SSDataBlock* pDataBlock); 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 initCtxOutputBuffer(SQLFunctionCtx* pCtx, int32_t size);
static void getAlignQueryTimeWindow(SQueryAttr *pQueryAttr, int64_t key, int64_t keyFirst, int64_t keyLast, STimeWindow *win); 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 ...@@ -731,7 +735,6 @@ static void doApplyFunctions(SQueryRuntimeEnv* pRuntimeEnv, SQLFunctionCtx* pCtx
if (pCtx[k].preAggVals.isSet && forwardStep < numOfTotal) { if (pCtx[k].preAggVals.isSet && forwardStep < numOfTotal) {
pCtx[k].preAggVals.isSet = false; pCtx[k].preAggVals.isSet = false;
} }
if (functionNeedToExecute(pRuntimeEnv, &pCtx[k], functionId)) { if (functionNeedToExecute(pRuntimeEnv, &pCtx[k], functionId)) {
aAggs[functionId].xFunction(&pCtx[k]); aAggs[functionId].xFunction(&pCtx[k]);
} }
...@@ -1299,7 +1302,7 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SGroupbyOperatorInfo *pIn ...@@ -1299,7 +1302,7 @@ static void doHashGroupbyAgg(SOperatorInfo* pOperator, SGroupbyOperatorInfo *pIn
} }
int32_t ret = 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 if (ret != TSDB_CODE_SUCCESS) { // null data, too many state code
longjmp(pRuntimeEnv->env, TSDB_CODE_QRY_APP_ERROR); longjmp(pRuntimeEnv->env, TSDB_CODE_QRY_APP_ERROR);
} }
...@@ -1338,12 +1341,16 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf ...@@ -1338,12 +1341,16 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf
pInfo->start = j; pInfo->start = j;
} else if (tsList[j] - pInfo->prevTs <= gap) { } else if (tsList[j] - pInfo->prevTs <= gap) {
pInfo->curWindow.ekey = tsList[j]; pInfo->curWindow.ekey = tsList[j];
pInfo->prevTs = tsList[j]; //pInfo->prevTs = tsList[j];
pInfo->numOfRows += 1; pInfo->numOfRows += 1;
pInfo->start = j; if (j == 0 && pInfo->start != 0) {
pInfo->numOfRows = 1;
pInfo->start = 0;
}
} else { // start a new session window } else { // start a new session window
SResultRow* pResult = NULL; SResultRow* pResult = NULL;
pInfo->curWindow.ekey = pInfo->curWindow.skey;
int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan, int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan,
&pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput, &pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput,
pBInfo->rowCellInfoOffset); pBInfo->rowCellInfoOffset);
...@@ -1364,6 +1371,7 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf ...@@ -1364,6 +1371,7 @@ static void doSessionWindowAggImpl(SOperatorInfo* pOperator, SSWindowOperatorInf
SResultRow* pResult = NULL; SResultRow* pResult = NULL;
pInfo->curWindow.ekey = pInfo->curWindow.skey;
int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan, int32_t ret = setWindowOutputBufByKey(pRuntimeEnv, &pBInfo->resultRowInfo, &pInfo->curWindow, masterScan,
&pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput, &pResult, item->groupIndex, pBInfo->pCtx, pOperator->numOfOutput,
pBInfo->rowCellInfoOffset); pBInfo->rowCellInfoOffset);
...@@ -1391,12 +1399,12 @@ static void setResultRowKey(SResultRow* pResultRow, char* pData, int16_t type) { ...@@ -1391,12 +1399,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; SDiskbasedResultBuf *pResultBuf = pRuntimeEnv->pResultBuf;
int32_t *rowCellInfoOffset = pInfo->binfo.rowCellInfoOffset; int32_t *rowCellInfoOffset = binfo->rowCellInfoOffset;
SResultRowInfo *pResultRowInfo = &pInfo->binfo.resultRowInfo; SResultRowInfo *pResultRowInfo = &binfo->resultRowInfo;
SQLFunctionCtx *pCtx = pInfo->binfo.pCtx; SQLFunctionCtx *pCtx = binfo->pCtx;
// not assign result buffer yet, add new result buffer, TODO remove it // not assign result buffer yet, add new result buffer, TODO remove it
char* d = pData; char* d = pData;
...@@ -1767,6 +1775,11 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf ...@@ -1767,6 +1775,11 @@ static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int32_t numOf
} }
break; 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: { case OP_Limit: {
pRuntimeEnv->proot = createLimitOperatorInfo(pRuntimeEnv, pRuntimeEnv->proot); pRuntimeEnv->proot = createLimitOperatorInfo(pRuntimeEnv, pRuntimeEnv->proot);
...@@ -2109,6 +2122,8 @@ static bool onlyFirstQuery(SQueryAttr *pQueryAttr) { return onlyOneQueryType(pQu ...@@ -2109,6 +2122,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 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) { static int32_t updateBlockLoadStatus(SQueryAttr *pQuery, int32_t status) {
bool hasFirstLastFunc = false; bool hasFirstLastFunc = false;
bool hasOtherFunc = false; bool hasOtherFunc = false;
...@@ -2212,7 +2227,7 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo ...@@ -2212,7 +2227,7 @@ static void changeExecuteScanOrder(SQInfo *pQInfo, SQueryTableMsg* pQueryMsg, bo
} }
pQueryAttr->order.order = TSDB_ORDER_ASC; pQueryAttr->order.order = TSDB_ORDER_ASC;
} else if (onlyLastQuery(pQueryAttr)) { } else if (onlyLastQuery(pQueryAttr) && notContainSessionOrStateWindow(pQueryAttr)) {
if (QUERY_IS_ASC_QUERY(pQueryAttr)) { if (QUERY_IS_ASC_QUERY(pQueryAttr)) {
qDebug(msg, pQInfo, "only-last", pQueryAttr->order.order, TSDB_ORDER_DESC, pQueryAttr->window.skey, qDebug(msg, pQInfo, "only-last", pQueryAttr->order.order, TSDB_ORDER_DESC, pQueryAttr->window.skey,
pQueryAttr->window.ekey, pQueryAttr->window.ekey, pQueryAttr->window.skey); pQueryAttr->window.ekey, pQueryAttr->window.ekey, pQueryAttr->window.skey);
...@@ -3204,7 +3219,7 @@ void finalizeQueryResult(SOperatorInfo* pOperator, SQLFunctionCtx* pCtx, SResult ...@@ -3204,7 +3219,7 @@ void finalizeQueryResult(SOperatorInfo* pOperator, SQLFunctionCtx* pCtx, SResult
SQueryAttr *pQueryAttr = pRuntimeEnv->pQueryAttr; SQueryAttr *pQueryAttr = pRuntimeEnv->pQueryAttr;
int32_t numOfOutput = pOperator->numOfOutput; 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 // for each group result, call the finalize function for each column
if (pQueryAttr->groupbyColumn) { if (pQueryAttr->groupbyColumn) {
closeAllResultRows(pResultRowInfo); closeAllResultRows(pResultRowInfo);
...@@ -4514,6 +4529,12 @@ void setTableScanFilterOperatorInfo(STableScanInfo* pTableScanInfo, SOperatorInf ...@@ -4514,6 +4529,12 @@ void setTableScanFilterOperatorInfo(STableScanInfo* pTableScanInfo, SOperatorInf
} else if (pDownstream->operatorType == OP_SessionWindow) { } else if (pDownstream->operatorType == OP_SessionWindow) {
SSWindowOperatorInfo* pInfo = pDownstream->info; 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->pCtx = pInfo->binfo.pCtx;
pTableScanInfo->pResultRowInfo = &pInfo->binfo.resultRowInfo; pTableScanInfo->pResultRowInfo = &pInfo->binfo.resultRowInfo;
pTableScanInfo->rowCellInfoOffset = pInfo->binfo.rowCellInfoOffset; pTableScanInfo->rowCellInfoOffset = pInfo->binfo.rowCellInfoOffset;
...@@ -4625,7 +4646,6 @@ static void destroyGlobalAggOperatorInfo(void* param, int32_t numOfOutput) { ...@@ -4625,7 +4646,6 @@ static void destroyGlobalAggOperatorInfo(void* param, int32_t numOfOutput) {
tfree(pInfo->prevRow); tfree(pInfo->prevRow);
tfree(pInfo->currentGroupColData); tfree(pInfo->currentGroupColData);
} }
static void destroySlimitOperatorInfo(void* param, int32_t numOfOutput) { static void destroySlimitOperatorInfo(void* param, int32_t numOfOutput) {
SSLimitOperatorInfo *pInfo = (SSLimitOperatorInfo*) param; SSLimitOperatorInfo *pInfo = (SSLimitOperatorInfo*) param;
taosArrayDestroy(pInfo->orderColumnList); taosArrayDestroy(pInfo->orderColumnList);
...@@ -5131,6 +5151,130 @@ static SSDataBlock* doSTableIntervalAgg(void* param, bool* newgroup) { ...@@ -5131,6 +5151,130 @@ static SSDataBlock* doSTableIntervalAgg(void* param, bool* newgroup) {
return pIntervalInfo->pRes; 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) { static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) {
SOperatorInfo* pOperator = (SOperatorInfo*) param; SOperatorInfo* pOperator = (SOperatorInfo*) param;
if (pOperator->status == OP_EXEC_DONE) { if (pOperator->status == OP_EXEC_DONE) {
...@@ -5140,6 +5284,7 @@ static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) { ...@@ -5140,6 +5284,7 @@ static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) {
SSWindowOperatorInfo* pWindowInfo = pOperator->info; SSWindowOperatorInfo* pWindowInfo = pOperator->info;
SOptrBasicInfo* pBInfo = &pWindowInfo->binfo; SOptrBasicInfo* pBInfo = &pWindowInfo->binfo;
SQueryRuntimeEnv* pRuntimeEnv = pOperator->pRuntimeEnv; SQueryRuntimeEnv* pRuntimeEnv = pOperator->pRuntimeEnv;
if (pOperator->status == OP_RES_TO_RETURN) { if (pOperator->status == OP_RES_TO_RETURN) {
toSSDataBlock(&pRuntimeEnv->groupResInfo, pRuntimeEnv, pBInfo->pRes); toSSDataBlock(&pRuntimeEnv->groupResInfo, pRuntimeEnv, pBInfo->pRes);
...@@ -5152,6 +5297,7 @@ static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) { ...@@ -5152,6 +5297,7 @@ static SSDataBlock* doSessionWindowAgg(void* param, bool* newgroup) {
} }
SQueryAttr* pQueryAttr = pRuntimeEnv->pQueryAttr; SQueryAttr* pQueryAttr = pRuntimeEnv->pQueryAttr;
//pQueryAttr->order.order = TSDB_ORDER_ASC;
int32_t order = pQueryAttr->order.order; int32_t order = pQueryAttr->order.order;
STimeWindow win = pQueryAttr->window; STimeWindow win = pQueryAttr->window;
...@@ -5389,7 +5535,7 @@ SOperatorInfo* createAggregateOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOpera ...@@ -5389,7 +5535,7 @@ SOperatorInfo* createAggregateOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOpera
pOperator->pRuntimeEnv = pRuntimeEnv; pOperator->pRuntimeEnv = pRuntimeEnv;
pOperator->exec = doAggregate; pOperator->exec = doAggregate;
pOperator->cleanup = destroyBasicOperatorInfo; pOperator->cleanup = destroyAggOperatorInfo;
appendUpstream(pOperator, upstream); appendUpstream(pOperator, upstream);
return pOperator; return pOperator;
...@@ -5409,6 +5555,19 @@ static void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) { ...@@ -5409,6 +5555,19 @@ static void destroyBasicOperatorInfo(void* param, int32_t numOfOutput) {
SOptrBasicInfo* pInfo = (SOptrBasicInfo*) param; SOptrBasicInfo* pInfo = (SOptrBasicInfo*) param;
doDestroyBasicInfo(pInfo, numOfOutput); 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) { static void destroySFillOperatorInfo(void* param, int32_t numOfOutput) {
SFillOperatorInfo* pInfo = (SFillOperatorInfo*) param; SFillOperatorInfo* pInfo = (SFillOperatorInfo*) param;
...@@ -5463,7 +5622,7 @@ SOperatorInfo* createMultiTableAggOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SO ...@@ -5463,7 +5622,7 @@ SOperatorInfo* createMultiTableAggOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SO
pOperator->pRuntimeEnv = pRuntimeEnv; pOperator->pRuntimeEnv = pRuntimeEnv;
pOperator->exec = doSTableAggregate; pOperator->exec = doSTableAggregate;
pOperator->cleanup = destroyBasicOperatorInfo; pOperator->cleanup = destroyAggOperatorInfo;
appendUpstream(pOperator, upstream); appendUpstream(pOperator, upstream);
return pOperator; return pOperator;
...@@ -5589,7 +5748,29 @@ SOperatorInfo* createTimeIntervalOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOp ...@@ -5589,7 +5748,29 @@ SOperatorInfo* createTimeIntervalOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOp
appendUpstream(pOperator, upstream); appendUpstream(pOperator, upstream);
return pOperator; 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) { SOperatorInfo* createSWindowOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperatorInfo* upstream, SExprInfo* pExpr, int32_t numOfOutput) {
SSWindowOperatorInfo* pInfo = calloc(1, sizeof(SSWindowOperatorInfo)); SSWindowOperatorInfo* pInfo = calloc(1, sizeof(SSWindowOperatorInfo));
...@@ -5609,7 +5790,7 @@ SOperatorInfo* createSWindowOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperato ...@@ -5609,7 +5790,7 @@ SOperatorInfo* createSWindowOperatorInfo(SQueryRuntimeEnv* pRuntimeEnv, SOperato
pOperator->info = pInfo; pOperator->info = pInfo;
pOperator->pRuntimeEnv = pRuntimeEnv; pOperator->pRuntimeEnv = pRuntimeEnv;
pOperator->exec = doSessionWindowAgg; pOperator->exec = doSessionWindowAgg;
pOperator->cleanup = destroyBasicOperatorInfo; pOperator->cleanup = destroySWindowOperatorInfo;
appendUpstream(pOperator, upstream); appendUpstream(pOperator, upstream);
return pOperator; return pOperator;
...@@ -6901,6 +7082,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SGroupbyExpr* pGroupbyExpr, S ...@@ -6901,6 +7082,7 @@ SQInfo* createQInfoImpl(SQueryTableMsg* pQueryMsg, SGroupbyExpr* pGroupbyExpr, S
pQueryAttr->simpleAgg = pQueryMsg->simpleAgg; pQueryAttr->simpleAgg = pQueryMsg->simpleAgg;
pQueryAttr->pointInterpQuery = pQueryMsg->pointInterpQuery; pQueryAttr->pointInterpQuery = pQueryMsg->pointInterpQuery;
pQueryAttr->needReverseScan = pQueryMsg->needReverseScan; pQueryAttr->needReverseScan = pQueryMsg->needReverseScan;
pQueryAttr->stateWindow = pQueryMsg->stateWindow;
pQueryAttr->vgId = vgId; pQueryAttr->vgId = vgId;
pQueryAttr->tableCols = calloc(numOfCols, sizeof(SSingleColumnFilterInfo)); pQueryAttr->tableCols = calloc(numOfCols, sizeof(SSingleColumnFilterInfo));
......
...@@ -592,6 +592,14 @@ SArray* createExecOperatorPlan(SQueryAttr* pQueryAttr) { ...@@ -592,6 +592,14 @@ SArray* createExecOperatorPlan(SQueryAttr* pQueryAttr) {
op = OP_SessionWindow; op = OP_SessionWindow;
taosArrayPush(plan, &op); 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) { if (pQueryAttr->pExpr2 != NULL) {
op = OP_Arithmetic; op = OP_Arithmetic;
taosArrayPush(plan, &op); taosArrayPush(plan, &op);
......
...@@ -726,9 +726,9 @@ void tSetColumnType(TAOS_FIELD *pField, SStrToken *type) { ...@@ -726,9 +726,9 @@ void tSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
* extract the select info out of sql string * extract the select info out of sql string
*/ */
SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelationInfo *pFrom, tSqlExpr *pWhere, SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelationInfo *pFrom, tSqlExpr *pWhere,
SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval, SSessionWindowVal *pSession, SArray *pGroupby, SArray *pSortOrder, SIntervalVal *pInterval,
SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit, SLimitVal *psLimit, SSessionWindowVal *pSession, SWindowStateVal *pWindowStateVal, SStrToken *pSliding, SArray *pFill, SLimitVal *pLimit,
tSqlExpr *pHaving) { SLimitVal *psLimit, tSqlExpr *pHaving) {
assert(pSelNodeList != NULL); assert(pSelNodeList != NULL);
SSqlNode *pSqlNode = calloc(1, sizeof(SSqlNode)); SSqlNode *pSqlNode = calloc(1, sizeof(SSqlNode));
...@@ -779,6 +779,12 @@ SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelat ...@@ -779,6 +779,12 @@ SSqlNode *tSetQuerySqlNode(SStrToken *pSelectToken, SArray *pSelNodeList, SRelat
TPARSER_SET_NONE_TOKEN(pSqlNode->sessionVal.col); TPARSER_SET_NONE_TOKEN(pSqlNode->sessionVal.col);
} }
if (pWindowStateVal != NULL) {
pSqlNode->windowstateVal = *pWindowStateVal;
} else {
TPARSER_SET_NONE_TOKEN(pSqlNode->windowstateVal.col);
}
return pSqlNode; return pSqlNode;
} }
......
...@@ -97,27 +97,28 @@ ...@@ -97,27 +97,28 @@
#endif #endif
/************* Begin control #defines *****************************************/ /************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int #define YYCODETYPE unsigned short int
#define YYNOCODE 265 #define YYNOCODE 267
#define YYACTIONTYPE unsigned short int #define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken #define ParseTOKENTYPE SStrToken
typedef union { typedef union {
int yyinit; int yyinit;
ParseTOKENTYPE yy0; ParseTOKENTYPE yy0;
SCreatedTableInfo yy96; TAOS_FIELD yy27;
SRelationInfo* yy148; SWindowStateVal yy76;
tSqlExpr* yy178; SCreateDbInfo yy114;
SCreateAcctInfo yy187; SSqlNode* yy124;
SArray* yy285; SCreateAcctInfo yy183;
TAOS_FIELD yy295; SCreatedTableInfo yy192;
SSqlNode* yy344; SArray* yy193;
tVariant yy362; SCreateTableSql* yy270;
SIntervalVal yy376; int yy312;
SLimitVal yy438; SRelationInfo* yy332;
int yy460; SIntervalVal yy392;
SCreateTableSql* yy470; tVariant yy442;
SSessionWindowVal yy523; SSessionWindowVal yy447;
int64_t yy525; tSqlExpr* yy454;
SCreateDbInfo yy526; int64_t yy473;
SLimitVal yy482;
} YYMINORTYPE; } YYMINORTYPE;
#ifndef YYSTACKDEPTH #ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100 #define YYSTACKDEPTH 100
...@@ -127,17 +128,17 @@ typedef union { ...@@ -127,17 +128,17 @@ typedef union {
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo #define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo #define ParseARG_STORE yypParser->pInfo = pInfo
#define YYFALLBACK 1 #define YYFALLBACK 1
#define YYNSTATE 323 #define YYNSTATE 327
#define YYNRULE 273 #define YYNRULE 275
#define YYNTOKEN 187 #define YYNTOKEN 188
#define YY_MAX_SHIFT 322 #define YY_MAX_SHIFT 326
#define YY_MIN_SHIFTREDUCE 518 #define YY_MIN_SHIFTREDUCE 523
#define YY_MAX_SHIFTREDUCE 790 #define YY_MAX_SHIFTREDUCE 797
#define YY_ERROR_ACTION 791 #define YY_ERROR_ACTION 798
#define YY_ACCEPT_ACTION 792 #define YY_ACCEPT_ACTION 799
#define YY_NO_ACTION 793 #define YY_NO_ACTION 800
#define YY_MIN_REDUCE 794 #define YY_MIN_REDUCE 801
#define YY_MAX_REDUCE 1066 #define YY_MAX_REDUCE 1075
/************* End control #defines *******************************************/ /************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined /* Define the yytestcase() macro to be a no-op if is not already defined
...@@ -203,266 +204,266 @@ typedef union { ...@@ -203,266 +204,266 @@ typedef union {
** yy_default[] Default action for each state. ** yy_default[] Default action for each state.
** **
*********** Begin parsing tables **********************************************/ *********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (695) #define YY_ACTTAB_COUNT (700)
static const YYACTIONTYPE yy_action[] = { static const YYACTIONTYPE yy_action[] = {
/* 0 */ 962, 566, 209, 320, 70, 18, 215, 953, 186, 567, /* 0 */ 969, 571, 211, 324, 934, 18, 217, 186, 188, 572,
/* 10 */ 792, 322, 184, 48, 49, 144, 52, 53, 218, 1048, /* 10 */ 799, 326, 192, 48, 49, 145, 52, 53, 220, 1057,
/* 20 */ 221, 42, 212, 51, 270, 56, 54, 58, 55, 927, /* 20 */ 223, 42, 275, 51, 274, 56, 54, 58, 55, 1053,
/* 30 */ 645, 186, 941, 47, 46, 186, 926, 45, 44, 43, /* 30 */ 650, 188, 948, 47, 46, 188, 228, 45, 44, 43,
/* 40 */ 48, 49, 1047, 52, 53, 217, 1048, 221, 42, 566, /* 40 */ 48, 49, 1056, 52, 53, 219, 1057, 223, 42, 571,
/* 50 */ 51, 270, 56, 54, 58, 55, 953, 567, 296, 295, /* 50 */ 51, 274, 56, 54, 58, 55, 960, 572, 300, 299,
/* 60 */ 47, 46, 959, 144, 45, 44, 43, 49, 31, 52, /* 60 */ 47, 46, 948, 966, 45, 44, 43, 49, 31, 52,
/* 70 */ 53, 248, 137, 221, 42, 83, 51, 270, 56, 54, /* 70 */ 53, 138, 250, 223, 42, 1067, 51, 274, 56, 54,
/* 80 */ 58, 55, 286, 997, 88, 265, 47, 46, 72, 306, /* 80 */ 58, 55, 271, 290, 82, 1052, 47, 46, 89, 234,
/* 90 */ 45, 44, 43, 519, 520, 521, 522, 523, 524, 525, /* 90 */ 45, 44, 43, 524, 525, 526, 527, 528, 529, 530,
/* 100 */ 526, 527, 528, 529, 530, 531, 321, 233, 286, 210, /* 100 */ 531, 532, 533, 534, 535, 536, 325, 571, 290, 212,
/* 110 */ 71, 566, 937, 48, 49, 31, 52, 53, 929, 567, /* 110 */ 71, 571, 944, 48, 49, 572, 52, 53, 760, 572,
/* 120 */ 221, 42, 566, 51, 270, 56, 54, 58, 55, 267, /* 120 */ 223, 42, 936, 51, 274, 56, 54, 58, 55, 45,
/* 130 */ 567, 81, 734, 47, 46, 255, 254, 45, 44, 43, /* 130 */ 44, 43, 741, 47, 46, 257, 256, 45, 44, 43,
/* 140 */ 48, 50, 939, 52, 53, 232, 190, 221, 42, 240, /* 140 */ 48, 50, 145, 52, 53, 1, 160, 223, 42, 145,
/* 150 */ 51, 270, 56, 54, 58, 55, 211, 244, 243, 938, /* 150 */ 51, 274, 56, 54, 58, 55, 323, 322, 130, 236,
/* 160 */ 47, 46, 1, 158, 45, 44, 43, 24, 284, 315, /* 160 */ 47, 46, 297, 296, 45, 44, 43, 24, 288, 319,
/* 170 */ 314, 283, 282, 281, 313, 280, 312, 311, 310, 279, /* 170 */ 318, 287, 286, 285, 317, 284, 316, 315, 314, 283,
/* 180 */ 309, 308, 901, 31, 889, 890, 891, 892, 893, 894, /* 180 */ 313, 312, 908, 31, 896, 897, 898, 899, 900, 901,
/* 190 */ 895, 896, 897, 898, 899, 900, 902, 903, 52, 53, /* 190 */ 902, 903, 904, 905, 906, 907, 909, 910, 52, 53,
/* 200 */ 715, 716, 221, 42, 230, 51, 270, 56, 54, 58, /* 200 */ 847, 960, 223, 42, 172, 51, 274, 56, 54, 58,
/* 210 */ 55, 935, 19, 1044, 234, 47, 46, 293, 292, 45, /* 210 */ 55, 1005, 19, 86, 25, 47, 46, 214, 83, 45,
/* 220 */ 44, 43, 220, 749, 224, 25, 738, 938, 741, 195, /* 220 */ 44, 43, 222, 756, 213, 310, 745, 945, 748, 197,
/* 230 */ 744, 220, 749, 3, 171, 738, 196, 741, 740, 744, /* 230 */ 751, 222, 756, 230, 13, 745, 198, 748, 88, 751,
/* 240 */ 743, 121, 120, 194, 45, 44, 43, 1043, 56, 54, /* 240 */ 85, 122, 121, 196, 931, 932, 30, 935, 56, 54,
/* 250 */ 58, 55, 681, 227, 205, 206, 47, 46, 269, 8, /* 250 */ 58, 55, 3, 173, 207, 208, 47, 46, 273, 948,
/* 260 */ 45, 44, 43, 205, 206, 1042, 77, 739, 24, 742, /* 260 */ 45, 44, 43, 207, 208, 242, 232, 747, 24, 750,
/* 270 */ 315, 314, 77, 231, 37, 313, 288, 312, 311, 310, /* 270 */ 319, 318, 77, 246, 245, 317, 689, 316, 315, 314,
/* 280 */ 37, 309, 308, 909, 108, 669, 907, 908, 666, 306, /* 280 */ 37, 313, 312, 62, 916, 47, 46, 914, 915, 45,
/* 290 */ 667, 910, 668, 912, 913, 911, 85, 914, 915, 106, /* 290 */ 44, 43, 917, 942, 919, 920, 918, 145, 921, 922,
/* 300 */ 100, 111, 247, 203, 69, 31, 110, 116, 119, 109, /* 300 */ 107, 101, 112, 249, 31, 69, 63, 111, 117, 120,
/* 310 */ 202, 5, 34, 160, 226, 113, 235, 236, 159, 95, /* 310 */ 110, 204, 674, 109, 235, 671, 114, 672, 310, 673,
/* 320 */ 90, 94, 228, 31, 31, 57, 684, 924, 925, 30, /* 320 */ 5, 34, 162, 1051, 70, 57, 31, 161, 96, 91,
/* 330 */ 928, 31, 750, 31, 57, 178, 176, 174, 746, 144, /* 330 */ 95, 31, 757, 31, 57, 229, 233, 31, 753, 292,
/* 340 */ 941, 750, 173, 124, 123, 122, 225, 746, 941, 938, /* 340 */ 746, 757, 749, 237, 238, 226, 31, 753, 945, 946,
/* 350 */ 747, 47, 46, 204, 745, 45, 44, 43, 319, 318, /* 350 */ 180, 178, 176, 205, 693, 752, 933, 175, 125, 124,
/* 360 */ 129, 316, 144, 745, 289, 290, 271, 938, 938, 135, /* 360 */ 123, 136, 134, 133, 752, 77, 1006, 227, 269, 320,
/* 370 */ 133, 132, 294, 953, 298, 938, 13, 938, 188, 748, /* 370 */ 945, 84, 293, 37, 294, 945, 856, 945, 298, 754,
/* 380 */ 87, 840, 84, 736, 74, 170, 849, 941, 213, 841, /* 380 */ 172, 945, 848, 960, 686, 72, 172, 302, 722, 723,
/* 390 */ 170, 249, 251, 170, 670, 32, 700, 75, 219, 706, /* 390 */ 945, 8, 251, 743, 74, 948, 32, 75, 221, 215,
/* 400 */ 139, 189, 707, 61, 688, 251, 21, 996, 770, 62, /* 400 */ 705, 206, 253, 713, 140, 253, 714, 61, 777, 758,
/* 410 */ 751, 191, 20, 655, 20, 65, 273, 32, 657, 737, /* 410 */ 21, 65, 20, 20, 660, 678, 277, 679, 32, 662,
/* 420 */ 32, 275, 61, 1058, 656, 86, 29, 185, 61, 276, /* 420 */ 32, 675, 279, 61, 661, 190, 87, 29, 61, 744,
/* 430 */ 82, 63, 940, 99, 98, 66, 15, 14, 192, 105, /* 430 */ 280, 191, 66, 100, 99, 15, 14, 119, 118, 106,
/* 440 */ 104, 68, 6, 644, 118, 117, 193, 17, 16, 673, /* 440 */ 105, 68, 6, 649, 17, 16, 676, 193, 677, 187,
/* 450 */ 199, 674, 200, 671, 198, 672, 183, 197, 187, 1007, /* 450 */ 194, 195, 755, 201, 202, 200, 185, 199, 189, 947,
/* 460 */ 245, 1006, 753, 222, 40, 1003, 1002, 223, 297, 136, /* 460 */ 1016, 1015, 224, 1012, 1011, 247, 137, 40, 225, 301,
/* 470 */ 989, 961, 972, 969, 988, 970, 954, 252, 974, 138, /* 470 */ 968, 979, 976, 977, 981, 139, 143, 961, 254, 998,
/* 480 */ 936, 142, 154, 134, 256, 214, 905, 155, 699, 150, /* 480 */ 997, 943, 263, 156, 135, 157, 704, 258, 311, 941,
/* 490 */ 934, 258, 145, 156, 260, 157, 148, 146, 951, 147, /* 490 */ 912, 306, 108, 303, 155, 150, 148, 958, 158, 159,
/* 500 */ 59, 852, 67, 278, 263, 38, 181, 64, 35, 268, /* 500 */ 859, 67, 146, 216, 282, 38, 260, 183, 35, 267,
/* 510 */ 266, 287, 848, 264, 1063, 96, 1062, 1060, 161, 291, /* 510 */ 291, 64, 855, 1072, 97, 59, 1071, 1069, 163, 295,
/* 520 */ 1057, 102, 1056, 1054, 162, 870, 36, 33, 149, 262, /* 520 */ 1066, 103, 1065, 1063, 164, 877, 36, 272, 33, 270,
/* 530 */ 39, 182, 837, 112, 835, 114, 115, 833, 832, 237, /* 530 */ 268, 39, 184, 844, 113, 842, 115, 116, 840, 839,
/* 540 */ 172, 830, 257, 829, 828, 827, 826, 825, 175, 177, /* 540 */ 239, 174, 837, 836, 835, 834, 833, 832, 177, 179,
/* 550 */ 822, 820, 818, 816, 179, 813, 180, 41, 250, 73, /* 550 */ 829, 827, 825, 266, 823, 181, 820, 182, 264, 252,
/* 560 */ 307, 78, 259, 107, 990, 299, 300, 301, 302, 303, /* 560 */ 73, 78, 262, 261, 999, 259, 41, 304, 305, 307,
/* 570 */ 304, 207, 305, 229, 317, 277, 790, 238, 239, 789, /* 570 */ 209, 231, 308, 309, 281, 321, 797, 240, 241, 210,
/* 580 */ 208, 201, 91, 92, 241, 242, 788, 776, 775, 246, /* 580 */ 796, 92, 93, 203, 244, 243, 795, 783, 782, 838,
/* 590 */ 831, 251, 272, 125, 126, 824, 165, 164, 871, 168, /* 590 */ 248, 253, 681, 276, 126, 171, 166, 878, 167, 165,
/* 600 */ 163, 166, 167, 169, 127, 823, 2, 128, 815, 814, /* 600 */ 168, 169, 831, 170, 9, 127, 128, 830, 76, 129,
/* 610 */ 9, 26, 4, 676, 76, 701, 216, 151, 152, 153, /* 610 */ 822, 821, 2, 26, 4, 255, 79, 706, 153, 151,
/* 620 */ 253, 79, 917, 140, 10, 704, 141, 80, 261, 754, /* 620 */ 149, 147, 152, 154, 141, 924, 709, 142, 80, 218,
/* 630 */ 708, 143, 11, 89, 752, 27, 7, 28, 12, 22, /* 630 */ 711, 81, 265, 761, 715, 144, 90, 10, 11, 27,
/* 640 */ 274, 23, 608, 604, 87, 602, 601, 600, 597, 570, /* 640 */ 759, 28, 7, 12, 22, 88, 23, 613, 278, 609,
/* 650 */ 285, 93, 97, 32, 647, 60, 646, 643, 592, 590, /* 650 */ 607, 606, 605, 602, 575, 289, 94, 32, 60, 98,
/* 660 */ 101, 103, 582, 588, 584, 586, 580, 578, 611, 610, /* 660 */ 652, 651, 648, 102, 597, 595, 104, 587, 593, 589,
/* 670 */ 609, 607, 606, 605, 603, 599, 598, 61, 568, 535, /* 670 */ 591, 585, 583, 616, 615, 614, 612, 611, 610, 608,
/* 680 */ 533, 794, 793, 793, 793, 793, 793, 793, 793, 793, /* 680 */ 604, 603, 573, 540, 538, 61, 801, 800, 800, 800,
/* 690 */ 793, 793, 793, 130, 131, /* 690 */ 800, 800, 800, 800, 800, 800, 800, 800, 131, 132,
}; };
static const YYCODETYPE yy_lookahead[] = { static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 191, 1, 190, 191, 197, 252, 210, 234, 252, 9, /* 0 */ 192, 1, 191, 192, 0, 254, 211, 254, 254, 9,
/* 10 */ 188, 189, 252, 13, 14, 191, 16, 17, 262, 263, /* 10 */ 189, 190, 254, 13, 14, 192, 16, 17, 264, 265,
/* 20 */ 20, 21, 249, 23, 24, 25, 26, 27, 28, 0, /* 20 */ 20, 21, 15, 23, 24, 25, 26, 27, 28, 254,
/* 30 */ 5, 252, 236, 33, 34, 252, 229, 37, 38, 39, /* 30 */ 5, 254, 237, 33, 34, 254, 211, 37, 38, 39,
/* 40 */ 13, 14, 263, 16, 17, 262, 263, 20, 21, 1, /* 40 */ 13, 14, 265, 16, 17, 264, 265, 20, 21, 1,
/* 50 */ 23, 24, 25, 26, 27, 28, 234, 9, 33, 34, /* 50 */ 23, 24, 25, 26, 27, 28, 235, 9, 33, 34,
/* 60 */ 33, 34, 253, 191, 37, 38, 39, 14, 191, 16, /* 60 */ 33, 34, 237, 255, 37, 38, 39, 14, 192, 16,
/* 70 */ 17, 249, 191, 20, 21, 237, 23, 24, 25, 26, /* 70 */ 17, 192, 251, 20, 21, 237, 23, 24, 25, 26,
/* 80 */ 27, 28, 79, 259, 197, 261, 33, 34, 250, 81, /* 80 */ 27, 28, 259, 79, 261, 254, 33, 34, 198, 68,
/* 90 */ 37, 38, 39, 45, 46, 47, 48, 49, 50, 51, /* 90 */ 37, 38, 39, 45, 46, 47, 48, 49, 50, 51,
/* 100 */ 52, 53, 54, 55, 56, 57, 58, 191, 79, 61, /* 100 */ 52, 53, 54, 55, 56, 57, 58, 1, 79, 61,
/* 110 */ 110, 1, 235, 13, 14, 191, 16, 17, 231, 9, /* 110 */ 110, 1, 236, 13, 14, 9, 16, 17, 111, 9,
/* 120 */ 20, 21, 1, 23, 24, 25, 26, 27, 28, 257, /* 120 */ 20, 21, 232, 23, 24, 25, 26, 27, 28, 37,
/* 130 */ 9, 259, 105, 33, 34, 254, 255, 37, 38, 39, /* 130 */ 38, 39, 105, 33, 34, 256, 257, 37, 38, 39,
/* 140 */ 13, 14, 226, 16, 17, 68, 252, 20, 21, 135, /* 140 */ 13, 14, 192, 16, 17, 199, 200, 20, 21, 192,
/* 150 */ 23, 24, 25, 26, 27, 28, 232, 143, 144, 235, /* 150 */ 23, 24, 25, 26, 27, 28, 65, 66, 67, 138,
/* 160 */ 33, 34, 198, 199, 37, 38, 39, 88, 89, 90, /* 160 */ 33, 34, 141, 142, 37, 38, 39, 88, 89, 90,
/* 170 */ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, /* 170 */ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
/* 180 */ 101, 102, 209, 191, 211, 212, 213, 214, 215, 216, /* 180 */ 101, 102, 210, 192, 212, 213, 214, 215, 216, 217,
/* 190 */ 217, 218, 219, 220, 221, 222, 223, 224, 16, 17, /* 190 */ 218, 219, 220, 221, 222, 223, 224, 225, 16, 17,
/* 200 */ 124, 125, 20, 21, 68, 23, 24, 25, 26, 27, /* 200 */ 197, 235, 20, 21, 201, 23, 24, 25, 26, 27,
/* 210 */ 28, 191, 44, 252, 137, 33, 34, 140, 141, 37, /* 210 */ 28, 261, 44, 198, 104, 33, 34, 251, 261, 37,
/* 220 */ 38, 39, 1, 2, 232, 104, 5, 235, 7, 61, /* 220 */ 38, 39, 1, 2, 233, 81, 5, 236, 7, 61,
/* 230 */ 9, 1, 2, 194, 195, 5, 68, 7, 5, 9, /* 230 */ 9, 1, 2, 211, 104, 5, 68, 7, 108, 9,
/* 240 */ 7, 73, 74, 75, 37, 38, 39, 252, 25, 26, /* 240 */ 110, 73, 74, 75, 229, 230, 231, 232, 25, 26,
/* 250 */ 27, 28, 109, 233, 33, 34, 33, 34, 37, 116, /* 250 */ 27, 28, 195, 196, 33, 34, 33, 34, 37, 237,
/* 260 */ 37, 38, 39, 33, 34, 252, 104, 5, 88, 7, /* 260 */ 37, 38, 39, 33, 34, 136, 68, 5, 88, 7,
/* 270 */ 90, 91, 104, 137, 112, 95, 140, 97, 98, 99, /* 270 */ 90, 91, 104, 144, 145, 95, 37, 97, 98, 99,
/* 280 */ 112, 101, 102, 209, 76, 2, 212, 213, 5, 81, /* 280 */ 112, 101, 102, 109, 210, 33, 34, 213, 214, 37,
/* 290 */ 7, 217, 9, 219, 220, 221, 197, 223, 224, 62, /* 290 */ 38, 39, 218, 192, 220, 221, 222, 192, 224, 225,
/* 300 */ 63, 64, 134, 252, 136, 191, 69, 70, 71, 72, /* 300 */ 62, 63, 64, 135, 192, 137, 132, 69, 70, 71,
/* 310 */ 142, 62, 63, 64, 210, 78, 33, 34, 69, 70, /* 310 */ 72, 143, 2, 76, 192, 5, 78, 7, 81, 9,
/* 320 */ 71, 72, 210, 191, 191, 104, 37, 228, 229, 230, /* 320 */ 62, 63, 64, 254, 198, 104, 192, 69, 70, 71,
/* 330 */ 231, 191, 111, 191, 104, 62, 63, 64, 117, 191, /* 330 */ 72, 192, 111, 192, 104, 234, 138, 192, 117, 141,
/* 340 */ 236, 111, 69, 70, 71, 72, 232, 117, 236, 235, /* 340 */ 5, 111, 7, 33, 34, 233, 192, 117, 236, 227,
/* 350 */ 117, 33, 34, 252, 133, 37, 38, 39, 65, 66, /* 350 */ 62, 63, 64, 254, 115, 134, 230, 69, 70, 71,
/* 360 */ 67, 210, 191, 133, 232, 232, 15, 235, 235, 62, /* 360 */ 72, 62, 63, 64, 134, 104, 261, 233, 263, 211,
/* 370 */ 63, 64, 232, 234, 232, 235, 104, 235, 252, 117, /* 370 */ 236, 238, 233, 112, 233, 236, 197, 236, 233, 117,
/* 380 */ 108, 196, 110, 1, 105, 200, 196, 236, 249, 196, /* 380 */ 201, 236, 197, 235, 109, 252, 201, 233, 125, 126,
/* 390 */ 200, 105, 113, 200, 111, 109, 105, 105, 60, 105, /* 390 */ 236, 116, 105, 1, 105, 237, 109, 105, 60, 251,
/* 400 */ 109, 252, 105, 109, 115, 113, 109, 259, 105, 109, /* 400 */ 105, 254, 113, 105, 109, 113, 105, 109, 105, 105,
/* 410 */ 105, 252, 109, 105, 109, 109, 105, 109, 105, 37, /* 410 */ 109, 109, 109, 109, 105, 5, 105, 7, 109, 105,
/* 420 */ 109, 105, 109, 236, 105, 109, 104, 252, 109, 107, /* 420 */ 109, 111, 105, 109, 105, 254, 109, 104, 109, 37,
/* 430 */ 259, 131, 236, 138, 139, 129, 138, 139, 252, 138, /* 430 */ 107, 254, 130, 139, 140, 139, 140, 76, 77, 139,
/* 440 */ 139, 104, 104, 106, 76, 77, 252, 138, 139, 5, /* 440 */ 140, 104, 104, 106, 139, 140, 5, 254, 7, 254,
/* 450 */ 252, 7, 252, 5, 252, 7, 252, 252, 252, 227, /* 450 */ 254, 254, 117, 254, 254, 254, 254, 254, 254, 237,
/* 460 */ 191, 227, 111, 227, 251, 227, 227, 227, 227, 191, /* 460 */ 228, 228, 228, 228, 228, 192, 192, 253, 228, 228,
/* 470 */ 260, 191, 191, 191, 260, 191, 234, 234, 191, 191, /* 470 */ 192, 192, 192, 192, 192, 192, 192, 235, 235, 262,
/* 480 */ 234, 191, 238, 60, 256, 256, 225, 191, 117, 242, /* 480 */ 262, 235, 192, 239, 60, 192, 117, 258, 103, 192,
/* 490 */ 191, 256, 247, 191, 119, 191, 244, 246, 248, 245, /* 490 */ 226, 85, 87, 86, 240, 245, 247, 250, 192, 192,
/* 500 */ 127, 191, 128, 191, 256, 191, 191, 130, 191, 122, /* 500 */ 192, 129, 249, 258, 192, 192, 258, 192, 192, 258,
/* 510 */ 126, 191, 191, 121, 191, 191, 191, 191, 191, 191, /* 510 */ 192, 131, 192, 192, 192, 128, 192, 192, 192, 192,
/* 520 */ 191, 191, 191, 191, 191, 191, 191, 191, 243, 120, /* 520 */ 192, 192, 192, 192, 192, 192, 192, 123, 192, 127,
/* 530 */ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, /* 530 */ 122, 192, 192, 192, 192, 192, 192, 192, 192, 192,
/* 540 */ 191, 191, 118, 191, 191, 191, 191, 191, 191, 191, /* 540 */ 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
/* 550 */ 191, 191, 191, 191, 191, 191, 191, 132, 192, 192, /* 550 */ 192, 192, 192, 121, 192, 192, 192, 192, 120, 193,
/* 560 */ 103, 192, 192, 87, 192, 86, 50, 83, 85, 54, /* 560 */ 193, 193, 119, 193, 193, 118, 133, 50, 83, 54,
/* 570 */ 84, 192, 82, 192, 79, 192, 5, 145, 5, 5, /* 570 */ 193, 193, 84, 82, 193, 79, 5, 146, 5, 193,
/* 580 */ 192, 192, 197, 197, 145, 5, 5, 90, 89, 135, /* 580 */ 5, 198, 198, 193, 5, 146, 5, 90, 89, 193,
/* 590 */ 192, 113, 107, 193, 193, 192, 202, 206, 208, 204, /* 590 */ 136, 113, 105, 107, 194, 202, 207, 209, 203, 208,
/* 600 */ 207, 205, 203, 201, 193, 192, 198, 193, 192, 192, /* 600 */ 206, 204, 193, 205, 104, 194, 194, 193, 114, 194,
/* 610 */ 104, 104, 194, 105, 114, 105, 1, 241, 240, 239, /* 610 */ 193, 193, 199, 104, 195, 109, 109, 105, 242, 244,
/* 620 */ 109, 109, 225, 104, 123, 105, 109, 104, 104, 111, /* 620 */ 246, 248, 243, 241, 104, 226, 105, 109, 104, 1,
/* 630 */ 105, 104, 123, 76, 105, 109, 104, 109, 104, 104, /* 630 */ 105, 104, 104, 111, 105, 104, 76, 124, 124, 109,
/* 640 */ 107, 104, 9, 5, 108, 5, 5, 5, 5, 80, /* 640 */ 105, 109, 104, 104, 104, 108, 104, 9, 107, 5,
/* 650 */ 15, 76, 139, 109, 5, 16, 5, 105, 5, 5, /* 650 */ 5, 5, 5, 5, 80, 15, 76, 109, 16, 140,
/* 660 */ 139, 139, 5, 5, 5, 5, 5, 5, 5, 5, /* 660 */ 5, 5, 105, 140, 5, 5, 140, 5, 5, 5,
/* 670 */ 5, 5, 5, 5, 5, 5, 5, 109, 80, 60, /* 670 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 680 */ 59, 0, 264, 264, 264, 264, 264, 264, 264, 264, /* 680 */ 5, 5, 80, 60, 59, 109, 0, 266, 266, 266,
/* 690 */ 264, 264, 264, 21, 21, 264, 264, 264, 264, 264, /* 690 */ 266, 266, 266, 266, 266, 266, 266, 266, 21, 21,
/* 700 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 700 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 710 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 710 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 720 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 720 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 730 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 730 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 740 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 740 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 750 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 750 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 760 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 760 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 770 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 770 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 780 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 780 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 790 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 790 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 800 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 800 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 810 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 810 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 820 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 820 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 830 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 830 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 840 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 840 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 850 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 850 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 860 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 860 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 870 */ 264, 264, 264, 264, 264, 264, 264, 264, 264, 264, /* 870 */ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
/* 880 */ 264, 264, /* 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_MIN (0)
#define YY_SHIFT_MAX (681) #define YY_SHIFT_MAX (686)
static const unsigned short int yy_shift_ofst[] = { static const unsigned short int yy_shift_ofst[] = {
/* 0 */ 168, 79, 79, 180, 180, 3, 221, 230, 121, 110, /* 0 */ 168, 79, 79, 180, 180, 29, 221, 230, 110, 106,
/* 10 */ 110, 110, 110, 110, 110, 110, 110, 110, 0, 48, /* 10 */ 106, 106, 106, 106, 106, 106, 106, 106, 0, 48,
/* 20 */ 230, 283, 283, 283, 283, 162, 162, 110, 110, 110, /* 20 */ 230, 310, 310, 310, 310, 261, 261, 106, 106, 106,
/* 30 */ 29, 110, 110, 208, 3, 8, 8, 695, 695, 695, /* 30 */ 4, 106, 106, 237, 29, 144, 144, 700, 700, 700,
/* 40 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, /* 40 */ 230, 230, 230, 230, 230, 230, 230, 230, 230, 230,
/* 50 */ 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, /* 60 */ 310, 310, 25, 25, 25, 25, 25, 25, 25, 106,
/* 70 */ 110, 110, 289, 110, 110, 110, 162, 162, 110, 110, /* 70 */ 106, 106, 239, 106, 106, 106, 261, 261, 106, 106,
/* 80 */ 110, 76, 76, 143, 162, 110, 110, 110, 110, 110, /* 80 */ 106, 106, 263, 263, 275, 261, 106, 106, 106, 106,
/* 90 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, /* 90 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 100 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, /* 100 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 110 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, /* 110 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 120 */ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, /* 120 */ 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
/* 130 */ 110, 110, 110, 110, 110, 110, 423, 423, 423, 371, /* 130 */ 106, 106, 106, 106, 106, 106, 106, 424, 424, 424,
/* 140 */ 371, 371, 423, 371, 423, 374, 377, 373, 387, 384, /* 140 */ 369, 369, 369, 424, 369, 424, 372, 380, 387, 404,
/* 150 */ 392, 409, 375, 424, 425, 423, 423, 423, 457, 3, /* 150 */ 402, 408, 432, 438, 443, 447, 433, 424, 424, 424,
/* 160 */ 3, 423, 423, 476, 479, 516, 484, 483, 515, 486, /* 160 */ 385, 29, 29, 424, 424, 405, 407, 517, 485, 406,
/* 170 */ 490, 457, 423, 495, 495, 423, 495, 423, 495, 423, /* 170 */ 515, 488, 491, 385, 424, 496, 496, 424, 496, 424,
/* 180 */ 423, 695, 695, 27, 100, 127, 100, 100, 53, 182, /* 180 */ 496, 424, 424, 700, 700, 27, 100, 127, 100, 100,
/* 190 */ 223, 223, 223, 223, 237, 249, 273, 318, 318, 318, /* 190 */ 53, 182, 223, 223, 223, 223, 238, 258, 288, 252,
/* 200 */ 318, 77, 14, 207, 207, 233, 262, 272, 136, 293, /* 200 */ 252, 252, 252, 21, 129, 92, 92, 262, 335, 130,
/* 210 */ 307, 286, 279, 292, 291, 294, 297, 303, 305, 382, /* 210 */ 198, 91, 299, 287, 289, 292, 295, 298, 301, 303,
/* 220 */ 338, 351, 300, 306, 308, 311, 313, 316, 319, 322, /* 220 */ 304, 392, 338, 7, 174, 302, 309, 311, 314, 317,
/* 230 */ 295, 298, 301, 337, 309, 444, 448, 368, 571, 432, /* 230 */ 319, 323, 294, 296, 300, 337, 305, 410, 441, 361,
/* 240 */ 573, 574, 439, 580, 581, 497, 499, 454, 478, 485, /* 240 */ 571, 431, 573, 575, 439, 579, 581, 497, 499, 454,
/* 250 */ 506, 500, 508, 507, 511, 512, 510, 519, 520, 517, /* 250 */ 478, 486, 500, 494, 487, 509, 506, 507, 512, 520,
/* 260 */ 523, 615, 524, 525, 527, 526, 501, 528, 509, 529, /* 260 */ 521, 518, 524, 525, 527, 628, 528, 529, 531, 530,
/* 270 */ 532, 518, 534, 485, 535, 533, 537, 536, 557, 633, /* 270 */ 513, 532, 514, 535, 538, 522, 539, 486, 540, 541,
/* 280 */ 638, 640, 641, 642, 643, 569, 635, 575, 513, 544, /* 280 */ 542, 537, 560, 638, 644, 645, 646, 647, 648, 574,
/* 290 */ 544, 639, 521, 522, 544, 649, 651, 552, 544, 653, /* 290 */ 640, 580, 519, 548, 548, 642, 523, 526, 548, 655,
/* 300 */ 654, 657, 658, 659, 660, 661, 662, 663, 664, 665, /* 300 */ 656, 557, 548, 659, 660, 662, 663, 664, 665, 666,
/* 310 */ 666, 667, 668, 669, 670, 671, 568, 598, 672, 673, /* 310 */ 667, 668, 669, 670, 671, 672, 673, 674, 675, 676,
/* 320 */ 619, 621, 681, /* 320 */ 576, 602, 677, 678, 623, 625, 686,
}; };
#define YY_REDUCE_COUNT (182) #define YY_REDUCE_COUNT (184)
#define YY_REDUCE_MIN (-247) #define YY_REDUCE_MIN (-249)
#define YY_REDUCE_MAX (418) #define YY_REDUCE_MAX (419)
static const short yy_reduce_ofst[] = { static const short yy_reduce_ofst[] = {
/* 0 */ -178, -27, -27, 74, 74, 99, -244, -217, -119, -76, /* 0 */ -179, -28, -28, 74, 74, 15, -246, -219, -121, -9,
/* 10 */ -176, -128, -8, 114, 132, 133, 140, 142, -191, -188, /* 10 */ 105, -177, 112, 134, 139, 141, 145, 154, -192, -189,
/* 20 */ -221, -204, 104, 112, 151, -227, 139, 148, 171, 20, /* 20 */ -223, -205, -175, 22, 158, -34, 148, -50, -43, 101,
/* 30 */ -113, -84, -123, 185, -193, 190, 193, -162, -36, 39, /* 30 */ -110, 122, -124, 3, 126, 179, 185, 133, -54, 57,
/* 40 */ -247, -240, -106, -39, -5, 13, 51, 101, 126, 149, /* 40 */ -249, -247, -242, -225, -169, 69, 99, 147, 171, 177,
/* 50 */ 159, 175, 186, 194, 198, 200, 202, 204, 205, 206, /* 50 */ 193, 195, 196, 197, 199, 200, 201, 202, 203, 204,
/* 60 */ 187, 196, 232, 234, 236, 238, 239, 240, 241, 269, /* 60 */ -162, 222, 232, 233, 234, 235, 236, 240, 241, 273,
/* 70 */ 278, 280, 213, 281, 282, 284, 242, 243, 287, 288, /* 70 */ 274, 278, 214, 279, 280, 281, 242, 243, 282, 283,
/* 80 */ 290, 210, 214, 244, 246, 296, 299, 302, 304, 310, /* 80 */ 284, 290, 217, 218, 244, 246, 293, 297, 306, 307,
/* 90 */ 312, 314, 315, 317, 320, 321, 323, 324, 325, 326, /* 90 */ 308, 312, 313, 315, 316, 318, 320, 321, 322, 324,
/* 100 */ 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, /* 100 */ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
/* 110 */ 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, /* 110 */ 336, 339, 340, 341, 342, 343, 344, 345, 346, 347,
/* 120 */ 349, 350, 352, 353, 354, 355, 356, 357, 358, 359, /* 120 */ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
/* 130 */ 360, 361, 362, 363, 364, 365, 366, 367, 369, 228, /* 130 */ 358, 359, 360, 362, 363, 364, 365, 366, 367, 368,
/* 140 */ 229, 235, 370, 248, 372, 250, 245, 251, 254, 252, /* 140 */ 229, 245, 248, 370, 251, 371, 247, 253, 373, 249,
/* 150 */ 285, 247, 376, 378, 380, 379, 381, 383, 261, 385, /* 150 */ 374, 250, 375, 379, 376, 382, 254, 377, 378, 381,
/* 160 */ 386, 388, 389, 390, 393, 391, 394, 396, 399, 395, /* 160 */ 264, 383, 384, 386, 390, 388, 391, 389, 395, 394,
/* 170 */ 402, 397, 398, 400, 401, 403, 411, 413, 414, 416, /* 170 */ 397, 398, 393, 399, 396, 400, 411, 409, 412, 414,
/* 180 */ 417, 408, 418, /* 180 */ 415, 417, 418, 413, 419,
}; };
static const YYACTIONTYPE yy_default[] = { static const YYACTIONTYPE yy_default[] = {
/* 0 */ 791, 904, 850, 916, 838, 847, 1050, 1050, 791, 791, /* 0 */ 798, 911, 857, 923, 845, 854, 1059, 1059, 798, 798,
/* 10 */ 791, 791, 791, 791, 791, 791, 791, 791, 963, 810, /* 10 */ 798, 798, 798, 798, 798, 798, 798, 798, 970, 817,
/* 20 */ 1050, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 20 */ 1059, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 30 */ 847, 791, 791, 853, 847, 853, 853, 958, 888, 906, /* 30 */ 854, 798, 798, 860, 854, 860, 860, 965, 895, 913,
/* 40 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 40 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 50 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 50 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 60 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 60 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 70 */ 791, 791, 965, 971, 968, 791, 791, 791, 973, 791, /* 70 */ 798, 798, 972, 978, 975, 798, 798, 798, 980, 798,
/* 80 */ 791, 993, 993, 956, 791, 791, 791, 791, 791, 791, /* 80 */ 798, 798, 1002, 1002, 963, 798, 798, 798, 798, 798,
/* 90 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 90 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 100 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 100 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 110 */ 791, 791, 836, 791, 834, 791, 791, 791, 791, 791, /* 110 */ 798, 798, 798, 843, 798, 841, 798, 798, 798, 798,
/* 120 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 821, /* 120 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 130 */ 791, 791, 791, 791, 791, 791, 812, 812, 812, 791, /* 130 */ 828, 798, 798, 798, 798, 798, 798, 819, 819, 819,
/* 140 */ 791, 791, 812, 791, 812, 1000, 1004, 998, 986, 994, /* 140 */ 798, 798, 798, 819, 798, 819, 1009, 1013, 1007, 995,
/* 150 */ 985, 981, 979, 978, 1008, 812, 812, 812, 851, 847, /* 150 */ 1003, 994, 990, 988, 986, 985, 1017, 819, 819, 819,
/* 160 */ 847, 812, 812, 869, 867, 865, 857, 863, 859, 861, /* 160 */ 858, 854, 854, 819, 819, 876, 874, 872, 864, 870,
/* 170 */ 855, 839, 812, 845, 845, 812, 845, 812, 845, 812, /* 170 */ 866, 868, 862, 846, 819, 852, 852, 819, 852, 819,
/* 180 */ 812, 888, 906, 791, 1009, 791, 1049, 999, 1039, 1038, /* 180 */ 852, 819, 819, 895, 913, 798, 1018, 798, 1058, 1008,
/* 190 */ 1045, 1037, 1036, 1035, 791, 791, 791, 1031, 1032, 1034, /* 190 */ 1048, 1047, 1054, 1046, 1045, 1044, 798, 798, 798, 1040,
/* 200 */ 1033, 791, 791, 1041, 1040, 791, 791, 791, 791, 791, /* 200 */ 1041, 1043, 1042, 798, 798, 1050, 1049, 798, 798, 798,
/* 210 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 210 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 220 */ 1011, 791, 1005, 1001, 791, 791, 791, 791, 791, 791, /* 220 */ 798, 798, 1020, 798, 1014, 1010, 798, 798, 798, 798,
/* 230 */ 791, 791, 791, 918, 791, 791, 791, 791, 791, 791, /* 230 */ 798, 798, 798, 798, 798, 925, 798, 798, 798, 798,
/* 240 */ 791, 791, 791, 791, 791, 791, 791, 791, 955, 791, /* 240 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 250 */ 791, 791, 791, 791, 967, 966, 791, 791, 791, 791, /* 250 */ 962, 798, 798, 798, 798, 798, 974, 973, 798, 798,
/* 260 */ 791, 791, 791, 791, 791, 995, 791, 987, 791, 791, /* 260 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 1004,
/* 270 */ 791, 791, 791, 930, 791, 791, 791, 791, 791, 791, /* 270 */ 798, 996, 798, 798, 798, 798, 798, 937, 798, 798,
/* 280 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 1061, /* 280 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 290 */ 1059, 791, 791, 791, 1055, 791, 791, 791, 1053, 791, /* 290 */ 798, 798, 798, 1070, 1068, 798, 798, 798, 1064, 798,
/* 300 */ 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, /* 300 */ 798, 798, 1062, 798, 798, 798, 798, 798, 798, 798,
/* 310 */ 791, 791, 791, 791, 791, 791, 872, 791, 819, 817, /* 310 */ 798, 798, 798, 798, 798, 798, 798, 798, 798, 798,
/* 320 */ 791, 808, 791, /* 320 */ 879, 798, 826, 824, 798, 815, 798,
}; };
/********** End of lemon-generated parsing tables *****************************/ /********** End of lemon-generated parsing tables *****************************/
...@@ -602,6 +603,7 @@ static const YYCODETYPE yyFallback[] = { ...@@ -602,6 +603,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* VARIABLE => nothing */ 0, /* VARIABLE => nothing */
0, /* INTERVAL => nothing */ 0, /* INTERVAL => nothing */
0, /* SESSION => nothing */ 0, /* SESSION => nothing */
0, /* STATE_WINDOW => nothing */
0, /* FILL => nothing */ 0, /* FILL => nothing */
0, /* SLIDING => nothing */ 0, /* SLIDING => nothing */
0, /* ORDER => nothing */ 0, /* ORDER => nothing */
...@@ -875,150 +877,152 @@ static const char *const yyTokenName[] = { ...@@ -875,150 +877,152 @@ static const char *const yyTokenName[] = {
/* 117 */ "VARIABLE", /* 117 */ "VARIABLE",
/* 118 */ "INTERVAL", /* 118 */ "INTERVAL",
/* 119 */ "SESSION", /* 119 */ "SESSION",
/* 120 */ "FILL", /* 120 */ "STATE_WINDOW",
/* 121 */ "SLIDING", /* 121 */ "FILL",
/* 122 */ "ORDER", /* 122 */ "SLIDING",
/* 123 */ "BY", /* 123 */ "ORDER",
/* 124 */ "ASC", /* 124 */ "BY",
/* 125 */ "DESC", /* 125 */ "ASC",
/* 126 */ "GROUP", /* 126 */ "DESC",
/* 127 */ "HAVING", /* 127 */ "GROUP",
/* 128 */ "LIMIT", /* 128 */ "HAVING",
/* 129 */ "OFFSET", /* 129 */ "LIMIT",
/* 130 */ "SLIMIT", /* 130 */ "OFFSET",
/* 131 */ "SOFFSET", /* 131 */ "SLIMIT",
/* 132 */ "WHERE", /* 132 */ "SOFFSET",
/* 133 */ "NOW", /* 133 */ "WHERE",
/* 134 */ "RESET", /* 134 */ "NOW",
/* 135 */ "QUERY", /* 135 */ "RESET",
/* 136 */ "SYNCDB", /* 136 */ "QUERY",
/* 137 */ "ADD", /* 137 */ "SYNCDB",
/* 138 */ "COLUMN", /* 138 */ "ADD",
/* 139 */ "TAG", /* 139 */ "COLUMN",
/* 140 */ "CHANGE", /* 140 */ "TAG",
/* 141 */ "SET", /* 141 */ "CHANGE",
/* 142 */ "KILL", /* 142 */ "SET",
/* 143 */ "CONNECTION", /* 143 */ "KILL",
/* 144 */ "STREAM", /* 144 */ "CONNECTION",
/* 145 */ "COLON", /* 145 */ "STREAM",
/* 146 */ "ABORT", /* 146 */ "COLON",
/* 147 */ "AFTER", /* 147 */ "ABORT",
/* 148 */ "ATTACH", /* 148 */ "AFTER",
/* 149 */ "BEFORE", /* 149 */ "ATTACH",
/* 150 */ "BEGIN", /* 150 */ "BEFORE",
/* 151 */ "CASCADE", /* 151 */ "BEGIN",
/* 152 */ "CLUSTER", /* 152 */ "CASCADE",
/* 153 */ "CONFLICT", /* 153 */ "CLUSTER",
/* 154 */ "COPY", /* 154 */ "CONFLICT",
/* 155 */ "DEFERRED", /* 155 */ "COPY",
/* 156 */ "DELIMITERS", /* 156 */ "DEFERRED",
/* 157 */ "DETACH", /* 157 */ "DELIMITERS",
/* 158 */ "EACH", /* 158 */ "DETACH",
/* 159 */ "END", /* 159 */ "EACH",
/* 160 */ "EXPLAIN", /* 160 */ "END",
/* 161 */ "FAIL", /* 161 */ "EXPLAIN",
/* 162 */ "FOR", /* 162 */ "FAIL",
/* 163 */ "IGNORE", /* 163 */ "FOR",
/* 164 */ "IMMEDIATE", /* 164 */ "IGNORE",
/* 165 */ "INITIALLY", /* 165 */ "IMMEDIATE",
/* 166 */ "INSTEAD", /* 166 */ "INITIALLY",
/* 167 */ "MATCH", /* 167 */ "INSTEAD",
/* 168 */ "KEY", /* 168 */ "MATCH",
/* 169 */ "OF", /* 169 */ "KEY",
/* 170 */ "RAISE", /* 170 */ "OF",
/* 171 */ "REPLACE", /* 171 */ "RAISE",
/* 172 */ "RESTRICT", /* 172 */ "REPLACE",
/* 173 */ "ROW", /* 173 */ "RESTRICT",
/* 174 */ "STATEMENT", /* 174 */ "ROW",
/* 175 */ "TRIGGER", /* 175 */ "STATEMENT",
/* 176 */ "VIEW", /* 176 */ "TRIGGER",
/* 177 */ "SEMI", /* 177 */ "VIEW",
/* 178 */ "NONE", /* 178 */ "SEMI",
/* 179 */ "PREV", /* 179 */ "NONE",
/* 180 */ "LINEAR", /* 180 */ "PREV",
/* 181 */ "IMPORT", /* 181 */ "LINEAR",
/* 182 */ "TBNAME", /* 182 */ "IMPORT",
/* 183 */ "JOIN", /* 183 */ "TBNAME",
/* 184 */ "INSERT", /* 184 */ "JOIN",
/* 185 */ "INTO", /* 185 */ "INSERT",
/* 186 */ "VALUES", /* 186 */ "INTO",
/* 187 */ "error", /* 187 */ "VALUES",
/* 188 */ "program", /* 188 */ "error",
/* 189 */ "cmd", /* 189 */ "program",
/* 190 */ "dbPrefix", /* 190 */ "cmd",
/* 191 */ "ids", /* 191 */ "dbPrefix",
/* 192 */ "cpxName", /* 192 */ "ids",
/* 193 */ "ifexists", /* 193 */ "cpxName",
/* 194 */ "alter_db_optr", /* 194 */ "ifexists",
/* 195 */ "alter_topic_optr", /* 195 */ "alter_db_optr",
/* 196 */ "acct_optr", /* 196 */ "alter_topic_optr",
/* 197 */ "ifnotexists", /* 197 */ "acct_optr",
/* 198 */ "db_optr", /* 198 */ "ifnotexists",
/* 199 */ "topic_optr", /* 199 */ "db_optr",
/* 200 */ "pps", /* 200 */ "topic_optr",
/* 201 */ "tseries", /* 201 */ "pps",
/* 202 */ "dbs", /* 202 */ "tseries",
/* 203 */ "streams", /* 203 */ "dbs",
/* 204 */ "storage", /* 204 */ "streams",
/* 205 */ "qtime", /* 205 */ "storage",
/* 206 */ "users", /* 206 */ "qtime",
/* 207 */ "conns", /* 207 */ "users",
/* 208 */ "state", /* 208 */ "conns",
/* 209 */ "keep", /* 209 */ "state",
/* 210 */ "tagitemlist", /* 210 */ "keep",
/* 211 */ "cache", /* 211 */ "tagitemlist",
/* 212 */ "replica", /* 212 */ "cache",
/* 213 */ "quorum", /* 213 */ "replica",
/* 214 */ "days", /* 214 */ "quorum",
/* 215 */ "minrows", /* 215 */ "days",
/* 216 */ "maxrows", /* 216 */ "minrows",
/* 217 */ "blocks", /* 217 */ "maxrows",
/* 218 */ "ctime", /* 218 */ "blocks",
/* 219 */ "wal", /* 219 */ "ctime",
/* 220 */ "fsync", /* 220 */ "wal",
/* 221 */ "comp", /* 221 */ "fsync",
/* 222 */ "prec", /* 222 */ "comp",
/* 223 */ "update", /* 223 */ "prec",
/* 224 */ "cachelast", /* 224 */ "update",
/* 225 */ "partitions", /* 225 */ "cachelast",
/* 226 */ "typename", /* 226 */ "partitions",
/* 227 */ "signed", /* 227 */ "typename",
/* 228 */ "create_table_args", /* 228 */ "signed",
/* 229 */ "create_stable_args", /* 229 */ "create_table_args",
/* 230 */ "create_table_list", /* 230 */ "create_stable_args",
/* 231 */ "create_from_stable", /* 231 */ "create_table_list",
/* 232 */ "columnlist", /* 232 */ "create_from_stable",
/* 233 */ "tagNamelist", /* 233 */ "columnlist",
/* 234 */ "select", /* 234 */ "tagNamelist",
/* 235 */ "column", /* 235 */ "select",
/* 236 */ "tagitem", /* 236 */ "column",
/* 237 */ "selcollist", /* 237 */ "tagitem",
/* 238 */ "from", /* 238 */ "selcollist",
/* 239 */ "where_opt", /* 239 */ "from",
/* 240 */ "interval_opt", /* 240 */ "where_opt",
/* 241 */ "session_option", /* 241 */ "interval_opt",
/* 242 */ "fill_opt", /* 242 */ "session_option",
/* 243 */ "sliding_opt", /* 243 */ "windowstate_option",
/* 244 */ "groupby_opt", /* 244 */ "fill_opt",
/* 245 */ "orderby_opt", /* 245 */ "sliding_opt",
/* 246 */ "having_opt", /* 246 */ "groupby_opt",
/* 247 */ "slimit_opt", /* 247 */ "orderby_opt",
/* 248 */ "limit_opt", /* 248 */ "having_opt",
/* 249 */ "union", /* 249 */ "slimit_opt",
/* 250 */ "sclp", /* 250 */ "limit_opt",
/* 251 */ "distinct", /* 251 */ "union",
/* 252 */ "expr", /* 252 */ "sclp",
/* 253 */ "as", /* 253 */ "distinct",
/* 254 */ "tablelist", /* 254 */ "expr",
/* 255 */ "sub", /* 255 */ "as",
/* 256 */ "tmvar", /* 256 */ "tablelist",
/* 257 */ "sortlist", /* 257 */ "sub",
/* 258 */ "sortitem", /* 258 */ "tmvar",
/* 259 */ "item", /* 259 */ "sortlist",
/* 260 */ "sortorder", /* 260 */ "sortitem",
/* 261 */ "grouplist", /* 261 */ "item",
/* 262 */ "exprlist", /* 262 */ "sortorder",
/* 263 */ "expritem", /* 263 */ "grouplist",
/* 264 */ "exprlist",
/* 265 */ "expritem",
}; };
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
...@@ -1183,7 +1187,7 @@ static const char *const yyRuleName[] = { ...@@ -1183,7 +1187,7 @@ static const char *const yyRuleName[] = {
/* 154 */ "tagitem ::= MINUS FLOAT", /* 154 */ "tagitem ::= MINUS FLOAT",
/* 155 */ "tagitem ::= PLUS INTEGER", /* 155 */ "tagitem ::= PLUS INTEGER",
/* 156 */ "tagitem ::= PLUS FLOAT", /* 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", /* 158 */ "select ::= LP select RP",
/* 159 */ "union ::= select", /* 159 */ "union ::= select",
/* 160 */ "union ::= union UNION ALL select", /* 160 */ "union ::= union UNION ALL select",
...@@ -1213,92 +1217,94 @@ static const char *const yyRuleName[] = { ...@@ -1213,92 +1217,94 @@ static const char *const yyRuleName[] = {
/* 184 */ "interval_opt ::=", /* 184 */ "interval_opt ::=",
/* 185 */ "session_option ::=", /* 185 */ "session_option ::=",
/* 186 */ "session_option ::= SESSION LP ids cpxName COMMA tmvar RP", /* 186 */ "session_option ::= SESSION LP ids cpxName COMMA tmvar RP",
/* 187 */ "fill_opt ::=", /* 187 */ "windowstate_option ::=",
/* 188 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP", /* 188 */ "windowstate_option ::= STATE_WINDOW LP ids RP",
/* 189 */ "fill_opt ::= FILL LP ID RP", /* 189 */ "fill_opt ::=",
/* 190 */ "sliding_opt ::= SLIDING LP tmvar RP", /* 190 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
/* 191 */ "sliding_opt ::=", /* 191 */ "fill_opt ::= FILL LP ID RP",
/* 192 */ "orderby_opt ::=", /* 192 */ "sliding_opt ::= SLIDING LP tmvar RP",
/* 193 */ "orderby_opt ::= ORDER BY sortlist", /* 193 */ "sliding_opt ::=",
/* 194 */ "sortlist ::= sortlist COMMA item sortorder", /* 194 */ "orderby_opt ::=",
/* 195 */ "sortlist ::= item sortorder", /* 195 */ "orderby_opt ::= ORDER BY sortlist",
/* 196 */ "item ::= ids cpxName", /* 196 */ "sortlist ::= sortlist COMMA item sortorder",
/* 197 */ "sortorder ::= ASC", /* 197 */ "sortlist ::= item sortorder",
/* 198 */ "sortorder ::= DESC", /* 198 */ "item ::= ids cpxName",
/* 199 */ "sortorder ::=", /* 199 */ "sortorder ::= ASC",
/* 200 */ "groupby_opt ::=", /* 200 */ "sortorder ::= DESC",
/* 201 */ "groupby_opt ::= GROUP BY grouplist", /* 201 */ "sortorder ::=",
/* 202 */ "grouplist ::= grouplist COMMA item", /* 202 */ "groupby_opt ::=",
/* 203 */ "grouplist ::= item", /* 203 */ "groupby_opt ::= GROUP BY grouplist",
/* 204 */ "having_opt ::=", /* 204 */ "grouplist ::= grouplist COMMA item",
/* 205 */ "having_opt ::= HAVING expr", /* 205 */ "grouplist ::= item",
/* 206 */ "limit_opt ::=", /* 206 */ "having_opt ::=",
/* 207 */ "limit_opt ::= LIMIT signed", /* 207 */ "having_opt ::= HAVING expr",
/* 208 */ "limit_opt ::= LIMIT signed OFFSET signed", /* 208 */ "limit_opt ::=",
/* 209 */ "limit_opt ::= LIMIT signed COMMA signed", /* 209 */ "limit_opt ::= LIMIT signed",
/* 210 */ "slimit_opt ::=", /* 210 */ "limit_opt ::= LIMIT signed OFFSET signed",
/* 211 */ "slimit_opt ::= SLIMIT signed", /* 211 */ "limit_opt ::= LIMIT signed COMMA signed",
/* 212 */ "slimit_opt ::= SLIMIT signed SOFFSET signed", /* 212 */ "slimit_opt ::=",
/* 213 */ "slimit_opt ::= SLIMIT signed COMMA signed", /* 213 */ "slimit_opt ::= SLIMIT signed",
/* 214 */ "where_opt ::=", /* 214 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
/* 215 */ "where_opt ::= WHERE expr", /* 215 */ "slimit_opt ::= SLIMIT signed COMMA signed",
/* 216 */ "expr ::= LP expr RP", /* 216 */ "where_opt ::=",
/* 217 */ "expr ::= ID", /* 217 */ "where_opt ::= WHERE expr",
/* 218 */ "expr ::= ID DOT ID", /* 218 */ "expr ::= LP expr RP",
/* 219 */ "expr ::= ID DOT STAR", /* 219 */ "expr ::= ID",
/* 220 */ "expr ::= INTEGER", /* 220 */ "expr ::= ID DOT ID",
/* 221 */ "expr ::= MINUS INTEGER", /* 221 */ "expr ::= ID DOT STAR",
/* 222 */ "expr ::= PLUS INTEGER", /* 222 */ "expr ::= INTEGER",
/* 223 */ "expr ::= FLOAT", /* 223 */ "expr ::= MINUS INTEGER",
/* 224 */ "expr ::= MINUS FLOAT", /* 224 */ "expr ::= PLUS INTEGER",
/* 225 */ "expr ::= PLUS FLOAT", /* 225 */ "expr ::= FLOAT",
/* 226 */ "expr ::= STRING", /* 226 */ "expr ::= MINUS FLOAT",
/* 227 */ "expr ::= NOW", /* 227 */ "expr ::= PLUS FLOAT",
/* 228 */ "expr ::= VARIABLE", /* 228 */ "expr ::= STRING",
/* 229 */ "expr ::= PLUS VARIABLE", /* 229 */ "expr ::= NOW",
/* 230 */ "expr ::= MINUS VARIABLE", /* 230 */ "expr ::= VARIABLE",
/* 231 */ "expr ::= BOOL", /* 231 */ "expr ::= PLUS VARIABLE",
/* 232 */ "expr ::= NULL", /* 232 */ "expr ::= MINUS VARIABLE",
/* 233 */ "expr ::= ID LP exprlist RP", /* 233 */ "expr ::= BOOL",
/* 234 */ "expr ::= ID LP STAR RP", /* 234 */ "expr ::= NULL",
/* 235 */ "expr ::= expr IS NULL", /* 235 */ "expr ::= ID LP exprlist RP",
/* 236 */ "expr ::= expr IS NOT NULL", /* 236 */ "expr ::= ID LP STAR RP",
/* 237 */ "expr ::= expr LT expr", /* 237 */ "expr ::= expr IS NULL",
/* 238 */ "expr ::= expr GT expr", /* 238 */ "expr ::= expr IS NOT NULL",
/* 239 */ "expr ::= expr LE expr", /* 239 */ "expr ::= expr LT expr",
/* 240 */ "expr ::= expr GE expr", /* 240 */ "expr ::= expr GT expr",
/* 241 */ "expr ::= expr NE expr", /* 241 */ "expr ::= expr LE expr",
/* 242 */ "expr ::= expr EQ expr", /* 242 */ "expr ::= expr GE expr",
/* 243 */ "expr ::= expr BETWEEN expr AND expr", /* 243 */ "expr ::= expr NE expr",
/* 244 */ "expr ::= expr AND expr", /* 244 */ "expr ::= expr EQ expr",
/* 245 */ "expr ::= expr OR expr", /* 245 */ "expr ::= expr BETWEEN expr AND expr",
/* 246 */ "expr ::= expr PLUS expr", /* 246 */ "expr ::= expr AND expr",
/* 247 */ "expr ::= expr MINUS expr", /* 247 */ "expr ::= expr OR expr",
/* 248 */ "expr ::= expr STAR expr", /* 248 */ "expr ::= expr PLUS expr",
/* 249 */ "expr ::= expr SLASH expr", /* 249 */ "expr ::= expr MINUS expr",
/* 250 */ "expr ::= expr REM expr", /* 250 */ "expr ::= expr STAR expr",
/* 251 */ "expr ::= expr LIKE expr", /* 251 */ "expr ::= expr SLASH expr",
/* 252 */ "expr ::= expr IN LP exprlist RP", /* 252 */ "expr ::= expr REM expr",
/* 253 */ "exprlist ::= exprlist COMMA expritem", /* 253 */ "expr ::= expr LIKE expr",
/* 254 */ "exprlist ::= expritem", /* 254 */ "expr ::= expr IN LP exprlist RP",
/* 255 */ "expritem ::= expr", /* 255 */ "exprlist ::= exprlist COMMA expritem",
/* 256 */ "expritem ::=", /* 256 */ "exprlist ::= expritem",
/* 257 */ "cmd ::= RESET QUERY CACHE", /* 257 */ "expritem ::= expr",
/* 258 */ "cmd ::= SYNCDB ids REPLICA", /* 258 */ "expritem ::=",
/* 259 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", /* 259 */ "cmd ::= RESET QUERY CACHE",
/* 260 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", /* 260 */ "cmd ::= SYNCDB ids REPLICA",
/* 261 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", /* 261 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
/* 262 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", /* 262 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
/* 263 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", /* 263 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
/* 264 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", /* 264 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
/* 265 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist", /* 265 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
/* 266 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids", /* 266 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
/* 267 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist", /* 267 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist",
/* 268 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids", /* 268 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids",
/* 269 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids", /* 269 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist",
/* 270 */ "cmd ::= KILL CONNECTION INTEGER", /* 270 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids",
/* 271 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", /* 271 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids",
/* 272 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", /* 272 */ "cmd ::= KILL CONNECTION INTEGER",
/* 273 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 274 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
}; };
#endif /* NDEBUG */ #endif /* NDEBUG */
...@@ -1419,59 +1425,59 @@ static void yy_destructor( ...@@ -1419,59 +1425,59 @@ static void yy_destructor(
** inside the C code. ** inside the C code.
*/ */
/********* Begin destructor definitions ***************************************/ /********* Begin destructor definitions ***************************************/
case 209: /* keep */ case 210: /* keep */
case 210: /* tagitemlist */ case 211: /* tagitemlist */
case 232: /* columnlist */ case 233: /* columnlist */
case 233: /* tagNamelist */ case 234: /* tagNamelist */
case 242: /* fill_opt */ case 244: /* fill_opt */
case 244: /* groupby_opt */ case 246: /* groupby_opt */
case 245: /* orderby_opt */ case 247: /* orderby_opt */
case 257: /* sortlist */ case 259: /* sortlist */
case 261: /* grouplist */ case 263: /* grouplist */
{ {
taosArrayDestroy((yypminor->yy285)); taosArrayDestroy((yypminor->yy193));
} }
break; break;
case 230: /* create_table_list */ case 231: /* create_table_list */
{ {
destroyCreateTableSql((yypminor->yy470)); destroyCreateTableSql((yypminor->yy270));
} }
break; break;
case 234: /* select */ case 235: /* select */
{ {
destroySqlNode((yypminor->yy344)); destroySqlNode((yypminor->yy124));
} }
break; break;
case 237: /* selcollist */ case 238: /* selcollist */
case 250: /* sclp */ case 252: /* sclp */
case 262: /* exprlist */ case 264: /* exprlist */
{ {
tSqlExprListDestroy((yypminor->yy285)); tSqlExprListDestroy((yypminor->yy193));
} }
break; break;
case 238: /* from */ case 239: /* from */
case 254: /* tablelist */ case 256: /* tablelist */
case 255: /* sub */ case 257: /* sub */
{ {
destroyRelationInfo((yypminor->yy148)); destroyRelationInfo((yypminor->yy332));
} }
break; break;
case 239: /* where_opt */ case 240: /* where_opt */
case 246: /* having_opt */ case 248: /* having_opt */
case 252: /* expr */ case 254: /* expr */
case 263: /* expritem */ case 265: /* expritem */
{ {
tSqlExprDestroy((yypminor->yy178)); tSqlExprDestroy((yypminor->yy454));
} }
break; break;
case 249: /* union */ case 251: /* union */
{ {
destroyAllSqlNode((yypminor->yy285)); destroyAllSqlNode((yypminor->yy193));
} }
break; break;
case 258: /* sortitem */ case 260: /* sortitem */
{ {
tVariantDestroy(&(yypminor->yy362)); tVariantDestroy(&(yypminor->yy442));
} }
break; break;
/********* End destructor definitions *****************************************/ /********* End destructor definitions *****************************************/
...@@ -1765,279 +1771,281 @@ static const struct { ...@@ -1765,279 +1771,281 @@ static const struct {
YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
signed char nrhs; /* Negative of the number of RHS symbols in the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */
} yyRuleInfo[] = { } yyRuleInfo[] = {
{ 188, -1 }, /* (0) program ::= cmd */ { 189, -1 }, /* (0) program ::= cmd */
{ 189, -2 }, /* (1) cmd ::= SHOW DATABASES */ { 190, -2 }, /* (1) cmd ::= SHOW DATABASES */
{ 189, -2 }, /* (2) cmd ::= SHOW TOPICS */ { 190, -2 }, /* (2) cmd ::= SHOW TOPICS */
{ 189, -2 }, /* (3) cmd ::= SHOW MNODES */ { 190, -2 }, /* (3) cmd ::= SHOW MNODES */
{ 189, -2 }, /* (4) cmd ::= SHOW DNODES */ { 190, -2 }, /* (4) cmd ::= SHOW DNODES */
{ 189, -2 }, /* (5) cmd ::= SHOW ACCOUNTS */ { 190, -2 }, /* (5) cmd ::= SHOW ACCOUNTS */
{ 189, -2 }, /* (6) cmd ::= SHOW USERS */ { 190, -2 }, /* (6) cmd ::= SHOW USERS */
{ 189, -2 }, /* (7) cmd ::= SHOW MODULES */ { 190, -2 }, /* (7) cmd ::= SHOW MODULES */
{ 189, -2 }, /* (8) cmd ::= SHOW QUERIES */ { 190, -2 }, /* (8) cmd ::= SHOW QUERIES */
{ 189, -2 }, /* (9) cmd ::= SHOW CONNECTIONS */ { 190, -2 }, /* (9) cmd ::= SHOW CONNECTIONS */
{ 189, -2 }, /* (10) cmd ::= SHOW STREAMS */ { 190, -2 }, /* (10) cmd ::= SHOW STREAMS */
{ 189, -2 }, /* (11) cmd ::= SHOW VARIABLES */ { 190, -2 }, /* (11) cmd ::= SHOW VARIABLES */
{ 189, -2 }, /* (12) cmd ::= SHOW SCORES */ { 190, -2 }, /* (12) cmd ::= SHOW SCORES */
{ 189, -2 }, /* (13) cmd ::= SHOW GRANTS */ { 190, -2 }, /* (13) cmd ::= SHOW GRANTS */
{ 189, -2 }, /* (14) cmd ::= SHOW VNODES */ { 190, -2 }, /* (14) cmd ::= SHOW VNODES */
{ 189, -3 }, /* (15) cmd ::= SHOW VNODES IPTOKEN */ { 190, -3 }, /* (15) cmd ::= SHOW VNODES IPTOKEN */
{ 190, 0 }, /* (16) dbPrefix ::= */ { 191, 0 }, /* (16) dbPrefix ::= */
{ 190, -2 }, /* (17) dbPrefix ::= ids DOT */ { 191, -2 }, /* (17) dbPrefix ::= ids DOT */
{ 192, 0 }, /* (18) cpxName ::= */ { 193, 0 }, /* (18) cpxName ::= */
{ 192, -2 }, /* (19) cpxName ::= DOT ids */ { 193, -2 }, /* (19) cpxName ::= DOT ids */
{ 189, -5 }, /* (20) cmd ::= SHOW CREATE TABLE ids cpxName */ { 190, -5 }, /* (20) cmd ::= SHOW CREATE TABLE ids cpxName */
{ 189, -5 }, /* (21) cmd ::= SHOW CREATE STABLE ids cpxName */ { 190, -5 }, /* (21) cmd ::= SHOW CREATE STABLE ids cpxName */
{ 189, -4 }, /* (22) cmd ::= SHOW CREATE DATABASE ids */ { 190, -4 }, /* (22) cmd ::= SHOW CREATE DATABASE ids */
{ 189, -3 }, /* (23) cmd ::= SHOW dbPrefix TABLES */ { 190, -3 }, /* (23) cmd ::= SHOW dbPrefix TABLES */
{ 189, -5 }, /* (24) cmd ::= SHOW dbPrefix TABLES LIKE ids */ { 190, -5 }, /* (24) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{ 189, -3 }, /* (25) cmd ::= SHOW dbPrefix STABLES */ { 190, -3 }, /* (25) cmd ::= SHOW dbPrefix STABLES */
{ 189, -5 }, /* (26) cmd ::= SHOW dbPrefix STABLES LIKE ids */ { 190, -5 }, /* (26) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{ 189, -3 }, /* (27) cmd ::= SHOW dbPrefix VGROUPS */ { 190, -3 }, /* (27) cmd ::= SHOW dbPrefix VGROUPS */
{ 189, -4 }, /* (28) cmd ::= SHOW dbPrefix VGROUPS ids */ { 190, -4 }, /* (28) cmd ::= SHOW dbPrefix VGROUPS ids */
{ 189, -5 }, /* (29) cmd ::= DROP TABLE ifexists ids cpxName */ { 190, -5 }, /* (29) cmd ::= DROP TABLE ifexists ids cpxName */
{ 189, -5 }, /* (30) cmd ::= DROP STABLE ifexists ids cpxName */ { 190, -5 }, /* (30) cmd ::= DROP STABLE ifexists ids cpxName */
{ 189, -4 }, /* (31) cmd ::= DROP DATABASE ifexists ids */ { 190, -4 }, /* (31) cmd ::= DROP DATABASE ifexists ids */
{ 189, -4 }, /* (32) cmd ::= DROP TOPIC ifexists ids */ { 190, -4 }, /* (32) cmd ::= DROP TOPIC ifexists ids */
{ 189, -3 }, /* (33) cmd ::= DROP DNODE ids */ { 190, -3 }, /* (33) cmd ::= DROP DNODE ids */
{ 189, -3 }, /* (34) cmd ::= DROP USER ids */ { 190, -3 }, /* (34) cmd ::= DROP USER ids */
{ 189, -3 }, /* (35) cmd ::= DROP ACCOUNT ids */ { 190, -3 }, /* (35) cmd ::= DROP ACCOUNT ids */
{ 189, -2 }, /* (36) cmd ::= USE ids */ { 190, -2 }, /* (36) cmd ::= USE ids */
{ 189, -3 }, /* (37) cmd ::= DESCRIBE ids cpxName */ { 190, -3 }, /* (37) cmd ::= DESCRIBE ids cpxName */
{ 189, -5 }, /* (38) cmd ::= ALTER USER ids PASS ids */ { 190, -5 }, /* (38) cmd ::= ALTER USER ids PASS ids */
{ 189, -5 }, /* (39) cmd ::= ALTER USER ids PRIVILEGE ids */ { 190, -5 }, /* (39) cmd ::= ALTER USER ids PRIVILEGE ids */
{ 189, -4 }, /* (40) cmd ::= ALTER DNODE ids ids */ { 190, -4 }, /* (40) cmd ::= ALTER DNODE ids ids */
{ 189, -5 }, /* (41) cmd ::= ALTER DNODE ids ids ids */ { 190, -5 }, /* (41) cmd ::= ALTER DNODE ids ids ids */
{ 189, -3 }, /* (42) cmd ::= ALTER LOCAL ids */ { 190, -3 }, /* (42) cmd ::= ALTER LOCAL ids */
{ 189, -4 }, /* (43) cmd ::= ALTER LOCAL ids ids */ { 190, -4 }, /* (43) cmd ::= ALTER LOCAL ids ids */
{ 189, -4 }, /* (44) cmd ::= ALTER DATABASE ids alter_db_optr */ { 190, -4 }, /* (44) cmd ::= ALTER DATABASE ids alter_db_optr */
{ 189, -4 }, /* (45) cmd ::= ALTER TOPIC ids alter_topic_optr */ { 190, -4 }, /* (45) cmd ::= ALTER TOPIC ids alter_topic_optr */
{ 189, -4 }, /* (46) cmd ::= ALTER ACCOUNT ids acct_optr */ { 190, -4 }, /* (46) cmd ::= ALTER ACCOUNT ids acct_optr */
{ 189, -6 }, /* (47) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ { 190, -6 }, /* (47) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ 191, -1 }, /* (48) ids ::= ID */ { 192, -1 }, /* (48) ids ::= ID */
{ 191, -1 }, /* (49) ids ::= STRING */ { 192, -1 }, /* (49) ids ::= STRING */
{ 193, -2 }, /* (50) ifexists ::= IF EXISTS */ { 194, -2 }, /* (50) ifexists ::= IF EXISTS */
{ 193, 0 }, /* (51) ifexists ::= */ { 194, 0 }, /* (51) ifexists ::= */
{ 197, -3 }, /* (52) ifnotexists ::= IF NOT EXISTS */ { 198, -3 }, /* (52) ifnotexists ::= IF NOT EXISTS */
{ 197, 0 }, /* (53) ifnotexists ::= */ { 198, 0 }, /* (53) ifnotexists ::= */
{ 189, -3 }, /* (54) cmd ::= CREATE DNODE ids */ { 190, -3 }, /* (54) cmd ::= CREATE DNODE ids */
{ 189, -6 }, /* (55) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ { 190, -6 }, /* (55) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ 189, -5 }, /* (56) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ { 190, -5 }, /* (56) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ 189, -5 }, /* (57) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ { 190, -5 }, /* (57) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */
{ 189, -5 }, /* (58) cmd ::= CREATE USER ids PASS ids */ { 190, -5 }, /* (58) cmd ::= CREATE USER ids PASS ids */
{ 200, 0 }, /* (59) pps ::= */ { 201, 0 }, /* (59) pps ::= */
{ 200, -2 }, /* (60) pps ::= PPS INTEGER */ { 201, -2 }, /* (60) pps ::= PPS INTEGER */
{ 201, 0 }, /* (61) tseries ::= */ { 202, 0 }, /* (61) tseries ::= */
{ 201, -2 }, /* (62) tseries ::= TSERIES INTEGER */ { 202, -2 }, /* (62) tseries ::= TSERIES INTEGER */
{ 202, 0 }, /* (63) dbs ::= */ { 203, 0 }, /* (63) dbs ::= */
{ 202, -2 }, /* (64) dbs ::= DBS INTEGER */ { 203, -2 }, /* (64) dbs ::= DBS INTEGER */
{ 203, 0 }, /* (65) streams ::= */ { 204, 0 }, /* (65) streams ::= */
{ 203, -2 }, /* (66) streams ::= STREAMS INTEGER */ { 204, -2 }, /* (66) streams ::= STREAMS INTEGER */
{ 204, 0 }, /* (67) storage ::= */ { 205, 0 }, /* (67) storage ::= */
{ 204, -2 }, /* (68) storage ::= STORAGE INTEGER */ { 205, -2 }, /* (68) storage ::= STORAGE INTEGER */
{ 205, 0 }, /* (69) qtime ::= */ { 206, 0 }, /* (69) qtime ::= */
{ 205, -2 }, /* (70) qtime ::= QTIME INTEGER */ { 206, -2 }, /* (70) qtime ::= QTIME INTEGER */
{ 206, 0 }, /* (71) users ::= */ { 207, 0 }, /* (71) users ::= */
{ 206, -2 }, /* (72) users ::= USERS INTEGER */ { 207, -2 }, /* (72) users ::= USERS INTEGER */
{ 207, 0 }, /* (73) conns ::= */ { 208, 0 }, /* (73) conns ::= */
{ 207, -2 }, /* (74) conns ::= CONNS INTEGER */ { 208, -2 }, /* (74) conns ::= CONNS INTEGER */
{ 208, 0 }, /* (75) state ::= */ { 209, 0 }, /* (75) state ::= */
{ 208, -2 }, /* (76) state ::= STATE ids */ { 209, -2 }, /* (76) state ::= STATE ids */
{ 196, -9 }, /* (77) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ { 197, -9 }, /* (77) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ 209, -2 }, /* (78) keep ::= KEEP tagitemlist */ { 210, -2 }, /* (78) keep ::= KEEP tagitemlist */
{ 211, -2 }, /* (79) cache ::= CACHE INTEGER */ { 212, -2 }, /* (79) cache ::= CACHE INTEGER */
{ 212, -2 }, /* (80) replica ::= REPLICA INTEGER */ { 213, -2 }, /* (80) replica ::= REPLICA INTEGER */
{ 213, -2 }, /* (81) quorum ::= QUORUM INTEGER */ { 214, -2 }, /* (81) quorum ::= QUORUM INTEGER */
{ 214, -2 }, /* (82) days ::= DAYS INTEGER */ { 215, -2 }, /* (82) days ::= DAYS INTEGER */
{ 215, -2 }, /* (83) minrows ::= MINROWS INTEGER */ { 216, -2 }, /* (83) minrows ::= MINROWS INTEGER */
{ 216, -2 }, /* (84) maxrows ::= MAXROWS INTEGER */ { 217, -2 }, /* (84) maxrows ::= MAXROWS INTEGER */
{ 217, -2 }, /* (85) blocks ::= BLOCKS INTEGER */ { 218, -2 }, /* (85) blocks ::= BLOCKS INTEGER */
{ 218, -2 }, /* (86) ctime ::= CTIME INTEGER */ { 219, -2 }, /* (86) ctime ::= CTIME INTEGER */
{ 219, -2 }, /* (87) wal ::= WAL INTEGER */ { 220, -2 }, /* (87) wal ::= WAL INTEGER */
{ 220, -2 }, /* (88) fsync ::= FSYNC INTEGER */ { 221, -2 }, /* (88) fsync ::= FSYNC INTEGER */
{ 221, -2 }, /* (89) comp ::= COMP INTEGER */ { 222, -2 }, /* (89) comp ::= COMP INTEGER */
{ 222, -2 }, /* (90) prec ::= PRECISION STRING */ { 223, -2 }, /* (90) prec ::= PRECISION STRING */
{ 223, -2 }, /* (91) update ::= UPDATE INTEGER */ { 224, -2 }, /* (91) update ::= UPDATE INTEGER */
{ 224, -2 }, /* (92) cachelast ::= CACHELAST INTEGER */ { 225, -2 }, /* (92) cachelast ::= CACHELAST INTEGER */
{ 225, -2 }, /* (93) partitions ::= PARTITIONS INTEGER */ { 226, -2 }, /* (93) partitions ::= PARTITIONS INTEGER */
{ 198, 0 }, /* (94) db_optr ::= */ { 199, 0 }, /* (94) db_optr ::= */
{ 198, -2 }, /* (95) db_optr ::= db_optr cache */ { 199, -2 }, /* (95) db_optr ::= db_optr cache */
{ 198, -2 }, /* (96) db_optr ::= db_optr replica */ { 199, -2 }, /* (96) db_optr ::= db_optr replica */
{ 198, -2 }, /* (97) db_optr ::= db_optr quorum */ { 199, -2 }, /* (97) db_optr ::= db_optr quorum */
{ 198, -2 }, /* (98) db_optr ::= db_optr days */ { 199, -2 }, /* (98) db_optr ::= db_optr days */
{ 198, -2 }, /* (99) db_optr ::= db_optr minrows */ { 199, -2 }, /* (99) db_optr ::= db_optr minrows */
{ 198, -2 }, /* (100) db_optr ::= db_optr maxrows */ { 199, -2 }, /* (100) db_optr ::= db_optr maxrows */
{ 198, -2 }, /* (101) db_optr ::= db_optr blocks */ { 199, -2 }, /* (101) db_optr ::= db_optr blocks */
{ 198, -2 }, /* (102) db_optr ::= db_optr ctime */ { 199, -2 }, /* (102) db_optr ::= db_optr ctime */
{ 198, -2 }, /* (103) db_optr ::= db_optr wal */ { 199, -2 }, /* (103) db_optr ::= db_optr wal */
{ 198, -2 }, /* (104) db_optr ::= db_optr fsync */ { 199, -2 }, /* (104) db_optr ::= db_optr fsync */
{ 198, -2 }, /* (105) db_optr ::= db_optr comp */ { 199, -2 }, /* (105) db_optr ::= db_optr comp */
{ 198, -2 }, /* (106) db_optr ::= db_optr prec */ { 199, -2 }, /* (106) db_optr ::= db_optr prec */
{ 198, -2 }, /* (107) db_optr ::= db_optr keep */ { 199, -2 }, /* (107) db_optr ::= db_optr keep */
{ 198, -2 }, /* (108) db_optr ::= db_optr update */ { 199, -2 }, /* (108) db_optr ::= db_optr update */
{ 198, -2 }, /* (109) db_optr ::= db_optr cachelast */ { 199, -2 }, /* (109) db_optr ::= db_optr cachelast */
{ 199, -1 }, /* (110) topic_optr ::= db_optr */ { 200, -1 }, /* (110) topic_optr ::= db_optr */
{ 199, -2 }, /* (111) topic_optr ::= topic_optr partitions */ { 200, -2 }, /* (111) topic_optr ::= topic_optr partitions */
{ 194, 0 }, /* (112) alter_db_optr ::= */ { 195, 0 }, /* (112) alter_db_optr ::= */
{ 194, -2 }, /* (113) alter_db_optr ::= alter_db_optr replica */ { 195, -2 }, /* (113) alter_db_optr ::= alter_db_optr replica */
{ 194, -2 }, /* (114) alter_db_optr ::= alter_db_optr quorum */ { 195, -2 }, /* (114) alter_db_optr ::= alter_db_optr quorum */
{ 194, -2 }, /* (115) alter_db_optr ::= alter_db_optr keep */ { 195, -2 }, /* (115) alter_db_optr ::= alter_db_optr keep */
{ 194, -2 }, /* (116) alter_db_optr ::= alter_db_optr blocks */ { 195, -2 }, /* (116) alter_db_optr ::= alter_db_optr blocks */
{ 194, -2 }, /* (117) alter_db_optr ::= alter_db_optr comp */ { 195, -2 }, /* (117) alter_db_optr ::= alter_db_optr comp */
{ 194, -2 }, /* (118) alter_db_optr ::= alter_db_optr wal */ { 195, -2 }, /* (118) alter_db_optr ::= alter_db_optr wal */
{ 194, -2 }, /* (119) alter_db_optr ::= alter_db_optr fsync */ { 195, -2 }, /* (119) alter_db_optr ::= alter_db_optr fsync */
{ 194, -2 }, /* (120) alter_db_optr ::= alter_db_optr update */ { 195, -2 }, /* (120) alter_db_optr ::= alter_db_optr update */
{ 194, -2 }, /* (121) alter_db_optr ::= alter_db_optr cachelast */ { 195, -2 }, /* (121) alter_db_optr ::= alter_db_optr cachelast */
{ 195, -1 }, /* (122) alter_topic_optr ::= alter_db_optr */ { 196, -1 }, /* (122) alter_topic_optr ::= alter_db_optr */
{ 195, -2 }, /* (123) alter_topic_optr ::= alter_topic_optr partitions */ { 196, -2 }, /* (123) alter_topic_optr ::= alter_topic_optr partitions */
{ 226, -1 }, /* (124) typename ::= ids */ { 227, -1 }, /* (124) typename ::= ids */
{ 226, -4 }, /* (125) typename ::= ids LP signed RP */ { 227, -4 }, /* (125) typename ::= ids LP signed RP */
{ 226, -2 }, /* (126) typename ::= ids UNSIGNED */ { 227, -2 }, /* (126) typename ::= ids UNSIGNED */
{ 227, -1 }, /* (127) signed ::= INTEGER */ { 228, -1 }, /* (127) signed ::= INTEGER */
{ 227, -2 }, /* (128) signed ::= PLUS INTEGER */ { 228, -2 }, /* (128) signed ::= PLUS INTEGER */
{ 227, -2 }, /* (129) signed ::= MINUS INTEGER */ { 228, -2 }, /* (129) signed ::= MINUS INTEGER */
{ 189, -3 }, /* (130) cmd ::= CREATE TABLE create_table_args */ { 190, -3 }, /* (130) cmd ::= CREATE TABLE create_table_args */
{ 189, -3 }, /* (131) cmd ::= CREATE TABLE create_stable_args */ { 190, -3 }, /* (131) cmd ::= CREATE TABLE create_stable_args */
{ 189, -3 }, /* (132) cmd ::= CREATE STABLE create_stable_args */ { 190, -3 }, /* (132) cmd ::= CREATE STABLE create_stable_args */
{ 189, -3 }, /* (133) cmd ::= CREATE TABLE create_table_list */ { 190, -3 }, /* (133) cmd ::= CREATE TABLE create_table_list */
{ 230, -1 }, /* (134) create_table_list ::= create_from_stable */ { 231, -1 }, /* (134) create_table_list ::= create_from_stable */
{ 230, -2 }, /* (135) create_table_list ::= create_table_list create_from_stable */ { 231, -2 }, /* (135) create_table_list ::= create_table_list create_from_stable */
{ 228, -6 }, /* (136) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */ { 229, -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 */ { 230, -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 */ { 232, -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 */ { 232, -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 */ { 234, -3 }, /* (140) tagNamelist ::= tagNamelist COMMA ids */
{ 233, -1 }, /* (141) tagNamelist ::= ids */ { 234, -1 }, /* (141) tagNamelist ::= ids */
{ 228, -5 }, /* (142) create_table_args ::= ifnotexists ids cpxName AS select */ { 229, -5 }, /* (142) create_table_args ::= ifnotexists ids cpxName AS select */
{ 232, -3 }, /* (143) columnlist ::= columnlist COMMA column */ { 233, -3 }, /* (143) columnlist ::= columnlist COMMA column */
{ 232, -1 }, /* (144) columnlist ::= column */ { 233, -1 }, /* (144) columnlist ::= column */
{ 235, -2 }, /* (145) column ::= ids typename */ { 236, -2 }, /* (145) column ::= ids typename */
{ 210, -3 }, /* (146) tagitemlist ::= tagitemlist COMMA tagitem */ { 211, -3 }, /* (146) tagitemlist ::= tagitemlist COMMA tagitem */
{ 210, -1 }, /* (147) tagitemlist ::= tagitem */ { 211, -1 }, /* (147) tagitemlist ::= tagitem */
{ 236, -1 }, /* (148) tagitem ::= INTEGER */ { 237, -1 }, /* (148) tagitem ::= INTEGER */
{ 236, -1 }, /* (149) tagitem ::= FLOAT */ { 237, -1 }, /* (149) tagitem ::= FLOAT */
{ 236, -1 }, /* (150) tagitem ::= STRING */ { 237, -1 }, /* (150) tagitem ::= STRING */
{ 236, -1 }, /* (151) tagitem ::= BOOL */ { 237, -1 }, /* (151) tagitem ::= BOOL */
{ 236, -1 }, /* (152) tagitem ::= NULL */ { 237, -1 }, /* (152) tagitem ::= NULL */
{ 236, -2 }, /* (153) tagitem ::= MINUS INTEGER */ { 237, -2 }, /* (153) tagitem ::= MINUS INTEGER */
{ 236, -2 }, /* (154) tagitem ::= MINUS FLOAT */ { 237, -2 }, /* (154) tagitem ::= MINUS FLOAT */
{ 236, -2 }, /* (155) tagitem ::= PLUS INTEGER */ { 237, -2 }, /* (155) tagitem ::= PLUS INTEGER */
{ 236, -2 }, /* (156) tagitem ::= PLUS FLOAT */ { 237, -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 */ { 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 */
{ 234, -3 }, /* (158) select ::= LP select RP */ { 235, -3 }, /* (158) select ::= LP select RP */
{ 249, -1 }, /* (159) union ::= select */ { 251, -1 }, /* (159) union ::= select */
{ 249, -4 }, /* (160) union ::= union UNION ALL select */ { 251, -4 }, /* (160) union ::= union UNION ALL select */
{ 189, -1 }, /* (161) cmd ::= union */ { 190, -1 }, /* (161) cmd ::= union */
{ 234, -2 }, /* (162) select ::= SELECT selcollist */ { 235, -2 }, /* (162) select ::= SELECT selcollist */
{ 250, -2 }, /* (163) sclp ::= selcollist COMMA */ { 252, -2 }, /* (163) sclp ::= selcollist COMMA */
{ 250, 0 }, /* (164) sclp ::= */ { 252, 0 }, /* (164) sclp ::= */
{ 237, -4 }, /* (165) selcollist ::= sclp distinct expr as */ { 238, -4 }, /* (165) selcollist ::= sclp distinct expr as */
{ 237, -2 }, /* (166) selcollist ::= sclp STAR */ { 238, -2 }, /* (166) selcollist ::= sclp STAR */
{ 253, -2 }, /* (167) as ::= AS ids */ { 255, -2 }, /* (167) as ::= AS ids */
{ 253, -1 }, /* (168) as ::= ids */ { 255, -1 }, /* (168) as ::= ids */
{ 253, 0 }, /* (169) as ::= */ { 255, 0 }, /* (169) as ::= */
{ 251, -1 }, /* (170) distinct ::= DISTINCT */ { 253, -1 }, /* (170) distinct ::= DISTINCT */
{ 251, 0 }, /* (171) distinct ::= */ { 253, 0 }, /* (171) distinct ::= */
{ 238, -2 }, /* (172) from ::= FROM tablelist */ { 239, -2 }, /* (172) from ::= FROM tablelist */
{ 238, -2 }, /* (173) from ::= FROM sub */ { 239, -2 }, /* (173) from ::= FROM sub */
{ 255, -3 }, /* (174) sub ::= LP union RP */ { 257, -3 }, /* (174) sub ::= LP union RP */
{ 255, -4 }, /* (175) sub ::= LP union RP ids */ { 257, -4 }, /* (175) sub ::= LP union RP ids */
{ 255, -6 }, /* (176) sub ::= sub COMMA LP union RP ids */ { 257, -6 }, /* (176) sub ::= sub COMMA LP union RP ids */
{ 254, -2 }, /* (177) tablelist ::= ids cpxName */ { 256, -2 }, /* (177) tablelist ::= ids cpxName */
{ 254, -3 }, /* (178) tablelist ::= ids cpxName ids */ { 256, -3 }, /* (178) tablelist ::= ids cpxName ids */
{ 254, -4 }, /* (179) tablelist ::= tablelist COMMA ids cpxName */ { 256, -4 }, /* (179) tablelist ::= tablelist COMMA ids cpxName */
{ 254, -5 }, /* (180) tablelist ::= tablelist COMMA ids cpxName ids */ { 256, -5 }, /* (180) tablelist ::= tablelist COMMA ids cpxName ids */
{ 256, -1 }, /* (181) tmvar ::= VARIABLE */ { 258, -1 }, /* (181) tmvar ::= VARIABLE */
{ 240, -4 }, /* (182) interval_opt ::= INTERVAL LP tmvar RP */ { 241, -4 }, /* (182) interval_opt ::= INTERVAL LP tmvar RP */
{ 240, -6 }, /* (183) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */ { 241, -6 }, /* (183) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{ 240, 0 }, /* (184) interval_opt ::= */ { 241, 0 }, /* (184) interval_opt ::= */
{ 241, 0 }, /* (185) session_option ::= */ { 242, 0 }, /* (185) session_option ::= */
{ 241, -7 }, /* (186) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */ { 242, -7 }, /* (186) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{ 242, 0 }, /* (187) fill_opt ::= */ { 243, 0 }, /* (187) windowstate_option ::= */
{ 242, -6 }, /* (188) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ { 243, -4 }, /* (188) windowstate_option ::= STATE_WINDOW LP ids RP */
{ 242, -4 }, /* (189) fill_opt ::= FILL LP ID RP */ { 244, 0 }, /* (189) fill_opt ::= */
{ 243, -4 }, /* (190) sliding_opt ::= SLIDING LP tmvar RP */ { 244, -6 }, /* (190) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ 243, 0 }, /* (191) sliding_opt ::= */ { 244, -4 }, /* (191) fill_opt ::= FILL LP ID RP */
{ 245, 0 }, /* (192) orderby_opt ::= */ { 245, -4 }, /* (192) sliding_opt ::= SLIDING LP tmvar RP */
{ 245, -3 }, /* (193) orderby_opt ::= ORDER BY sortlist */ { 245, 0 }, /* (193) sliding_opt ::= */
{ 257, -4 }, /* (194) sortlist ::= sortlist COMMA item sortorder */ { 247, 0 }, /* (194) orderby_opt ::= */
{ 257, -2 }, /* (195) sortlist ::= item sortorder */ { 247, -3 }, /* (195) orderby_opt ::= ORDER BY sortlist */
{ 259, -2 }, /* (196) item ::= ids cpxName */ { 259, -4 }, /* (196) sortlist ::= sortlist COMMA item sortorder */
{ 260, -1 }, /* (197) sortorder ::= ASC */ { 259, -2 }, /* (197) sortlist ::= item sortorder */
{ 260, -1 }, /* (198) sortorder ::= DESC */ { 261, -2 }, /* (198) item ::= ids cpxName */
{ 260, 0 }, /* (199) sortorder ::= */ { 262, -1 }, /* (199) sortorder ::= ASC */
{ 244, 0 }, /* (200) groupby_opt ::= */ { 262, -1 }, /* (200) sortorder ::= DESC */
{ 244, -3 }, /* (201) groupby_opt ::= GROUP BY grouplist */ { 262, 0 }, /* (201) sortorder ::= */
{ 261, -3 }, /* (202) grouplist ::= grouplist COMMA item */ { 246, 0 }, /* (202) groupby_opt ::= */
{ 261, -1 }, /* (203) grouplist ::= item */ { 246, -3 }, /* (203) groupby_opt ::= GROUP BY grouplist */
{ 246, 0 }, /* (204) having_opt ::= */ { 263, -3 }, /* (204) grouplist ::= grouplist COMMA item */
{ 246, -2 }, /* (205) having_opt ::= HAVING expr */ { 263, -1 }, /* (205) grouplist ::= item */
{ 248, 0 }, /* (206) limit_opt ::= */ { 248, 0 }, /* (206) having_opt ::= */
{ 248, -2 }, /* (207) limit_opt ::= LIMIT signed */ { 248, -2 }, /* (207) having_opt ::= HAVING expr */
{ 248, -4 }, /* (208) limit_opt ::= LIMIT signed OFFSET signed */ { 250, 0 }, /* (208) limit_opt ::= */
{ 248, -4 }, /* (209) limit_opt ::= LIMIT signed COMMA signed */ { 250, -2 }, /* (209) limit_opt ::= LIMIT signed */
{ 247, 0 }, /* (210) slimit_opt ::= */ { 250, -4 }, /* (210) limit_opt ::= LIMIT signed OFFSET signed */
{ 247, -2 }, /* (211) slimit_opt ::= SLIMIT signed */ { 250, -4 }, /* (211) limit_opt ::= LIMIT signed COMMA signed */
{ 247, -4 }, /* (212) slimit_opt ::= SLIMIT signed SOFFSET signed */ { 249, 0 }, /* (212) slimit_opt ::= */
{ 247, -4 }, /* (213) slimit_opt ::= SLIMIT signed COMMA signed */ { 249, -2 }, /* (213) slimit_opt ::= SLIMIT signed */
{ 239, 0 }, /* (214) where_opt ::= */ { 249, -4 }, /* (214) slimit_opt ::= SLIMIT signed SOFFSET signed */
{ 239, -2 }, /* (215) where_opt ::= WHERE expr */ { 249, -4 }, /* (215) slimit_opt ::= SLIMIT signed COMMA signed */
{ 252, -3 }, /* (216) expr ::= LP expr RP */ { 240, 0 }, /* (216) where_opt ::= */
{ 252, -1 }, /* (217) expr ::= ID */ { 240, -2 }, /* (217) where_opt ::= WHERE expr */
{ 252, -3 }, /* (218) expr ::= ID DOT ID */ { 254, -3 }, /* (218) expr ::= LP expr RP */
{ 252, -3 }, /* (219) expr ::= ID DOT STAR */ { 254, -1 }, /* (219) expr ::= ID */
{ 252, -1 }, /* (220) expr ::= INTEGER */ { 254, -3 }, /* (220) expr ::= ID DOT ID */
{ 252, -2 }, /* (221) expr ::= MINUS INTEGER */ { 254, -3 }, /* (221) expr ::= ID DOT STAR */
{ 252, -2 }, /* (222) expr ::= PLUS INTEGER */ { 254, -1 }, /* (222) expr ::= INTEGER */
{ 252, -1 }, /* (223) expr ::= FLOAT */ { 254, -2 }, /* (223) expr ::= MINUS INTEGER */
{ 252, -2 }, /* (224) expr ::= MINUS FLOAT */ { 254, -2 }, /* (224) expr ::= PLUS INTEGER */
{ 252, -2 }, /* (225) expr ::= PLUS FLOAT */ { 254, -1 }, /* (225) expr ::= FLOAT */
{ 252, -1 }, /* (226) expr ::= STRING */ { 254, -2 }, /* (226) expr ::= MINUS FLOAT */
{ 252, -1 }, /* (227) expr ::= NOW */ { 254, -2 }, /* (227) expr ::= PLUS FLOAT */
{ 252, -1 }, /* (228) expr ::= VARIABLE */ { 254, -1 }, /* (228) expr ::= STRING */
{ 252, -2 }, /* (229) expr ::= PLUS VARIABLE */ { 254, -1 }, /* (229) expr ::= NOW */
{ 252, -2 }, /* (230) expr ::= MINUS VARIABLE */ { 254, -1 }, /* (230) expr ::= VARIABLE */
{ 252, -1 }, /* (231) expr ::= BOOL */ { 254, -2 }, /* (231) expr ::= PLUS VARIABLE */
{ 252, -1 }, /* (232) expr ::= NULL */ { 254, -2 }, /* (232) expr ::= MINUS VARIABLE */
{ 252, -4 }, /* (233) expr ::= ID LP exprlist RP */ { 254, -1 }, /* (233) expr ::= BOOL */
{ 252, -4 }, /* (234) expr ::= ID LP STAR RP */ { 254, -1 }, /* (234) expr ::= NULL */
{ 252, -3 }, /* (235) expr ::= expr IS NULL */ { 254, -4 }, /* (235) expr ::= ID LP exprlist RP */
{ 252, -4 }, /* (236) expr ::= expr IS NOT NULL */ { 254, -4 }, /* (236) expr ::= ID LP STAR RP */
{ 252, -3 }, /* (237) expr ::= expr LT expr */ { 254, -3 }, /* (237) expr ::= expr IS NULL */
{ 252, -3 }, /* (238) expr ::= expr GT expr */ { 254, -4 }, /* (238) expr ::= expr IS NOT NULL */
{ 252, -3 }, /* (239) expr ::= expr LE expr */ { 254, -3 }, /* (239) expr ::= expr LT expr */
{ 252, -3 }, /* (240) expr ::= expr GE expr */ { 254, -3 }, /* (240) expr ::= expr GT expr */
{ 252, -3 }, /* (241) expr ::= expr NE expr */ { 254, -3 }, /* (241) expr ::= expr LE expr */
{ 252, -3 }, /* (242) expr ::= expr EQ expr */ { 254, -3 }, /* (242) expr ::= expr GE expr */
{ 252, -5 }, /* (243) expr ::= expr BETWEEN expr AND expr */ { 254, -3 }, /* (243) expr ::= expr NE expr */
{ 252, -3 }, /* (244) expr ::= expr AND expr */ { 254, -3 }, /* (244) expr ::= expr EQ expr */
{ 252, -3 }, /* (245) expr ::= expr OR expr */ { 254, -5 }, /* (245) expr ::= expr BETWEEN expr AND expr */
{ 252, -3 }, /* (246) expr ::= expr PLUS expr */ { 254, -3 }, /* (246) expr ::= expr AND expr */
{ 252, -3 }, /* (247) expr ::= expr MINUS expr */ { 254, -3 }, /* (247) expr ::= expr OR expr */
{ 252, -3 }, /* (248) expr ::= expr STAR expr */ { 254, -3 }, /* (248) expr ::= expr PLUS expr */
{ 252, -3 }, /* (249) expr ::= expr SLASH expr */ { 254, -3 }, /* (249) expr ::= expr MINUS expr */
{ 252, -3 }, /* (250) expr ::= expr REM expr */ { 254, -3 }, /* (250) expr ::= expr STAR expr */
{ 252, -3 }, /* (251) expr ::= expr LIKE expr */ { 254, -3 }, /* (251) expr ::= expr SLASH expr */
{ 252, -5 }, /* (252) expr ::= expr IN LP exprlist RP */ { 254, -3 }, /* (252) expr ::= expr REM expr */
{ 262, -3 }, /* (253) exprlist ::= exprlist COMMA expritem */ { 254, -3 }, /* (253) expr ::= expr LIKE expr */
{ 262, -1 }, /* (254) exprlist ::= expritem */ { 254, -5 }, /* (254) expr ::= expr IN LP exprlist RP */
{ 263, -1 }, /* (255) expritem ::= expr */ { 264, -3 }, /* (255) exprlist ::= exprlist COMMA expritem */
{ 263, 0 }, /* (256) expritem ::= */ { 264, -1 }, /* (256) exprlist ::= expritem */
{ 189, -3 }, /* (257) cmd ::= RESET QUERY CACHE */ { 265, -1 }, /* (257) expritem ::= expr */
{ 189, -3 }, /* (258) cmd ::= SYNCDB ids REPLICA */ { 265, 0 }, /* (258) expritem ::= */
{ 189, -7 }, /* (259) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ { 190, -3 }, /* (259) cmd ::= RESET QUERY CACHE */
{ 189, -7 }, /* (260) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ { 190, -3 }, /* (260) cmd ::= SYNCDB ids REPLICA */
{ 189, -7 }, /* (261) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ { 190, -7 }, /* (261) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ 189, -7 }, /* (262) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ { 190, -7 }, /* (262) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ 189, -8 }, /* (263) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ { 190, -7 }, /* (263) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ 189, -9 }, /* (264) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ { 190, -7 }, /* (264) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ 189, -7 }, /* (265) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */ { 190, -8 }, /* (265) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ 189, -7 }, /* (266) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */ { 190, -9 }, /* (266) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ 189, -7 }, /* (267) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */ { 190, -7 }, /* (267) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{ 189, -7 }, /* (268) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */ { 190, -7 }, /* (268) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{ 189, -8 }, /* (269) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */ { 190, -7 }, /* (269) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{ 189, -3 }, /* (270) cmd ::= KILL CONNECTION INTEGER */ { 190, -7 }, /* (270) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{ 189, -5 }, /* (271) cmd ::= KILL STREAM INTEGER COLON INTEGER */ { 190, -8 }, /* (271) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{ 189, -5 }, /* (272) cmd ::= KILL QUERY INTEGER COLON INTEGER */ { 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 */ static void yy_accept(yyParser*); /* Forward Declaration */
...@@ -2290,13 +2298,13 @@ static void yy_reduce( ...@@ -2290,13 +2298,13 @@ static void yy_reduce(
break; break;
case 44: /* cmd ::= ALTER DATABASE ids alter_db_optr */ case 44: /* cmd ::= ALTER DATABASE ids alter_db_optr */
case 45: /* cmd ::= ALTER TOPIC ids alter_topic_optr */ yytestcase(yyruleno==45); 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; break;
case 46: /* cmd ::= ALTER ACCOUNT ids acct_optr */ 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; break;
case 47: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ 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; break;
case 48: /* ids ::= ID */ case 48: /* ids ::= ID */
case 49: /* ids ::= STRING */ yytestcase(yyruleno==49); case 49: /* ids ::= STRING */ yytestcase(yyruleno==49);
...@@ -2318,11 +2326,11 @@ static void yy_reduce( ...@@ -2318,11 +2326,11 @@ static void yy_reduce(
{ setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);} { setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);}
break; break;
case 55: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ 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; break;
case 56: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */ case 56: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
case 57: /* cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ yytestcase(yyruleno==57); 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; break;
case 58: /* cmd ::= CREATE USER ids PASS ids */ case 58: /* cmd ::= CREATE USER ids PASS ids */
{ setCreateUserSql(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);} { setCreateUserSql(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
...@@ -2351,20 +2359,20 @@ static void yy_reduce( ...@@ -2351,20 +2359,20 @@ static void yy_reduce(
break; break;
case 77: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */ 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.yy183.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.yy183.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.yy183.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.yy183.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.yy183.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.yy183.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.yy183.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.yy183.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
yylhsminor.yy187.stat = yymsp[0].minor.yy0; yylhsminor.yy183.stat = yymsp[0].minor.yy0;
} }
yymsp[-8].minor.yy187 = yylhsminor.yy187; yymsp[-8].minor.yy183 = yylhsminor.yy183;
break; break;
case 78: /* keep ::= KEEP tagitemlist */ case 78: /* keep ::= KEEP tagitemlist */
{ yymsp[-1].minor.yy285 = yymsp[0].minor.yy285; } { yymsp[-1].minor.yy193 = yymsp[0].minor.yy193; }
break; break;
case 79: /* cache ::= CACHE INTEGER */ case 79: /* cache ::= CACHE INTEGER */
case 80: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==80); case 80: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==80);
...@@ -2384,234 +2392,234 @@ static void yy_reduce( ...@@ -2384,234 +2392,234 @@ static void yy_reduce(
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break; break;
case 94: /* db_optr ::= */ 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; break;
case 95: /* db_optr ::= db_optr cache */ case 95: /* db_optr ::= db_optr cache */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 96: /* db_optr ::= db_optr replica */ case 96: /* db_optr ::= db_optr replica */
case 113: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==113); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 97: /* db_optr ::= db_optr quorum */ case 97: /* db_optr ::= db_optr quorum */
case 114: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==114); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 98: /* db_optr ::= db_optr days */ case 98: /* db_optr ::= db_optr days */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 99: /* db_optr ::= db_optr minrows */ case 99: /* db_optr ::= db_optr minrows */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 100: /* db_optr ::= db_optr maxrows */ case 100: /* db_optr ::= db_optr maxrows */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 101: /* db_optr ::= db_optr blocks */ case 101: /* db_optr ::= db_optr blocks */
case 116: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==116); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 102: /* db_optr ::= db_optr ctime */ case 102: /* db_optr ::= db_optr ctime */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 103: /* db_optr ::= db_optr wal */ case 103: /* db_optr ::= db_optr wal */
case 118: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==118); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 104: /* db_optr ::= db_optr fsync */ case 104: /* db_optr ::= db_optr fsync */
case 119: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==119); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 105: /* db_optr ::= db_optr comp */ case 105: /* db_optr ::= db_optr comp */
case 117: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==117); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 106: /* db_optr ::= db_optr prec */ case 106: /* db_optr ::= db_optr prec */
{ yylhsminor.yy526 = yymsp[-1].minor.yy526; yylhsminor.yy526.precision = yymsp[0].minor.yy0; } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.precision = yymsp[0].minor.yy0; }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 107: /* db_optr ::= db_optr keep */ case 107: /* db_optr ::= db_optr keep */
case 115: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==115); 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; } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.keep = yymsp[0].minor.yy193; }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 108: /* db_optr ::= db_optr update */ case 108: /* db_optr ::= db_optr update */
case 120: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==120); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 109: /* db_optr ::= db_optr cachelast */ case 109: /* db_optr ::= db_optr cachelast */
case 121: /* alter_db_optr ::= alter_db_optr cachelast */ yytestcase(yyruleno==121); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 110: /* topic_optr ::= db_optr */ case 110: /* topic_optr ::= db_optr */
case 122: /* alter_topic_optr ::= alter_db_optr */ yytestcase(yyruleno==122); case 122: /* alter_topic_optr ::= alter_db_optr */ yytestcase(yyruleno==122);
{ yylhsminor.yy526 = yymsp[0].minor.yy526; yylhsminor.yy526.dbType = TSDB_DB_TYPE_TOPIC; } { yylhsminor.yy114 = yymsp[0].minor.yy114; yylhsminor.yy114.dbType = TSDB_DB_TYPE_TOPIC; }
yymsp[0].minor.yy526 = yylhsminor.yy526; yymsp[0].minor.yy114 = yylhsminor.yy114;
break; break;
case 111: /* topic_optr ::= topic_optr partitions */ case 111: /* topic_optr ::= topic_optr partitions */
case 123: /* alter_topic_optr ::= alter_topic_optr partitions */ yytestcase(yyruleno==123); 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); } { yylhsminor.yy114 = yymsp[-1].minor.yy114; yylhsminor.yy114.partitions = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy526 = yylhsminor.yy526; yymsp[-1].minor.yy114 = yylhsminor.yy114;
break; break;
case 112: /* alter_db_optr ::= */ 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; break;
case 124: /* typename ::= ids */ case 124: /* typename ::= ids */
{ {
yymsp[0].minor.yy0.type = 0; 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; break;
case 125: /* typename ::= ids LP signed RP */ 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; yymsp[-3].minor.yy0.type = 0;
tSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0); tSetColumnType(&yylhsminor.yy27, &yymsp[-3].minor.yy0);
} else { } else {
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy525; // negative value of name length yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy473; // negative value of name length
tSetColumnType(&yylhsminor.yy295, &yymsp[-3].minor.yy0); tSetColumnType(&yylhsminor.yy27, &yymsp[-3].minor.yy0);
} }
} }
yymsp[-3].minor.yy295 = yylhsminor.yy295; yymsp[-3].minor.yy27 = yylhsminor.yy27;
break; break;
case 126: /* typename ::= ids UNSIGNED */ case 126: /* typename ::= ids UNSIGNED */
{ {
yymsp[-1].minor.yy0.type = 0; 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); 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; break;
case 127: /* signed ::= INTEGER */ case 127: /* signed ::= INTEGER */
{ yylhsminor.yy525 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy473 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy525 = yylhsminor.yy525; yymsp[0].minor.yy473 = yylhsminor.yy473;
break; break;
case 128: /* signed ::= PLUS INTEGER */ 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; break;
case 129: /* signed ::= MINUS INTEGER */ 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; break;
case 133: /* cmd ::= CREATE TABLE create_table_list */ 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; break;
case 134: /* create_table_list ::= create_from_stable */ case 134: /* create_table_list ::= create_from_stable */
{ {
SCreateTableSql* pCreateTable = calloc(1, sizeof(SCreateTableSql)); SCreateTableSql* pCreateTable = calloc(1, sizeof(SCreateTableSql));
pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo)); 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; 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; break;
case 135: /* create_table_list ::= create_table_list create_from_stable */ case 135: /* create_table_list ::= create_table_list create_from_stable */
{ {
taosArrayPush(yymsp[-1].minor.yy470->childTableInfo, &yymsp[0].minor.yy96); taosArrayPush(yymsp[-1].minor.yy270->childTableInfo, &yymsp[0].minor.yy192);
yylhsminor.yy470 = yymsp[-1].minor.yy470; yylhsminor.yy270 = yymsp[-1].minor.yy270;
} }
yymsp[-1].minor.yy470 = yylhsminor.yy470; yymsp[-1].minor.yy270 = yylhsminor.yy270;
break; break;
case 136: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */ case 136: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{ {
yylhsminor.yy470 = tSetCreateTableInfo(yymsp[-1].minor.yy285, NULL, NULL, TSQL_CREATE_TABLE); yylhsminor.yy270 = tSetCreateTableInfo(yymsp[-1].minor.yy193, NULL, NULL, TSQL_CREATE_TABLE);
setSqlInfo(pInfo, yylhsminor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSqlInfo(pInfo, yylhsminor.yy270, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-5].minor.yy0); setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-5].minor.yy0);
} }
yymsp[-5].minor.yy470 = yylhsminor.yy470; yymsp[-5].minor.yy270 = yylhsminor.yy270;
break; break;
case 137: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */ 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); yylhsminor.yy270 = tSetCreateTableInfo(yymsp[-5].minor.yy193, yymsp[-1].minor.yy193, NULL, TSQL_CREATE_STABLE);
setSqlInfo(pInfo, yylhsminor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSqlInfo(pInfo, yylhsminor.yy270, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n; yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0); setCreatedTableName(pInfo, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
} }
yymsp[-9].minor.yy470 = yylhsminor.yy470; yymsp[-9].minor.yy270 = yylhsminor.yy270;
break; break;
case 138: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */ 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[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
yymsp[-8].minor.yy0.n += yymsp[-7].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; break;
case 139: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */ 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[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
yymsp[-11].minor.yy0.n += yymsp[-10].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; break;
case 140: /* tagNamelist ::= tagNamelist COMMA ids */ case 140: /* tagNamelist ::= tagNamelist COMMA ids */
{taosArrayPush(yymsp[-2].minor.yy285, &yymsp[0].minor.yy0); yylhsminor.yy285 = yymsp[-2].minor.yy285; } {taosArrayPush(yymsp[-2].minor.yy193, &yymsp[0].minor.yy0); yylhsminor.yy193 = yymsp[-2].minor.yy193; }
yymsp[-2].minor.yy285 = yylhsminor.yy285; yymsp[-2].minor.yy193 = yylhsminor.yy193;
break; break;
case 141: /* tagNamelist ::= ids */ case 141: /* tagNamelist ::= ids */
{yylhsminor.yy285 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy285, &yymsp[0].minor.yy0);} {yylhsminor.yy193 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy193, &yymsp[0].minor.yy0);}
yymsp[0].minor.yy285 = yylhsminor.yy285; yymsp[0].minor.yy193 = yylhsminor.yy193;
break; break;
case 142: /* create_table_args ::= ifnotexists ids cpxName AS select */ case 142: /* create_table_args ::= ifnotexists ids cpxName AS select */
{ {
yylhsminor.yy470 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy344, TSQL_CREATE_STREAM); yylhsminor.yy270 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy124, TSQL_CREATE_STREAM);
setSqlInfo(pInfo, yylhsminor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSqlInfo(pInfo, yylhsminor.yy270, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n; yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-3].minor.yy0, &yymsp[-4].minor.yy0); setCreatedTableName(pInfo, &yymsp[-3].minor.yy0, &yymsp[-4].minor.yy0);
} }
yymsp[-4].minor.yy470 = yylhsminor.yy470; yymsp[-4].minor.yy270 = yylhsminor.yy270;
break; break;
case 143: /* columnlist ::= columnlist COMMA column */ case 143: /* columnlist ::= columnlist COMMA column */
{taosArrayPush(yymsp[-2].minor.yy285, &yymsp[0].minor.yy295); yylhsminor.yy285 = yymsp[-2].minor.yy285; } {taosArrayPush(yymsp[-2].minor.yy193, &yymsp[0].minor.yy27); yylhsminor.yy193 = yymsp[-2].minor.yy193; }
yymsp[-2].minor.yy285 = yylhsminor.yy285; yymsp[-2].minor.yy193 = yylhsminor.yy193;
break; break;
case 144: /* columnlist ::= column */ case 144: /* columnlist ::= column */
{yylhsminor.yy285 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy285, &yymsp[0].minor.yy295);} {yylhsminor.yy193 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy193, &yymsp[0].minor.yy27);}
yymsp[0].minor.yy285 = yylhsminor.yy285; yymsp[0].minor.yy193 = yylhsminor.yy193;
break; break;
case 145: /* column ::= ids typename */ 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; break;
case 146: /* tagitemlist ::= tagitemlist COMMA tagitem */ case 146: /* tagitemlist ::= tagitemlist COMMA tagitem */
{ 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; break;
case 147: /* tagitemlist ::= tagitem */ case 147: /* tagitemlist ::= tagitem */
{ 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; break;
case 148: /* tagitem ::= INTEGER */ case 148: /* tagitem ::= INTEGER */
case 149: /* tagitem ::= FLOAT */ yytestcase(yyruleno==149); case 149: /* tagitem ::= FLOAT */ yytestcase(yyruleno==149);
case 150: /* tagitem ::= STRING */ yytestcase(yyruleno==150); case 150: /* tagitem ::= STRING */ yytestcase(yyruleno==150);
case 151: /* tagitem ::= BOOL */ yytestcase(yyruleno==151); case 151: /* tagitem ::= BOOL */ yytestcase(yyruleno==151);
{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy362, &yymsp[0].minor.yy0); } { toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy442, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy362 = yylhsminor.yy362; yymsp[0].minor.yy442 = yylhsminor.yy442;
break; break;
case 152: /* tagitem ::= NULL */ case 152: /* tagitem ::= NULL */
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy362, &yymsp[0].minor.yy0); } { yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy442, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy362 = yylhsminor.yy362; yymsp[0].minor.yy442 = yylhsminor.yy442;
break; break;
case 153: /* tagitem ::= MINUS INTEGER */ case 153: /* tagitem ::= MINUS INTEGER */
case 154: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==154); case 154: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==154);
...@@ -2621,56 +2629,56 @@ static void yy_reduce( ...@@ -2621,56 +2629,56 @@ static void yy_reduce(
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type; yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type;
toTSDBType(yymsp[-1].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; 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; break;
case 158: /* select ::= LP select RP */ case 158: /* select ::= LP select RP */
{yymsp[-2].minor.yy344 = yymsp[-1].minor.yy344;} {yymsp[-2].minor.yy124 = yymsp[-1].minor.yy124;}
break; break;
case 159: /* union ::= select */ case 159: /* union ::= select */
{ yylhsminor.yy285 = setSubclause(NULL, yymsp[0].minor.yy344); } { yylhsminor.yy193 = setSubclause(NULL, yymsp[0].minor.yy124); }
yymsp[0].minor.yy285 = yylhsminor.yy285; yymsp[0].minor.yy193 = yylhsminor.yy193;
break; break;
case 160: /* union ::= union UNION ALL select */ case 160: /* union ::= union UNION ALL select */
{ yylhsminor.yy285 = appendSelectClause(yymsp[-3].minor.yy285, yymsp[0].minor.yy344); } { yylhsminor.yy193 = appendSelectClause(yymsp[-3].minor.yy193, yymsp[0].minor.yy124); }
yymsp[-3].minor.yy285 = yylhsminor.yy285; yymsp[-3].minor.yy193 = yylhsminor.yy193;
break; break;
case 161: /* cmd ::= union */ 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; break;
case 162: /* select ::= SELECT selcollist */ 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; break;
case 163: /* sclp ::= selcollist COMMA */ case 163: /* sclp ::= selcollist COMMA */
{yylhsminor.yy285 = yymsp[-1].minor.yy285;} {yylhsminor.yy193 = yymsp[-1].minor.yy193;}
yymsp[-1].minor.yy285 = yylhsminor.yy285; yymsp[-1].minor.yy193 = yylhsminor.yy193;
break; break;
case 164: /* sclp ::= */ case 164: /* sclp ::= */
case 192: /* orderby_opt ::= */ yytestcase(yyruleno==192); case 194: /* orderby_opt ::= */ yytestcase(yyruleno==194);
{yymsp[1].minor.yy285 = 0;} {yymsp[1].minor.yy193 = 0;}
break; break;
case 165: /* selcollist ::= sclp distinct expr as */ 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; break;
case 166: /* selcollist ::= sclp STAR */ case 166: /* selcollist ::= sclp STAR */
{ {
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL); 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; break;
case 167: /* as ::= AS ids */ case 167: /* as ::= AS ids */
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
...@@ -2688,339 +2696,347 @@ static void yy_reduce( ...@@ -2688,339 +2696,347 @@ static void yy_reduce(
break; break;
case 172: /* from ::= FROM tablelist */ case 172: /* from ::= FROM tablelist */
case 173: /* from ::= FROM sub */ yytestcase(yyruleno==173); 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; break;
case 174: /* sub ::= LP union RP */ 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; break;
case 175: /* sub ::= LP union RP ids */ 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; break;
case 176: /* sub ::= sub COMMA LP union RP ids */ case 176: /* sub ::= sub COMMA LP union RP ids */
{yylhsminor.yy148 = addSubqueryElem(yymsp[-5].minor.yy148, yymsp[-2].minor.yy285, &yymsp[0].minor.yy0);} {yylhsminor.yy332 = addSubqueryElem(yymsp[-5].minor.yy332, yymsp[-2].minor.yy193, &yymsp[0].minor.yy0);}
yymsp[-5].minor.yy148 = yylhsminor.yy148; yymsp[-5].minor.yy332 = yylhsminor.yy332;
break; break;
case 177: /* tablelist ::= ids cpxName */ case 177: /* tablelist ::= ids cpxName */
{ {
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; 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; break;
case 178: /* tablelist ::= ids cpxName ids */ case 178: /* tablelist ::= ids cpxName ids */
{ {
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; 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; break;
case 179: /* tablelist ::= tablelist COMMA ids cpxName */ case 179: /* tablelist ::= tablelist COMMA ids cpxName */
{ {
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; 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; break;
case 180: /* tablelist ::= tablelist COMMA ids cpxName ids */ case 180: /* tablelist ::= tablelist COMMA ids cpxName ids */
{ {
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; 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; break;
case 181: /* tmvar ::= VARIABLE */ case 181: /* tmvar ::= VARIABLE */
{yylhsminor.yy0 = yymsp[0].minor.yy0;} {yylhsminor.yy0 = yymsp[0].minor.yy0;}
yymsp[0].minor.yy0 = yylhsminor.yy0; yymsp[0].minor.yy0 = yylhsminor.yy0;
break; break;
case 182: /* interval_opt ::= INTERVAL LP tmvar RP */ 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; break;
case 183: /* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */ 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; break;
case 184: /* interval_opt ::= */ 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; break;
case 185: /* session_option ::= */ 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; break;
case 186: /* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */ case 186: /* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
yymsp[-6].minor.yy523.col = yymsp[-4].minor.yy0; yymsp[-6].minor.yy447.col = yymsp[-4].minor.yy0;
yymsp[-6].minor.yy523.gap = yymsp[-1].minor.yy0; yymsp[-6].minor.yy447.gap = yymsp[-1].minor.yy0;
} }
break; break;
case 187: /* fill_opt ::= */ case 187: /* windowstate_option ::= */
{ yymsp[1].minor.yy285 = 0; } {yymsp[1].minor.yy76.col.n = 0;}
break; 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}; tVariant A = {0};
toTSDBType(yymsp[-3].minor.yy0.type); toTSDBType(yymsp[-3].minor.yy0.type);
tVariantCreate(&A, &yymsp[-3].minor.yy0); tVariantCreate(&A, &yymsp[-3].minor.yy0);
tVariantListInsert(yymsp[-1].minor.yy285, &A, -1, 0); tVariantListInsert(yymsp[-1].minor.yy193, &A, -1, 0);
yymsp[-5].minor.yy285 = yymsp[-1].minor.yy285; yymsp[-5].minor.yy193 = yymsp[-1].minor.yy193;
} }
break; break;
case 189: /* fill_opt ::= FILL LP ID RP */ case 191: /* fill_opt ::= FILL LP ID RP */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); 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; 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; } {yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; }
break; 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; } {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; }
break; break;
case 193: /* orderby_opt ::= ORDER BY sortlist */ case 195: /* orderby_opt ::= ORDER BY sortlist */
{yymsp[-2].minor.yy285 = yymsp[0].minor.yy285;} {yymsp[-2].minor.yy193 = yymsp[0].minor.yy193;}
break; 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; 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; break;
case 196: /* item ::= ids cpxName */ case 198: /* item ::= ids cpxName */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; 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; break;
case 197: /* sortorder ::= ASC */ case 199: /* sortorder ::= ASC */
{ yymsp[0].minor.yy460 = TSDB_ORDER_ASC; } { yymsp[0].minor.yy312 = TSDB_ORDER_ASC; }
break; break;
case 198: /* sortorder ::= DESC */ case 200: /* sortorder ::= DESC */
{ yymsp[0].minor.yy460 = TSDB_ORDER_DESC;} { yymsp[0].minor.yy312 = TSDB_ORDER_DESC;}
break; break;
case 199: /* sortorder ::= */ case 201: /* sortorder ::= */
{ yymsp[1].minor.yy460 = TSDB_ORDER_ASC; } { yymsp[1].minor.yy312 = TSDB_ORDER_ASC; }
break; break;
case 200: /* groupby_opt ::= */ case 202: /* groupby_opt ::= */
{ yymsp[1].minor.yy285 = 0;} { yymsp[1].minor.yy193 = 0;}
break; break;
case 201: /* groupby_opt ::= GROUP BY grouplist */ case 203: /* groupby_opt ::= GROUP BY grouplist */
{ yymsp[-2].minor.yy285 = yymsp[0].minor.yy285;} { yymsp[-2].minor.yy193 = yymsp[0].minor.yy193;}
break; 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; 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; break;
case 204: /* having_opt ::= */ case 206: /* having_opt ::= */
case 214: /* where_opt ::= */ yytestcase(yyruleno==214); case 216: /* where_opt ::= */ yytestcase(yyruleno==216);
case 256: /* expritem ::= */ yytestcase(yyruleno==256); case 258: /* expritem ::= */ yytestcase(yyruleno==258);
{yymsp[1].minor.yy178 = 0;} {yymsp[1].minor.yy454 = 0;}
break; break;
case 205: /* having_opt ::= HAVING expr */ case 207: /* having_opt ::= HAVING expr */
case 215: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==215); case 217: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==217);
{yymsp[-1].minor.yy178 = yymsp[0].minor.yy178;} {yymsp[-1].minor.yy454 = yymsp[0].minor.yy454;}
break; break;
case 206: /* limit_opt ::= */ case 208: /* limit_opt ::= */
case 210: /* slimit_opt ::= */ yytestcase(yyruleno==210); case 212: /* slimit_opt ::= */ yytestcase(yyruleno==212);
{yymsp[1].minor.yy438.limit = -1; yymsp[1].minor.yy438.offset = 0;} {yymsp[1].minor.yy482.limit = -1; yymsp[1].minor.yy482.offset = 0;}
break; break;
case 207: /* limit_opt ::= LIMIT signed */ case 209: /* limit_opt ::= LIMIT signed */
case 211: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==211); case 213: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==213);
{yymsp[-1].minor.yy438.limit = yymsp[0].minor.yy525; yymsp[-1].minor.yy438.offset = 0;} {yymsp[-1].minor.yy482.limit = yymsp[0].minor.yy473; yymsp[-1].minor.yy482.offset = 0;}
break; break;
case 208: /* limit_opt ::= LIMIT signed OFFSET signed */ case 210: /* limit_opt ::= LIMIT signed OFFSET signed */
{ yymsp[-3].minor.yy438.limit = yymsp[-2].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[0].minor.yy525;} { yymsp[-3].minor.yy482.limit = yymsp[-2].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[0].minor.yy473;}
break; break;
case 209: /* limit_opt ::= LIMIT signed COMMA signed */ case 211: /* limit_opt ::= LIMIT signed COMMA signed */
{ yymsp[-3].minor.yy438.limit = yymsp[0].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[-2].minor.yy525;} { yymsp[-3].minor.yy482.limit = yymsp[0].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[-2].minor.yy473;}
break; break;
case 212: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ case 214: /* slimit_opt ::= SLIMIT signed SOFFSET signed */
{yymsp[-3].minor.yy438.limit = yymsp[-2].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[0].minor.yy525;} {yymsp[-3].minor.yy482.limit = yymsp[-2].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[0].minor.yy473;}
break; break;
case 213: /* slimit_opt ::= SLIMIT signed COMMA signed */ case 215: /* slimit_opt ::= SLIMIT signed COMMA signed */
{yymsp[-3].minor.yy438.limit = yymsp[0].minor.yy525; yymsp[-3].minor.yy438.offset = yymsp[-2].minor.yy525;} {yymsp[-3].minor.yy482.limit = yymsp[0].minor.yy473; yymsp[-3].minor.yy482.offset = yymsp[-2].minor.yy473;}
break; break;
case 216: /* expr ::= LP expr RP */ case 218: /* 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);} {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.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 217: /* expr ::= ID */ case 219: /* expr ::= ID */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_ID);} { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 218: /* expr ::= ID DOT ID */ case 220: /* 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.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ID);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 219: /* expr ::= ID DOT STAR */ case 221: /* 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.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ALL);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 220: /* expr ::= INTEGER */ case 222: /* expr ::= INTEGER */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_INTEGER);} { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 221: /* expr ::= MINUS INTEGER */ case 223: /* expr ::= MINUS INTEGER */
case 222: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==222); 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.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_INTEGER);} { 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.yy178 = yylhsminor.yy178; yymsp[-1].minor.yy454 = yylhsminor.yy454;
break; break;
case 223: /* expr ::= FLOAT */ case 225: /* expr ::= FLOAT */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_FLOAT);} { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 224: /* expr ::= MINUS FLOAT */ case 226: /* expr ::= MINUS FLOAT */
case 225: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==225); 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.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_FLOAT);} { 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.yy178 = yylhsminor.yy178; yymsp[-1].minor.yy454 = yylhsminor.yy454;
break; break;
case 226: /* expr ::= STRING */ case 228: /* expr ::= STRING */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_STRING);} { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 227: /* expr ::= NOW */ case 229: /* expr ::= NOW */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NOW); } { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 228: /* expr ::= VARIABLE */ case 230: /* expr ::= VARIABLE */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_VARIABLE);} { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 229: /* expr ::= PLUS VARIABLE */ case 231: /* expr ::= PLUS VARIABLE */
case 230: /* expr ::= MINUS VARIABLE */ yytestcase(yyruleno==230); 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.yy178 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_VARIABLE);} { 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.yy178 = yylhsminor.yy178; yymsp[-1].minor.yy454 = yylhsminor.yy454;
break; break;
case 231: /* expr ::= BOOL */ case 233: /* expr ::= BOOL */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_BOOL);} { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 232: /* expr ::= NULL */ case 234: /* expr ::= NULL */
{ yylhsminor.yy178 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NULL);} { yylhsminor.yy454 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NULL);}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 233: /* expr ::= ID LP exprlist RP */ case 235: /* 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); } { yylhsminor.yy454 = tSqlExprCreateFunction(yymsp[-1].minor.yy193, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy178 = yylhsminor.yy178; yymsp[-3].minor.yy454 = yylhsminor.yy454;
break; break;
case 234: /* expr ::= ID LP STAR RP */ case 236: /* expr ::= ID LP STAR RP */
{ yylhsminor.yy178 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } { yylhsminor.yy454 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
yymsp[-3].minor.yy178 = yylhsminor.yy178; yymsp[-3].minor.yy454 = yylhsminor.yy454;
break; break;
case 235: /* expr ::= expr IS NULL */ case 237: /* expr ::= expr IS NULL */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, NULL, TK_ISNULL);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, NULL, TK_ISNULL);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 236: /* expr ::= expr IS NOT NULL */ case 238: /* expr ::= expr IS NOT NULL */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-3].minor.yy178, NULL, TK_NOTNULL);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-3].minor.yy454, NULL, TK_NOTNULL);}
yymsp[-3].minor.yy178 = yylhsminor.yy178; yymsp[-3].minor.yy454 = yylhsminor.yy454;
break; break;
case 237: /* expr ::= expr LT expr */ case 239: /* expr ::= expr LT expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_LT);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_LT);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 238: /* expr ::= expr GT expr */ case 240: /* expr ::= expr GT expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_GT);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_GT);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 239: /* expr ::= expr LE expr */ case 241: /* expr ::= expr LE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_LE);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_LE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 240: /* expr ::= expr GE expr */ case 242: /* expr ::= expr GE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_GE);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_GE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 241: /* expr ::= expr NE expr */ case 243: /* expr ::= expr NE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_NE);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_NE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 242: /* expr ::= expr EQ expr */ case 244: /* expr ::= expr EQ expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_EQ);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_EQ);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 243: /* expr ::= expr BETWEEN expr AND expr */ case 245: /* 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);} { 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.yy178 = yylhsminor.yy178; yymsp[-4].minor.yy454 = yylhsminor.yy454;
break; break;
case 244: /* expr ::= expr AND expr */ case 246: /* expr ::= expr AND expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_AND);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_AND);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 245: /* expr ::= expr OR expr */ case 247: /* expr ::= expr OR expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_OR); } {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_OR); }
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 246: /* expr ::= expr PLUS expr */ case 248: /* expr ::= expr PLUS expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_PLUS); } {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_PLUS); }
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 247: /* expr ::= expr MINUS expr */ case 249: /* expr ::= expr MINUS expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_MINUS); } {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_MINUS); }
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 248: /* expr ::= expr STAR expr */ case 250: /* expr ::= expr STAR expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_STAR); } {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_STAR); }
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 249: /* expr ::= expr SLASH expr */ case 251: /* expr ::= expr SLASH expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_DIVIDE);} {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_DIVIDE);}
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 250: /* expr ::= expr REM expr */ case 252: /* expr ::= expr REM expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_REM); } {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_REM); }
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 251: /* expr ::= expr LIKE expr */ case 253: /* expr ::= expr LIKE expr */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-2].minor.yy178, yymsp[0].minor.yy178, TK_LIKE); } {yylhsminor.yy454 = tSqlExprCreate(yymsp[-2].minor.yy454, yymsp[0].minor.yy454, TK_LIKE); }
yymsp[-2].minor.yy178 = yylhsminor.yy178; yymsp[-2].minor.yy454 = yylhsminor.yy454;
break; break;
case 252: /* expr ::= expr IN LP exprlist RP */ case 254: /* expr ::= expr IN LP exprlist RP */
{yylhsminor.yy178 = tSqlExprCreate(yymsp[-4].minor.yy178, (tSqlExpr*)yymsp[-1].minor.yy285, TK_IN); } {yylhsminor.yy454 = tSqlExprCreate(yymsp[-4].minor.yy454, (tSqlExpr*)yymsp[-1].minor.yy193, TK_IN); }
yymsp[-4].minor.yy178 = yylhsminor.yy178; yymsp[-4].minor.yy454 = yylhsminor.yy454;
break; break;
case 253: /* exprlist ::= exprlist COMMA expritem */ case 255: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy285 = tSqlExprListAppend(yymsp[-2].minor.yy285,yymsp[0].minor.yy178,0, 0);} {yylhsminor.yy193 = tSqlExprListAppend(yymsp[-2].minor.yy193,yymsp[0].minor.yy454,0, 0);}
yymsp[-2].minor.yy285 = yylhsminor.yy285; yymsp[-2].minor.yy193 = yylhsminor.yy193;
break; break;
case 254: /* exprlist ::= expritem */ case 256: /* exprlist ::= expritem */
{yylhsminor.yy285 = tSqlExprListAppend(0,yymsp[0].minor.yy178,0, 0);} {yylhsminor.yy193 = tSqlExprListAppend(0,yymsp[0].minor.yy454,0, 0);}
yymsp[0].minor.yy285 = yylhsminor.yy285; yymsp[0].minor.yy193 = yylhsminor.yy193;
break; break;
case 255: /* expritem ::= expr */ case 257: /* expritem ::= expr */
{yylhsminor.yy178 = yymsp[0].minor.yy178;} {yylhsminor.yy454 = yymsp[0].minor.yy454;}
yymsp[0].minor.yy178 = yylhsminor.yy178; yymsp[0].minor.yy454 = yylhsminor.yy454;
break; break;
case 257: /* cmd ::= RESET QUERY CACHE */ case 259: /* cmd ::= RESET QUERY CACHE */
{ setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} { setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
break; 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);} { setDCLSqlElems(pInfo, TSDB_SQL_SYNC_DB_REPLICA, 1, &yymsp[-1].minor.yy0);}
break; 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; 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); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3031,14 +3047,14 @@ static void yy_reduce( ...@@ -3031,14 +3047,14 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; 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); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3049,7 +3065,7 @@ static void yy_reduce( ...@@ -3049,7 +3065,7 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
...@@ -3063,26 +3079,26 @@ static void yy_reduce( ...@@ -3063,26 +3079,26 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n;
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); 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); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; 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); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3093,14 +3109,14 @@ static void yy_reduce( ...@@ -3093,14 +3109,14 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; 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); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -3111,7 +3127,7 @@ static void yy_reduce( ...@@ -3111,7 +3127,7 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; 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; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
...@@ -3125,13 +3141,13 @@ static void yy_reduce( ...@@ -3125,13 +3141,13 @@ static void yy_reduce(
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 270: /* cmd ::= KILL CONNECTION INTEGER */ case 272: /* cmd ::= KILL CONNECTION INTEGER */
{setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);} {setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);}
break; 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);} {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; 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);} {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; break;
default: default:
......
...@@ -141,6 +141,7 @@ static SKeyword keywordTable[] = { ...@@ -141,6 +141,7 @@ static SKeyword keywordTable[] = {
{"VARIABLE", TK_VARIABLE}, {"VARIABLE", TK_VARIABLE},
{"INTERVAL", TK_INTERVAL}, {"INTERVAL", TK_INTERVAL},
{"SESSION", TK_SESSION}, {"SESSION", TK_SESSION},
{"STATE_WINDOW", TK_STATE_WINDOW},
{"FILL", TK_FILL}, {"FILL", TK_FILL},
{"SLIDING", TK_SLIDING}, {"SLIDING", TK_SLIDING},
{"ORDER", TK_ORDER}, {"ORDER", TK_ORDER},
......
...@@ -29,8 +29,8 @@ pipeline { ...@@ -29,8 +29,8 @@ pipeline {
agent none agent none
environment{ environment{
WK = '/var/lib/jenkins/workspace/TDinternal' WK = '/data/lib/jenkins/workspace/TDinternal'
WKC= '/var/lib/jenkins/workspace/TDinternal/community' WKC= '/data/lib/jenkins/workspace/TDinternal/community'
} }
stages { stages {
......
...@@ -6,9 +6,9 @@ events { ...@@ -6,9 +6,9 @@ events {
} }
http { 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_package_cpath "$prefix/so/?.so;;";
lua_code_cache off; lua_code_cache on;
server { server {
listen 7000; listen 7000;
server_name restapi; 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 driver = require "luaconnector51"
local cjson = require "cjson" local cjson = require "cjson"
local Pool = require "tdpool"
local config = require "config"
ngx.say("start time:"..os.time()) ngx.say("start time:"..os.time())
local pool = Pool.new(Pool,config)
local config = { local conn = pool:get_connection()
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 res = driver.query(conn,"drop database if exists nginx") local res = driver.query(conn,"drop database if exists nginx")
if res.code ~=0 then if res.code ~=0 then
...@@ -51,7 +36,7 @@ else ...@@ -51,7 +36,7 @@ else
ngx.say("create table--- pass.") ngx.say("create table--- pass.")
end 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 if res.code ~=0 then
ngx.say("insert records failed: "..res.error) ngx.say("insert records failed: "..res.error)
return return
...@@ -77,7 +62,29 @@ else ...@@ -77,7 +62,29 @@ else
end end
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())
...@@ -13,6 +13,11 @@ struct cb_param{ ...@@ -13,6 +13,11 @@ struct cb_param{
void * stream; void * stream;
}; };
struct async_query_callback_param{
lua_State* state;
int callback;
};
static int l_connect(lua_State *L){ static int l_connect(lua_State *L){
TAOS * taos=NULL; TAOS * taos=NULL;
const char* host; const char* host;
...@@ -23,7 +28,7 @@ static int l_connect(lua_State *L){ ...@@ -23,7 +28,7 @@ static int l_connect(lua_State *L){
luaL_checktype(L, 1, LUA_TTABLE); luaL_checktype(L, 1, LUA_TTABLE);
lua_getfield(L,-1,"host"); lua_getfield(L, 1,"host");
if (lua_isstring(L,-1)){ if (lua_isstring(L,-1)){
host = lua_tostring(L, -1); host = lua_tostring(L, -1);
// printf("host = %s\n", host); // printf("host = %s\n", host);
...@@ -178,6 +183,58 @@ static int l_query(lua_State *L){ ...@@ -178,6 +183,58 @@ static int l_query(lua_State *L){
return 1; 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){ void stream_cb(void *param, TAOS_RES *result, TAOS_ROW row){
struct cb_param* p = (struct cb_param*) param; struct cb_param* p = (struct cb_param*) param;
TAOS_FIELD *fields = taos_fetch_fields(result); TAOS_FIELD *fields = taos_fetch_fields(result);
...@@ -308,6 +365,7 @@ static int l_close(lua_State *L){ ...@@ -308,6 +365,7 @@ static int l_close(lua_State *L){
static const struct luaL_Reg lib[] = { static const struct luaL_Reg lib[] = {
{"connect", l_connect}, {"connect", l_connect},
{"query", l_query}, {"query", l_query},
{"query_a",l_async_query},
{"close", l_close}, {"close", l_close},
{"open_stream", l_open_stream}, {"open_stream", l_open_stream},
{"close_stream", l_close_stream}, {"close_stream", l_close_stream},
......
...@@ -13,6 +13,11 @@ struct cb_param{ ...@@ -13,6 +13,11 @@ struct cb_param{
void * stream; void * stream;
}; };
struct async_query_callback_param{
lua_State* state;
int callback;
};
static int l_connect(lua_State *L){ static int l_connect(lua_State *L){
TAOS * taos=NULL; TAOS * taos=NULL;
const char* host; const char* host;
...@@ -56,6 +61,7 @@ static int l_connect(lua_State *L){ ...@@ -56,6 +61,7 @@ static int l_connect(lua_State *L){
lua_settop(L,0); lua_settop(L,0);
taos_init(); taos_init();
lua_newtable(L); lua_newtable(L);
int table_index = lua_gettop(L); int table_index = lua_gettop(L);
...@@ -177,6 +183,58 @@ static int l_query(lua_State *L){ ...@@ -177,6 +183,58 @@ static int l_query(lua_State *L){
return 1; 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){ void stream_cb(void *param, TAOS_RES *result, TAOS_ROW row){
struct cb_param* p = (struct cb_param*) param; struct cb_param* p = (struct cb_param*) param;
TAOS_FIELD *fields = taos_fetch_fields(result); TAOS_FIELD *fields = taos_fetch_fields(result);
...@@ -307,6 +365,7 @@ static int l_close(lua_State *L){ ...@@ -307,6 +365,7 @@ static int l_close(lua_State *L){
static const struct luaL_Reg lib[] = { static const struct luaL_Reg lib[] = {
{"connect", l_connect}, {"connect", l_connect},
{"query", l_query}, {"query", l_query},
{"query_a",l_async_query},
{"close", l_close}, {"close", l_close},
{"open_stream", l_open_stream}, {"open_stream", l_open_stream},
{"close_stream", l_close_stream}, {"close_stream", l_close_stream},
......
...@@ -110,7 +110,25 @@ else ...@@ -110,7 +110,25 @@ else
end end
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("------------------------")
print("continuous query result:") print("continuous query result:")
for key, value in pairs(t) do for key, value in pairs(t) do
...@@ -119,7 +137,7 @@ function callback(t) ...@@ -119,7 +137,7 @@ function callback(t)
end end
local stream 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 if res.code ~=0 then
print("open stream--- failed:"..res.error) print("open stream--- failed:"..res.error)
return return
...@@ -146,4 +164,5 @@ while loop_index < 30 do ...@@ -146,4 +164,5 @@ while loop_index < 30 do
end end
driver.close_stream(stream) driver.close_stream(stream)
driver.close(conn) driver.close(conn)
...@@ -29,8 +29,8 @@ pipeline { ...@@ -29,8 +29,8 @@ pipeline {
agent none agent none
environment{ environment{
WK = '/var/lib/jenkins/workspace/TDinternal' WK = '/data/lib/jenkins/workspace/TDinternal'
WKC= '/var/lib/jenkins/workspace/TDinternal/community' WKC= '/data/lib/jenkins/workspace/TDinternal/community'
} }
stages { 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())
...@@ -335,4 +335,6 @@ python3 ./test.py -f tag_lite/alter_tag.py ...@@ -335,4 +335,6 @@ python3 ./test.py -f tag_lite/alter_tag.py
python3 test.py -f tools/taosdemoAllTest/taosdemoTestInsertWithJson.py python3 test.py -f tools/taosdemoAllTest/taosdemoTestInsertWithJson.py
python3 test.py -f tools/taosdemoAllTest/taosdemoTestQueryWithJson.py python3 test.py -f tools/taosdemoAllTest/taosdemoTestQueryWithJson.py
python3 ./test.py -f tag_lite/drop_auto_create.py python3 ./test.py -f tag_lite/drop_auto_create.py
python3 test.py -f insert/insert_before_use_db.py
#======================p4-end=============== #======================p4-end===============
###################################################################
# 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 ...@@ -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 -f client/client.py
python3.8 ./test.py $1 -s && sleep 1 python3.8 ./test.py $1 -s && sleep 1
# connector
python3.8 ./test.py $1 -f connector/lua.py
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册