Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
22ab19df
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
22ab19df
编写于
2月 19, 2021
作者:
sangshuduo
浏览文件
操作
浏览文件
下载
差异文件
[TD-2984] <fix>: combine taosdemo and taosdemox. no need taos_init().
上级
f2fc2fe8
67671328
变更
72
隐藏空白更改
内联
并排
Showing
72 changed file
with
2822 addition
and
1231 deletion
+2822
-1231
.gitignore
.gitignore
+12
-0
Jenkinsfile
Jenkinsfile
+4
-3
documentation20/cn/08.connector/docs.md
documentation20/cn/08.connector/docs.md
+10
-9
documentation20/cn/11.administrator/docs.md
documentation20/cn/11.administrator/docs.md
+1
-1
documentation20/cn/12.taos-sql/docs.md
documentation20/cn/12.taos-sql/docs.md
+1
-0
documentation20/cn/13.faq/docs.md
documentation20/cn/13.faq/docs.md
+17
-0
packaging/docker/dockerManifest.sh
packaging/docker/dockerManifest.sh
+3
-2
packaging/rpm/tdengine.spec
packaging/rpm/tdengine.spec
+1
-0
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+99
-26
src/client/src/tscSql.c
src/client/src/tscSql.c
+3
-1
src/client/src/tscSystem.c
src/client/src/tscSystem.c
+8
-2
src/common/src/tglobal.c
src/common/src/tglobal.c
+22
-0
src/connector/python/linux/python2/setup.py
src/connector/python/linux/python2/setup.py
+1
-1
src/connector/python/linux/python2/taos/__init__.py
src/connector/python/linux/python2/taos/__init__.py
+2
-2
src/connector/python/linux/python2/taos/cinterface.py
src/connector/python/linux/python2/taos/cinterface.py
+236
-70
src/connector/python/linux/python2/taos/connection.py
src/connector/python/linux/python2/taos/connection.py
+13
-4
src/connector/python/linux/python2/taos/constants.py
src/connector/python/linux/python2/taos/constants.py
+9
-0
src/connector/python/linux/python2/taos/cursor.py
src/connector/python/linux/python2/taos/cursor.py
+31
-7
src/connector/python/linux/python2/taos/dbapi.py
src/connector/python/linux/python2/taos/dbapi.py
+7
-1
src/connector/python/linux/python2/taos/error.py
src/connector/python/linux/python2/taos/error.py
+13
-4
src/connector/python/linux/python2/taos/subscription.py
src/connector/python/linux/python2/taos/subscription.py
+14
-9
src/connector/python/linux/python3/setup.py
src/connector/python/linux/python3/setup.py
+1
-1
src/connector/python/linux/python3/taos/__init__.py
src/connector/python/linux/python3/taos/__init__.py
+1
-1
src/connector/python/linux/python3/taos/cinterface.py
src/connector/python/linux/python3/taos/cinterface.py
+234
-69
src/connector/python/linux/python3/taos/connection.py
src/connector/python/linux/python3/taos/connection.py
+13
-4
src/connector/python/linux/python3/taos/constants.py
src/connector/python/linux/python3/taos/constants.py
+9
-0
src/connector/python/linux/python3/taos/cursor.py
src/connector/python/linux/python3/taos/cursor.py
+36
-13
src/connector/python/linux/python3/taos/dbapi.py
src/connector/python/linux/python3/taos/dbapi.py
+7
-1
src/connector/python/linux/python3/taos/error.py
src/connector/python/linux/python3/taos/error.py
+13
-4
src/connector/python/linux/python3/taos/subscription.py
src/connector/python/linux/python3/taos/subscription.py
+13
-8
src/connector/python/osx/python3/setup.py
src/connector/python/osx/python3/setup.py
+1
-1
src/connector/python/osx/python3/taos/__init__.py
src/connector/python/osx/python3/taos/__init__.py
+1
-1
src/connector/python/osx/python3/taos/cinterface.py
src/connector/python/osx/python3/taos/cinterface.py
+234
-69
src/connector/python/osx/python3/taos/connection.py
src/connector/python/osx/python3/taos/connection.py
+13
-4
src/connector/python/osx/python3/taos/constants.py
src/connector/python/osx/python3/taos/constants.py
+9
-0
src/connector/python/osx/python3/taos/cursor.py
src/connector/python/osx/python3/taos/cursor.py
+36
-13
src/connector/python/osx/python3/taos/dbapi.py
src/connector/python/osx/python3/taos/dbapi.py
+7
-1
src/connector/python/osx/python3/taos/error.py
src/connector/python/osx/python3/taos/error.py
+13
-4
src/connector/python/osx/python3/taos/subscription.py
src/connector/python/osx/python3/taos/subscription.py
+13
-8
src/connector/python/windows/python2/taos/__init__.py
src/connector/python/windows/python2/taos/__init__.py
+1
-2
src/connector/python/windows/python3/taos/__init__.py
src/connector/python/windows/python3/taos/__init__.py
+1
-2
src/inc/taos.h
src/inc/taos.h
+1
-1
src/inc/ttokendef.h
src/inc/ttokendef.h
+3
-2
src/kit/shell/src/shellEngine.c
src/kit/shell/src/shellEngine.c
+5
-1
src/kit/shell/src/shellMain.c
src/kit/shell/src/shellMain.c
+4
-1
src/kit/taosdemo/taosdemo.c
src/kit/taosdemo/taosdemo.c
+0
-3
src/plugins/monitor/src/monMain.c
src/plugins/monitor/src/monMain.c
+3
-1
src/query/inc/qSqlparser.h
src/query/inc/qSqlparser.h
+2
-1
src/query/inc/sql.y
src/query/inc/sql.y
+12
-1
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+10
-1
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+1
-1
src/query/src/qParserImpl.c
src/query/src/qParserImpl.c
+4
-2
src/query/src/sql.c
src/query/src/sql.c
+1177
-849
src/tsdb/src/tsdbMeta.c
src/tsdb/src/tsdbMeta.c
+15
-3
src/wal/CMakeLists.txt
src/wal/CMakeLists.txt
+2
-0
src/wal/src/walWrite.c
src/wal/src/walWrite.c
+98
-0
tests/Jenkinsfile
tests/Jenkinsfile
+7
-0
tests/examples/c/demo.c
tests/examples/c/demo.c
+4
-1
tests/examples/c/prepare.c
tests/examples/c/prepare.c
+4
-1
tests/examples/c/stream.c
tests/examples/c/stream.c
+4
-1
tests/examples/c/subscribe.c
tests/examples/c/subscribe.c
+4
-1
tests/perftest-scripts/perftest-query.sh
tests/perftest-scripts/perftest-query.sh
+7
-3
tests/pytest/crash_gen/crash_gen_main.py
tests/pytest/crash_gen/crash_gen_main.py
+11
-4
tests/pytest/crash_gen/db.py
tests/pytest/crash_gen/db.py
+3
-0
tests/pytest/fulltest.sh
tests/pytest/fulltest.sh
+1
-1
tests/pytest/insert/basic_unsigned.py
tests/pytest/insert/basic_unsigned.py
+56
-0
tests/pytest/pytest_1.sh
tests/pytest/pytest_1.sh
+1
-1
tests/pytest/tag_lite/alter_tag.py
tests/pytest/tag_lite/alter_tag.py
+52
-0
tests/script/general/parser/create_tb_with_tag_name.sim
tests/script/general/parser/create_tb_with_tag_name.sim
+162
-0
tests/script/jenkins/basic_2.txt
tests/script/jenkins/basic_2.txt
+0
-1
tests/script/jenkins/basic_4.txt
tests/script/jenkins/basic_4.txt
+3
-1
tests/tsim/src/simSystem.c
tests/tsim/src/simSystem.c
+3
-1
未找到文件。
.gitignore
浏览文件 @
22ab19df
...
...
@@ -79,3 +79,15 @@ tests/comparisonTest/opentsdb/opentsdbtest/.settings/
tests/examples/JDBC/JDBCDemo/.classpath
tests/examples/JDBC/JDBCDemo/.project
tests/examples/JDBC/JDBCDemo/.settings/
# Emacs
# -*- mode: gitignore; -*-
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
auto-save-list
tramp
.\#*
TAGS
Jenkinsfile
浏览文件 @
22ab19df
...
...
@@ -5,7 +5,7 @@ node {
git
url:
'https://github.com/taosdata/TDengine.git'
}
def
kipstage
=
0
def
s
kipstage
=
0
def
abortPreviousBuilds
()
{
def
currentJobName
=
env
.
JOB_NAME
def
currentBuildNumber
=
env
.
BUILD_NUMBER
.
toInteger
()
...
...
@@ -88,8 +88,9 @@ pipeline {
git checkout -qf FETCH_HEAD
'''
script
{
skipstage
=
sh
(
script:
"
git --no-pager diff --name-only FETCH_HEAD develop|grep -v -E '.*md|//src//connector|Jenkinsfile|test-all.sh' || echo 0 "
,
returnStdout:
true
)
env
.
skipstage
=
sh
(
script:
"cd ${WORKSPACE}.tes &&
git --no-pager diff --name-only FETCH_HEAD develop|grep -v -E '.*md|//src//connector|Jenkinsfile|test-all.sh' || echo 0 "
,
returnStdout:
true
)
}
println
env
.
skipstage
sh
'''
rm -rf ${WORKSPACE}.tes
'''
...
...
@@ -101,7 +102,7 @@ pipeline {
when
{
changeRequest
()
expression
{
skipstage
!=
0
env
.
skipstage
!=
0
}
}
parallel
{
...
...
documentation20/cn/08.connector/docs.md
浏览文件 @
22ab19df
...
...
@@ -24,6 +24,7 @@ TDengine提供了丰富的应用程序开发接口,其中包括C/C++、Java、
*
在没有安装TDengine服务端软件的系统中使用连接器(除RESTful外)访问 TDengine 数据库,需要安装相应版本的客户端安装包来使应用驱动(Linux系统中文件名为libtaos.so,Windows系统中为taos.dll)被安装在系统中,否则会产生无法找到相应库文件的错误。
*
所有执行 SQL 语句的 API,例如 C/C++ Connector 中的
`tao_query`
、
`taos_query_a`
、
`taos_subscribe`
等,以及其它语言中与它们对应的API,每次都只能执行一条 SQL 语句,如果实际参数中包含了多条语句,它们的行为是未定义的。
*
升级到TDengine到2.0.8.0版本的用户,必须更新JDBC连接TDengine必须升级taos-jdbcdriver到2.0.12及以上。
*
无论选用何种编程语言的连接器,2.0 及以上版本的 TDengine 推荐数据库应用的每个线程都建立一个独立的连接,或基于线程建立连接池,以避免连接内的“USE statement”状态量在线程之间相互干扰(但连接的查询和写入操作都是线程安全的)。
## <a class="anchor" id="driver"></a>安装连接器驱动步骤
...
...
@@ -238,13 +239,13 @@ C/C++的API类似于MySQL的C API。应用程序使用时,需要包含TDengine
获取查询结果集每列数据的属性(数据类型、名字、字节数),与taos_num_fileds配合使用,可用来解析
`taos_fetch_row`
返回的一个元组(一行)的数据。
`TAOS_FIELD`
的结构如下:
```
c
typedef
struct
taosField
{
char
name
[
65
];
// 列名
uint8_t
type
;
// 数据类型
int16_t
bytes
;
// 字节数
}
TAOS_FIELD
;
```
```
c
typedef
struct
taosField
{
char
name
[
65
];
// 列名
uint8_t
type
;
// 数据类型
int16_t
bytes
;
// 字节数
}
TAOS_FIELD
;
```
-
`void taos_stop_query(TAOS_RES *res)`
...
...
@@ -266,7 +267,7 @@ C/C++的API类似于MySQL的C API。应用程序使用时,需要包含TDengine
### 异步查询API
同步API之外,TDengine还提供性能更高的异步调用API处理数据插入、查询操作。在软硬件环境相同的情况下,异步API处理数据插入的速度比同步API快2
\~
4倍。异步API采用非阻塞式的调用方式,在系统真正完成某个具体数据库操作前,立即返回。调用的线程可以去处理其他工作,从而可以提升整个应用的性能。异步API在网络延迟严重的情况下,优点尤为突出。
同步API之外,TDengine还提供性能更高的异步调用API处理数据插入、查询操作。在软硬件环境相同的情况下,异步API处理数据插入的速度比同步API快2
~
4倍。异步API采用非阻塞式的调用方式,在系统真正完成某个具体数据库操作前,立即返回。调用的线程可以去处理其他工作,从而可以提升整个应用的性能。异步API在网络延迟严重的情况下,优点尤为突出。
异步API都需要应用提供相应的回调函数,回调函数参数设置如下:前两个参数都是一致的,第三个参数依不同的API而定。第一个参数param是应用调用异步API时提供给系统的,用于回调时,应用能够找回具体操作的上下文,依具体实现而定。第二个参数是SQL操作的结果集,如果为空,比如insert操作,表示没有记录返回,如果不为空,比如select操作,表示有记录返回。
...
...
@@ -896,7 +897,7 @@ Node-example-raw.js
验证方法:
1.
新建安装验证目录,例如:
\~
/tdengine-test
,拷贝github上nodejsChecker.js源程序。下载地址:(https://github.com/taosdata/TDengine/tree/develop/tests/examples/nodejs/nodejsChecker.js)。
1.
新建安装验证目录,例如:
`~/tdengine-test`
,拷贝github上nodejsChecker.js源程序。下载地址:(https://github.com/taosdata/TDengine/tree/develop/tests/examples/nodejs/nodejsChecker.js)。
2.
在命令中执行以下命令:
...
...
documentation20/cn/11.administrator/docs.md
浏览文件 @
22ab19df
...
...
@@ -102,7 +102,7 @@ taosd -C
-
maxSQLLength:单条SQL语句允许最长限制。默认值:65380字节。
-
telemetryReporting: 是否允许 TDengine 采集和上报基本使用信息,0表示不允许,1表示允许。 默认值:1。
-
stream: 是否启用连续查询(流计算功能),0表示不允许,1表示允许。 默认值:1。
-
queryBufferSize: 为所有并发查询占用保留的内存大小。计算规则可以根据实际应用可能的最大并发数和表的数字相乘,再乘 170 。单位为
字节
。
-
queryBufferSize: 为所有并发查询占用保留的内存大小。计算规则可以根据实际应用可能的最大并发数和表的数字相乘,再乘 170 。单位为
MB(2.0.15 以前的版本中,此参数的单位是字节)
。
-
ratioOfQueryCores: 设置查询线程的最大数量。最小值0 表示只有1个查询线程;最大值2表示最大建立2倍CPU核数的查询线程。默认为1,表示最大和CPU核数相等的查询线程。该值可以为小数,即0.5表示最大建立CPU核数一半的查询线程。
**注意:**
对于端口,TDengine会使用从serverPort起13个连续的TCP和UDP端口号,请务必在防火墙打开。因此如果是缺省配置,需要打开从6030到6042共13个端口,而且必须TCP和UDP都打开。
...
...
documentation20/cn/12.taos-sql/docs.md
浏览文件 @
22ab19df
...
...
@@ -267,6 +267,7 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
```
## <a class="anchor" id="tags"></a>超级表 STable 中 TAG 管理
-
**添加标签**
```mysql
...
...
documentation20/cn/13.faq/docs.md
浏览文件 @
22ab19df
...
...
@@ -140,3 +140,20 @@ TDengine是根据hostname唯一标志一台机器的,在数据文件从机器A
-
2.0.7.0 及以后的版本,到/var/lib/taos/dnode下,修复dnodeEps.json的dnodeId对应的FQDN,重启。确保机器内所有机器的此文件是完全相同的。
-
1.x 和 2.x 版本的存储结构不兼容,需要使用迁移工具或者自己开发应用导出导入数据。
## 17. 如何在命令行程序 taos 中临时调整日志级别
为了调试方便,从 2.0.16 版本开始,命令行程序 taos 新增了与日志记录相关的两条指令:
```
mysql
ALTER LOCAL flag_name flag_value;
```
其含义是,在当前的命令行程序下,修改一个特定模块的日志记录级别(只对当前命令行程序有效,如果 taos 命令行程序重启,则需要重新设置):
-
flag_name 的取值可以是:debugFlag,cDebugFlag,tmrDebugFlag,uDebugFlag,rpcDebugFlag
-
flag_value 的取值可以是:131(输出错误和警告日志),135( 输出错误、警告和调试日志),143( 输出错误、警告、调试和跟踪日志)
```
mysql
ALTER LOCAL RESETLOG;
```
其含义是,清空本机所有由客户端生成的日志文件。
packaging/docker/dockerManifest.sh
浏览文件 @
22ab19df
...
...
@@ -35,10 +35,11 @@ done
echo
"verNumber=
${
verNumber
}
"
docker manifest create
-a
tdengine/tdengine:
${
verNumber
}
tdengine/tdengine-amd64:
${
verNumber
}
tdengine/tdengine-aarch64:
${
verNumber
}
tdengine/tdengine-aarch32:
${
verNumber
}
#docker manifest create -a tdengine/tdengine:${verNumber} tdengine/tdengine-amd64:${verNumber} tdengine/tdengine-aarch64:${verNumber} tdengine/tdengine-aarch32:${verNumber}
docker manifest create
-a
tdengine/tdengine tdengine/tdengine-amd64:latest tdengine/tdengine-aarch64:latest tdengine/tdengine-aarch32:latest
docker login
-u
tdengine
-p
${
passWord
}
#replace the docker registry username and password
docker manifest push tdengine/tdengine
:
${
verNumber
}
docker manifest push tdengine/tdengine
# how set latest version ???
packaging/rpm/tdengine.spec
浏览文件 @
22ab19df
...
...
@@ -9,6 +9,7 @@ Summary: tdengine from taosdata
Group: Application/Database
License: AGPL
URL: www.taosdata.com
AutoReqProv: no
#BuildRoot: %_topdir/BUILDROOT
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
...
...
src/client/src/tscSQLParser.c
浏览文件 @
22ab19df
...
...
@@ -6375,16 +6375,14 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
// get table meta from mnode
code
=
tNameExtractFullName
(
&
pStableMetaInfo
->
name
,
pCreateTableInfo
->
tagdata
.
name
);
SArray
*
pList
=
pCreateTableInfo
->
pTagVals
;
SArray
*
p
Val
List
=
pCreateTableInfo
->
pTagVals
;
code
=
tscGetTableMeta
(
pSql
,
pStableMetaInfo
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
return
code
;
}
size_t
size
=
taosArrayGetSize
(
pList
);
if
(
tscGetNumOfTags
(
pStableMetaInfo
->
pTableMeta
)
!=
size
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
}
size_t
valSize
=
taosArrayGetSize
(
pValList
);
// too long tag values will return invalid sql, not be truncated automatically
SSchema
*
pTagSchema
=
tscGetTableTagSchema
(
pStableMetaInfo
->
pTableMeta
);
...
...
@@ -6395,36 +6393,111 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
SArray
*
pNameList
=
NULL
;
size_t
nameSize
=
0
;
int32_t
schemaSize
=
tscGetNumOfTags
(
pStableMetaInfo
->
pTableMeta
);
int32_t
ret
=
TSDB_CODE_SUCCESS
;
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SSchema
*
pSchema
=
&
pTagSchema
[
i
];
tVariantListItem
*
pItem
=
taosArrayGet
(
pList
,
i
);
char
tagVal
[
TSDB_MAX_TAGS_LEN
];
if
(
pSchema
->
type
==
TSDB_DATA_TYPE_BINARY
||
pSchema
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pItem
->
pVar
.
nLen
>
pSchema
->
bytes
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
if
(
pCreateTableInfo
->
pTagNames
)
{
pNameList
=
pCreateTableInfo
->
pTagNames
;
nameSize
=
taosArrayGetSize
(
pNameList
);
if
(
valSize
!=
nameSize
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
}
ret
=
tVariantDump
(
&
(
pItem
->
pVar
),
tagVal
,
pSchema
->
type
,
true
);
if
(
schemaSize
<
valSize
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
}
// check again after the convert since it may be converted from binary to nchar.
if
(
pSchema
->
type
==
TSDB_DATA_TYPE_BINARY
||
pSchema
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int16_t
len
=
varDataTLen
(
tagVal
);
if
(
len
>
pSchema
->
bytes
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
bool
findColumnIndex
=
false
;
for
(
int32_t
i
=
0
;
i
<
nameSize
;
++
i
)
{
SStrToken
*
sToken
=
taosArrayGet
(
pNameList
,
i
);
if
(
TK_STRING
==
sToken
->
type
)
{
tscDequoteAndTrimToken
(
sToken
);
}
}
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
tVariantListItem
*
pItem
=
taosArrayGet
(
pValList
,
i
);
findColumnIndex
=
false
;
// todo speedup by using hash list
for
(
int32_t
t
=
0
;
t
<
schemaSize
;
++
t
)
{
if
(
strncmp
(
sToken
->
z
,
pTagSchema
[
t
].
name
,
sToken
->
n
)
==
0
&&
strlen
(
pTagSchema
[
t
].
name
)
==
sToken
->
n
)
{
SSchema
*
pSchema
=
&
pTagSchema
[
t
];
char
tagVal
[
TSDB_MAX_TAGS_LEN
];
if
(
pSchema
->
type
==
TSDB_DATA_TYPE_BINARY
||
pSchema
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pItem
->
pVar
.
nLen
>
pSchema
->
bytes
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
ret
=
tVariantDump
(
&
(
pItem
->
pVar
),
tagVal
,
pSchema
->
type
,
true
);
// check again after the convert since it may be converted from binary to nchar.
if
(
pSchema
->
type
==
TSDB_DATA_TYPE_BINARY
||
pSchema
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int16_t
len
=
varDataTLen
(
tagVal
);
if
(
len
>
pSchema
->
bytes
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
}
tdAddColToKVRow
(
&
kvRowBuilder
,
pSchema
->
colId
,
pSchema
->
type
,
tagVal
);
findColumnIndex
=
true
;
break
;
}
}
if
(
!
findColumnIndex
)
{
return
tscInvalidSQLErrMsg
(
pCmd
->
payload
,
"invalid tag name"
,
sToken
->
z
);
}
}
}
else
{
if
(
schemaSize
!=
valSize
)
{
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg5
);
}
tdAddColToKVRow
(
&
kvRowBuilder
,
pSchema
->
colId
,
pSchema
->
type
,
tagVal
);
for
(
int32_t
i
=
0
;
i
<
valSize
;
++
i
)
{
SSchema
*
pSchema
=
&
pTagSchema
[
i
];
tVariantListItem
*
pItem
=
taosArrayGet
(
pValList
,
i
);
char
tagVal
[
TSDB_MAX_TAGS_LEN
];
if
(
pSchema
->
type
==
TSDB_DATA_TYPE_BINARY
||
pSchema
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
if
(
pItem
->
pVar
.
nLen
>
pSchema
->
bytes
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
ret
=
tVariantDump
(
&
(
pItem
->
pVar
),
tagVal
,
pSchema
->
type
,
true
);
// check again after the convert since it may be converted from binary to nchar.
if
(
pSchema
->
type
==
TSDB_DATA_TYPE_BINARY
||
pSchema
->
type
==
TSDB_DATA_TYPE_NCHAR
)
{
int16_t
len
=
varDataTLen
(
tagVal
);
if
(
len
>
pSchema
->
bytes
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
}
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
return
invalidSqlErrMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg4
);
}
tdAddColToKVRow
(
&
kvRowBuilder
,
pSchema
->
colId
,
pSchema
->
type
,
tagVal
);
}
}
SKVRow
row
=
tdGetKVRowFromBuilder
(
&
kvRowBuilder
);
...
...
src/client/src/tscSql.c
浏览文件 @
22ab19df
...
...
@@ -52,7 +52,9 @@ static bool validPassword(const char* passwd) {
static
SSqlObj
*
taosConnectImpl
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
auth
,
const
char
*
db
,
uint16_t
port
,
void
(
*
fp
)(
void
*
,
TAOS_RES
*
,
int
),
void
*
param
,
TAOS
**
taos
)
{
taos_init
();
if
(
taos_init
())
{
return
NULL
;
}
if
(
!
validUserName
(
user
))
{
terrno
=
TSDB_CODE_TSC_INVALID_USER_LENGTH
;
...
...
src/client/src/tscSystem.c
浏览文件 @
22ab19df
...
...
@@ -47,6 +47,7 @@ void *tscRpcCache; // cache to keep rpc obj
int32_t
tscNumOfThreads
=
1
;
// num of rpc threads
static
pthread_mutex_t
rpcObjMutex
;
// mutex to protect open the rpc obj concurrently
static
pthread_once_t
tscinit
=
PTHREAD_ONCE_INIT
;
static
volatile
int
tscInitRes
=
0
;
void
tscCheckDiskUsage
(
void
*
UNUSED_PARAM
(
para
),
void
*
UNUSED_PARAM
(
param
))
{
taosGetDisk
();
...
...
@@ -137,7 +138,11 @@ void taos_init_imp(void) {
}
taosReadGlobalCfg
();
taosCheckGlobalCfg
();
if
(
taosCheckGlobalCfg
())
{
tscInitRes
=
-
1
;
return
;
}
taosInitNotes
();
rpcInit
();
...
...
@@ -159,6 +164,7 @@ void taos_init_imp(void) {
tscQhandle
=
taosInitScheduler
(
queueSize
,
tscNumOfThreads
,
"tsc"
);
if
(
NULL
==
tscQhandle
)
{
tscError
(
"failed to init scheduler"
);
tscInitRes
=
-
1
;
return
;
}
...
...
@@ -187,7 +193,7 @@ void taos_init_imp(void) {
tscDebug
(
"client is initialized successfully"
);
}
void
taos_init
()
{
pthread_once
(
&
tscinit
,
taos_init_imp
);
}
int
taos_init
()
{
pthread_once
(
&
tscinit
,
taos_init_imp
);
return
tscInitRes
;
}
// this function may be called by user or system, or by both simultaneously.
void
taos_cleanup
(
void
)
{
...
...
src/common/src/tglobal.c
浏览文件 @
22ab19df
...
...
@@ -373,6 +373,23 @@ static void taosCheckDataDirCfg() {
}
}
static
int32_t
taosCheckTmpDir
(
void
)
{
if
(
strlen
(
tsTempDir
)
<=
0
){
uError
(
"tempDir is not set"
);
return
-
1
;
}
DIR
*
dir
=
opendir
(
tsTempDir
);
if
(
dir
==
NULL
)
{
uError
(
"can not open tempDir:%s, error:%s"
,
tsTempDir
,
strerror
(
errno
));
return
-
1
;
}
closedir
(
dir
);
return
0
;
}
static
void
doInitGlobalConfig
(
void
)
{
osInit
();
srand
(
taosSafeRand
());
...
...
@@ -1488,6 +1505,11 @@ int32_t taosCheckGlobalCfg() {
}
taosCheckDataDirCfg
();
if
(
taosCheckTmpDir
())
{
return
-
1
;
}
taosGetSystemInfo
();
tsSetLocale
();
...
...
src/connector/python/linux/python2/setup.py
浏览文件 @
22ab19df
...
...
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools
.
setup
(
name
=
"taos"
,
version
=
"2.0.
5
"
,
version
=
"2.0.
6
"
,
author
=
"Taosdata Inc."
,
author_email
=
"support@taosdata.com"
,
description
=
"TDengine python client package"
,
...
...
src/connector/python/linux/python2/taos/__init__.py
浏览文件 @
22ab19df
...
...
@@ -3,12 +3,12 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0.3'
threadsafety
=
0
paramstyle
=
'pyformat'
__all__
=
[
'connection'
,
'cursor'
]
def
connect
(
*
args
,
**
kwargs
):
""" Function to return a TDengine connector object
...
...
@@ -21,4 +21,4 @@ def connect(*args, **kwargs):
@rtype: TDengineConnector
"""
return
TDengineConnection
(
*
args
,
**
kwargs
)
\ No newline at end of file
return
TDengineConnection
(
*
args
,
**
kwargs
)
src/connector/python/linux/python2/taos/cinterface.py
浏览文件 @
22ab19df
...
...
@@ -4,11 +4,14 @@ from .error import *
import
math
import
datetime
def
_convert_millisecond_to_datetime
(
milli
):
return
datetime
.
datetime
.
fromtimestamp
(
milli
/
1000.0
)
return
datetime
.
datetime
.
fromtimestamp
(
milli
/
1000.0
)
def
_convert_microsecond_to_datetime
(
micro
):
return
datetime
.
datetime
.
fromtimestamp
(
micro
/
1000000.0
)
return
datetime
.
datetime
.
fromtimestamp
(
micro
/
1000000.0
)
def
_crow_timestamp_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
...
...
@@ -18,168 +21,309 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
_timestamp_converter
=
_convert_microsecond_to_datetime
if
num_of_rows
>
0
:
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
else
:
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
def
_crow_bool_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_bool
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_bool
))[
:
abs
(
num_of_rows
)]]
def
_crow_tinyint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C tinyint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]]
def
_crow_tinyint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C tinyint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_TINYINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
def
_crow_smallint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C smallint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
def
_crow_smallint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C smallint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
def
_crow_int_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C int row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]]
def
_crow_int_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C int row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_INT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_INT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
abs
(
num_of_rows
)]]
def
_crow_bigint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bigint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]]
def
_crow_bigint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bigint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BIGINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[
:
abs
(
num_of_rows
)]]
def
_crow_float_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C float row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]]
def
_crow_double_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C double row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]]
def
_crow_binary_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
if
num_of_rows
>
0
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
def
_crow_nchar_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C nchar row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
if
num_of_rows
>=
0
:
tmpstr
=
ctypes
.
c_char_p
(
data
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
else
:
res
.
append
(
(
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
res
.
append
((
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
except
ValueError
:
res
.
append
(
None
)
return
res
return
res
def
_crow_binary_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
if
num_of_rows
>
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
]
)
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
])
except
ValueError
:
res
.
append
(
None
)
else
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
]
)
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
])
except
ValueError
:
res
.
append
(
None
)
return
res
def
_crow_nchar_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C nchar row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
if
num_of_rows
>=
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
except
ValueError
:
res
.
append
(
None
)
else
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
res
.
append
(
(
ctypes
.
cast
(
data
+
nbytes
*
i
+
2
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
res
.
append
((
ctypes
.
cast
(
data
+
nbytes
*
i
+
2
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
except
ValueError
:
res
.
append
(
None
)
return
res
_CONVERT_FUNC
=
{
FieldType
.
C_BOOL
:
_crow_bool_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_BINARY
:
_crow_binary_to_python
,
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python
,
FieldType
.
C_TINYINT_UNSIGNED
:
_crow_tinyint_unsigned_to_python
,
FieldType
.
C_SMALLINT_UNSIGNED
:
_crow_smallint_unsigned_to_python
,
FieldType
.
C_INT_UNSIGNED
:
_crow_int_unsigned_to_python
,
FieldType
.
C_BIGINT_UNSIGNED
:
_crow_bigint_unsigned_to_python
}
_CONVERT_FUNC_BLOCK
=
{
FieldType
.
C_BOOL
:
_crow_bool_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_BINARY
:
_crow_binary_to_python_block
,
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python_block
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python_block
,
FieldType
.
C_TINYINT_UNSIGNED
:
_crow_tinyint_unsigned_to_python
,
FieldType
.
C_SMALLINT_UNSIGNED
:
_crow_smallint_unsigned_to_python
,
FieldType
.
C_INT_UNSIGNED
:
_crow_int_unsigned_to_python
,
FieldType
.
C_BIGINT_UNSIGNED
:
_crow_bigint_unsigned_to_python
}
# Corresponding TAOS_FIELD structure in C
class
TaosField
(
ctypes
.
Structure
):
_fields_
=
[(
'name'
,
ctypes
.
c_char
*
65
),
(
'type'
,
ctypes
.
c_char
),
(
'bytes'
,
ctypes
.
c_short
)]
# C interface class
class
CTaosInterface
(
object
):
libtaos
=
ctypes
.
CDLL
(
'libtaos.so'
)
...
...
@@ -216,7 +360,7 @@ class CTaosInterface(object):
except
AttributeError
:
raise
AttributeError
(
"config is expected as a str"
)
if
config
!=
None
:
if
config
is
not
None
:
CTaosInterface
.
libtaos
.
taos_options
(
3
,
self
.
_config
)
CTaosInterface
.
libtaos
.
taos_init
()
...
...
@@ -227,7 +371,13 @@ class CTaosInterface(object):
"""
return
self
.
_config
def
connect
(
self
,
host
=
None
,
user
=
"root"
,
password
=
"taosdata"
,
db
=
None
,
port
=
0
):
def
connect
(
self
,
host
=
None
,
user
=
"root"
,
password
=
"taosdata"
,
db
=
None
,
port
=
0
):
'''
Function to connect to server
...
...
@@ -236,7 +386,7 @@ class CTaosInterface(object):
# host
try
:
_host
=
ctypes
.
c_char_p
(
host
.
encode
(
"utf-8"
))
if
host
!=
None
else
ctypes
.
c_char_p
(
None
)
"utf-8"
))
if
host
is
not
None
else
ctypes
.
c_char_p
(
None
)
except
AttributeError
:
raise
AttributeError
(
"host is expected as a str"
)
...
...
@@ -255,7 +405,7 @@ class CTaosInterface(object):
# db
try
:
_db
=
ctypes
.
c_char_p
(
db
.
encode
(
"utf-8"
))
if
db
!=
None
else
ctypes
.
c_char_p
(
None
)
db
.
encode
(
"utf-8"
))
if
db
is
not
None
else
ctypes
.
c_char_p
(
None
)
except
AttributeError
:
raise
AttributeError
(
"db is expected as a str"
)
...
...
@@ -268,11 +418,11 @@ class CTaosInterface(object):
connection
=
ctypes
.
c_void_p
(
CTaosInterface
.
libtaos
.
taos_connect
(
_host
,
_user
,
_password
,
_db
,
_port
))
if
connection
.
value
==
None
:
if
connection
.
value
is
None
:
print
(
'connect to TDengine failed'
)
raise
ConnectionError
(
"connect to TDengine failed"
)
# sys.exit(1)
#else:
#
else:
# print('connect to TDengine success')
return
connection
...
...
@@ -293,12 +443,13 @@ class CTaosInterface(object):
@rtype: 0 on success and -1 on failure
'''
try
:
return
CTaosInterface
.
libtaos
.
taos_query
(
connection
,
ctypes
.
c_char_p
(
sql
.
encode
(
'utf-8'
)))
return
CTaosInterface
.
libtaos
.
taos_query
(
connection
,
ctypes
.
c_char_p
(
sql
.
encode
(
'utf-8'
)))
except
AttributeError
:
raise
AttributeError
(
"sql is expected as a string"
)
# finally:
# CTaosInterface.libtaos.close(connection)
@
staticmethod
def
affectedRows
(
result
):
"""The affected rows after runing query
...
...
@@ -308,7 +459,7 @@ class CTaosInterface(object):
@
staticmethod
def
subscribe
(
connection
,
restart
,
topic
,
sql
,
interval
):
"""Create a subscription
@restart boolean,
@restart boolean,
@sql string, sql statement for data query, must be a 'select' statement.
@topic string, name of this subscription
"""
...
...
@@ -360,38 +511,53 @@ class CTaosInterface(object):
result
,
ctypes
.
byref
(
pblock
))
if
num_of_rows
==
0
:
return
None
,
0
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
blocks
=
[
None
]
*
len
(
fields
)
fieldL
=
CTaosInterface
.
libtaos
.
taos_fetch_lengths
(
result
)
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
len
(
fields
)]]
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
len
(
fields
)]]
for
i
in
range
(
len
(
fields
)):
data
=
ctypes
.
cast
(
pblock
,
ctypes
.
POINTER
(
ctypes
.
c_void_p
))[
i
]
if
fields
[
i
][
'type'
]
not
in
_CONVERT_FUNC_BLOCK
:
raise
DatabaseError
(
"Invalid data type returned from database"
)
blocks
[
i
]
=
_CONVERT_FUNC_BLOCK
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
blocks
[
i
]
=
_CONVERT_FUNC_BLOCK
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
return
blocks
,
abs
(
num_of_rows
)
@
staticmethod
def
fetchRow
(
result
,
fields
):
pblock
=
ctypes
.
c_void_p
(
0
)
pblock
=
CTaosInterface
.
libtaos
.
taos_fetch_row
(
result
)
if
pblock
:
pblock
=
CTaosInterface
.
libtaos
.
taos_fetch_row
(
result
)
if
pblock
:
num_of_rows
=
1
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
blocks
=
[
None
]
*
len
(
fields
)
fieldL
=
CTaosInterface
.
libtaos
.
taos_fetch_lengths
(
result
)
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
len
(
fields
)]]
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
len
(
fields
)]]
for
i
in
range
(
len
(
fields
)):
data
=
ctypes
.
cast
(
pblock
,
ctypes
.
POINTER
(
ctypes
.
c_void_p
))[
i
]
if
fields
[
i
][
'type'
]
not
in
_CONVERT_FUNC
:
raise
DatabaseError
(
"Invalid data type returned from database"
)
raise
DatabaseError
(
"Invalid data type returned from database"
)
if
data
is
None
:
blocks
[
i
]
=
[
None
]
else
:
blocks
[
i
]
=
_CONVERT_FUNC
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
blocks
[
i
]
=
_CONVERT_FUNC
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
else
:
return
None
,
0
return
blocks
,
abs
(
num_of_rows
)
@
staticmethod
def
freeResult
(
result
):
CTaosInterface
.
libtaos
.
taos_free_result
(
result
)
...
...
src/connector/python/linux/python2/taos/connection.py
浏览文件 @
22ab19df
...
...
@@ -2,9 +2,11 @@ from .cursor import TDengineCursor
from
.subscription
import
TDengineSubscription
from
.cinterface
import
CTaosInterface
class
TDengineConnection
(
object
):
""" TDengine connection object
"""
def
__init__
(
self
,
*
args
,
**
kwargs
):
self
.
_conn
=
None
self
.
_host
=
None
...
...
@@ -29,7 +31,7 @@ class TDengineConnection(object):
# password
if
'password'
in
kwargs
:
self
.
_password
=
kwargs
[
'password'
]
# database
if
'database'
in
kwargs
:
self
.
_database
=
kwargs
[
'database'
]
...
...
@@ -43,7 +45,12 @@ class TDengineConnection(object):
self
.
_config
=
kwargs
[
'config'
]
self
.
_chandle
=
CTaosInterface
(
self
.
_config
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
def
close
(
self
):
"""Close current connection.
...
...
@@ -55,7 +62,8 @@ class TDengineConnection(object):
"""
if
self
.
_conn
is
None
:
return
None
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
return
TDengineSubscription
(
sub
)
def
cursor
(
self
):
...
...
@@ -80,7 +88,8 @@ class TDengineConnection(object):
"""
pass
if
__name__
==
"__main__"
:
conn
=
TDengineConnection
(
host
=
'192.168.1.107'
)
conn
.
close
()
print
(
"Hello world"
)
\ No newline at end of file
print
(
"Hello world"
)
src/connector/python/linux/python2/taos/constants.py
浏览文件 @
22ab19df
...
...
@@ -3,6 +3,7 @@
from
.dbapi
import
*
class
FieldType
(
object
):
"""TDengine Field Types
"""
...
...
@@ -18,13 +19,21 @@ class FieldType(object):
C_BINARY
=
8
C_TIMESTAMP
=
9
C_NCHAR
=
10
C_TINYINT_UNSIGNED
=
12
C_SMALLINT_UNSIGNED
=
13
C_INT_UNSIGNED
=
14
C_BIGINT_UNSIGNED
=
15
# NULL value definition
# NOTE: These values should change according to C definition in tsdb.h
C_BOOL_NULL
=
0x02
C_TINYINT_NULL
=
-
128
C_TINYINT_UNSIGNED_NULL
=
255
C_SMALLINT_NULL
=
-
32768
C_SMALLINT_UNSIGNED_NULL
=
65535
C_INT_NULL
=
-
2147483648
C_INT_UNSIGNED_NULL
=
4294967295
C_BIGINT_NULL
=
-
9223372036854775808
C_BIGINT_UNSIGNED_NULL
=
18446744073709551615
C_FLOAT_NULL
=
float
(
'nan'
)
C_DOUBLE_NULL
=
float
(
'nan'
)
C_BINARY_NULL
=
bytearray
([
int
(
'0xff'
,
16
)])
...
...
src/connector/python/linux/python2/taos/cursor.py
浏览文件 @
22ab19df
...
...
@@ -128,8 +128,8 @@ class TDengineCursor(object):
if
errno
==
0
:
if
CTaosInterface
.
fieldsCount
(
self
.
_result
)
==
0
:
self
.
_affected_rows
+=
CTaosInterface
.
affectedRows
(
self
.
_result
)
return
CTaosInterface
.
affectedRows
(
self
.
_result
)
self
.
_result
)
return
CTaosInterface
.
affectedRows
(
self
.
_result
)
else
:
self
.
_fields
=
CTaosInterface
.
useResult
(
self
.
_result
)
...
...
@@ -148,6 +148,7 @@ class TDengineCursor(object):
"""Fetch the next row of a query result set, returning a single sequence, or None when no more data is available.
"""
pass
def
fetchmany
(
self
):
pass
...
...
@@ -158,11 +159,26 @@ class TDengineCursor(object):
if
(
dataType
.
upper
()
==
"TINYINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_TINYINT
):
return
True
if
(
dataType
.
upper
()
==
"TINYINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_TINYINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"SMALLINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_SMALLINT
):
return
True
if
(
dataType
.
upper
()
==
"SMALLINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_SMALLINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"INT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT
):
return
True
if
(
dataType
.
upper
()
==
"INT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"BIGINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_BIGINT
):
return
True
if
(
dataType
.
upper
()
==
"BIGINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_BIGINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"FLOAT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_FLOAT
):
...
...
@@ -191,16 +207,20 @@ class TDengineCursor(object):
buffer
=
[[]
for
i
in
range
(
len
(
self
.
_fields
))]
self
.
_rowcount
=
0
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchRow
(
self
.
_result
,
self
.
_fields
)
block
,
num_of_fields
=
CTaosInterface
.
fetchRow
(
self
.
_result
,
self
.
_fields
)
errno
=
CTaosInterface
.
libtaos
.
taos_errno
(
self
.
_result
)
if
errno
!=
0
:
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
self
.
_rowcount
+=
num_of_fields
for
i
in
range
(
len
(
self
.
_fields
)):
buffer
[
i
].
extend
(
block
[
i
])
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
fetchall
(
self
):
if
self
.
_result
is
None
or
self
.
_fields
is
None
:
raise
OperationalError
(
"Invalid use of fetchall"
)
...
...
@@ -208,16 +228,20 @@ class TDengineCursor(object):
buffer
=
[[]
for
i
in
range
(
len
(
self
.
_fields
))]
self
.
_rowcount
=
0
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
self
.
_result
,
self
.
_fields
)
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
self
.
_result
,
self
.
_fields
)
errno
=
CTaosInterface
.
libtaos
.
taos_errno
(
self
.
_result
)
if
errno
!=
0
:
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
self
.
_rowcount
+=
num_of_fields
for
i
in
range
(
len
(
self
.
_fields
)):
buffer
[
i
].
extend
(
block
[
i
])
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
nextset
(
self
):
"""
"""
...
...
src/connector/python/linux/python2/taos/dbapi.py
浏览文件 @
22ab19df
...
...
@@ -4,6 +4,7 @@
import
time
import
datetime
class
DBAPITypeObject
(
object
):
def
__init__
(
self
,
*
values
):
self
.
values
=
values
...
...
@@ -16,23 +17,28 @@ class DBAPITypeObject(object):
else
:
return
-
1
Date
=
datetime
.
date
Time
=
datetime
.
time
Timestamp
=
datetime
.
datetime
def
DataFromTicks
(
ticks
):
return
Date
(
*
time
.
localtime
(
ticks
)[:
3
])
def
TimeFromTicks
(
ticks
):
return
Time
(
*
time
.
localtime
(
ticks
)[
3
:
6
])
def
TimestampFromTicks
(
ticks
):
return
Timestamp
(
*
time
.
localtime
(
ticks
)[:
6
])
Binary
=
bytes
# STRING = DBAPITypeObject(*constants.FieldType.get_string_types())
# BINARY = DBAPITypeObject(*constants.FieldType.get_binary_types())
# NUMBER = BAPITypeObject(*constants.FieldType.get_number_types())
# DATETIME = DBAPITypeObject(*constants.FieldType.get_timestamp_types())
# ROWID = DBAPITypeObject()
\ No newline at end of file
# ROWID = DBAPITypeObject()
src/connector/python/linux/python2/taos/error.py
浏览文件 @
22ab19df
"""Python exceptions
"""
class
Error
(
Exception
):
def
__init__
(
self
,
msg
=
None
,
errno
=
None
):
self
.
msg
=
msg
self
.
_full_msg
=
self
.
msg
self
.
errno
=
errno
def
__str__
(
self
):
return
self
.
_full_msg
class
Warning
(
Exception
):
"""Exception raised for important warnings like data truncations while inserting.
"""
pass
class
InterfaceError
(
Error
):
"""Exception raised for errors that are related to the database interface rather than the database itself.
"""Exception raised for errors that are related to the database interface rather than the database itself.
"""
pass
class
DatabaseError
(
Error
):
"""Exception raised for errors that are related to the database.
"""Exception raised for errors that are related to the database.
"""
pass
class
DataError
(
DatabaseError
):
"""Exception raised for errors that are due to problems with the processed data like division by zero, numeric value out of range.
"""
pass
class
OperationalError
(
DatabaseError
):
"""Exception raised for errors that are related to the database's operation and not necessarily under the control of the programmer
"""
...
...
@@ -41,17 +47,20 @@ class IntegrityError(DatabaseError):
"""
pass
class
InternalError
(
DatabaseError
):
"""Exception raised when the database encounters an internal error.
"""
pass
class
ProgrammingError
(
DatabaseError
):
"""Exception raised for programming errors.
"""
pass
class
NotSupportedError
(
DatabaseError
):
"""Exception raised in case a method or database API was used which is not supported by the database,.
"""
pass
\ No newline at end of file
pass
src/connector/python/linux/python2/taos/subscription.py
浏览文件 @
22ab19df
from
.cinterface
import
CTaosInterface
from
.error
import
*
class
TDengineSubscription
(
object
):
"""TDengine subscription object
"""
def
__init__
(
self
,
sub
):
self
.
_sub
=
sub
def
consume
(
self
):
"""Consume rows of a subscription
"""
if
self
.
_sub
is
None
:
raise
OperationalError
(
"Invalid use of consume"
)
result
,
fields
=
CTaosInterface
.
consume
(
self
.
_sub
)
buffer
=
[[]
for
i
in
range
(
len
(
fields
))]
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
result
,
fields
)
if
num_of_fields
==
0
:
break
if
num_of_fields
==
0
:
break
for
i
in
range
(
len
(
fields
)):
buffer
[
i
].
extend
(
block
[
i
])
self
.
fields
=
fields
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
close
(
self
,
keepProgress
=
True
):
def
close
(
self
,
keepProgress
=
True
):
"""Close the Subscription.
"""
if
self
.
_sub
is
None
:
return
False
CTaosInterface
.
unsubscribe
(
self
.
_sub
,
keepProgress
)
return
True
if
__name__
==
'__main__'
:
from
.connection
import
TDengineConnection
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
# Generate a cursor object to run SQL commands
sub
=
conn
.
subscribe
(
True
,
"test"
,
"select * from meters;"
,
1000
)
for
i
in
range
(
0
,
10
):
for
i
in
range
(
0
,
10
):
data
=
sub
.
consume
()
for
d
in
data
:
print
(
d
)
sub
.
close
()
conn
.
close
()
\ No newline at end of file
conn
.
close
()
src/connector/python/linux/python3/setup.py
浏览文件 @
22ab19df
...
...
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools
.
setup
(
name
=
"taos"
,
version
=
"2.0.
4
"
,
version
=
"2.0.
5
"
,
author
=
"Taosdata Inc."
,
author_email
=
"support@taosdata.com"
,
description
=
"TDengine python client package"
,
...
...
src/connector/python/linux/python3/taos/__init__.py
浏览文件 @
22ab19df
...
...
@@ -3,12 +3,12 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0.3'
threadsafety
=
0
paramstyle
=
'pyformat'
__all__
=
[
'connection'
,
'cursor'
]
def
connect
(
*
args
,
**
kwargs
):
""" Function to return a TDengine connector object
...
...
src/connector/python/linux/python3/taos/cinterface.py
浏览文件 @
22ab19df
...
...
@@ -4,11 +4,14 @@ from .error import *
import
math
import
datetime
def
_convert_millisecond_to_datetime
(
milli
):
return
datetime
.
datetime
.
fromtimestamp
(
milli
/
1000.0
)
return
datetime
.
datetime
.
fromtimestamp
(
milli
/
1000.0
)
def
_convert_microsecond_to_datetime
(
micro
):
return
datetime
.
datetime
.
fromtimestamp
(
micro
/
1000000.0
)
return
datetime
.
datetime
.
fromtimestamp
(
micro
/
1000000.0
)
def
_crow_timestamp_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
...
...
@@ -18,168 +21,309 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
_timestamp_converter
=
_convert_microsecond_to_datetime
if
num_of_rows
>
0
:
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
else
:
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
def
_crow_bool_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_bool
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_bool
))[
:
abs
(
num_of_rows
)]]
def
_crow_tinyint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C tinyint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]]
def
_crow_tinyint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C tinyint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_TINYINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
def
_crow_smallint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C smallint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
def
_crow_smallint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C smallint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
def
_crow_int_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C int row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]]
def
_crow_int_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C int row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_INT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_INT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
abs
(
num_of_rows
)]]
def
_crow_bigint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bigint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]]
def
_crow_bigint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bigint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BIGINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[
:
abs
(
num_of_rows
)]]
def
_crow_float_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C float row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]]
def
_crow_double_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C double row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]]
def
_crow_binary_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
if
num_of_rows
>
0
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
def
_crow_nchar_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C nchar row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
if
num_of_rows
>=
0
:
tmpstr
=
ctypes
.
c_char_p
(
data
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
else
:
res
.
append
(
(
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
res
.
append
((
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
except
ValueError
:
res
.
append
(
None
)
return
res
return
res
def
_crow_binary_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
if
num_of_rows
>
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
]
)
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
])
except
ValueError
:
res
.
append
(
None
)
else
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
]
)
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
])
except
ValueError
:
res
.
append
(
None
)
return
res
def
_crow_nchar_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C nchar row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
if
num_of_rows
>=
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
except
ValueError
:
res
.
append
(
None
)
else
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
res
.
append
(
(
ctypes
.
cast
(
data
+
nbytes
*
i
+
2
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
res
.
append
((
ctypes
.
cast
(
data
+
nbytes
*
i
+
2
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
except
ValueError
:
res
.
append
(
None
)
return
res
_CONVERT_FUNC
=
{
FieldType
.
C_BOOL
:
_crow_bool_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_BINARY
:
_crow_binary_to_python
,
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python
,
FieldType
.
C_TINYINT_UNSIGNED
:
_crow_tinyint_unsigned_to_python
,
FieldType
.
C_SMALLINT_UNSIGNED
:
_crow_smallint_unsigned_to_python
,
FieldType
.
C_INT_UNSIGNED
:
_crow_int_unsigned_to_python
,
FieldType
.
C_BIGINT_UNSIGNED
:
_crow_bigint_unsigned_to_python
}
_CONVERT_FUNC_BLOCK
=
{
FieldType
.
C_BOOL
:
_crow_bool_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_BINARY
:
_crow_binary_to_python_block
,
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python_block
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python_block
,
FieldType
.
C_TINYINT_UNSIGNED
:
_crow_tinyint_unsigned_to_python
,
FieldType
.
C_SMALLINT_UNSIGNED
:
_crow_smallint_unsigned_to_python
,
FieldType
.
C_INT_UNSIGNED
:
_crow_int_unsigned_to_python
,
FieldType
.
C_BIGINT_UNSIGNED
:
_crow_bigint_unsigned_to_python
}
# Corresponding TAOS_FIELD structure in C
class
TaosField
(
ctypes
.
Structure
):
_fields_
=
[(
'name'
,
ctypes
.
c_char
*
65
),
(
'type'
,
ctypes
.
c_char
),
(
'bytes'
,
ctypes
.
c_short
)]
# C interface class
class
CTaosInterface
(
object
):
libtaos
=
ctypes
.
CDLL
(
'libtaos.so'
)
...
...
@@ -216,7 +360,7 @@ class CTaosInterface(object):
except
AttributeError
:
raise
AttributeError
(
"config is expected as a str"
)
if
config
!=
None
:
if
config
is
not
None
:
CTaosInterface
.
libtaos
.
taos_options
(
3
,
self
.
_config
)
CTaosInterface
.
libtaos
.
taos_init
()
...
...
@@ -227,7 +371,13 @@ class CTaosInterface(object):
"""
return
self
.
_config
def
connect
(
self
,
host
=
None
,
user
=
"root"
,
password
=
"taosdata"
,
db
=
None
,
port
=
0
):
def
connect
(
self
,
host
=
None
,
user
=
"root"
,
password
=
"taosdata"
,
db
=
None
,
port
=
0
):
'''
Function to connect to server
...
...
@@ -236,7 +386,7 @@ class CTaosInterface(object):
# host
try
:
_host
=
ctypes
.
c_char_p
(
host
.
encode
(
"utf-8"
))
if
host
!=
None
else
ctypes
.
c_char_p
(
None
)
"utf-8"
))
if
host
is
not
None
else
ctypes
.
c_char_p
(
None
)
except
AttributeError
:
raise
AttributeError
(
"host is expected as a str"
)
...
...
@@ -255,7 +405,7 @@ class CTaosInterface(object):
# db
try
:
_db
=
ctypes
.
c_char_p
(
db
.
encode
(
"utf-8"
))
if
db
!=
None
else
ctypes
.
c_char_p
(
None
)
db
.
encode
(
"utf-8"
))
if
db
is
not
None
else
ctypes
.
c_char_p
(
None
)
except
AttributeError
:
raise
AttributeError
(
"db is expected as a str"
)
...
...
@@ -268,11 +418,11 @@ class CTaosInterface(object):
connection
=
ctypes
.
c_void_p
(
CTaosInterface
.
libtaos
.
taos_connect
(
_host
,
_user
,
_password
,
_db
,
_port
))
if
connection
.
value
==
None
:
if
connection
.
value
is
None
:
print
(
'connect to TDengine failed'
)
raise
ConnectionError
(
"connect to TDengine failed"
)
# sys.exit(1)
#else:
#
else:
# print('connect to TDengine success')
return
connection
...
...
@@ -293,7 +443,8 @@ class CTaosInterface(object):
@rtype: 0 on success and -1 on failure
'''
try
:
return
CTaosInterface
.
libtaos
.
taos_query
(
connection
,
ctypes
.
c_char_p
(
sql
.
encode
(
'utf-8'
)))
return
CTaosInterface
.
libtaos
.
taos_query
(
connection
,
ctypes
.
c_char_p
(
sql
.
encode
(
'utf-8'
)))
except
AttributeError
:
raise
AttributeError
(
"sql is expected as a string"
)
# finally:
...
...
@@ -308,7 +459,7 @@ class CTaosInterface(object):
@
staticmethod
def
subscribe
(
connection
,
restart
,
topic
,
sql
,
interval
):
"""Create a subscription
@restart boolean,
@restart boolean,
@sql string, sql statement for data query, must be a 'select' statement.
@topic string, name of this subscription
"""
...
...
@@ -360,35 +511,49 @@ class CTaosInterface(object):
result
,
ctypes
.
byref
(
pblock
))
if
num_of_rows
==
0
:
return
None
,
0
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
blocks
=
[
None
]
*
len
(
fields
)
fieldL
=
CTaosInterface
.
libtaos
.
taos_fetch_lengths
(
result
)
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
len
(
fields
)]]
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
len
(
fields
)]]
for
i
in
range
(
len
(
fields
)):
data
=
ctypes
.
cast
(
pblock
,
ctypes
.
POINTER
(
ctypes
.
c_void_p
))[
i
]
if
fields
[
i
][
'type'
]
not
in
_CONVERT_FUNC_BLOCK
:
raise
DatabaseError
(
"Invalid data type returned from database"
)
blocks
[
i
]
=
_CONVERT_FUNC_BLOCK
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
blocks
[
i
]
=
_CONVERT_FUNC_BLOCK
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
return
blocks
,
abs
(
num_of_rows
)
@
staticmethod
def
fetchRow
(
result
,
fields
):
pblock
=
ctypes
.
c_void_p
(
0
)
pblock
=
CTaosInterface
.
libtaos
.
taos_fetch_row
(
result
)
if
pblock
:
pblock
=
CTaosInterface
.
libtaos
.
taos_fetch_row
(
result
)
if
pblock
:
num_of_rows
=
1
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
blocks
=
[
None
]
*
len
(
fields
)
fieldL
=
CTaosInterface
.
libtaos
.
taos_fetch_lengths
(
result
)
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
len
(
fields
)]]
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
len
(
fields
)]]
for
i
in
range
(
len
(
fields
)):
data
=
ctypes
.
cast
(
pblock
,
ctypes
.
POINTER
(
ctypes
.
c_void_p
))[
i
]
if
fields
[
i
][
'type'
]
not
in
_CONVERT_FUNC
:
raise
DatabaseError
(
"Invalid data type returned from database"
)
raise
DatabaseError
(
"Invalid data type returned from database"
)
if
data
is
None
:
blocks
[
i
]
=
[
None
]
else
:
blocks
[
i
]
=
_CONVERT_FUNC
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
blocks
[
i
]
=
_CONVERT_FUNC
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
else
:
return
None
,
0
return
blocks
,
abs
(
num_of_rows
)
...
...
src/connector/python/linux/python3/taos/connection.py
浏览文件 @
22ab19df
...
...
@@ -2,9 +2,11 @@ from .cursor import TDengineCursor
from
.subscription
import
TDengineSubscription
from
.cinterface
import
CTaosInterface
class
TDengineConnection
(
object
):
""" TDengine connection object
"""
def
__init__
(
self
,
*
args
,
**
kwargs
):
self
.
_conn
=
None
self
.
_host
=
None
...
...
@@ -29,7 +31,7 @@ class TDengineConnection(object):
# password
if
'password'
in
kwargs
:
self
.
_password
=
kwargs
[
'password'
]
# database
if
'database'
in
kwargs
:
self
.
_database
=
kwargs
[
'database'
]
...
...
@@ -43,7 +45,12 @@ class TDengineConnection(object):
self
.
_config
=
kwargs
[
'config'
]
self
.
_chandle
=
CTaosInterface
(
self
.
_config
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
def
close
(
self
):
"""Close current connection.
...
...
@@ -55,7 +62,8 @@ class TDengineConnection(object):
"""
if
self
.
_conn
is
None
:
return
None
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
return
TDengineSubscription
(
sub
)
def
cursor
(
self
):
...
...
@@ -80,7 +88,8 @@ class TDengineConnection(object):
"""
pass
if
__name__
==
"__main__"
:
conn
=
TDengineConnection
(
host
=
'192.168.1.107'
)
conn
.
close
()
print
(
"Hello world"
)
\ No newline at end of file
print
(
"Hello world"
)
src/connector/python/linux/python3/taos/constants.py
浏览文件 @
22ab19df
...
...
@@ -3,6 +3,7 @@
from
.dbapi
import
*
class
FieldType
(
object
):
"""TDengine Field Types
"""
...
...
@@ -18,13 +19,21 @@ class FieldType(object):
C_BINARY
=
8
C_TIMESTAMP
=
9
C_NCHAR
=
10
C_TINYINT_UNSIGNED
=
12
C_SMALLINT_UNSIGNED
=
13
C_INT_UNSIGNED
=
14
C_BIGINT_UNSIGNED
=
15
# NULL value definition
# NOTE: These values should change according to C definition in tsdb.h
C_BOOL_NULL
=
0x02
C_TINYINT_NULL
=
-
128
C_TINYINT_UNSIGNED_NULL
=
255
C_SMALLINT_NULL
=
-
32768
C_SMALLINT_UNSIGNED_NULL
=
65535
C_INT_NULL
=
-
2147483648
C_INT_UNSIGNED_NULL
=
4294967295
C_BIGINT_NULL
=
-
9223372036854775808
C_BIGINT_UNSIGNED_NULL
=
18446744073709551615
C_FLOAT_NULL
=
float
(
'nan'
)
C_DOUBLE_NULL
=
float
(
'nan'
)
C_BINARY_NULL
=
bytearray
([
int
(
'0xff'
,
16
)])
...
...
src/connector/python/linux/python3/taos/cursor.py
浏览文件 @
22ab19df
...
...
@@ -5,6 +5,7 @@ import threading
# querySeqNum = 0
class
TDengineCursor
(
object
):
"""Database cursor which is used to manage the context of a fetch operation.
...
...
@@ -107,8 +108,8 @@ class TDengineCursor(object):
# if threading.get_ident() != self._threadId:
# info ="Cursor execute:Thread ID not match,creater:"+str(self._threadId)+" caller:"+str(threading.get_ident())
# raise OperationalError(info)
# print(info)
# return None
# print(info)
# return None
if
not
operation
:
return
None
...
...
@@ -137,8 +138,8 @@ class TDengineCursor(object):
if
errno
==
0
:
if
CTaosInterface
.
fieldsCount
(
self
.
_result
)
==
0
:
self
.
_affected_rows
+=
CTaosInterface
.
affectedRows
(
self
.
_result
)
return
CTaosInterface
.
affectedRows
(
self
.
_result
)
self
.
_result
)
return
CTaosInterface
.
affectedRows
(
self
.
_result
)
else
:
self
.
_fields
=
CTaosInterface
.
useResult
(
self
.
_result
)
...
...
@@ -168,11 +169,26 @@ class TDengineCursor(object):
if
(
dataType
.
upper
()
==
"TINYINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_TINYINT
):
return
True
if
(
dataType
.
upper
()
==
"TINYINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_TINYINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"SMALLINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_SMALLINT
):
return
True
if
(
dataType
.
upper
()
==
"SMALLINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_SMALLINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"INT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT
):
return
True
if
(
dataType
.
upper
()
==
"INT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"BIGINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_BIGINT
):
return
True
if
(
dataType
.
upper
()
==
"BIGINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_BIGINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"FLOAT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_FLOAT
):
...
...
@@ -201,10 +217,13 @@ class TDengineCursor(object):
buffer
=
[[]
for
i
in
range
(
len
(
self
.
_fields
))]
self
.
_rowcount
=
0
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchRow
(
self
.
_result
,
self
.
_fields
)
block
,
num_of_fields
=
CTaosInterface
.
fetchRow
(
self
.
_result
,
self
.
_fields
)
errno
=
CTaosInterface
.
libtaos
.
taos_errno
(
self
.
_result
)
if
errno
!=
0
:
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
self
.
_rowcount
+=
num_of_fields
...
...
@@ -219,15 +238,20 @@ class TDengineCursor(object):
buffer
=
[[]
for
i
in
range
(
len
(
self
.
_fields
))]
self
.
_rowcount
=
0
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
self
.
_result
,
self
.
_fields
)
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
self
.
_result
,
self
.
_fields
)
errno
=
CTaosInterface
.
libtaos
.
taos_errno
(
self
.
_result
)
if
errno
!=
0
:
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
self
.
_rowcount
+=
num_of_fields
for
i
in
range
(
len
(
self
.
_fields
)):
buffer
[
i
].
extend
(
block
[
i
])
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
nextset
(
self
):
"""
"""
...
...
@@ -259,8 +283,8 @@ class TDengineCursor(object):
# if threading.get_ident() != self._threadId:
# info = "Cursor handleresult:Thread ID not match,creater:"+str(self._threadId)+" caller:"+str(threading.get_ident())
# raise OperationalError(info)
# print(info)
# return None
# print(info)
# return None
self
.
_description
=
[]
for
ele
in
self
.
_fields
:
...
...
@@ -268,4 +292,3 @@ class TDengineCursor(object):
(
ele
[
'name'
],
ele
[
'type'
],
None
,
None
,
None
,
None
,
False
))
return
self
.
_result
src/connector/python/linux/python3/taos/dbapi.py
浏览文件 @
22ab19df
...
...
@@ -4,6 +4,7 @@
import
time
import
datetime
class
DBAPITypeObject
(
object
):
def
__init__
(
self
,
*
values
):
self
.
values
=
values
...
...
@@ -16,23 +17,28 @@ class DBAPITypeObject(object):
else
:
return
-
1
Date
=
datetime
.
date
Time
=
datetime
.
time
Timestamp
=
datetime
.
datetime
def
DataFromTicks
(
ticks
):
return
Date
(
*
time
.
localtime
(
ticks
)[:
3
])
def
TimeFromTicks
(
ticks
):
return
Time
(
*
time
.
localtime
(
ticks
)[
3
:
6
])
def
TimestampFromTicks
(
ticks
):
return
Timestamp
(
*
time
.
localtime
(
ticks
)[:
6
])
Binary
=
bytes
# STRING = DBAPITypeObject(*constants.FieldType.get_string_types())
# BINARY = DBAPITypeObject(*constants.FieldType.get_binary_types())
# NUMBER = BAPITypeObject(*constants.FieldType.get_number_types())
# DATETIME = DBAPITypeObject(*constants.FieldType.get_timestamp_types())
# ROWID = DBAPITypeObject()
\ No newline at end of file
# ROWID = DBAPITypeObject()
src/connector/python/linux/python3/taos/error.py
浏览文件 @
22ab19df
"""Python exceptions
"""
class
Error
(
Exception
):
def
__init__
(
self
,
msg
=
None
,
errno
=
None
):
self
.
msg
=
msg
self
.
_full_msg
=
self
.
msg
self
.
errno
=
errno
def
__str__
(
self
):
return
self
.
_full_msg
class
Warning
(
Exception
):
"""Exception raised for important warnings like data truncations while inserting.
"""
pass
class
InterfaceError
(
Error
):
"""Exception raised for errors that are related to the database interface rather than the database itself.
"""Exception raised for errors that are related to the database interface rather than the database itself.
"""
pass
class
DatabaseError
(
Error
):
"""Exception raised for errors that are related to the database.
"""Exception raised for errors that are related to the database.
"""
pass
class
DataError
(
DatabaseError
):
"""Exception raised for errors that are due to problems with the processed data like division by zero, numeric value out of range.
"""
pass
class
OperationalError
(
DatabaseError
):
"""Exception raised for errors that are related to the database's operation and not necessarily under the control of the programmer
"""
...
...
@@ -41,17 +47,20 @@ class IntegrityError(DatabaseError):
"""
pass
class
InternalError
(
DatabaseError
):
"""Exception raised when the database encounters an internal error.
"""
pass
class
ProgrammingError
(
DatabaseError
):
"""Exception raised for programming errors.
"""
pass
class
NotSupportedError
(
DatabaseError
):
"""Exception raised in case a method or database API was used which is not supported by the database,.
"""
pass
\ No newline at end of file
pass
src/connector/python/linux/python3/taos/subscription.py
浏览文件 @
22ab19df
from
.cinterface
import
CTaosInterface
from
.error
import
*
class
TDengineSubscription
(
object
):
"""TDengine subscription object
"""
def
__init__
(
self
,
sub
):
self
.
_sub
=
sub
def
consume
(
self
):
"""Consume rows of a subscription
"""
if
self
.
_sub
is
None
:
raise
OperationalError
(
"Invalid use of consume"
)
result
,
fields
=
CTaosInterface
.
consume
(
self
.
_sub
)
buffer
=
[[]
for
i
in
range
(
len
(
fields
))]
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
result
,
fields
)
if
num_of_fields
==
0
:
break
if
num_of_fields
==
0
:
break
for
i
in
range
(
len
(
fields
)):
buffer
[
i
].
extend
(
block
[
i
])
self
.
fields
=
fields
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
close
(
self
,
keepProgress
=
True
):
def
close
(
self
,
keepProgress
=
True
):
"""Close the Subscription.
"""
if
self
.
_sub
is
None
:
...
...
@@ -38,15 +39,19 @@ class TDengineSubscription(object):
if
__name__
==
'__main__'
:
from
.connection
import
TDengineConnection
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
# Generate a cursor object to run SQL commands
sub
=
conn
.
subscribe
(
True
,
"test"
,
"select * from meters;"
,
1000
)
for
i
in
range
(
0
,
10
):
for
i
in
range
(
0
,
10
):
data
=
sub
.
consume
()
for
d
in
data
:
print
(
d
)
sub
.
close
()
conn
.
close
()
\ No newline at end of file
conn
.
close
()
src/connector/python/osx/python3/setup.py
浏览文件 @
22ab19df
...
...
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools
.
setup
(
name
=
"taos"
,
version
=
"2.0.
4
"
,
version
=
"2.0.
5
"
,
author
=
"Taosdata Inc."
,
author_email
=
"support@taosdata.com"
,
description
=
"TDengine python client package"
,
...
...
src/connector/python/osx/python3/taos/__init__.py
浏览文件 @
22ab19df
...
...
@@ -3,12 +3,12 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0.4'
threadsafety
=
0
paramstyle
=
'pyformat'
__all__
=
[
'connection'
,
'cursor'
]
def
connect
(
*
args
,
**
kwargs
):
""" Function to return a TDengine connector object
...
...
src/connector/python/osx/python3/taos/cinterface.py
浏览文件 @
22ab19df
...
...
@@ -4,11 +4,14 @@ from .error import *
import
math
import
datetime
def
_convert_millisecond_to_datetime
(
milli
):
return
datetime
.
datetime
.
fromtimestamp
(
milli
/
1000.0
)
return
datetime
.
datetime
.
fromtimestamp
(
milli
/
1000.0
)
def
_convert_microsecond_to_datetime
(
micro
):
return
datetime
.
datetime
.
fromtimestamp
(
micro
/
1000000.0
)
return
datetime
.
datetime
.
fromtimestamp
(
micro
/
1000000.0
)
def
_crow_timestamp_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
...
...
@@ -18,168 +21,309 @@ def _crow_timestamp_to_python(data, num_of_rows, nbytes=None, micro=False):
_timestamp_converter
=
_convert_microsecond_to_datetime
if
num_of_rows
>
0
:
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
else
:
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
return
list
(
map
(
_timestamp_converter
,
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]))
def
_crow_bool_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bool row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_bool
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BOOL_NULL
else
bool
(
ele
)
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_bool
))[
:
abs
(
num_of_rows
)]]
def
_crow_tinyint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C tinyint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]]
def
_crow_tinyint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C tinyint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_TINYINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_TINYINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_byte
))[
:
abs
(
num_of_rows
)]]
def
_crow_smallint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C smallint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
def
_crow_smallint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C smallint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_SMALLINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
abs
(
num_of_rows
)]]
def
_crow_int_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C int row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]]
def
_crow_int_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C int row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_INT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_INT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_INT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
abs
(
num_of_rows
)]]
def
_crow_bigint_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bigint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]]
def
_crow_bigint_unsigned_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C bigint row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[
:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
==
FieldType
.
C_BIGINT_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
ele
==
FieldType
.
C_BIGINT_UNSIGNED_NULL
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_long
))[
:
abs
(
num_of_rows
)]]
def
_crow_float_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C float row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_float
))[:
abs
(
num_of_rows
)]]
def
_crow_double_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C double row to python row
"""
if
num_of_rows
>
0
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]
]
return
[
None
if
math
.
isnan
(
ele
)
else
ele
for
ele
in
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_double
))[:
abs
(
num_of_rows
)]]
def
_crow_binary_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
if
num_of_rows
>
0
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
else
:
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
return
[
None
if
ele
.
value
[
0
:
1
]
==
FieldType
.
C_BINARY_NULL
else
ele
.
value
.
decode
(
'utf-8'
)
for
ele
in
(
ctypes
.
cast
(
data
,
ctypes
.
POINTER
(
ctypes
.
c_char
*
nbytes
)))[:
abs
(
num_of_rows
)]]
def
_crow_nchar_to_python
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C nchar row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
if
num_of_rows
>=
0
:
tmpstr
=
ctypes
.
c_char_p
(
data
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
else
:
res
.
append
(
(
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
res
.
append
((
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
except
ValueError
:
res
.
append
(
None
)
return
res
return
res
def
_crow_binary_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C binary row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
if
num_of_rows
>
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
]
)
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
])
except
ValueError
:
res
.
append
(
None
)
else
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
]
)
rbyte
=
ctypes
.
cast
(
data
+
nbytes
*
i
,
ctypes
.
POINTER
(
ctypes
.
c_short
))[
:
1
].
pop
()
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()[
0
:
rbyte
])
except
ValueError
:
res
.
append
(
None
)
return
res
def
_crow_nchar_to_python_block
(
data
,
num_of_rows
,
nbytes
=
None
,
micro
=
False
):
"""Function to convert C nchar row to python row
"""
assert
(
nbytes
is
not
None
)
res
=
[]
res
=
[]
if
num_of_rows
>=
0
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
tmpstr
=
ctypes
.
c_char_p
(
data
+
nbytes
*
i
+
2
)
res
.
append
(
tmpstr
.
value
.
decode
()
)
except
ValueError
:
res
.
append
(
None
)
else
:
for
i
in
range
(
abs
(
num_of_rows
)):
try
:
res
.
append
(
(
ctypes
.
cast
(
data
+
nbytes
*
i
+
2
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
res
.
append
((
ctypes
.
cast
(
data
+
nbytes
*
i
+
2
,
ctypes
.
POINTER
(
ctypes
.
c_wchar
*
(
nbytes
//
4
))))[
0
].
value
)
except
ValueError
:
res
.
append
(
None
)
return
res
_CONVERT_FUNC
=
{
FieldType
.
C_BOOL
:
_crow_bool_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_BINARY
:
_crow_binary_to_python
,
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python
,
FieldType
.
C_TINYINT_UNSIGNED
:
_crow_tinyint_unsigned_to_python
,
FieldType
.
C_SMALLINT_UNSIGNED
:
_crow_smallint_unsigned_to_python
,
FieldType
.
C_INT_UNSIGNED
:
_crow_int_unsigned_to_python
,
FieldType
.
C_BIGINT_UNSIGNED
:
_crow_bigint_unsigned_to_python
}
_CONVERT_FUNC_BLOCK
=
{
FieldType
.
C_BOOL
:
_crow_bool_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_TINYINT
:
_crow_tinyint_to_python
,
FieldType
.
C_SMALLINT
:
_crow_smallint_to_python
,
FieldType
.
C_INT
:
_crow_int_to_python
,
FieldType
.
C_BIGINT
:
_crow_bigint_to_python
,
FieldType
.
C_FLOAT
:
_crow_float_to_python
,
FieldType
.
C_DOUBLE
:
_crow_double_to_python
,
FieldType
.
C_BINARY
:
_crow_binary_to_python_block
,
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python_block
FieldType
.
C_TIMESTAMP
:
_crow_timestamp_to_python
,
FieldType
.
C_NCHAR
:
_crow_nchar_to_python_block
,
FieldType
.
C_TINYINT_UNSIGNED
:
_crow_tinyint_unsigned_to_python
,
FieldType
.
C_SMALLINT_UNSIGNED
:
_crow_smallint_unsigned_to_python
,
FieldType
.
C_INT_UNSIGNED
:
_crow_int_unsigned_to_python
,
FieldType
.
C_BIGINT_UNSIGNED
:
_crow_bigint_unsigned_to_python
}
# Corresponding TAOS_FIELD structure in C
class
TaosField
(
ctypes
.
Structure
):
_fields_
=
[(
'name'
,
ctypes
.
c_char
*
65
),
(
'type'
,
ctypes
.
c_char
),
(
'bytes'
,
ctypes
.
c_short
)]
# C interface class
class
CTaosInterface
(
object
):
libtaos
=
ctypes
.
CDLL
(
'libtaos.dylib'
)
...
...
@@ -216,7 +360,7 @@ class CTaosInterface(object):
except
AttributeError
:
raise
AttributeError
(
"config is expected as a str"
)
if
config
!=
None
:
if
config
is
not
None
:
CTaosInterface
.
libtaos
.
taos_options
(
3
,
self
.
_config
)
CTaosInterface
.
libtaos
.
taos_init
()
...
...
@@ -227,7 +371,13 @@ class CTaosInterface(object):
"""
return
self
.
_config
def
connect
(
self
,
host
=
None
,
user
=
"root"
,
password
=
"taosdata"
,
db
=
None
,
port
=
0
):
def
connect
(
self
,
host
=
None
,
user
=
"root"
,
password
=
"taosdata"
,
db
=
None
,
port
=
0
):
'''
Function to connect to server
...
...
@@ -236,7 +386,7 @@ class CTaosInterface(object):
# host
try
:
_host
=
ctypes
.
c_char_p
(
host
.
encode
(
"utf-8"
))
if
host
!=
None
else
ctypes
.
c_char_p
(
None
)
"utf-8"
))
if
host
is
not
None
else
ctypes
.
c_char_p
(
None
)
except
AttributeError
:
raise
AttributeError
(
"host is expected as a str"
)
...
...
@@ -255,7 +405,7 @@ class CTaosInterface(object):
# db
try
:
_db
=
ctypes
.
c_char_p
(
db
.
encode
(
"utf-8"
))
if
db
!=
None
else
ctypes
.
c_char_p
(
None
)
db
.
encode
(
"utf-8"
))
if
db
is
not
None
else
ctypes
.
c_char_p
(
None
)
except
AttributeError
:
raise
AttributeError
(
"db is expected as a str"
)
...
...
@@ -268,11 +418,11 @@ class CTaosInterface(object):
connection
=
ctypes
.
c_void_p
(
CTaosInterface
.
libtaos
.
taos_connect
(
_host
,
_user
,
_password
,
_db
,
_port
))
if
connection
.
value
==
None
:
if
connection
.
value
is
None
:
print
(
'connect to TDengine failed'
)
raise
ConnectionError
(
"connect to TDengine failed"
)
# sys.exit(1)
#else:
#
else:
# print('connect to TDengine success')
return
connection
...
...
@@ -293,7 +443,8 @@ class CTaosInterface(object):
@rtype: 0 on success and -1 on failure
'''
try
:
return
CTaosInterface
.
libtaos
.
taos_query
(
connection
,
ctypes
.
c_char_p
(
sql
.
encode
(
'utf-8'
)))
return
CTaosInterface
.
libtaos
.
taos_query
(
connection
,
ctypes
.
c_char_p
(
sql
.
encode
(
'utf-8'
)))
except
AttributeError
:
raise
AttributeError
(
"sql is expected as a string"
)
# finally:
...
...
@@ -308,7 +459,7 @@ class CTaosInterface(object):
@
staticmethod
def
subscribe
(
connection
,
restart
,
topic
,
sql
,
interval
):
"""Create a subscription
@restart boolean,
@restart boolean,
@sql string, sql statement for data query, must be a 'select' statement.
@topic string, name of this subscription
"""
...
...
@@ -360,35 +511,49 @@ class CTaosInterface(object):
result
,
ctypes
.
byref
(
pblock
))
if
num_of_rows
==
0
:
return
None
,
0
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
blocks
=
[
None
]
*
len
(
fields
)
fieldL
=
CTaosInterface
.
libtaos
.
taos_fetch_lengths
(
result
)
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
len
(
fields
)]]
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
len
(
fields
)]]
for
i
in
range
(
len
(
fields
)):
data
=
ctypes
.
cast
(
pblock
,
ctypes
.
POINTER
(
ctypes
.
c_void_p
))[
i
]
if
fields
[
i
][
'type'
]
not
in
_CONVERT_FUNC_BLOCK
:
raise
DatabaseError
(
"Invalid data type returned from database"
)
blocks
[
i
]
=
_CONVERT_FUNC_BLOCK
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
blocks
[
i
]
=
_CONVERT_FUNC_BLOCK
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
return
blocks
,
abs
(
num_of_rows
)
@
staticmethod
def
fetchRow
(
result
,
fields
):
pblock
=
ctypes
.
c_void_p
(
0
)
pblock
=
CTaosInterface
.
libtaos
.
taos_fetch_row
(
result
)
if
pblock
:
pblock
=
CTaosInterface
.
libtaos
.
taos_fetch_row
(
result
)
if
pblock
:
num_of_rows
=
1
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
isMicro
=
(
CTaosInterface
.
libtaos
.
taos_result_precision
(
result
)
==
FieldType
.
C_TIMESTAMP_MICRO
)
blocks
=
[
None
]
*
len
(
fields
)
fieldL
=
CTaosInterface
.
libtaos
.
taos_fetch_lengths
(
result
)
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[:
len
(
fields
)]]
fieldLen
=
[
ele
for
ele
in
ctypes
.
cast
(
fieldL
,
ctypes
.
POINTER
(
ctypes
.
c_int
))[
:
len
(
fields
)]]
for
i
in
range
(
len
(
fields
)):
data
=
ctypes
.
cast
(
pblock
,
ctypes
.
POINTER
(
ctypes
.
c_void_p
))[
i
]
if
fields
[
i
][
'type'
]
not
in
_CONVERT_FUNC
:
raise
DatabaseError
(
"Invalid data type returned from database"
)
raise
DatabaseError
(
"Invalid data type returned from database"
)
if
data
is
None
:
blocks
[
i
]
=
[
None
]
else
:
blocks
[
i
]
=
_CONVERT_FUNC
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
blocks
[
i
]
=
_CONVERT_FUNC
[
fields
[
i
][
'type'
]](
data
,
num_of_rows
,
fieldLen
[
i
],
isMicro
)
else
:
return
None
,
0
return
blocks
,
abs
(
num_of_rows
)
...
...
src/connector/python/osx/python3/taos/connection.py
浏览文件 @
22ab19df
...
...
@@ -2,9 +2,11 @@ from .cursor import TDengineCursor
from
.subscription
import
TDengineSubscription
from
.cinterface
import
CTaosInterface
class
TDengineConnection
(
object
):
""" TDengine connection object
"""
def
__init__
(
self
,
*
args
,
**
kwargs
):
self
.
_conn
=
None
self
.
_host
=
None
...
...
@@ -29,7 +31,7 @@ class TDengineConnection(object):
# password
if
'password'
in
kwargs
:
self
.
_password
=
kwargs
[
'password'
]
# database
if
'database'
in
kwargs
:
self
.
_database
=
kwargs
[
'database'
]
...
...
@@ -43,7 +45,12 @@ class TDengineConnection(object):
self
.
_config
=
kwargs
[
'config'
]
self
.
_chandle
=
CTaosInterface
(
self
.
_config
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
self
.
_conn
=
self
.
_chandle
.
connect
(
self
.
_host
,
self
.
_user
,
self
.
_password
,
self
.
_database
,
self
.
_port
)
def
close
(
self
):
"""Close current connection.
...
...
@@ -55,7 +62,8 @@ class TDengineConnection(object):
"""
if
self
.
_conn
is
None
:
return
None
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
sub
=
CTaosInterface
.
subscribe
(
self
.
_conn
,
restart
,
topic
,
sql
,
interval
)
return
TDengineSubscription
(
sub
)
def
cursor
(
self
):
...
...
@@ -80,7 +88,8 @@ class TDengineConnection(object):
"""
pass
if
__name__
==
"__main__"
:
conn
=
TDengineConnection
(
host
=
'192.168.1.107'
)
conn
.
close
()
print
(
"Hello world"
)
\ No newline at end of file
print
(
"Hello world"
)
src/connector/python/osx/python3/taos/constants.py
浏览文件 @
22ab19df
...
...
@@ -3,6 +3,7 @@
from
.dbapi
import
*
class
FieldType
(
object
):
"""TDengine Field Types
"""
...
...
@@ -18,13 +19,21 @@ class FieldType(object):
C_BINARY
=
8
C_TIMESTAMP
=
9
C_NCHAR
=
10
C_TINYINT_UNSIGNED
=
12
C_SMALLINT_UNSIGNED
=
13
C_INT_UNSIGNED
=
14
C_BIGINT_UNSIGNED
=
15
# NULL value definition
# NOTE: These values should change according to C definition in tsdb.h
C_BOOL_NULL
=
0x02
C_TINYINT_NULL
=
-
128
C_TINYINT_UNSIGNED_NULL
=
255
C_SMALLINT_NULL
=
-
32768
C_SMALLINT_UNSIGNED_NULL
=
65535
C_INT_NULL
=
-
2147483648
C_INT_UNSIGNED_NULL
=
4294967295
C_BIGINT_NULL
=
-
9223372036854775808
C_BIGINT_UNSIGNED_NULL
=
18446744073709551615
C_FLOAT_NULL
=
float
(
'nan'
)
C_DOUBLE_NULL
=
float
(
'nan'
)
C_BINARY_NULL
=
bytearray
([
int
(
'0xff'
,
16
)])
...
...
src/connector/python/osx/python3/taos/cursor.py
浏览文件 @
22ab19df
...
...
@@ -5,6 +5,7 @@ import threading
# querySeqNum = 0
class
TDengineCursor
(
object
):
"""Database cursor which is used to manage the context of a fetch operation.
...
...
@@ -107,8 +108,8 @@ class TDengineCursor(object):
# if threading.get_ident() != self._threadId:
# info ="Cursor execute:Thread ID not match,creater:"+str(self._threadId)+" caller:"+str(threading.get_ident())
# raise OperationalError(info)
# print(info)
# return None
# print(info)
# return None
if
not
operation
:
return
None
...
...
@@ -137,8 +138,8 @@ class TDengineCursor(object):
if
errno
==
0
:
if
CTaosInterface
.
fieldsCount
(
self
.
_result
)
==
0
:
self
.
_affected_rows
+=
CTaosInterface
.
affectedRows
(
self
.
_result
)
return
CTaosInterface
.
affectedRows
(
self
.
_result
)
self
.
_result
)
return
CTaosInterface
.
affectedRows
(
self
.
_result
)
else
:
self
.
_fields
=
CTaosInterface
.
useResult
(
self
.
_result
)
...
...
@@ -168,11 +169,26 @@ class TDengineCursor(object):
if
(
dataType
.
upper
()
==
"TINYINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_TINYINT
):
return
True
if
(
dataType
.
upper
()
==
"TINYINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_TINYINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"SMALLINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_SMALLINT
):
return
True
if
(
dataType
.
upper
()
==
"SMALLINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_SMALLINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"INT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT
):
return
True
if
(
dataType
.
upper
()
==
"INT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"BIGINT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_INT
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_BIGINT
):
return
True
if
(
dataType
.
upper
()
==
"BIGINT UNSIGNED"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_BIGINT_UNSIGNED
):
return
True
if
(
dataType
.
upper
()
==
"FLOAT"
):
if
(
self
.
_description
[
col
][
1
]
==
FieldType
.
C_FLOAT
):
...
...
@@ -201,10 +217,13 @@ class TDengineCursor(object):
buffer
=
[[]
for
i
in
range
(
len
(
self
.
_fields
))]
self
.
_rowcount
=
0
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchRow
(
self
.
_result
,
self
.
_fields
)
block
,
num_of_fields
=
CTaosInterface
.
fetchRow
(
self
.
_result
,
self
.
_fields
)
errno
=
CTaosInterface
.
libtaos
.
taos_errno
(
self
.
_result
)
if
errno
!=
0
:
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
self
.
_rowcount
+=
num_of_fields
...
...
@@ -219,15 +238,20 @@ class TDengineCursor(object):
buffer
=
[[]
for
i
in
range
(
len
(
self
.
_fields
))]
self
.
_rowcount
=
0
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
self
.
_result
,
self
.
_fields
)
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
self
.
_result
,
self
.
_fields
)
errno
=
CTaosInterface
.
libtaos
.
taos_errno
(
self
.
_result
)
if
errno
!=
0
:
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
raise
ProgrammingError
(
CTaosInterface
.
errStr
(
self
.
_result
),
errno
)
if
num_of_fields
==
0
:
break
self
.
_rowcount
+=
num_of_fields
for
i
in
range
(
len
(
self
.
_fields
)):
buffer
[
i
].
extend
(
block
[
i
])
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
nextset
(
self
):
"""
"""
...
...
@@ -259,8 +283,8 @@ class TDengineCursor(object):
# if threading.get_ident() != self._threadId:
# info = "Cursor handleresult:Thread ID not match,creater:"+str(self._threadId)+" caller:"+str(threading.get_ident())
# raise OperationalError(info)
# print(info)
# return None
# print(info)
# return None
self
.
_description
=
[]
for
ele
in
self
.
_fields
:
...
...
@@ -268,4 +292,3 @@ class TDengineCursor(object):
(
ele
[
'name'
],
ele
[
'type'
],
None
,
None
,
None
,
None
,
False
))
return
self
.
_result
src/connector/python/osx/python3/taos/dbapi.py
浏览文件 @
22ab19df
...
...
@@ -4,6 +4,7 @@
import
time
import
datetime
class
DBAPITypeObject
(
object
):
def
__init__
(
self
,
*
values
):
self
.
values
=
values
...
...
@@ -16,23 +17,28 @@ class DBAPITypeObject(object):
else
:
return
-
1
Date
=
datetime
.
date
Time
=
datetime
.
time
Timestamp
=
datetime
.
datetime
def
DataFromTicks
(
ticks
):
return
Date
(
*
time
.
localtime
(
ticks
)[:
3
])
def
TimeFromTicks
(
ticks
):
return
Time
(
*
time
.
localtime
(
ticks
)[
3
:
6
])
def
TimestampFromTicks
(
ticks
):
return
Timestamp
(
*
time
.
localtime
(
ticks
)[:
6
])
Binary
=
bytes
# STRING = DBAPITypeObject(*constants.FieldType.get_string_types())
# BINARY = DBAPITypeObject(*constants.FieldType.get_binary_types())
# NUMBER = BAPITypeObject(*constants.FieldType.get_number_types())
# DATETIME = DBAPITypeObject(*constants.FieldType.get_timestamp_types())
# ROWID = DBAPITypeObject()
\ No newline at end of file
# ROWID = DBAPITypeObject()
src/connector/python/osx/python3/taos/error.py
浏览文件 @
22ab19df
"""Python exceptions
"""
class
Error
(
Exception
):
def
__init__
(
self
,
msg
=
None
,
errno
=
None
):
self
.
msg
=
msg
self
.
_full_msg
=
self
.
msg
self
.
errno
=
errno
def
__str__
(
self
):
return
self
.
_full_msg
class
Warning
(
Exception
):
"""Exception raised for important warnings like data truncations while inserting.
"""
pass
class
InterfaceError
(
Error
):
"""Exception raised for errors that are related to the database interface rather than the database itself.
"""Exception raised for errors that are related to the database interface rather than the database itself.
"""
pass
class
DatabaseError
(
Error
):
"""Exception raised for errors that are related to the database.
"""Exception raised for errors that are related to the database.
"""
pass
class
DataError
(
DatabaseError
):
"""Exception raised for errors that are due to problems with the processed data like division by zero, numeric value out of range.
"""
pass
class
OperationalError
(
DatabaseError
):
"""Exception raised for errors that are related to the database's operation and not necessarily under the control of the programmer
"""
...
...
@@ -41,17 +47,20 @@ class IntegrityError(DatabaseError):
"""
pass
class
InternalError
(
DatabaseError
):
"""Exception raised when the database encounters an internal error.
"""
pass
class
ProgrammingError
(
DatabaseError
):
"""Exception raised for programming errors.
"""
pass
class
NotSupportedError
(
DatabaseError
):
"""Exception raised in case a method or database API was used which is not supported by the database,.
"""
pass
\ No newline at end of file
pass
src/connector/python/osx/python3/taos/subscription.py
浏览文件 @
22ab19df
from
.cinterface
import
CTaosInterface
from
.error
import
*
class
TDengineSubscription
(
object
):
"""TDengine subscription object
"""
def
__init__
(
self
,
sub
):
self
.
_sub
=
sub
def
consume
(
self
):
"""Consume rows of a subscription
"""
if
self
.
_sub
is
None
:
raise
OperationalError
(
"Invalid use of consume"
)
result
,
fields
=
CTaosInterface
.
consume
(
self
.
_sub
)
buffer
=
[[]
for
i
in
range
(
len
(
fields
))]
while
True
:
block
,
num_of_fields
=
CTaosInterface
.
fetchBlock
(
result
,
fields
)
if
num_of_fields
==
0
:
break
if
num_of_fields
==
0
:
break
for
i
in
range
(
len
(
fields
)):
buffer
[
i
].
extend
(
block
[
i
])
self
.
fields
=
fields
return
list
(
map
(
tuple
,
zip
(
*
buffer
)))
def
close
(
self
,
keepProgress
=
True
):
def
close
(
self
,
keepProgress
=
True
):
"""Close the Subscription.
"""
if
self
.
_sub
is
None
:
...
...
@@ -38,15 +39,19 @@ class TDengineSubscription(object):
if
__name__
==
'__main__'
:
from
.connection
import
TDengineConnection
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
conn
=
TDengineConnection
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
database
=
"test"
)
# Generate a cursor object to run SQL commands
sub
=
conn
.
subscribe
(
True
,
"test"
,
"select * from meters;"
,
1000
)
for
i
in
range
(
0
,
10
):
for
i
in
range
(
0
,
10
):
data
=
sub
.
consume
()
for
d
in
data
:
print
(
d
)
sub
.
close
()
conn
.
close
()
\ No newline at end of file
conn
.
close
()
src/connector/python/windows/python2/taos/__init__.py
浏览文件 @
22ab19df
...
...
@@ -3,7 +3,6 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0.3'
threadsafety
=
0
paramstyle
=
'pyformat'
...
...
@@ -21,4 +20,4 @@ def connect(*args, **kwargs):
@rtype: TDengineConnector
"""
return
TDengineConnection
(
*
args
,
**
kwargs
)
\ No newline at end of file
return
TDengineConnection
(
*
args
,
**
kwargs
)
src/connector/python/windows/python3/taos/__init__.py
浏览文件 @
22ab19df
...
...
@@ -3,7 +3,6 @@ from .connection import TDengineConnection
from
.cursor
import
TDengineCursor
# Globals
apilevel
=
'2.0.3'
threadsafety
=
0
paramstyle
=
'pyformat'
...
...
@@ -21,4 +20,4 @@ def connect(*args, **kwargs):
@rtype: TDengineConnector
"""
return
TDengineConnection
(
*
args
,
**
kwargs
)
\ No newline at end of file
return
TDengineConnection
(
*
args
,
**
kwargs
)
src/inc/taos.h
浏览文件 @
22ab19df
...
...
@@ -68,7 +68,7 @@ typedef struct taosField {
#define DLL_EXPORT
#endif
DLL_EXPORT
void
taos_init
();
DLL_EXPORT
int
taos_init
();
DLL_EXPORT
void
taos_cleanup
(
void
);
DLL_EXPORT
int
taos_options
(
TSDB_OPTION
option
,
const
void
*
arg
,
...);
DLL_EXPORT
TAOS
*
taos_connect
(
const
char
*
ip
,
const
char
*
user
,
const
char
*
pass
,
const
char
*
db
,
uint16_t
port
);
...
...
src/inc/ttokendef.h
浏览文件 @
22ab19df
...
...
@@ -122,8 +122,8 @@
#define TK_UNSIGNED 103
#define TK_TAGS 104
#define TK_USING 105
#define TK_
AS
106
#define TK_
COMMA
107
#define TK_
COMMA
106
#define TK_
AS
107
#define TK_NULL 108
#define TK_SELECT 109
#define TK_UNION 110
...
...
@@ -228,6 +228,7 @@
#define TK_VALUES 209
#define TK_SPACE 300
#define TK_COMMENT 301
#define TK_ILLEGAL 302
...
...
src/kit/shell/src/shellEngine.c
浏览文件 @
22ab19df
...
...
@@ -76,7 +76,11 @@ TAOS *shellInit(SShellArguments *args) {
args
->
user
=
TSDB_DEFAULT_USER
;
}
taos_init
();
if
(
taos_init
())
{
printf
(
"failed to init taos
\n
"
);
fflush
(
stdout
);
return
NULL
;
}
// Connect to the database.
TAOS
*
con
=
NULL
;
...
...
src/kit/shell/src/shellMain.c
浏览文件 @
22ab19df
...
...
@@ -110,7 +110,10 @@ int main(int argc, char* argv[]) {
}
if
(
args
.
netTestRole
&&
args
.
netTestRole
[
0
]
!=
0
)
{
taos_init
();
if
(
taos_init
())
{
printf
(
"Failed to init taos"
);
exit
(
EXIT_FAILURE
);
}
taosNetTest
(
args
.
netTestRole
,
args
.
host
,
args
.
port
,
args
.
pktLen
);
exit
(
0
);
}
...
...
src/kit/taosdemo/taosdemo.c
浏览文件 @
22ab19df
...
...
@@ -1971,7 +1971,6 @@ static int createSuperTable(TAOS * taos, char* dbName, SSuperTable* superTbls,
static
int
createDatabases
()
{
TAOS
*
taos
=
NULL
;
int
ret
=
0
;
taos_init
();
taos
=
taos_connect
(
g_Dbs
.
host
,
g_Dbs
.
user
,
g_Dbs
.
password
,
NULL
,
g_Dbs
.
port
);
if
(
taos
==
NULL
)
{
fprintf
(
stderr
,
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
...
...
@@ -4496,7 +4495,6 @@ void *subQueryProcess(void *sarg) {
int
queryTestProcess
()
{
TAOS
*
taos
=
NULL
;
taos_init
();
taos
=
taos_connect
(
g_queryInfo
.
host
,
g_queryInfo
.
user
,
g_queryInfo
.
password
,
NULL
,
g_queryInfo
.
port
);
if
(
taos
==
NULL
)
{
fprintf
(
stderr
,
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
...
...
@@ -4772,7 +4770,6 @@ int subscribeTestProcess() {
}
TAOS
*
taos
=
NULL
;
taos_init
();
taos
=
taos_connect
(
g_queryInfo
.
host
,
g_queryInfo
.
user
,
g_queryInfo
.
password
,
g_queryInfo
.
dbName
,
g_queryInfo
.
port
);
if
(
taos
==
NULL
)
{
fprintf
(
stderr
,
"Failed to connect to TDengine, reason:%s
\n
"
,
taos_errstr
(
NULL
));
...
...
src/plugins/monitor/src/monMain.c
浏览文件 @
22ab19df
...
...
@@ -103,7 +103,9 @@ int32_t monInitSystem() {
}
int32_t
monStartSystem
()
{
taos_init
();
if
(
taos_init
())
{
return
-
1
;
}
tsMonitor
.
start
=
1
;
monExecuteSQLFp
=
monExecuteSQL
;
monInfo
(
"monitor module start"
);
...
...
src/query/inc/qSqlparser.h
浏览文件 @
22ab19df
...
...
@@ -76,6 +76,7 @@ typedef struct SQuerySQL {
typedef
struct
SCreatedTableInfo
{
SStrToken
name
;
// table name token
SStrToken
stableName
;
// super table name token , for using clause
SArray
*
pTagNames
;
// create by using super table, tag name
SArray
*
pTagVals
;
// create by using super table, tag value
char
*
fullname
;
// table full name
STagData
tagdata
;
// true tag data, super table full name is in STagData
...
...
@@ -246,7 +247,7 @@ SCreateTableSQL *tSetCreateSqlElems(SArray *pCols, SArray *pTags, SQuerySQL *pSe
void
tSqlExprNodeDestroy
(
tSQLExpr
*
pExpr
);
SAlterTableInfo
*
tAlterTableSqlElems
(
SStrToken
*
pTableName
,
SArray
*
pCols
,
SArray
*
pVals
,
int32_t
type
,
int16_t
tableTable
);
SCreatedTableInfo
createNewChildTableInfo
(
SStrToken
*
pTableName
,
SArray
*
pTagVals
,
SStrToken
*
pToken
,
SStrToken
*
igExists
);
SCreatedTableInfo
createNewChildTableInfo
(
SStrToken
*
pTableName
,
SArray
*
pTag
Names
,
SArray
*
pTag
Vals
,
SStrToken
*
pToken
,
SStrToken
*
igExists
);
void
destroyAllSelectClause
(
SSubclauseInfo
*
pSql
);
void
doDestroyQuerySql
(
SQuerySQL
*
pSql
);
...
...
src/query/inc/sql.y
浏览文件 @
22ab19df
...
...
@@ -356,9 +356,20 @@ create_stable_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP T
create_from_stable(A) ::= ifnotexists(U) ids(V) cpxName(Z) USING ids(X) cpxName(F) TAGS LP tagitemlist(Y) RP. {
X.n += F.n;
V.n += Z.n;
A = createNewChildTableInfo(&X, Y, &V, &U);
A = createNewChildTableInfo(&X,
NULL,
Y, &V, &U);
}
create_from_stable(A) ::= ifnotexists(U) ids(V) cpxName(Z) USING ids(X) cpxName(F) LP tagNamelist(P) RP TAGS LP tagitemlist(Y) RP. {
X.n += F.n;
V.n += Z.n;
A = createNewChildTableInfo(&X, P, Y, &V, &U);
}
%type tagNamelist{SArray*}
%destructor tagNamelist {taosArrayDestroy($$);}
tagNamelist(A) ::= tagNamelist(X) COMMA ids(Y). {taosArrayPush(X, &Y); A = X; }
tagNamelist(A) ::= ids(X). {A = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(A, &X);}
// create stream
// create table table_name as select count(*) from super_table_name interval(time)
create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) AS select(S). {
...
...
src/query/src/qAggMain.c
浏览文件 @
22ab19df
...
...
@@ -2574,12 +2574,16 @@ static void bottom_function(SQLFunctionCtx *pCtx) {
STopBotInfo
*
pRes
=
getTopBotOutputInfo
(
pCtx
);
if
((
void
*
)
pRes
->
res
[
0
]
!=
(
void
*
)((
char
*
)
pRes
+
sizeof
(
STopBotInfo
)
+
POINTER_BYTES
*
pCtx
->
param
[
0
].
i64
))
{
buildTopBotStruct
(
pRes
,
pCtx
);
}
for
(
int32_t
i
=
0
;
i
<
pCtx
->
size
;
++
i
)
{
char
*
data
=
GET_INPUT_DATA
(
pCtx
,
i
);
TSKEY
ts
=
GET_TS_DATA
(
pCtx
,
i
);
if
(
pCtx
->
hasNull
&&
isNull
(
data
,
pCtx
->
inputType
))
{
continue
;
continue
;
}
notNullElems
++
;
...
...
@@ -2608,6 +2612,11 @@ static void bottom_function_f(SQLFunctionCtx *pCtx, int32_t index) {
}
STopBotInfo
*
pRes
=
getTopBotOutputInfo
(
pCtx
);
if
((
void
*
)
pRes
->
res
[
0
]
!=
(
void
*
)((
char
*
)
pRes
+
sizeof
(
STopBotInfo
)
+
POINTER_BYTES
*
pCtx
->
param
[
0
].
i64
))
{
buildTopBotStruct
(
pRes
,
pCtx
);
}
SET_VAL
(
pCtx
,
1
,
1
);
do_bottom_function_add
(
pRes
,
(
int32_t
)
pCtx
->
param
[
0
].
i64
,
pData
,
ts
,
pCtx
->
inputType
,
&
pCtx
->
tagInfo
,
NULL
,
0
);
...
...
src/query/src/qExecutor.c
浏览文件 @
22ab19df
...
...
@@ -3785,7 +3785,7 @@ void setResultRowOutputBufInitCtx(SQueryRuntimeEnv *pRuntimeEnv, SResultRow *pRe
if
(
functionId
==
TSDB_FUNC_TOP
||
functionId
==
TSDB_FUNC_BOTTOM
||
functionId
==
TSDB_FUNC_DIFF
)
{
pCtx
->
ptsOutputBuf
=
pRuntimeEnv
->
pCtx
[
0
].
pOutput
;
}
if
(
!
pCtx
->
resultInfo
->
initialized
)
{
aAggs
[
functionId
].
init
(
pCtx
);
}
...
...
src/query/src/qParserImpl.c
浏览文件 @
22ab19df
...
...
@@ -496,7 +496,8 @@ static void freeVariant(void *pItem) {
}
void
freeCreateTableInfo
(
void
*
p
)
{
SCreatedTableInfo
*
pInfo
=
(
SCreatedTableInfo
*
)
p
;
SCreatedTableInfo
*
pInfo
=
(
SCreatedTableInfo
*
)
p
;
taosArrayDestroy
(
pInfo
->
pTagNames
);
taosArrayDestroyEx
(
pInfo
->
pTagVals
,
freeVariant
);
tfree
(
pInfo
->
fullname
);
tfree
(
pInfo
->
tagdata
.
data
);
...
...
@@ -574,11 +575,12 @@ SCreateTableSQL *tSetCreateSqlElems(SArray *pCols, SArray *pTags, SQuerySQL *pSe
return
pCreate
;
}
SCreatedTableInfo
createNewChildTableInfo
(
SStrToken
*
pTableName
,
SArray
*
pTagVals
,
SStrToken
*
pToken
,
SStrToken
*
igExists
)
{
SCreatedTableInfo
createNewChildTableInfo
(
SStrToken
*
pTableName
,
SArray
*
pTag
Names
,
SArray
*
pTag
Vals
,
SStrToken
*
pToken
,
SStrToken
*
igExists
)
{
SCreatedTableInfo
info
;
memset
(
&
info
,
0
,
sizeof
(
SCreatedTableInfo
));
info
.
name
=
*
pToken
;
info
.
pTagNames
=
pTagNames
;
info
.
pTagVals
=
pTagVals
;
info
.
stableName
=
*
pTableName
;
info
.
igExist
=
(
igExists
->
n
>
0
)
?
1
:
0
;
...
...
src/query/src/sql.c
浏览文件 @
22ab19df
...
...
@@ -23,6 +23,7 @@
** input grammar file:
*/
#include <stdio.h>
#include <assert.h>
/************ Begin %include sections from the grammar ************************/
#include <stdio.h>
...
...
@@ -76,8 +77,10 @@
** zero the stack is dynamically sized using realloc()
** ParseARG_SDECL A static variable declaration for the %extra_argument
** ParseARG_PDECL A parameter declaration for the %extra_argument
** ParseARG_PARAM Code to pass %extra_argument as a subroutine parameter
** ParseARG_STORE Code to store %extra_argument into yypParser
** ParseARG_FETCH Code to extract %extra_argument from yypParser
** ParseCTX_* As ParseARG_ except for %extra_context
** YYERRORSYMBOL is the code number of the error symbol. If not
** defined, then do no error processing.
** YYNSTATE the combined number of states.
...
...
@@ -97,7 +100,7 @@
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
#define YYNOCODE 28
2
#define YYNOCODE 28
1
#define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken
typedef
union
{
...
...
@@ -124,21 +127,29 @@ typedef union {
#endif
#define ParseARG_SDECL SSqlInfo* pInfo;
#define ParseARG_PDECL ,SSqlInfo* pInfo
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo
#define ParseARG_PARAM ,pInfo
#define ParseARG_FETCH SSqlInfo* pInfo=yypParser->pInfo;
#define ParseARG_STORE yypParser->pInfo=pInfo;
#define ParseCTX_SDECL
#define ParseCTX_PDECL
#define ParseCTX_PARAM
#define ParseCTX_FETCH
#define ParseCTX_STORE
#define YYFALLBACK 1
#define YYNSTATE 283
#define YYNRULE 250
#define YYNSTATE 290
#define YYNRULE 253
#define YYNRULE_WITH_ACTION 253
#define YYNTOKEN 210
#define YY_MAX_SHIFT 28
2
#define YY_MIN_SHIFTREDUCE 4
6
3
#define YY_MAX_SHIFTREDUCE 7
12
#define YY_ERROR_ACTION 7
13
#define YY_ACCEPT_ACTION 7
14
#define YY_NO_ACTION 7
15
#define YY_MIN_REDUCE 7
16
#define YY_MAX_REDUCE 9
65
#define YY_MAX_SHIFT 28
9
#define YY_MIN_SHIFTREDUCE 4
7
3
#define YY_MAX_SHIFTREDUCE 7
25
#define YY_ERROR_ACTION 7
26
#define YY_ACCEPT_ACTION 7
27
#define YY_NO_ACTION 7
28
#define YY_MIN_REDUCE 7
29
#define YY_MAX_REDUCE 9
81
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
/* Define the yytestcase() macro to be a no-op if is not already defined
** otherwise.
...
...
@@ -203,135 +214,136 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (6
15
)
#define YY_ACTTAB_COUNT (6
27
)
static
const
YYACTIONTYPE
yy_action
[]
=
{
/* 0 */
872
,
507
,
159
,
714
,
282
,
159
,
15
,
580
,
183
,
508
,
/* 10 */
663
,
186
,
948
,
41
,
42
,
947
,
43
,
44
,
26
,
158
,
/* 20 */
191
,
35
,
507
,
507
,
232
,
47
,
45
,
49
,
46
,
163
,
/* 30 */
508
,
508
,
850
,
40
,
39
,
257
,
256
,
38
,
37
,
36
,
/* 40 */
41
,
42
,
118
,
43
,
44
,
861
,
664
,
191
,
35
,
179
,
/* 50 */
280
,
232
,
47
,
45
,
49
,
46
,
181
,
869
,
847
,
215
,
/* 60 */
40
,
39
,
957
,
123
,
38
,
37
,
36
,
464
,
465
,
466
,
/* 70 */
467
,
468
,
469
,
470
,
471
,
472
,
473
,
474
,
475
,
281
,
/* 80 */
91
,
196
,
205
,
41
,
42
,
267
,
43
,
44
,
839
,
247
,
/* 90 */
191
,
35
,
159
,
944
,
232
,
47
,
45
,
49
,
46
,
123
,
/* 100 */
220
,
185
,
948
,
40
,
39
,
850
,
62
,
38
,
37
,
36
,
/* 110 */
20
,
245
,
275
,
274
,
244
,
243
,
242
,
273
,
241
,
272
,
/* 120 */
271
,
270
,
240
,
269
,
268
,
901
,
267
,
227
,
817
,
661
,
/* 130 */
805
,
806
,
807
,
808
,
809
,
810
,
811
,
812
,
813
,
814
,
/* 140 */
815
,
816
,
818
,
819
,
42
,
208
,
43
,
44
,
642
,
643
,
/* 150 */
191
,
35
,
212
,
211
,
232
,
47
,
45
,
49
,
46
,
229
,
/* 160 */
861
,
67
,
21
,
40
,
39
,
247
,
276
,
38
,
37
,
36
,
/* 170 */
32
,
43
,
44
,
197
,
180
,
191
,
35
,
849
,
70
,
232
,
/* 180 */
47
,
45
,
49
,
46
,
16
,
38
,
37
,
36
,
40
,
39
,
/* 190 */
850
,
123
,
38
,
37
,
36
,
190
,
674
,
72
,
26
,
665
,
/* 200 */
167
,
668
,
667
,
671
,
670
,
61
,
168
,
836
,
837
,
25
,
/* 210 */
840
,
103
,
102
,
166
,
190
,
674
,
758
,
199
,
665
,
147
,
/* 220 */
668
,
767
,
671
,
20
,
147
,
275
,
274
,
187
,
188
,
841
,
/* 230 */
273
,
231
,
272
,
271
,
270
,
838
,
269
,
268
,
846
,
198
,
/* 240 */
823
,
21
,
249
,
821
,
822
,
943
,
187
,
188
,
824
,
32
,
/* 250 */
826
,
827
,
825
,
900
,
828
,
829
,
123
,
3
,
137
,
47
,
/* 260 */
45
,
49
,
46
,
29
,
78
,
74
,
77
,
40
,
39
,
617
,
/* 270 */
214
,
38
,
37
,
36
,
233
,
601
,
759
,
174
,
598
,
147
,
/* 280 */
599
,
26
,
600
,
201
,
89
,
93
,
254
,
253
,
26
,
942
,
/* 290 */
83
,
98
,
101
,
92
,
26
,
48
,
153
,
149
,
26
,
95
,
/* 300 */
175
,
26
,
151
,
106
,
105
,
104
,
202
,
203
,
673
,
26
,
/* 310 */
69
,
40
,
39
,
200
,
48
,
38
,
37
,
36
,
68
,
194
,
/* 320 */
10
,
847
,
63
,
672
,
71
,
133
,
195
,
673
,
847
,
279
,
/* 330 */
278
,
110
,
250
,
666
,
847
,
669
,
251
,
614
,
847
,
255
,
/* 340 */
116
,
847
,
672
,
22
,
621
,
848
,
609
,
259
,
32
,
847
,
/* 350 */
218
,
629
,
633
,
634
,
217
,
27
,
120
,
52
,
18
,
693
,
/* 360 */
675
,
189
,
53
,
176
,
17
,
17
,
590
,
677
,
56
,
235
,
/* 370 */
591
,
27
,
100
,
99
,
27
,
52
,
82
,
81
,
12
,
11
,
/* 380 */
161
,
602
,
54
,
59
,
162
,
579
,
57
,
88
,
87
,
14
,
/* 390 */
13
,
605
,
603
,
606
,
604
,
115
,
113
,
164
,
165
,
171
,
/* 400 */
911
,
172
,
170
,
4
,
157
,
169
,
160
,
910
,
192
,
907
,
/* 410 */
906
,
193
,
258
,
117
,
871
,
33
,
878
,
880
,
119
,
863
,
/* 420 */
893
,
892
,
134
,
135
,
132
,
136
,
769
,
32
,
239
,
155
,
/* 430 */
30
,
248
,
766
,
216
,
962
,
79
,
961
,
114
,
959
,
138
,
/* 440 */
252
,
956
,
85
,
955
,
628
,
953
,
221
,
139
,
182
,
225
,
/* 450 */
787
,
31
,
28
,
58
,
156
,
756
,
94
,
860
,
55
,
50
,
/* 460 */
754
,
96
,
230
,
124
,
228
,
125
,
97
,
752
,
126
,
127
,
/* 470 */
226
,
128
,
224
,
222
,
751
,
34
,
204
,
148
,
90
,
749
,
/* 480 */
260
,
261
,
262
,
748
,
747
,
746
,
745
,
263
,
150
,
152
,
/* 490 */
742
,
740
,
264
,
738
,
736
,
734
,
265
,
154
,
266
,
219
,
/* 500 */
64
,
65
,
894
,
277
,
712
,
206
,
207
,
177
,
237
,
238
,
/* 510 */
711
,
178
,
173
,
209
,
75
,
210
,
710
,
698
,
217
,
213
,
/* 520 */
750
,
611
,
107
,
60
,
744
,
234
,
142
,
141
,
788
,
140
,
/* 530 */
143
,
144
,
146
,
145
,
1
,
108
,
743
,
2
,
109
,
735
,
/* 540 */
66
,
6
,
184
,
630
,
845
,
121
,
223
,
131
,
129
,
130
,
/* 550 */
635
,
122
,
5
,
23
,
7
,
8
,
24
,
676
,
9
,
19
,
/* 560 */
678
,
71
,
73
,
236
,
548
,
544
,
542
,
541
,
540
,
537
,
/* 570 */
511
,
246
,
76
,
27
,
51
,
582
,
80
,
84
,
581
,
578
,
/* 580 */
532
,
86
,
530
,
522
,
528
,
524
,
526
,
520
,
518
,
550
,
/* 590 */
549
,
547
,
546
,
545
,
543
,
539
,
538
,
52
,
509
,
479
,
/* 600 */
477
,
716
,
715
,
715
,
715
,
715
,
715
,
715
,
715
,
715
,
/* 610 */
715
,
715
,
715
,
111
,
112
,
/* 0 */
888
,
517
,
727
,
289
,
517
,
182
,
287
,
590
,
28
,
518
,
/* 10 */
15
,
161
,
518
,
43
,
44
,
771
,
45
,
46
,
150
,
162
,
/* 20 */
194
,
37
,
126
,
517
,
238
,
49
,
47
,
51
,
48
,
963
,
/* 30 */
166
,
518
,
186
,
42
,
41
,
264
,
263
,
40
,
39
,
38
,
/* 40 */
43
,
44
,
877
,
45
,
46
,
877
,
184
,
194
,
37
,
863
,
/* 50 */
121
,
238
,
49
,
47
,
51
,
48
,
183
,
866
,
885
,
221
,
/* 60 */
42
,
41
,
126
,
126
,
40
,
39
,
38
,
474
,
475
,
476
,
/* 70 */
477
,
478
,
479
,
480
,
481
,
482
,
483
,
484
,
485
,
288
,
/* 80 */
43
,
44
,
211
,
45
,
46
,
916
,
254
,
194
,
37
,
162
,
/* 90 */
630
,
238
,
49
,
47
,
51
,
48
,
71
,
94
,
189
,
964
,
/* 100 */
42
,
41
,
274
,
960
,
40
,
39
,
38
,
64
,
65
,
226
,
/* 110 */
21
,
252
,
282
,
281
,
251
,
250
,
249
,
280
,
248
,
279
,
/* 120 */
278
,
277
,
247
,
276
,
275
,
917
,
70
,
233
,
830
,
674
,
/* 130 */
818
,
819
,
820
,
821
,
822
,
823
,
824
,
825
,
826
,
827
,
/* 140 */
828
,
829
,
831
,
832
,
44
,
199
,
45
,
46
,
274
,
28
,
/* 150 */
194
,
37
,
162
,
959
,
238
,
49
,
47
,
51
,
48
,
860
,
/* 160 */
201
,
188
,
964
,
42
,
41
,
634
,
214
,
40
,
39
,
38
,
/* 170 */
866
,
45
,
46
,
218
,
217
,
194
,
37
,
958
,
72
,
238
,
/* 180 */
49
,
47
,
51
,
48
,
16
,
866
,
205
,
197
,
42
,
41
,
/* 190 */
863
,
283
,
40
,
39
,
38
,
193
,
687
,
22
,
200
,
678
,
/* 200 */
170
,
681
,
203
,
684
,
178
,
34
,
171
,
849
,
850
,
27
,
/* 210 */
853
,
106
,
105
,
169
,
193
,
687
,
866
,
179
,
678
,
75
,
/* 220 */
681
,
780
,
684
,
21
,
150
,
282
,
281
,
190
,
191
,
164
,
/* 230 */
280
,
237
,
279
,
278
,
277
,
614
,
276
,
275
,
611
,
10
,
/* 240 */
612
,
22
,
613
,
74
,
165
,
136
,
190
,
191
,
63
,
34
,
/* 250 */
836
,
854
,
207
,
834
,
835
,
261
,
260
,
167
,
837
,
852
,
/* 260 */
839
,
840
,
838
,
126
,
841
,
842
,
208
,
209
,
204
,
168
,
/* 270 */
220
,
256
,
49
,
47
,
51
,
48
,
28
,
177
,
851
,
927
,
/* 280 */
42
,
41
,
92
,
96
,
40
,
39
,
38
,
28
,
86
,
101
,
/* 290 */
104
,
95
,
3
,
140
,
28
,
50
,
28
,
98
,
31
,
81
,
/* 300 */
77
,
80
,
28
,
156
,
152
,
119
,
28
,
206
,
686
,
154
,
/* 310 */
109
,
108
,
107
,
34
,
50
,
42
,
41
,
862
,
224
,
40
,
/* 320 */
39
,
38
,
29
,
685
,
235
,
198
,
69
,
686
,
863
,
40
,
/* 330 */
39
,
38
,
257
,
192
,
258
,
863
,
254
,
863
,
676
,
864
,
/* 340 */
262
,
615
,
685
,
863
,
266
,
655
,
656
,
863
,
286
,
285
,
/* 350 */
113
,
772
,
627
,
622
,
150
,
680
,
642
,
683
,
646
,
23
,
/* 360 */
123
,
223
,
54
,
647
,
706
,
688
,
239
,
18
,
17
,
17
,
/* 370 */
679
,
55
,
682
,
26
,
677
,
4
,
244
,
58
,
600
,
241
,
/* 380 */
602
,
243
,
29
,
29
,
54
,
73
,
601
,
174
,
85
,
84
,
/* 390 */
54
,
175
,
56
,
12
,
11
,
173
,
59
,
91
,
90
,
61
,
/* 400 */
973
,
589
,
14
,
13
,
618
,
616
,
619
,
617
,
103
,
102
,
/* 410 */
118
,
116
,
160
,
172
,
163
,
865
,
926
,
195
,
923
,
922
,
/* 420 */
196
,
265
,
879
,
120
,
887
,
35
,
909
,
894
,
896
,
908
,
/* 430 */
122
,
137
,
859
,
135
,
34
,
138
,
139
,
782
,
222
,
246
,
/* 440 */
158
,
32
,
255
,
779
,
117
,
978
,
641
,
82
,
977
,
975
,
/* 450 */
141
,
259
,
972
,
88
,
971
,
227
,
969
,
142
,
800
,
690
,
/* 460 */
185
,
33
,
30
,
159
,
231
,
769
,
97
,
60
,
876
,
128
,
/* 470 */
767
,
99
,
57
,
127
,
236
,
52
,
234
,
232
,
230
,
100
,
/* 480 */
765
,
764
,
130
,
210
,
228
,
36
,
151
,
93
,
762
,
267
,
/* 490 */
268
,
269
,
270
,
761
,
760
,
271
,
759
,
272
,
273
,
758
,
/* 500 */
153
,
155
,
755
,
753
,
751
,
284
,
749
,
747
,
157
,
725
,
/* 510 */
225
,
66
,
212
,
67
,
910
,
213
,
724
,
215
,
216
,
723
,
/* 520 */
180
,
202
,
711
,
245
,
219
,
181
,
176
,
223
,
78
,
624
,
/* 530 */
62
,
763
,
6
,
240
,
110
,
111
,
68
,
757
,
145
,
643
,
/* 540 */
144
,
801
,
143
,
146
,
147
,
149
,
148
,
756
,
1
,
124
,
/* 550 */
112
,
187
,
748
,
229
,
125
,
2
,
648
,
861
,
7
,
8
,
/* 560 */
689
,
24
,
133
,
131
,
129
,
132
,
134
,
25
,
5
,
9
,
/* 570 */
691
,
19
,
20
,
242
,
76
,
558
,
554
,
74
,
552
,
551
,
/* 580 */
550
,
547
,
253
,
521
,
83
,
29
,
79
,
592
,
53
,
591
,
/* 590 */
87
,
89
,
588
,
542
,
540
,
532
,
538
,
534
,
536
,
530
,
/* 600 */
528
,
560
,
559
,
557
,
556
,
555
,
553
,
549
,
548
,
54
,
/* 610 */
519
,
489
,
487
,
729
,
728
,
728
,
728
,
728
,
728
,
728
,
/* 620 */
728
,
728
,
728
,
728
,
728
,
114
,
115
,
};
static
const
YYCODETYPE
yy_lookahead
[]
=
{
/* 0 */
21
4
,
1
,
270
,
211
,
212
,
270
,
270
,
5
,
231
,
9
,
/* 10 */
1
,
279
,
280
,
13
,
14
,
280
,
16
,
17
,
214
,
270
,
/* 20 */
20
,
21
,
1
,
1
,
24
,
25
,
26
,
27
,
28
,
27
0
,
/* 30 */
9
,
9
,
255
,
33
,
34
,
33
,
34
,
37
,
38
,
39
,
/* 40 */
13
,
14
,
2
14
,
16
,
17
,
253
,
37
,
20
,
21
,
213
,
/* 50 */
21
4
,
24
,
25
,
26
,
27
,
28
,
252
,
271
,
254
,
267
,
/* 60 */
33
,
34
,
2
55
,
214
,
37
,
38
,
39
,
45
,
46
,
47
,
/* 0 */
21
3
,
1
,
210
,
211
,
1
,
212
,
213
,
5
,
213
,
9
,
/* 10 */
270
,
270
,
9
,
13
,
14
,
217
,
16
,
17
,
220
,
270
,
/* 20 */
20
,
21
,
213
,
1
,
24
,
25
,
26
,
27
,
28
,
28
0
,
/* 30 */
270
,
9
,
230
,
33
,
34
,
33
,
34
,
37
,
38
,
39
,
/* 40 */
13
,
14
,
2
53
,
16
,
17
,
253
,
251
,
20
,
21
,
254
,
/* 50 */
21
3
,
24
,
25
,
26
,
27
,
28
,
267
,
255
,
271
,
267
,
/* 60 */
33
,
34
,
2
13
,
213
,
37
,
38
,
39
,
45
,
46
,
47
,
/* 70 */
48
,
49
,
50
,
51
,
52
,
53
,
54
,
55
,
56
,
57
,
/* 80 */
74
,
231
,
60
,
13
,
14
,
79
,
16
,
17
,
0
,
77
,
/* 90 */
20
,
21
,
270
,
270
,
24
,
25
,
26
,
27
,
28
,
214
,
/* 100 */
272
,
279
,
280
,
33
,
34
,
255
,
106
,
37
,
38
,
39
,
/* 80 */
13
,
14
,
60
,
16
,
17
,
276
,
77
,
20
,
21
,
270
,
/* 90 */
37
,
24
,
25
,
26
,
27
,
28
,
256
,
74
,
279
,
280
,
/* 100 */
33
,
34
,
79
,
270
,
37
,
38
,
39
,
107
,
268
,
272
,
/* 110 */
86
,
87
,
88
,
89
,
90
,
91
,
92
,
93
,
94
,
95
,
/* 120 */
96
,
97
,
98
,
99
,
100
,
276
,
79
,
278
,
230
,
102
,
/* 130 */
23
2
,
233
,
234
,
235
,
236
,
237
,
238
,
239
,
240
,
241
,
/* 140 */
24
2
,
243
,
244
,
245
,
14
,
131
,
16
,
17
,
120
,
121
,
/* 150 */
20
,
21
,
138
,
139
,
24
,
25
,
26
,
27
,
28
,
274
,
/* 160 */
2
53
,
276
,
101
,
33
,
34
,
77
,
2
31
,
37
,
38
,
39
,
/* 170 */
109
,
16
,
17
,
66
,
267
,
20
,
21
,
255
,
219
,
24
,
/* 180 */
25
,
26
,
27
,
28
,
44
,
37
,
38
,
39
,
33
,
34
,
/* 190 */
25
5
,
214
,
37
,
38
,
39
,
1
,
2
,
219
,
214
,
5
,
/* 200 */
60
,
7
,
5
,
9
,
7
,
219
,
66
,
248
,
249
,
250
,
/* 210 */
25
1
,
71
,
72
,
73
,
1
,
2
,
218
,
66
,
5
,
221
,
/* 220 */
7
,
21
8
,
9
,
86
,
221
,
88
,
89
,
33
,
34
,
251
,
/* 230 */
93
,
37
,
95
,
96
,
97
,
249
,
99
,
100
,
254
,
132
,
/* 240 */
230
,
101
,
135
,
233
,
234
,
270
,
33
,
34
,
23
8
,
109
,
/* 250 */
2
40
,
241
,
242
,
276
,
244
,
245
,
214
,
61
,
62
,
25
,
/* 260 */
26
,
27
,
28
,
67
,
68
,
69
,
70
,
33
,
34
,
37
,
/* 270 */
130
,
37
,
38
,
39
,
15
,
2
,
218
,
137
,
5
,
221
,
/* 280 */
7
,
214
,
9
,
132
,
61
,
62
,
135
,
136
,
214
,
270
,
/* 290 */
6
7
,
68
,
69
,
70
,
214
,
101
,
61
,
62
,
214
,
76
,
/* 300 */
270
,
214
,
67
,
68
,
69
,
70
,
33
,
34
,
114
,
214
,
/* 310 */
256
,
33
,
34
,
214
,
101
,
37
,
38
,
39
,
276
,
252
,
/* 320 */
101
,
254
,
268
,
129
,
105
,
106
,
252
,
114
,
254
,
63
,
/* 330 */
64
,
65
,
252
,
5
,
254
,
7
,
252
,
107
,
254
,
252
,
/* 340 */
101
,
254
,
129
,
113
,
112
,
246
,
102
,
252
,
109
,
25
4
,
/* 350 */
102
,
102
,
102
,
102
,
110
,
107
,
107
,
107
,
107
,
102
,
/* 360 */
10
2
,
59
,
107
,
270
,
107
,
107
,
102
,
108
,
107
,
102
,
/* 370 */
102
,
107
,
74
,
75
,
107
,
107
,
133
,
134
,
133
,
134
,
/* 380 */
270
,
108
,
127
,
101
,
270
,
103
,
125
,
133
,
134
,
133
,
/* 390 */
1
34
,
5
,
5
,
7
,
7
,
61
,
62
,
270
,
270
,
270
,
/* 400 */
2
47
,
270
,
270
,
101
,
270
,
270
,
270
,
247
,
247
,
247
,
/* 410 */
247
,
247
,
247
,
214
,
214
,
269
,
214
,
214
,
214
,
253
,
/* 420 */
2
77
,
277
,
214
,
214
,
257
,
214
,
214
,
109
,
214
,
214
,
/* 430 */
21
4
,
214
,
214
,
253
,
214
,
214
,
214
,
59
,
214
,
214
,
/* 440 */
21
4
,
214
,
214
,
214
,
114
,
214
,
273
,
214
,
273
,
27
3
,
/* 450 */
21
4
,
214
,
214
,
124
,
214
,
214
,
214
,
266
,
126
,
123
,
/* 460 */
2
14
,
214
,
118
,
265
,
122
,
264
,
214
,
214
,
263
,
262
,
/* 470 */
117
,
261
,
116
,
115
,
214
,
128
,
214
,
214
,
85
,
214
,
/* 480 */
84
,
49
,
81
,
214
,
214
,
214
,
214
,
83
,
214
,
21
4
,
/* 490 */
214
,
214
,
53
,
214
,
214
,
214
,
82
,
214
,
80
,
215
,
/* 500 */
21
5
,
215
,
215
,
77
,
5
,
140
,
5
,
215
,
215
,
21
5
,
/* 510 */
5
,
215
,
215
,
140
,
219
,
5
,
5
,
87
,
110
,
131
,
/* 520 */
21
5
,
102
,
216
,
111
,
215
,
104
,
223
,
227
,
229
,
228
,
/* 530 */
226
,
224
,
222
,
225
,
220
,
216
,
215
,
217
,
216
,
215
,
/* 540 */
107
,
101
,
1
,
102
,
253
,
101
,
101
,
258
,
260
,
259
,
/* 550 */
102
,
101
,
101
,
107
,
119
,
119
,
107
,
102
,
101
,
101
,
/* 560 */
10
8
,
105
,
74
,
104
,
9
,
5
,
5
,
5
,
5
,
5
,
/* 570 */
78
,
15
,
74
,
107
,
16
,
5
,
134
,
134
,
5
,
102
,
/* 580 */
5
,
134
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
/* 590 */
5
,
5
,
5
,
5
,
5
,
5
,
5
,
107
,
78
,
59
,
/* 600 */
58
,
0
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 610 */
281
,
281
,
281
,
21
,
2
1
,
281
,
281
,
281
,
281
,
281
,
/* 620 */
281
,
281
,
281
,
281
,
281
,
281
,
28
1
,
281
,
281
,
281
,
/* 120 */
96
,
97
,
98
,
99
,
100
,
276
,
276
,
278
,
229
,
102
,
/* 130 */
23
1
,
232
,
233
,
234
,
235
,
236
,
237
,
238
,
239
,
240
,
/* 140 */
24
1
,
242
,
243
,
244
,
14
,
230
,
16
,
17
,
79
,
213
,
/* 150 */
20
,
21
,
270
,
270
,
24
,
25
,
26
,
27
,
28
,
213
,
/* 160 */
2
30
,
279
,
280
,
33
,
34
,
112
,
1
31
,
37
,
38
,
39
,
/* 170 */
255
,
16
,
17
,
138
,
139
,
20
,
21
,
270
,
218
,
24
,
/* 180 */
25
,
26
,
27
,
28
,
44
,
255
,
66
,
251
,
33
,
34
,
/* 190 */
25
4
,
230
,
37
,
38
,
39
,
1
,
2
,
101
,
252
,
5
,
/* 200 */
60
,
7
,
66
,
9
,
270
,
109
,
66
,
247
,
248
,
249
,
/* 210 */
25
0
,
71
,
72
,
73
,
1
,
2
,
255
,
270
,
5
,
218
,
/* 220 */
7
,
21
7
,
9
,
86
,
220
,
88
,
89
,
33
,
34
,
270
,
/* 230 */
93
,
37
,
95
,
96
,
97
,
2
,
99
,
100
,
5
,
101
,
/* 240 */
7
,
101
,
9
,
105
,
270
,
107
,
33
,
34
,
21
8
,
109
,
/* 250 */
2
29
,
250
,
132
,
232
,
233
,
135
,
136
,
270
,
237
,
0
,
/* 260 */
239
,
240
,
241
,
213
,
243
,
244
,
33
,
34
,
132
,
270
,
/* 270 */
130
,
135
,
25
,
26
,
27
,
28
,
213
,
137
,
248
,
246
,
/* 280 */
33
,
34
,
61
,
62
,
37
,
38
,
39
,
213
,
67
,
68
,
/* 290 */
6
9
,
70
,
61
,
62
,
213
,
101
,
213
,
76
,
67
,
68
,
/* 300 */
69
,
70
,
213
,
61
,
62
,
101
,
213
,
213
,
114
,
67
,
/* 310 */
68
,
69
,
70
,
109
,
101
,
33
,
34
,
254
,
102
,
37
,
/* 320 */
38
,
39
,
106
,
129
,
274
,
251
,
276
,
114
,
254
,
37
,
/* 330 */
38
,
39
,
251
,
59
,
251
,
254
,
77
,
254
,
1
,
245
,
/* 340 */
251
,
108
,
129
,
254
,
251
,
120
,
121
,
254
,
63
,
6
4
,
/* 350 */
65
,
217
,
106
,
102
,
220
,
5
,
102
,
7
,
102
,
113
,
/* 360 */
10
6
,
110
,
106
,
102
,
102
,
102
,
15
,
106
,
106
,
106
,
/* 370 */
5
,
106
,
7
,
101
,
37
,
101
,
104
,
106
,
102
,
102
,
/* 380 */
102
,
102
,
106
,
106
,
106
,
106
,
102
,
270
,
133
,
134
,
/* 390 */
1
06
,
270
,
127
,
133
,
134
,
270
,
125
,
133
,
134
,
101
,
/* 400 */
2
55
,
103
,
133
,
134
,
5
,
5
,
7
,
7
,
74
,
75
,
/* 410 */
61
,
62
,
270
,
270
,
270
,
255
,
246
,
246
,
246
,
246
,
/* 420 */
2
46
,
246
,
253
,
213
,
213
,
269
,
277
,
213
,
213
,
277
,
/* 430 */
21
3
,
213
,
213
,
257
,
109
,
213
,
213
,
213
,
253
,
213
,
/* 440 */
21
3
,
213
,
213
,
213
,
59
,
213
,
114
,
213
,
213
,
21
3
,
/* 450 */
21
3
,
213
,
213
,
213
,
213
,
273
,
213
,
213
,
213
,
108
,
/* 460 */
2
73
,
213
,
213
,
213
,
273
,
213
,
213
,
124
,
266
,
264
,
/* 470 */
213
,
213
,
126
,
265
,
118
,
123
,
122
,
117
,
116
,
213
,
/* 480 */
213
,
213
,
262
,
213
,
115
,
128
,
213
,
85
,
213
,
8
4
,
/* 490 */
49
,
81
,
83
,
213
,
213
,
53
,
213
,
82
,
80
,
213
,
/* 500 */
21
3
,
213
,
213
,
213
,
213
,
77
,
213
,
213
,
213
,
5
,
/* 510 */
214
,
214
,
140
,
214
,
214
,
5
,
5
,
140
,
5
,
5
,
/* 520 */
21
4
,
214
,
87
,
214
,
131
,
214
,
214
,
110
,
218
,
102
,
/* 530 */
111
,
214
,
101
,
104
,
215
,
215
,
106
,
214
,
222
,
102
,
/* 540 */
226
,
228
,
227
,
225
,
223
,
221
,
224
,
214
,
219
,
101
,
/* 550 */
215
,
1
,
214
,
101
,
101
,
216
,
102
,
253
,
119
,
119
,
/* 560 */
10
2
,
106
,
259
,
261
,
263
,
260
,
258
,
106
,
101
,
101
,
/* 570 */
108
,
101
,
101
,
104
,
74
,
9
,
5
,
105
,
5
,
5
,
/* 580 */
5
,
5
,
15
,
78
,
134
,
106
,
74
,
5
,
16
,
5
,
/* 590 */
134
,
134
,
102
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
/* 600 */
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
5
,
106
,
/* 610 */
78
,
59
,
58
,
0
,
28
1
,
281
,
281
,
281
,
281
,
281
,
/* 620 */
281
,
281
,
281
,
281
,
281
,
21
,
2
1
,
281
,
281
,
281
,
/* 630 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 640 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 650 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
...
...
@@ -351,93 +363,94 @@ static const YYCODETYPE yy_lookahead[] = {
/* 790 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 800 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 810 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 820 */
281
,
281
,
281
,
281
,
281
,
/* 820 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
281
,
/* 830 */
281
,
281
,
281
,
281
,
281
,
281
,
281
,
};
#define YY_SHIFT_COUNT (28
2
)
#define YY_SHIFT_COUNT (28
9
)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (6
01
)
#define YY_SHIFT_MAX (6
13
)
static
const
unsigned
short
int
yy_shift_ofst
[]
=
{
/* 0 */
140
,
24
,
137
,
12
,
194
,
213
,
21
,
21
,
21
,
21
,
/* 10 */
21
,
21
,
21
,
21
,
21
,
0
,
22
,
213
,
273
,
27
3
,
/* 20 */
2
73
,
61
,
21
,
21
,
21
,
88
,
21
,
21
,
6
,
12
,
/* 30 */
47
,
47
,
615
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
/* 0 */
140
,
24
,
137
,
9
,
194
,
213
,
3
,
3
,
3
,
3
,
/* 10 */
3
,
3
,
3
,
3
,
3
,
0
,
22
,
213
,
233
,
23
3
,
/* 20 */
2
33
,
233
,
96
,
3
,
3
,
3
,
3
,
259
,
3
,
3
,
/* 30 */
23
,
9
,
69
,
69
,
627
,
213
,
213
,
213
,
213
,
213
,
/* 40 */
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
213
,
/* 50 */
213
,
2
73
,
273
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
/* 60 */
239
,
21
,
21
,
232
,
21
,
21
,
21
,
28
,
28
,
230
,
/* 70 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 80 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 90 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 100 */
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
21
,
/* 110 */
21
,
21
,
21
,
21
,
21
,
21
,
318
,
378
,
378
,
378
,
/* 120 */
3
30
,
330
,
330
,
378
,
329
,
332
,
336
,
344
,
342
,
353
,
/* 130 */
356
,
35
8
,
347
,
318
,
378
,
378
,
378
,
12
,
378
,
378
,
/* 140 */
393
,
396
,
432
,
401
,
404
,
439
,
414
,
418
,
378
,
426
,
/* 150 */
378
,
426
,
378
,
426
,
378
,
615
,
615
,
27
,
70
,
70
,
/* 160 */
70
,
130
,
155
,
234
,
234
,
234
,
223
,
196
,
235
,
278
,
/* 170 */
2
78
,
278
,
278
,
151
,
14
,
148
,
148
,
219
,
107
,
266
,
/* 180 */
244
,
248
,
249
,
250
,
251
,
257
,
258
,
197
,
328
,
9
,
/* 190 */
3
02
,
259
,
255
,
261
,
264
,
267
,
268
,
243
,
245
,
254
,
/* 200 */
2
82
,
256
,
386
,
387
,
298
,
334
,
499
,
365
,
501
,
505
,
/* 210 */
3
73
,
510
,
511
,
430
,
388
,
408
,
419
,
412
,
421
,
440
,
/* 220 */
433
,
441
,
444
,
541
,
445
,
448
,
450
,
446
,
435
,
449
,
/* 230 */
4
36
,
455
,
451
,
452
,
457
,
421
,
458
,
459
,
456
,
488
,
/* 240 */
555
,
560
,
561
,
562
,
563
,
564
,
492
,
556
,
498
,
442
,
/* 250 */
466
,
466
,
558
,
443
,
447
,
466
,
570
,
573
,
477
,
466
,
/* 260 */
575
,
577
,
578
,
579
,
580
,
581
,
582
,
583
,
584
,
585
,
/* 270 */
5
86
,
587
,
588
,
589
,
590
,
591
,
490
,
520
,
592
,
593
,
/* 280 */
540
,
542
,
601
,
/* 50 */
213
,
2
13
,
213
,
233
,
233
,
2
,
2
,
2
,
2
,
2
,
/* 60 */
2
,
2
,
204
,
3
,
3
,
53
,
3
,
3
,
3
,
225
,
/* 70 */
225
,
246
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
/* 80 */
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
/* 90 */
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
/* 100 */
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
/* 110 */
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
3
,
325
,
/* 120 */
3
85
,
385
,
385
,
332
,
332
,
332
,
385
,
343
,
346
,
352
,
/* 130 */
356
,
35
4
,
360
,
362
,
369
,
357
,
325
,
385
,
385
,
385
,
/* 140 */
9
,
385
,
385
,
402
,
405
,
441
,
410
,
409
,
442
,
415
,
/* 150 */
418
,
385
,
428
,
385
,
428
,
385
,
428
,
385
,
627
,
627
,
/* 160 */
27
,
67
,
67
,
67
,
130
,
155
,
247
,
247
,
247
,
221
,
/* 170 */
2
31
,
242
,
282
,
282
,
282
,
282
,
120
,
35
,
292
,
292
,
/* 180 */
138
,
136
,
285
,
251
,
216
,
254
,
256
,
261
,
262
,
263
,
/* 190 */
3
50
,
365
,
337
,
274
,
351
,
265
,
271
,
276
,
277
,
278
,
/* 200 */
2
79
,
284
,
272
,
255
,
260
,
264
,
298
,
269
,
399
,
400
,
/* 210 */
3
34
,
349
,
504
,
372
,
510
,
511
,
377
,
513
,
514
,
435
,
/* 220 */
393
,
417
,
427
,
419
,
429
,
431
,
430
,
437
,
448
,
550
,
/* 230 */
4
52
,
454
,
453
,
455
,
439
,
461
,
440
,
458
,
467
,
462
,
/* 240 */
468
,
429
,
470
,
469
,
471
,
472
,
500
,
566
,
571
,
573
,
/* 250 */
574
,
575
,
576
,
505
,
567
,
512
,
450
,
479
,
479
,
572
,
/* 260 */
456
,
457
,
479
,
582
,
584
,
490
,
479
,
588
,
589
,
590
,
/* 270 */
5
91
,
592
,
593
,
594
,
595
,
596
,
597
,
598
,
599
,
600
,
/* 280 */
601
,
602
,
603
,
503
,
532
,
604
,
605
,
552
,
554
,
613
,
};
#define YY_REDUCE_COUNT (15
6
)
#define YY_REDUCE_MIN (-26
8
)
#define YY_REDUCE_MAX (3
24
)
#define YY_REDUCE_COUNT (15
9
)
#define YY_REDUCE_MIN (-26
0
)
#define YY_REDUCE_MAX (3
39
)
static
const
short
yy_reduce_ofst
[]
=
{
/* 0 */
-
208
,
-
10
2
,
10
,
-
41
,
-
268
,
-
178
,
-
196
,
-
151
,
-
115
,
67
,
/* 10 */
74
,
8
0
,
84
,
87
,
95
,
-
214
,
-
164
,
-
265
,
-
223
,
-
150
,
/* 20 */
-
65
,
-
93
,
-
172
,
-
23
,
42
,
-
22
,
99
,
-
16
,
-
2
,
-
14
,
/* 30 */
3
,
58
,
54
,
-
264
,
-
251
,
-
241
,
-
177
,
-
25
,
19
,
30
,
/* 40 */
93
,
110
,
114
,
127
,
128
,
129
,
131
,
132
,
134
,
13
5
,
/* 50 */
1
36
,
-
193
,
-
78
,
153
,
160
,
161
,
162
,
163
,
164
,
165
,
/* 60 */
1
66
,
199
,
200
,
146
,
202
,
203
,
204
,
143
,
144
,
167
,
/* 70 */
208
,
209
,
211
,
212
,
214
,
215
,
216
,
217
,
218
,
220
,
/* 80 */
22
1
,
222
,
224
,
225
,
226
,
227
,
228
,
229
,
231
,
233
,
/* 90 */
2
36
,
237
,
238
,
240
,
241
,
242
,
246
,
247
,
252
,
253
,
/* 100 */
2
60
,
262
,
263
,
265
,
269
,
270
,
271
,
272
,
274
,
275
,
/* 110 */
2
76
,
277
,
279
,
280
,
281
,
283
,
180
,
284
,
285
,
286
,
/* 120 */
173
,
175
,
176
,
287
,
191
,
198
,
201
,
205
,
207
,
210
,
/* 130 */
288
,
290
,
289
,
291
,
292
,
293
,
294
,
295
,
296
,
297
,
/* 140 */
299
,
301
,
300
,
303
,
304
,
307
,
308
,
310
,
305
,
306
,
/* 150 */
3
09
,
319
,
321
,
322
,
324
,
314
,
320
,
/* 0 */
-
208
,
-
10
1
,
21
,
-
40
,
-
181
,
-
118
,
-
205
,
-
151
,
50
,
-
64
,
/* 10 */
74
,
8
1
,
83
,
89
,
93
,
-
213
,
-
207
,
-
251
,
-
198
,
-
85
,
/* 20 */
-
70
,
-
39
,
-
211
,
-
163
,
-
191
,
-
150
,
-
54
,
1
,
94
,
63
,
/* 30 */
-
202
,
30
,
4
,
134
,
-
160
,
-
260
,
-
259
,
-
240
,
-
167
,
-
117
,
/* 40 */
-
93
,
-
66
,
-
53
,
-
41
,
-
26
,
-
13
,
-
1
,
117
,
121
,
12
5
,
/* 50 */
1
42
,
143
,
144
,
145
,
160
,
33
,
170
,
171
,
172
,
173
,
/* 60 */
1
74
,
175
,
169
,
210
,
211
,
156
,
214
,
215
,
217
,
149
,
/* 70 */
152
,
176
,
218
,
219
,
222
,
223
,
224
,
226
,
227
,
228
,
/* 80 */
22
9
,
230
,
232
,
234
,
235
,
236
,
237
,
238
,
239
,
240
,
/* 90 */
2
41
,
243
,
244
,
245
,
248
,
249
,
250
,
252
,
253
,
257
,
/* 100 */
2
58
,
266
,
267
,
268
,
270
,
273
,
275
,
280
,
281
,
283
,
/* 110 */
2
86
,
287
,
288
,
289
,
290
,
291
,
293
,
294
,
295
,
185
,
/* 120 */
296
,
297
,
299
,
182
,
187
,
191
,
300
,
202
,
208
,
205
,
/* 130 */
301
,
220
,
302
,
305
,
303
,
308
,
304
,
306
,
307
,
309
,
/* 140 */
310
,
311
,
312
,
313
,
315
,
314
,
316
,
318
,
321
,
322
,
/* 150 */
3
24
,
317
,
319
,
323
,
320
,
333
,
335
,
338
,
329
,
339
,
};
static
const
YYACTIONTYPE
yy_default
[]
=
{
/* 0 */
7
13
,
768
,
757
,
765
,
950
,
950
,
713
,
713
,
713
,
713
,
/* 10 */
7
13
,
713
,
713
,
713
,
713
,
873
,
731
,
950
,
713
,
713
,
/* 20 */
7
13
,
713
,
713
,
713
,
713
,
765
,
713
,
713
,
770
,
765
,
/* 30 */
7
70
,
770
,
868
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 40 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 50 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 60 */
7
13
,
713
,
713
,
875
,
877
,
879
,
713
,
897
,
897
,
866
,
/* 70 */
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 80 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 90 */
7
13
,
713
,
713
,
713
,
755
,
713
,
753
,
713
,
713
,
713
,
/* 100 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 110 */
7
41
,
713
,
713
,
713
,
713
,
713
,
713
,
733
,
733
,
733
,
/* 120 */
7
13
,
713
,
713
,
733
,
904
,
908
,
902
,
890
,
898
,
889
,
/* 130 */
885
,
884
,
912
,
713
,
733
,
733
,
733
,
765
,
733
,
733
,
/* 140 */
7
86
,
784
,
782
,
774
,
780
,
776
,
778
,
772
,
733
,
763
,
/* 150 */
7
33
,
763
,
733
,
763
,
733
,
804
,
820
,
713
,
913
,
949
,
/* 160 */
903
,
939
,
938
,
945
,
937
,
936
,
713
,
713
,
713
,
932
,
/* 170 */
933
,
935
,
934
,
713
,
713
,
941
,
940
,
713
,
713
,
713
,
/* 180 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 190 */
915
,
713
,
909
,
905
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 200 */
830
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 210 */
7
13
,
713
,
713
,
713
,
713
,
865
,
713
,
713
,
713
,
713
,
/* 220 */
876
,
713
,
713
,
713
,
713
,
713
,
713
,
899
,
713
,
891
,
/* 230 */
7
13
,
713
,
713
,
713
,
713
,
842
,
713
,
713
,
713
,
713
,
/* 240 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 250 */
960
,
958
,
713
,
713
,
713
,
954
,
713
,
713
,
713
,
952
,
/* 260 */
7
13
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
713
,
/* 270 */
7
13
,
713
,
713
,
713
,
713
,
713
,
789
,
713
,
739
,
737
,
/* 280 */
7
13
,
729
,
713
,
/* 0 */
7
26
,
781
,
770
,
778
,
966
,
966
,
726
,
726
,
726
,
726
,
/* 10 */
7
26
,
726
,
726
,
726
,
726
,
889
,
744
,
966
,
726
,
726
,
/* 20 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
778
,
726
,
726
,
/* 30 */
7
83
,
778
,
783
,
783
,
884
,
726
,
726
,
726
,
726
,
726
,
/* 40 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 50 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 60 */
7
26
,
726
,
726
,
726
,
726
,
891
,
893
,
895
,
726
,
913
,
/* 70 */
913
,
882
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 80 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 90 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
768
,
726
,
766
,
/* 100 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 110 */
7
26
,
726
,
726
,
754
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 120 */
7
46
,
746
,
746
,
726
,
726
,
726
,
746
,
920
,
924
,
918
,
/* 130 */
906
,
914
,
905
,
901
,
900
,
928
,
726
,
746
,
746
,
746
,
/* 140 */
7
78
,
746
,
746
,
799
,
797
,
795
,
787
,
793
,
789
,
791
,
/* 150 */
7
85
,
746
,
776
,
746
,
776
,
746
,
776
,
746
,
817
,
833
,
/* 160 */
726
,
929
,
965
,
919
,
955
,
954
,
961
,
953
,
952
,
726
,
/* 170 */
726
,
726
,
948
,
949
,
951
,
950
,
726
,
726
,
957
,
956
,
/* 180 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 190 */
726
,
726
,
726
,
931
,
726
,
925
,
921
,
726
,
726
,
726
,
/* 200 */
726
,
726
,
726
,
726
,
726
,
726
,
843
,
726
,
726
,
726
,
/* 210 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 220 */
726
,
881
,
726
,
726
,
726
,
726
,
892
,
726
,
726
,
726
,
/* 230 */
7
26
,
726
,
726
,
915
,
726
,
907
,
726
,
726
,
726
,
726
,
/* 240 */
7
26
,
855
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 250 */
726
,
726
,
726
,
726
,
726
,
726
,
726
,
976
,
974
,
726
,
/* 260 */
7
26
,
726
,
970
,
726
,
726
,
726
,
968
,
726
,
726
,
726
,
/* 270 */
7
26
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
726
,
/* 280 */
7
26
,
726
,
726
,
802
,
726
,
752
,
750
,
726
,
742
,
726
,
};
/********** End of lemon-generated parsing tables *****************************/
...
...
@@ -563,8 +576,8 @@ static const YYCODETYPE yyFallback[] = {
0
,
/* UNSIGNED => nothing */
0
,
/* TAGS => nothing */
0
,
/* USING => nothing */
0
,
/* AS => nothing */
0
,
/* COMMA => nothing */
0
,
/* AS => nothing */
1
,
/* NULL => ID */
0
,
/* SELECT => nothing */
0
,
/* UNION => nothing */
...
...
@@ -706,6 +719,7 @@ struct yyParser {
int
yyerrcnt
;
/* Shifts left before out of the error */
#endif
ParseARG_SDECL
/* A place to hold %extra_argument */
ParseCTX_SDECL
/* A place to hold %extra_context */
#if YYSTACKDEPTH<=0
int
yystksz
;
/* Current side of the stack */
yyStackEntry
*
yystack
;
/* The parser's stack */
...
...
@@ -859,8 +873,8 @@ static const char *const yyTokenName[] = {
/* 103 */
"UNSIGNED"
,
/* 104 */
"TAGS"
,
/* 105 */
"USING"
,
/* 106 */
"
AS
"
,
/* 107 */
"
COMMA
"
,
/* 106 */
"
COMMA
"
,
/* 107 */
"
AS
"
,
/* 108 */
"NULL"
,
/* 109 */
"SELECT"
,
/* 110 */
"UNION"
,
...
...
@@ -963,49 +977,49 @@ static const char *const yyTokenName[] = {
/* 207 */
"INSERT"
,
/* 208 */
"INTO"
,
/* 209 */
"VALUES"
,
/* 210 */
"
error
"
,
/* 211 */
"
program
"
,
/* 212 */
"
cmd
"
,
/* 213 */
"
dbPrefix
"
,
/* 214 */
"
ids
"
,
/* 215 */
"
cpxName
"
,
/* 216 */
"
ifexists
"
,
/* 217 */
"a
lter_db
_optr"
,
/* 218 */
"
acct_optr
"
,
/* 219 */
"
ifnotexists
"
,
/* 220 */
"
db_optr
"
,
/* 221 */
"
pp
s"
,
/* 222 */
"
tserie
s"
,
/* 223 */
"
db
s"
,
/* 224 */
"st
reams
"
,
/* 225 */
"
storag
e"
,
/* 226 */
"
qtime
"
,
/* 227 */
"
user
s"
,
/* 228 */
"
conns
"
,
/* 229 */
"
state
"
,
/* 230 */
"
keep
"
,
/* 231 */
"
tagitemlist
"
,
/* 232 */
"
cache
"
,
/* 233 */
"
replica
"
,
/* 234 */
"
quorum
"
,
/* 235 */
"
day
s"
,
/* 236 */
"m
in
rows"
,
/* 237 */
"
maxrow
s"
,
/* 238 */
"
blocks
"
,
/* 239 */
"
ctime
"
,
/* 240 */
"
wal
"
,
/* 241 */
"
fsync
"
,
/* 242 */
"
comp
"
,
/* 243 */
"
prec
"
,
/* 244 */
"
update
"
,
/* 245 */
"
cachelast
"
,
/* 246 */
"
typename
"
,
/* 247 */
"
signed
"
,
/* 248 */
"create_table_args"
,
/* 249 */
"create_
stable_args
"
,
/* 250 */
"create_
table_list
"
,
/* 251 */
"c
reate_from_stable
"
,
/* 252 */
"
column
list"
,
/* 210 */
"
program
"
,
/* 211 */
"
cmd
"
,
/* 212 */
"
dbPrefix
"
,
/* 213 */
"
ids
"
,
/* 214 */
"
cpxName
"
,
/* 215 */
"
ifexists
"
,
/* 216 */
"
alter_db_optr
"
,
/* 217 */
"a
cct
_optr"
,
/* 218 */
"
ifnotexists
"
,
/* 219 */
"
db_optr
"
,
/* 220 */
"
pps
"
,
/* 221 */
"
tserie
s"
,
/* 222 */
"
db
s"
,
/* 223 */
"
stream
s"
,
/* 224 */
"st
orage
"
,
/* 225 */
"
qtim
e"
,
/* 226 */
"
users
"
,
/* 227 */
"
conn
s"
,
/* 228 */
"
state
"
,
/* 229 */
"
keep
"
,
/* 230 */
"
tagitemlist
"
,
/* 231 */
"
cache
"
,
/* 232 */
"
replica
"
,
/* 233 */
"
quorum
"
,
/* 234 */
"
days
"
,
/* 235 */
"
minrow
s"
,
/* 236 */
"m
ax
rows"
,
/* 237 */
"
block
s"
,
/* 238 */
"
ctime
"
,
/* 239 */
"
wal
"
,
/* 240 */
"
fsync
"
,
/* 241 */
"
comp
"
,
/* 242 */
"
prec
"
,
/* 243 */
"
update
"
,
/* 244 */
"
cachelast
"
,
/* 245 */
"
typename
"
,
/* 246 */
"
signed
"
,
/* 247 */
"
create_table_args
"
,
/* 248 */
"create_
s
table_args"
,
/* 249 */
"create_
table_list
"
,
/* 250 */
"create_
from_stable
"
,
/* 251 */
"c
olumnlist
"
,
/* 252 */
"
tagName
list"
,
/* 253 */
"select"
,
/* 254 */
"column"
,
/* 255 */
"tagitem"
,
...
...
@@ -1170,127 +1184,130 @@ static const char *const yyRuleName[] = {
/* 126 */
"create_table_args ::= ifnotexists ids cpxName LP columnlist RP"
,
/* 127 */
"create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP"
,
/* 128 */
"create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP"
,
/* 129 */
"create_table_args ::= ifnotexists ids cpxName AS select"
,
/* 130 */
"columnlist ::= columnlist COMMA column"
,
/* 131 */
"columnlist ::= column"
,
/* 132 */
"column ::= ids typename"
,
/* 133 */
"tagitemlist ::= tagitemlist COMMA tagitem"
,
/* 134 */
"tagitemlist ::= tagitem"
,
/* 135 */
"tagitem ::= INTEGER"
,
/* 136 */
"tagitem ::= FLOAT"
,
/* 137 */
"tagitem ::= STRING"
,
/* 138 */
"tagitem ::= BOOL"
,
/* 139 */
"tagitem ::= NULL"
,
/* 140 */
"tagitem ::= MINUS INTEGER"
,
/* 141 */
"tagitem ::= MINUS FLOAT"
,
/* 142 */
"tagitem ::= PLUS INTEGER"
,
/* 143 */
"tagitem ::= PLUS FLOAT"
,
/* 144 */
"select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt"
,
/* 145 */
"union ::= select"
,
/* 146 */
"union ::= LP union RP"
,
/* 147 */
"union ::= union UNION ALL select"
,
/* 148 */
"union ::= union UNION ALL LP select RP"
,
/* 149 */
"cmd ::= union"
,
/* 150 */
"select ::= SELECT selcollist"
,
/* 151 */
"sclp ::= selcollist COMMA"
,
/* 152 */
"sclp ::="
,
/* 153 */
"selcollist ::= sclp distinct expr as"
,
/* 154 */
"selcollist ::= sclp STAR"
,
/* 155 */
"as ::= AS ids"
,
/* 156 */
"as ::= ids"
,
/* 157 */
"as ::="
,
/* 158 */
"distinct ::= DISTINCT"
,
/* 159 */
"distinct ::="
,
/* 160 */
"from ::= FROM tablelist"
,
/* 161 */
"tablelist ::= ids cpxName"
,
/* 162 */
"tablelist ::= ids cpxName ids"
,
/* 163 */
"tablelist ::= tablelist COMMA ids cpxName"
,
/* 164 */
"tablelist ::= tablelist COMMA ids cpxName ids"
,
/* 165 */
"tmvar ::= VARIABLE"
,
/* 166 */
"interval_opt ::= INTERVAL LP tmvar RP"
,
/* 167 */
"interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP"
,
/* 168 */
"interval_opt ::="
,
/* 169 */
"fill_opt ::="
,
/* 170 */
"fill_opt ::= FILL LP ID COMMA tagitemlist RP"
,
/* 171 */
"fill_opt ::= FILL LP ID RP"
,
/* 172 */
"sliding_opt ::= SLIDING LP tmvar RP"
,
/* 173 */
"sliding_opt ::="
,
/* 174 */
"orderby_opt ::="
,
/* 175 */
"orderby_opt ::= ORDER BY sortlist"
,
/* 176 */
"sortlist ::= sortlist COMMA item sortorder"
,
/* 177 */
"sortlist ::= item sortorder"
,
/* 178 */
"item ::= ids cpxName"
,
/* 179 */
"sortorder ::= ASC"
,
/* 180 */
"sortorder ::= DESC"
,
/* 181 */
"sortorder ::="
,
/* 182 */
"groupby_opt ::="
,
/* 183 */
"groupby_opt ::= GROUP BY grouplist"
,
/* 184 */
"grouplist ::= grouplist COMMA item"
,
/* 185 */
"grouplist ::= item"
,
/* 186 */
"having_opt ::="
,
/* 187 */
"having_opt ::= HAVING expr"
,
/* 188 */
"limit_opt ::="
,
/* 189 */
"limit_opt ::= LIMIT signed"
,
/* 190 */
"limit_opt ::= LIMIT signed OFFSET signed"
,
/* 191 */
"limit_opt ::= LIMIT signed COMMA signed"
,
/* 192 */
"slimit_opt ::="
,
/* 193 */
"slimit_opt ::= SLIMIT signed"
,
/* 194 */
"slimit_opt ::= SLIMIT signed SOFFSET signed"
,
/* 195 */
"slimit_opt ::= SLIMIT signed COMMA signed"
,
/* 196 */
"where_opt ::="
,
/* 197 */
"where_opt ::= WHERE expr"
,
/* 198 */
"expr ::= LP expr RP"
,
/* 199 */
"expr ::= ID"
,
/* 200 */
"expr ::= ID DOT ID"
,
/* 201 */
"expr ::= ID DOT STAR"
,
/* 202 */
"expr ::= INTEGER"
,
/* 203 */
"expr ::= MINUS INTEGER"
,
/* 204 */
"expr ::= PLUS INTEGER"
,
/* 205 */
"expr ::= FLOAT"
,
/* 206 */
"expr ::= MINUS FLOAT"
,
/* 207 */
"expr ::= PLUS FLOAT"
,
/* 208 */
"expr ::= STRING"
,
/* 209 */
"expr ::= NOW"
,
/* 210 */
"expr ::= VARIABLE"
,
/* 211 */
"expr ::= BOOL"
,
/* 212 */
"expr ::= ID LP exprlist RP"
,
/* 213 */
"expr ::= ID LP STAR RP"
,
/* 214 */
"expr ::= expr IS NULL"
,
/* 215 */
"expr ::= expr IS NOT NULL"
,
/* 216 */
"expr ::= expr LT expr"
,
/* 217 */
"expr ::= expr GT expr"
,
/* 218 */
"expr ::= expr LE expr"
,
/* 219 */
"expr ::= expr GE expr"
,
/* 220 */
"expr ::= expr NE expr"
,
/* 221 */
"expr ::= expr EQ expr"
,
/* 222 */
"expr ::= expr AND expr"
,
/* 223 */
"expr ::= expr OR expr"
,
/* 224 */
"expr ::= expr PLUS expr"
,
/* 225 */
"expr ::= expr MINUS expr"
,
/* 226 */
"expr ::= expr STAR expr"
,
/* 227 */
"expr ::= expr SLASH expr"
,
/* 228 */
"expr ::= expr REM expr"
,
/* 229 */
"expr ::= expr LIKE expr"
,
/* 230 */
"expr ::= expr IN LP exprlist RP"
,
/* 231 */
"exprlist ::= exprlist COMMA expritem"
,
/* 232 */
"exprlist ::= expritem"
,
/* 233 */
"expritem ::= expr"
,
/* 234 */
"expritem ::="
,
/* 235 */
"cmd ::= RESET QUERY CACHE"
,
/* 236 */
"cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist"
,
/* 237 */
"cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids"
,
/* 238 */
"cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist"
,
/* 239 */
"cmd ::= ALTER TABLE ids cpxName DROP TAG ids"
,
/* 240 */
"cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids"
,
/* 241 */
"cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 242 */
"cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist"
,
/* 243 */
"cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids"
,
/* 244 */
"cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist"
,
/* 245 */
"cmd ::= ALTER STABLE ids cpxName DROP TAG ids"
,
/* 246 */
"cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids"
,
/* 247 */
"cmd ::= KILL CONNECTION INTEGER"
,
/* 248 */
"cmd ::= KILL STREAM INTEGER COLON INTEGER"
,
/* 249 */
"cmd ::= KILL QUERY INTEGER COLON INTEGER"
,
/* 129 */
"create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP"
,
/* 130 */
"tagNamelist ::= tagNamelist COMMA ids"
,
/* 131 */
"tagNamelist ::= ids"
,
/* 132 */
"create_table_args ::= ifnotexists ids cpxName AS select"
,
/* 133 */
"columnlist ::= columnlist COMMA column"
,
/* 134 */
"columnlist ::= column"
,
/* 135 */
"column ::= ids typename"
,
/* 136 */
"tagitemlist ::= tagitemlist COMMA tagitem"
,
/* 137 */
"tagitemlist ::= tagitem"
,
/* 138 */
"tagitem ::= INTEGER"
,
/* 139 */
"tagitem ::= FLOAT"
,
/* 140 */
"tagitem ::= STRING"
,
/* 141 */
"tagitem ::= BOOL"
,
/* 142 */
"tagitem ::= NULL"
,
/* 143 */
"tagitem ::= MINUS INTEGER"
,
/* 144 */
"tagitem ::= MINUS FLOAT"
,
/* 145 */
"tagitem ::= PLUS INTEGER"
,
/* 146 */
"tagitem ::= PLUS FLOAT"
,
/* 147 */
"select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt"
,
/* 148 */
"union ::= select"
,
/* 149 */
"union ::= LP union RP"
,
/* 150 */
"union ::= union UNION ALL select"
,
/* 151 */
"union ::= union UNION ALL LP select RP"
,
/* 152 */
"cmd ::= union"
,
/* 153 */
"select ::= SELECT selcollist"
,
/* 154 */
"sclp ::= selcollist COMMA"
,
/* 155 */
"sclp ::="
,
/* 156 */
"selcollist ::= sclp distinct expr as"
,
/* 157 */
"selcollist ::= sclp STAR"
,
/* 158 */
"as ::= AS ids"
,
/* 159 */
"as ::= ids"
,
/* 160 */
"as ::="
,
/* 161 */
"distinct ::= DISTINCT"
,
/* 162 */
"distinct ::="
,
/* 163 */
"from ::= FROM tablelist"
,
/* 164 */
"tablelist ::= ids cpxName"
,
/* 165 */
"tablelist ::= ids cpxName ids"
,
/* 166 */
"tablelist ::= tablelist COMMA ids cpxName"
,
/* 167 */
"tablelist ::= tablelist COMMA ids cpxName ids"
,
/* 168 */
"tmvar ::= VARIABLE"
,
/* 169 */
"interval_opt ::= INTERVAL LP tmvar RP"
,
/* 170 */
"interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP"
,
/* 171 */
"interval_opt ::="
,
/* 172 */
"fill_opt ::="
,
/* 173 */
"fill_opt ::= FILL LP ID COMMA tagitemlist RP"
,
/* 174 */
"fill_opt ::= FILL LP ID RP"
,
/* 175 */
"sliding_opt ::= SLIDING LP tmvar RP"
,
/* 176 */
"sliding_opt ::="
,
/* 177 */
"orderby_opt ::="
,
/* 178 */
"orderby_opt ::= ORDER BY sortlist"
,
/* 179 */
"sortlist ::= sortlist COMMA item sortorder"
,
/* 180 */
"sortlist ::= item sortorder"
,
/* 181 */
"item ::= ids cpxName"
,
/* 182 */
"sortorder ::= ASC"
,
/* 183 */
"sortorder ::= DESC"
,
/* 184 */
"sortorder ::="
,
/* 185 */
"groupby_opt ::="
,
/* 186 */
"groupby_opt ::= GROUP BY grouplist"
,
/* 187 */
"grouplist ::= grouplist COMMA item"
,
/* 188 */
"grouplist ::= item"
,
/* 189 */
"having_opt ::="
,
/* 190 */
"having_opt ::= HAVING expr"
,
/* 191 */
"limit_opt ::="
,
/* 192 */
"limit_opt ::= LIMIT signed"
,
/* 193 */
"limit_opt ::= LIMIT signed OFFSET signed"
,
/* 194 */
"limit_opt ::= LIMIT signed COMMA signed"
,
/* 195 */
"slimit_opt ::="
,
/* 196 */
"slimit_opt ::= SLIMIT signed"
,
/* 197 */
"slimit_opt ::= SLIMIT signed SOFFSET signed"
,
/* 198 */
"slimit_opt ::= SLIMIT signed COMMA signed"
,
/* 199 */
"where_opt ::="
,
/* 200 */
"where_opt ::= WHERE expr"
,
/* 201 */
"expr ::= LP expr RP"
,
/* 202 */
"expr ::= ID"
,
/* 203 */
"expr ::= ID DOT ID"
,
/* 204 */
"expr ::= ID DOT STAR"
,
/* 205 */
"expr ::= INTEGER"
,
/* 206 */
"expr ::= MINUS INTEGER"
,
/* 207 */
"expr ::= PLUS INTEGER"
,
/* 208 */
"expr ::= FLOAT"
,
/* 209 */
"expr ::= MINUS FLOAT"
,
/* 210 */
"expr ::= PLUS FLOAT"
,
/* 211 */
"expr ::= STRING"
,
/* 212 */
"expr ::= NOW"
,
/* 213 */
"expr ::= VARIABLE"
,
/* 214 */
"expr ::= BOOL"
,
/* 215 */
"expr ::= ID LP exprlist RP"
,
/* 216 */
"expr ::= ID LP STAR RP"
,
/* 217 */
"expr ::= expr IS NULL"
,
/* 218 */
"expr ::= expr IS NOT NULL"
,
/* 219 */
"expr ::= expr LT expr"
,
/* 220 */
"expr ::= expr GT expr"
,
/* 221 */
"expr ::= expr LE expr"
,
/* 222 */
"expr ::= expr GE expr"
,
/* 223 */
"expr ::= expr NE expr"
,
/* 224 */
"expr ::= expr EQ expr"
,
/* 225 */
"expr ::= expr AND expr"
,
/* 226 */
"expr ::= expr OR expr"
,
/* 227 */
"expr ::= expr PLUS expr"
,
/* 228 */
"expr ::= expr MINUS expr"
,
/* 229 */
"expr ::= expr STAR expr"
,
/* 230 */
"expr ::= expr SLASH expr"
,
/* 231 */
"expr ::= expr REM expr"
,
/* 232 */
"expr ::= expr LIKE expr"
,
/* 233 */
"expr ::= expr IN LP exprlist RP"
,
/* 234 */
"exprlist ::= exprlist COMMA expritem"
,
/* 235 */
"exprlist ::= expritem"
,
/* 236 */
"expritem ::= expr"
,
/* 237 */
"expritem ::="
,
/* 238 */
"cmd ::= RESET QUERY CACHE"
,
/* 239 */
"cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist"
,
/* 240 */
"cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids"
,
/* 241 */
"cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist"
,
/* 242 */
"cmd ::= ALTER TABLE ids cpxName DROP TAG ids"
,
/* 243 */
"cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids"
,
/* 244 */
"cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem"
,
/* 245 */
"cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist"
,
/* 246 */
"cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids"
,
/* 247 */
"cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist"
,
/* 248 */
"cmd ::= ALTER STABLE ids cpxName DROP TAG ids"
,
/* 249 */
"cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids"
,
/* 250 */
"cmd ::= KILL CONNECTION INTEGER"
,
/* 251 */
"cmd ::= KILL STREAM INTEGER COLON INTEGER"
,
/* 252 */
"cmd ::= KILL QUERY INTEGER COLON INTEGER"
,
};
#endif
/* NDEBUG */
...
...
@@ -1339,28 +1356,29 @@ static int yyGrowStack(yyParser *p){
/* Initialize a new parser that has already been allocated.
*/
void
ParseInit
(
void
*
yypParser
){
yyParser
*
pParser
=
(
yyParser
*
)
yypParser
;
void
ParseInit
(
void
*
yypRawParser
ParseCTX_PDECL
){
yyParser
*
yypParser
=
(
yyParser
*
)
yypRawParser
;
ParseCTX_STORE
#ifdef YYTRACKMAXSTACKDEPTH
pParser
->
yyhwm
=
0
;
yy
pParser
->
yyhwm
=
0
;
#endif
#if YYSTACKDEPTH<=0
pParser
->
yytos
=
NULL
;
pParser
->
yystack
=
NULL
;
pParser
->
yystksz
=
0
;
if
(
yyGrowStack
(
pParser
)
){
pParser
->
yystack
=
&
pParser
->
yystk0
;
pParser
->
yystksz
=
1
;
yy
pParser
->
yytos
=
NULL
;
yy
pParser
->
yystack
=
NULL
;
yy
pParser
->
yystksz
=
0
;
if
(
yyGrowStack
(
yy
pParser
)
){
yypParser
->
yystack
=
&
yy
pParser
->
yystk0
;
yy
pParser
->
yystksz
=
1
;
}
#endif
#ifndef YYNOERRORRECOVERY
pParser
->
yyerrcnt
=
-
1
;
yy
pParser
->
yyerrcnt
=
-
1
;
#endif
pParser
->
yytos
=
pParser
->
yystack
;
pParser
->
yystack
[
0
].
stateno
=
0
;
pParser
->
yystack
[
0
].
major
=
0
;
yypParser
->
yytos
=
yy
pParser
->
yystack
;
yy
pParser
->
yystack
[
0
].
stateno
=
0
;
yy
pParser
->
yystack
[
0
].
major
=
0
;
#if YYSTACKDEPTH>0
pParser
->
yystackEnd
=
&
pParser
->
yystack
[
YYSTACKDEPTH
-
1
];
yypParser
->
yystackEnd
=
&
yy
pParser
->
yystack
[
YYSTACKDEPTH
-
1
];
#endif
}
...
...
@@ -1377,11 +1395,14 @@ void ParseInit(void *yypParser){
** A pointer to a parser. This pointer is used in subsequent calls
** to Parse and ParseFree.
*/
void
*
ParseAlloc
(
void
*
(
*
mallocProc
)(
YYMALLOCARGTYPE
)){
yyParser
*
pParser
;
pParser
=
(
yyParser
*
)(
*
mallocProc
)(
(
YYMALLOCARGTYPE
)
sizeof
(
yyParser
)
);
if
(
pParser
)
ParseInit
(
pParser
);
return
pParser
;
void
*
ParseAlloc
(
void
*
(
*
mallocProc
)(
YYMALLOCARGTYPE
)
ParseCTX_PDECL
){
yyParser
*
yypParser
;
yypParser
=
(
yyParser
*
)(
*
mallocProc
)(
(
YYMALLOCARGTYPE
)
sizeof
(
yyParser
)
);
if
(
yypParser
){
ParseCTX_STORE
ParseInit
(
yypParser
ParseCTX_PARAM
);
}
return
(
void
*
)
yypParser
;
}
#endif
/* Parse_ENGINEALWAYSONSTACK */
...
...
@@ -1398,7 +1419,8 @@ static void yy_destructor(
YYCODETYPE
yymajor
,
/* Type code for object to destroy */
YYMINORTYPE
*
yypminor
/* The object to be destroyed */
){
ParseARG_FETCH
;
ParseARG_FETCH
ParseCTX_FETCH
switch
(
yymajor
){
/* Here is inserted the actions which take place when a
** terminal or non-terminal is destroyed. This can happen
...
...
@@ -1411,9 +1433,10 @@ static void yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
case
230
:
/* keep */
case
231
:
/* tagitemlist */
case
252
:
/* columnlist */
case
229
:
/* keep */
case
230
:
/* tagitemlist */
case
251
:
/* columnlist */
case
252
:
/* tagNamelist */
case
260
:
/* fill_opt */
case
262
:
/* groupby_opt */
case
263
:
/* orderby_opt */
...
...
@@ -1423,7 +1446,7 @@ static void yy_destructor(
taosArrayDestroy
((
yypminor
->
yy247
));
}
break
;
case
2
50
:
/* create_table_list */
case
2
49
:
/* create_table_list */
{
destroyCreateTableSql
((
yypminor
->
yy358
));
}
...
...
@@ -1567,13 +1590,12 @@ int ParseCoverage(FILE *out){
** Find the appropriate action for a parser given the terminal
** look-ahead token iLookAhead.
*/
static
unsigned
int
yy_find_shift_action
(
yyParser
*
pParser
,
/* The parser
*/
YY
CODETYPE
iLookAhead
/* The look-ahead token
*/
static
YYACTIONTYPE
yy_find_shift_action
(
YYCODETYPE
iLookAhead
,
/* The look-ahead token
*/
YY
ACTIONTYPE
stateno
/* Current state number
*/
){
int
i
;
int
stateno
=
pParser
->
yytos
->
stateno
;
if
(
stateno
>
YY_MAX_SHIFT
)
return
stateno
;
assert
(
stateno
<=
YY_SHIFT_COUNT
);
#if defined(YYCOVERAGE)
...
...
@@ -1581,15 +1603,19 @@ static unsigned int yy_find_shift_action(
#endif
do
{
i
=
yy_shift_ofst
[
stateno
];
assert
(
i
>=
0
&&
i
+
YYNTOKEN
<=
sizeof
(
yy_lookahead
)
/
sizeof
(
yy_lookahead
[
0
])
);
assert
(
i
>=
0
);
assert
(
i
<=
YY_ACTTAB_COUNT
);
assert
(
i
+
YYNTOKEN
<=
(
int
)
YY_NLOOKAHEAD
);
assert
(
iLookAhead
!=
YYNOCODE
);
assert
(
iLookAhead
<
YYNTOKEN
);
i
+=
iLookAhead
;
assert
(
i
<
(
int
)
YY_NLOOKAHEAD
);
if
(
yy_lookahead
[
i
]
!=
iLookAhead
){
#ifdef YYFALLBACK
YYCODETYPE
iFallback
;
/* Fallback token */
if
(
iLookAhead
<
sizeof
(
yyFallback
)
/
sizeof
(
yyFallback
[
0
])
&&
(
iFallback
=
yyFallback
[
iLookAhead
])
!=
0
){
assert
(
iLookAhead
<
sizeof
(
yyFallback
)
/
sizeof
(
yyFallback
[
0
])
);
iFallback
=
yyFallback
[
iLookAhead
];
if
(
iFallback
!=
0
){
#ifndef NDEBUG
if
(
yyTraceFILE
){
fprintf
(
yyTraceFILE
,
"%sFALLBACK %s => %s
\n
"
,
...
...
@@ -1604,15 +1630,8 @@ static unsigned int yy_find_shift_action(
#ifdef YYWILDCARD
{
int
j
=
i
-
iLookAhead
+
YYWILDCARD
;
if
(
#if YY_SHIFT_MIN+YYWILDCARD<0
j
>=
0
&&
#endif
#if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
j
<
YY_ACTTAB_COUNT
&&
#endif
yy_lookahead
[
j
]
==
YYWILDCARD
&&
iLookAhead
>
0
){
assert
(
j
<
(
int
)(
sizeof
(
yy_lookahead
)
/
sizeof
(
yy_lookahead
[
0
]))
);
if
(
yy_lookahead
[
j
]
==
YYWILDCARD
&&
iLookAhead
>
0
){
#ifndef NDEBUG
if
(
yyTraceFILE
){
fprintf
(
yyTraceFILE
,
"%sWILDCARD %s => %s
\n
"
,
...
...
@@ -1626,6 +1645,7 @@ static unsigned int yy_find_shift_action(
#endif
/* YYWILDCARD */
return
yy_default
[
stateno
];
}
else
{
assert
(
i
>=
0
&&
i
<
sizeof
(
yy_action
)
/
sizeof
(
yy_action
[
0
])
);
return
yy_action
[
i
];
}
}
while
(
1
);
...
...
@@ -1635,8 +1655,8 @@ static unsigned int yy_find_shift_action(
** Find the appropriate action for a parser given the non-terminal
** look-ahead token iLookAhead.
*/
static
int
yy_find_reduce_action
(
int
stateno
,
/* Current state number */
static
YYACTIONTYPE
yy_find_reduce_action
(
YYACTIONTYPE
stateno
,
/* Current state number */
YYCODETYPE
iLookAhead
/* The look-ahead token */
){
int
i
;
...
...
@@ -1665,7 +1685,8 @@ static int yy_find_reduce_action(
** The following routine is called if the stack overflows.
*/
static
void
yyStackOverflow
(
yyParser
*
yypParser
){
ParseARG_FETCH
;
ParseARG_FETCH
ParseCTX_FETCH
#ifndef NDEBUG
if
(
yyTraceFILE
){
fprintf
(
yyTraceFILE
,
"%sStack Overflow!
\n
"
,
yyTracePrompt
);
...
...
@@ -1676,7 +1697,8 @@ static void yyStackOverflow(yyParser *yypParser){
** stack every overflows */
/******** Begin %stack_overflow code ******************************************/
/******** End %stack_overflow code ********************************************/
ParseARG_STORE
;
/* Suppress warning about unused %extra_argument var */
ParseARG_STORE
/* Suppress warning about unused %extra_argument var */
ParseCTX_STORE
}
/*
...
...
@@ -1705,8 +1727,8 @@ static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){
*/
static
void
yy_shift
(
yyParser
*
yypParser
,
/* The parser to be shifted */
int
yyNewState
,
/* The new state to shift in */
int
yyMajor
,
/* The major token to shift in */
YYACTIONTYPE
yyNewState
,
/* The new state to shift in */
YYCODETYPE
yyMajor
,
/* The major token to shift in */
ParseTOKENTYPE
yyMinor
/* The minor token to shift in */
){
yyStackEntry
*
yytos
;
...
...
@@ -1736,269 +1758,526 @@ static void yy_shift(
yyNewState
+=
YY_MIN_REDUCE
-
YY_MIN_SHIFTREDUCE
;
}
yytos
=
yypParser
->
yytos
;
yytos
->
stateno
=
(
YYACTIONTYPE
)
yyNewState
;
yytos
->
major
=
(
YYCODETYPE
)
yyMajor
;
yytos
->
stateno
=
yyNewState
;
yytos
->
major
=
yyMajor
;
yytos
->
minor
.
yy0
=
yyMinor
;
yyTraceShift
(
yypParser
,
yyNewState
,
"Shift"
);
}
/* The following table contains information about every rule that
** is used during the reduce.
*/
static
const
struct
{
YYCODETYPE
lhs
;
/* Symbol on the left-hand side of the rule */
signed
char
nrhs
;
/* Negative of the number of RHS symbols in the rule */
}
yyRuleInfo
[]
=
{
{
211
,
-
1
},
/* (0) program ::= cmd */
{
212
,
-
2
},
/* (1) cmd ::= SHOW DATABASES */
{
212
,
-
2
},
/* (2) cmd ::= SHOW MNODES */
{
212
,
-
2
},
/* (3) cmd ::= SHOW DNODES */
{
212
,
-
2
},
/* (4) cmd ::= SHOW ACCOUNTS */
{
212
,
-
2
},
/* (5) cmd ::= SHOW USERS */
{
212
,
-
2
},
/* (6) cmd ::= SHOW MODULES */
{
212
,
-
2
},
/* (7) cmd ::= SHOW QUERIES */
{
212
,
-
2
},
/* (8) cmd ::= SHOW CONNECTIONS */
{
212
,
-
2
},
/* (9) cmd ::= SHOW STREAMS */
{
212
,
-
2
},
/* (10) cmd ::= SHOW VARIABLES */
{
212
,
-
2
},
/* (11) cmd ::= SHOW SCORES */
{
212
,
-
2
},
/* (12) cmd ::= SHOW GRANTS */
{
212
,
-
2
},
/* (13) cmd ::= SHOW VNODES */
{
212
,
-
3
},
/* (14) cmd ::= SHOW VNODES IPTOKEN */
{
213
,
0
},
/* (15) dbPrefix ::= */
{
213
,
-
2
},
/* (16) dbPrefix ::= ids DOT */
{
215
,
0
},
/* (17) cpxName ::= */
{
215
,
-
2
},
/* (18) cpxName ::= DOT ids */
{
212
,
-
5
},
/* (19) cmd ::= SHOW CREATE TABLE ids cpxName */
{
212
,
-
4
},
/* (20) cmd ::= SHOW CREATE DATABASE ids */
{
212
,
-
3
},
/* (21) cmd ::= SHOW dbPrefix TABLES */
{
212
,
-
5
},
/* (22) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{
212
,
-
3
},
/* (23) cmd ::= SHOW dbPrefix STABLES */
{
212
,
-
5
},
/* (24) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{
212
,
-
3
},
/* (25) cmd ::= SHOW dbPrefix VGROUPS */
{
212
,
-
4
},
/* (26) cmd ::= SHOW dbPrefix VGROUPS ids */
{
212
,
-
5
},
/* (27) cmd ::= DROP TABLE ifexists ids cpxName */
{
212
,
-
5
},
/* (28) cmd ::= DROP STABLE ifexists ids cpxName */
{
212
,
-
4
},
/* (29) cmd ::= DROP DATABASE ifexists ids */
{
212
,
-
3
},
/* (30) cmd ::= DROP DNODE ids */
{
212
,
-
3
},
/* (31) cmd ::= DROP USER ids */
{
212
,
-
3
},
/* (32) cmd ::= DROP ACCOUNT ids */
{
212
,
-
2
},
/* (33) cmd ::= USE ids */
{
212
,
-
3
},
/* (34) cmd ::= DESCRIBE ids cpxName */
{
212
,
-
5
},
/* (35) cmd ::= ALTER USER ids PASS ids */
{
212
,
-
5
},
/* (36) cmd ::= ALTER USER ids PRIVILEGE ids */
{
212
,
-
4
},
/* (37) cmd ::= ALTER DNODE ids ids */
{
212
,
-
5
},
/* (38) cmd ::= ALTER DNODE ids ids ids */
{
212
,
-
3
},
/* (39) cmd ::= ALTER LOCAL ids */
{
212
,
-
4
},
/* (40) cmd ::= ALTER LOCAL ids ids */
{
212
,
-
4
},
/* (41) cmd ::= ALTER DATABASE ids alter_db_optr */
{
212
,
-
4
},
/* (42) cmd ::= ALTER ACCOUNT ids acct_optr */
{
212
,
-
6
},
/* (43) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{
214
,
-
1
},
/* (44) ids ::= ID */
{
214
,
-
1
},
/* (45) ids ::= STRING */
{
216
,
-
2
},
/* (46) ifexists ::= IF EXISTS */
{
216
,
0
},
/* (47) ifexists ::= */
{
219
,
-
3
},
/* (48) ifnotexists ::= IF NOT EXISTS */
{
219
,
0
},
/* (49) ifnotexists ::= */
{
212
,
-
3
},
/* (50) cmd ::= CREATE DNODE ids */
{
212
,
-
6
},
/* (51) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{
212
,
-
5
},
/* (52) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{
212
,
-
5
},
/* (53) cmd ::= CREATE USER ids PASS ids */
{
221
,
0
},
/* (54) pps ::= */
{
221
,
-
2
},
/* (55) pps ::= PPS INTEGER */
{
222
,
0
},
/* (56) tseries ::= */
{
222
,
-
2
},
/* (57) tseries ::= TSERIES INTEGER */
{
223
,
0
},
/* (58) dbs ::= */
{
223
,
-
2
},
/* (59) dbs ::= DBS INTEGER */
{
224
,
0
},
/* (60) streams ::= */
{
224
,
-
2
},
/* (61) streams ::= STREAMS INTEGER */
{
225
,
0
},
/* (62) storage ::= */
{
225
,
-
2
},
/* (63) storage ::= STORAGE INTEGER */
{
226
,
0
},
/* (64) qtime ::= */
{
226
,
-
2
},
/* (65) qtime ::= QTIME INTEGER */
{
227
,
0
},
/* (66) users ::= */
{
227
,
-
2
},
/* (67) users ::= USERS INTEGER */
{
228
,
0
},
/* (68) conns ::= */
{
228
,
-
2
},
/* (69) conns ::= CONNS INTEGER */
{
229
,
0
},
/* (70) state ::= */
{
229
,
-
2
},
/* (71) state ::= STATE ids */
{
218
,
-
9
},
/* (72) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
230
,
-
2
},
/* (73) keep ::= KEEP tagitemlist */
{
232
,
-
2
},
/* (74) cache ::= CACHE INTEGER */
{
233
,
-
2
},
/* (75) replica ::= REPLICA INTEGER */
{
234
,
-
2
},
/* (76) quorum ::= QUORUM INTEGER */
{
235
,
-
2
},
/* (77) days ::= DAYS INTEGER */
{
236
,
-
2
},
/* (78) minrows ::= MINROWS INTEGER */
{
237
,
-
2
},
/* (79) maxrows ::= MAXROWS INTEGER */
{
238
,
-
2
},
/* (80) blocks ::= BLOCKS INTEGER */
{
239
,
-
2
},
/* (81) ctime ::= CTIME INTEGER */
{
240
,
-
2
},
/* (82) wal ::= WAL INTEGER */
{
241
,
-
2
},
/* (83) fsync ::= FSYNC INTEGER */
{
242
,
-
2
},
/* (84) comp ::= COMP INTEGER */
{
243
,
-
2
},
/* (85) prec ::= PRECISION STRING */
{
244
,
-
2
},
/* (86) update ::= UPDATE INTEGER */
{
245
,
-
2
},
/* (87) cachelast ::= CACHELAST INTEGER */
{
220
,
0
},
/* (88) db_optr ::= */
{
220
,
-
2
},
/* (89) db_optr ::= db_optr cache */
{
220
,
-
2
},
/* (90) db_optr ::= db_optr replica */
{
220
,
-
2
},
/* (91) db_optr ::= db_optr quorum */
{
220
,
-
2
},
/* (92) db_optr ::= db_optr days */
{
220
,
-
2
},
/* (93) db_optr ::= db_optr minrows */
{
220
,
-
2
},
/* (94) db_optr ::= db_optr maxrows */
{
220
,
-
2
},
/* (95) db_optr ::= db_optr blocks */
{
220
,
-
2
},
/* (96) db_optr ::= db_optr ctime */
{
220
,
-
2
},
/* (97) db_optr ::= db_optr wal */
{
220
,
-
2
},
/* (98) db_optr ::= db_optr fsync */
{
220
,
-
2
},
/* (99) db_optr ::= db_optr comp */
{
220
,
-
2
},
/* (100) db_optr ::= db_optr prec */
{
220
,
-
2
},
/* (101) db_optr ::= db_optr keep */
{
220
,
-
2
},
/* (102) db_optr ::= db_optr update */
{
220
,
-
2
},
/* (103) db_optr ::= db_optr cachelast */
{
217
,
0
},
/* (104) alter_db_optr ::= */
{
217
,
-
2
},
/* (105) alter_db_optr ::= alter_db_optr replica */
{
217
,
-
2
},
/* (106) alter_db_optr ::= alter_db_optr quorum */
{
217
,
-
2
},
/* (107) alter_db_optr ::= alter_db_optr keep */
{
217
,
-
2
},
/* (108) alter_db_optr ::= alter_db_optr blocks */
{
217
,
-
2
},
/* (109) alter_db_optr ::= alter_db_optr comp */
{
217
,
-
2
},
/* (110) alter_db_optr ::= alter_db_optr wal */
{
217
,
-
2
},
/* (111) alter_db_optr ::= alter_db_optr fsync */
{
217
,
-
2
},
/* (112) alter_db_optr ::= alter_db_optr update */
{
217
,
-
2
},
/* (113) alter_db_optr ::= alter_db_optr cachelast */
{
246
,
-
1
},
/* (114) typename ::= ids */
{
246
,
-
4
},
/* (115) typename ::= ids LP signed RP */
{
246
,
-
2
},
/* (116) typename ::= ids UNSIGNED */
{
247
,
-
1
},
/* (117) signed ::= INTEGER */
{
247
,
-
2
},
/* (118) signed ::= PLUS INTEGER */
{
247
,
-
2
},
/* (119) signed ::= MINUS INTEGER */
{
212
,
-
3
},
/* (120) cmd ::= CREATE TABLE create_table_args */
{
212
,
-
3
},
/* (121) cmd ::= CREATE TABLE create_stable_args */
{
212
,
-
3
},
/* (122) cmd ::= CREATE STABLE create_stable_args */
{
212
,
-
3
},
/* (123) cmd ::= CREATE TABLE create_table_list */
{
250
,
-
1
},
/* (124) create_table_list ::= create_from_stable */
{
250
,
-
2
},
/* (125) create_table_list ::= create_table_list create_from_stable */
{
248
,
-
6
},
/* (126) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
249
,
-
10
},
/* (127) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
251
,
-
10
},
/* (128) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
{
248
,
-
5
},
/* (129) create_table_args ::= ifnotexists ids cpxName AS select */
{
252
,
-
3
},
/* (130) columnlist ::= columnlist COMMA column */
{
252
,
-
1
},
/* (131) columnlist ::= column */
{
254
,
-
2
},
/* (132) column ::= ids typename */
{
231
,
-
3
},
/* (133) tagitemlist ::= tagitemlist COMMA tagitem */
{
231
,
-
1
},
/* (134) tagitemlist ::= tagitem */
{
255
,
-
1
},
/* (135) tagitem ::= INTEGER */
{
255
,
-
1
},
/* (136) tagitem ::= FLOAT */
{
255
,
-
1
},
/* (137) tagitem ::= STRING */
{
255
,
-
1
},
/* (138) tagitem ::= BOOL */
{
255
,
-
1
},
/* (139) tagitem ::= NULL */
{
255
,
-
2
},
/* (140) tagitem ::= MINUS INTEGER */
{
255
,
-
2
},
/* (141) tagitem ::= MINUS FLOAT */
{
255
,
-
2
},
/* (142) tagitem ::= PLUS INTEGER */
{
255
,
-
2
},
/* (143) tagitem ::= PLUS FLOAT */
{
253
,
-
12
},
/* (144) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
267
,
-
1
},
/* (145) union ::= select */
{
267
,
-
3
},
/* (146) union ::= LP union RP */
{
267
,
-
4
},
/* (147) union ::= union UNION ALL select */
{
267
,
-
6
},
/* (148) union ::= union UNION ALL LP select RP */
{
212
,
-
1
},
/* (149) cmd ::= union */
{
253
,
-
2
},
/* (150) select ::= SELECT selcollist */
{
268
,
-
2
},
/* (151) sclp ::= selcollist COMMA */
{
268
,
0
},
/* (152) sclp ::= */
{
256
,
-
4
},
/* (153) selcollist ::= sclp distinct expr as */
{
256
,
-
2
},
/* (154) selcollist ::= sclp STAR */
{
271
,
-
2
},
/* (155) as ::= AS ids */
{
271
,
-
1
},
/* (156) as ::= ids */
{
271
,
0
},
/* (157) as ::= */
{
269
,
-
1
},
/* (158) distinct ::= DISTINCT */
{
269
,
0
},
/* (159) distinct ::= */
{
257
,
-
2
},
/* (160) from ::= FROM tablelist */
{
272
,
-
2
},
/* (161) tablelist ::= ids cpxName */
{
272
,
-
3
},
/* (162) tablelist ::= ids cpxName ids */
{
272
,
-
4
},
/* (163) tablelist ::= tablelist COMMA ids cpxName */
{
272
,
-
5
},
/* (164) tablelist ::= tablelist COMMA ids cpxName ids */
{
273
,
-
1
},
/* (165) tmvar ::= VARIABLE */
{
259
,
-
4
},
/* (166) interval_opt ::= INTERVAL LP tmvar RP */
{
259
,
-
6
},
/* (167) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{
259
,
0
},
/* (168) interval_opt ::= */
{
260
,
0
},
/* (169) fill_opt ::= */
{
260
,
-
6
},
/* (170) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
260
,
-
4
},
/* (171) fill_opt ::= FILL LP ID RP */
{
261
,
-
4
},
/* (172) sliding_opt ::= SLIDING LP tmvar RP */
{
261
,
0
},
/* (173) sliding_opt ::= */
{
263
,
0
},
/* (174) orderby_opt ::= */
{
263
,
-
3
},
/* (175) orderby_opt ::= ORDER BY sortlist */
{
274
,
-
4
},
/* (176) sortlist ::= sortlist COMMA item sortorder */
{
274
,
-
2
},
/* (177) sortlist ::= item sortorder */
{
276
,
-
2
},
/* (178) item ::= ids cpxName */
{
277
,
-
1
},
/* (179) sortorder ::= ASC */
{
277
,
-
1
},
/* (180) sortorder ::= DESC */
{
277
,
0
},
/* (181) sortorder ::= */
{
262
,
0
},
/* (182) groupby_opt ::= */
{
262
,
-
3
},
/* (183) groupby_opt ::= GROUP BY grouplist */
{
278
,
-
3
},
/* (184) grouplist ::= grouplist COMMA item */
{
278
,
-
1
},
/* (185) grouplist ::= item */
{
264
,
0
},
/* (186) having_opt ::= */
{
264
,
-
2
},
/* (187) having_opt ::= HAVING expr */
{
266
,
0
},
/* (188) limit_opt ::= */
{
266
,
-
2
},
/* (189) limit_opt ::= LIMIT signed */
{
266
,
-
4
},
/* (190) limit_opt ::= LIMIT signed OFFSET signed */
{
266
,
-
4
},
/* (191) limit_opt ::= LIMIT signed COMMA signed */
{
265
,
0
},
/* (192) slimit_opt ::= */
{
265
,
-
2
},
/* (193) slimit_opt ::= SLIMIT signed */
{
265
,
-
4
},
/* (194) slimit_opt ::= SLIMIT signed SOFFSET signed */
{
265
,
-
4
},
/* (195) slimit_opt ::= SLIMIT signed COMMA signed */
{
258
,
0
},
/* (196) where_opt ::= */
{
258
,
-
2
},
/* (197) where_opt ::= WHERE expr */
{
270
,
-
3
},
/* (198) expr ::= LP expr RP */
{
270
,
-
1
},
/* (199) expr ::= ID */
{
270
,
-
3
},
/* (200) expr ::= ID DOT ID */
{
270
,
-
3
},
/* (201) expr ::= ID DOT STAR */
{
270
,
-
1
},
/* (202) expr ::= INTEGER */
{
270
,
-
2
},
/* (203) expr ::= MINUS INTEGER */
{
270
,
-
2
},
/* (204) expr ::= PLUS INTEGER */
{
270
,
-
1
},
/* (205) expr ::= FLOAT */
{
270
,
-
2
},
/* (206) expr ::= MINUS FLOAT */
{
270
,
-
2
},
/* (207) expr ::= PLUS FLOAT */
{
270
,
-
1
},
/* (208) expr ::= STRING */
{
270
,
-
1
},
/* (209) expr ::= NOW */
{
270
,
-
1
},
/* (210) expr ::= VARIABLE */
{
270
,
-
1
},
/* (211) expr ::= BOOL */
{
270
,
-
4
},
/* (212) expr ::= ID LP exprlist RP */
{
270
,
-
4
},
/* (213) expr ::= ID LP STAR RP */
{
270
,
-
3
},
/* (214) expr ::= expr IS NULL */
{
270
,
-
4
},
/* (215) expr ::= expr IS NOT NULL */
{
270
,
-
3
},
/* (216) expr ::= expr LT expr */
{
270
,
-
3
},
/* (217) expr ::= expr GT expr */
{
270
,
-
3
},
/* (218) expr ::= expr LE expr */
{
270
,
-
3
},
/* (219) expr ::= expr GE expr */
{
270
,
-
3
},
/* (220) expr ::= expr NE expr */
{
270
,
-
3
},
/* (221) expr ::= expr EQ expr */
{
270
,
-
3
},
/* (222) expr ::= expr AND expr */
{
270
,
-
3
},
/* (223) expr ::= expr OR expr */
{
270
,
-
3
},
/* (224) expr ::= expr PLUS expr */
{
270
,
-
3
},
/* (225) expr ::= expr MINUS expr */
{
270
,
-
3
},
/* (226) expr ::= expr STAR expr */
{
270
,
-
3
},
/* (227) expr ::= expr SLASH expr */
{
270
,
-
3
},
/* (228) expr ::= expr REM expr */
{
270
,
-
3
},
/* (229) expr ::= expr LIKE expr */
{
270
,
-
5
},
/* (230) expr ::= expr IN LP exprlist RP */
{
279
,
-
3
},
/* (231) exprlist ::= exprlist COMMA expritem */
{
279
,
-
1
},
/* (232) exprlist ::= expritem */
{
280
,
-
1
},
/* (233) expritem ::= expr */
{
280
,
0
},
/* (234) expritem ::= */
{
212
,
-
3
},
/* (235) cmd ::= RESET QUERY CACHE */
{
212
,
-
7
},
/* (236) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
212
,
-
7
},
/* (237) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
212
,
-
7
},
/* (238) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
212
,
-
7
},
/* (239) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
212
,
-
8
},
/* (240) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
212
,
-
9
},
/* (241) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
212
,
-
7
},
/* (242) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
212
,
-
7
},
/* (243) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
212
,
-
7
},
/* (244) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
212
,
-
7
},
/* (245) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
212
,
-
8
},
/* (246) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
212
,
-
3
},
/* (247) cmd ::= KILL CONNECTION INTEGER */
{
212
,
-
5
},
/* (248) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{
212
,
-
5
},
/* (249) cmd ::= KILL QUERY INTEGER COLON INTEGER */
/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
** of that rule */
static
const
YYCODETYPE
yyRuleInfoLhs
[]
=
{
210
,
/* (0) program ::= cmd */
211
,
/* (1) cmd ::= SHOW DATABASES */
211
,
/* (2) cmd ::= SHOW MNODES */
211
,
/* (3) cmd ::= SHOW DNODES */
211
,
/* (4) cmd ::= SHOW ACCOUNTS */
211
,
/* (5) cmd ::= SHOW USERS */
211
,
/* (6) cmd ::= SHOW MODULES */
211
,
/* (7) cmd ::= SHOW QUERIES */
211
,
/* (8) cmd ::= SHOW CONNECTIONS */
211
,
/* (9) cmd ::= SHOW STREAMS */
211
,
/* (10) cmd ::= SHOW VARIABLES */
211
,
/* (11) cmd ::= SHOW SCORES */
211
,
/* (12) cmd ::= SHOW GRANTS */
211
,
/* (13) cmd ::= SHOW VNODES */
211
,
/* (14) cmd ::= SHOW VNODES IPTOKEN */
212
,
/* (15) dbPrefix ::= */
212
,
/* (16) dbPrefix ::= ids DOT */
214
,
/* (17) cpxName ::= */
214
,
/* (18) cpxName ::= DOT ids */
211
,
/* (19) cmd ::= SHOW CREATE TABLE ids cpxName */
211
,
/* (20) cmd ::= SHOW CREATE DATABASE ids */
211
,
/* (21) cmd ::= SHOW dbPrefix TABLES */
211
,
/* (22) cmd ::= SHOW dbPrefix TABLES LIKE ids */
211
,
/* (23) cmd ::= SHOW dbPrefix STABLES */
211
,
/* (24) cmd ::= SHOW dbPrefix STABLES LIKE ids */
211
,
/* (25) cmd ::= SHOW dbPrefix VGROUPS */
211
,
/* (26) cmd ::= SHOW dbPrefix VGROUPS ids */
211
,
/* (27) cmd ::= DROP TABLE ifexists ids cpxName */
211
,
/* (28) cmd ::= DROP STABLE ifexists ids cpxName */
211
,
/* (29) cmd ::= DROP DATABASE ifexists ids */
211
,
/* (30) cmd ::= DROP DNODE ids */
211
,
/* (31) cmd ::= DROP USER ids */
211
,
/* (32) cmd ::= DROP ACCOUNT ids */
211
,
/* (33) cmd ::= USE ids */
211
,
/* (34) cmd ::= DESCRIBE ids cpxName */
211
,
/* (35) cmd ::= ALTER USER ids PASS ids */
211
,
/* (36) cmd ::= ALTER USER ids PRIVILEGE ids */
211
,
/* (37) cmd ::= ALTER DNODE ids ids */
211
,
/* (38) cmd ::= ALTER DNODE ids ids ids */
211
,
/* (39) cmd ::= ALTER LOCAL ids */
211
,
/* (40) cmd ::= ALTER LOCAL ids ids */
211
,
/* (41) cmd ::= ALTER DATABASE ids alter_db_optr */
211
,
/* (42) cmd ::= ALTER ACCOUNT ids acct_optr */
211
,
/* (43) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
213
,
/* (44) ids ::= ID */
213
,
/* (45) ids ::= STRING */
215
,
/* (46) ifexists ::= IF EXISTS */
215
,
/* (47) ifexists ::= */
218
,
/* (48) ifnotexists ::= IF NOT EXISTS */
218
,
/* (49) ifnotexists ::= */
211
,
/* (50) cmd ::= CREATE DNODE ids */
211
,
/* (51) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
211
,
/* (52) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
211
,
/* (53) cmd ::= CREATE USER ids PASS ids */
220
,
/* (54) pps ::= */
220
,
/* (55) pps ::= PPS INTEGER */
221
,
/* (56) tseries ::= */
221
,
/* (57) tseries ::= TSERIES INTEGER */
222
,
/* (58) dbs ::= */
222
,
/* (59) dbs ::= DBS INTEGER */
223
,
/* (60) streams ::= */
223
,
/* (61) streams ::= STREAMS INTEGER */
224
,
/* (62) storage ::= */
224
,
/* (63) storage ::= STORAGE INTEGER */
225
,
/* (64) qtime ::= */
225
,
/* (65) qtime ::= QTIME INTEGER */
226
,
/* (66) users ::= */
226
,
/* (67) users ::= USERS INTEGER */
227
,
/* (68) conns ::= */
227
,
/* (69) conns ::= CONNS INTEGER */
228
,
/* (70) state ::= */
228
,
/* (71) state ::= STATE ids */
217
,
/* (72) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
229
,
/* (73) keep ::= KEEP tagitemlist */
231
,
/* (74) cache ::= CACHE INTEGER */
232
,
/* (75) replica ::= REPLICA INTEGER */
233
,
/* (76) quorum ::= QUORUM INTEGER */
234
,
/* (77) days ::= DAYS INTEGER */
235
,
/* (78) minrows ::= MINROWS INTEGER */
236
,
/* (79) maxrows ::= MAXROWS INTEGER */
237
,
/* (80) blocks ::= BLOCKS INTEGER */
238
,
/* (81) ctime ::= CTIME INTEGER */
239
,
/* (82) wal ::= WAL INTEGER */
240
,
/* (83) fsync ::= FSYNC INTEGER */
241
,
/* (84) comp ::= COMP INTEGER */
242
,
/* (85) prec ::= PRECISION STRING */
243
,
/* (86) update ::= UPDATE INTEGER */
244
,
/* (87) cachelast ::= CACHELAST INTEGER */
219
,
/* (88) db_optr ::= */
219
,
/* (89) db_optr ::= db_optr cache */
219
,
/* (90) db_optr ::= db_optr replica */
219
,
/* (91) db_optr ::= db_optr quorum */
219
,
/* (92) db_optr ::= db_optr days */
219
,
/* (93) db_optr ::= db_optr minrows */
219
,
/* (94) db_optr ::= db_optr maxrows */
219
,
/* (95) db_optr ::= db_optr blocks */
219
,
/* (96) db_optr ::= db_optr ctime */
219
,
/* (97) db_optr ::= db_optr wal */
219
,
/* (98) db_optr ::= db_optr fsync */
219
,
/* (99) db_optr ::= db_optr comp */
219
,
/* (100) db_optr ::= db_optr prec */
219
,
/* (101) db_optr ::= db_optr keep */
219
,
/* (102) db_optr ::= db_optr update */
219
,
/* (103) db_optr ::= db_optr cachelast */
216
,
/* (104) alter_db_optr ::= */
216
,
/* (105) alter_db_optr ::= alter_db_optr replica */
216
,
/* (106) alter_db_optr ::= alter_db_optr quorum */
216
,
/* (107) alter_db_optr ::= alter_db_optr keep */
216
,
/* (108) alter_db_optr ::= alter_db_optr blocks */
216
,
/* (109) alter_db_optr ::= alter_db_optr comp */
216
,
/* (110) alter_db_optr ::= alter_db_optr wal */
216
,
/* (111) alter_db_optr ::= alter_db_optr fsync */
216
,
/* (112) alter_db_optr ::= alter_db_optr update */
216
,
/* (113) alter_db_optr ::= alter_db_optr cachelast */
245
,
/* (114) typename ::= ids */
245
,
/* (115) typename ::= ids LP signed RP */
245
,
/* (116) typename ::= ids UNSIGNED */
246
,
/* (117) signed ::= INTEGER */
246
,
/* (118) signed ::= PLUS INTEGER */
246
,
/* (119) signed ::= MINUS INTEGER */
211
,
/* (120) cmd ::= CREATE TABLE create_table_args */
211
,
/* (121) cmd ::= CREATE TABLE create_stable_args */
211
,
/* (122) cmd ::= CREATE STABLE create_stable_args */
211
,
/* (123) cmd ::= CREATE TABLE create_table_list */
249
,
/* (124) create_table_list ::= create_from_stable */
249
,
/* (125) create_table_list ::= create_table_list create_from_stable */
247
,
/* (126) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
248
,
/* (127) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
250
,
/* (128) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
250
,
/* (129) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
252
,
/* (130) tagNamelist ::= tagNamelist COMMA ids */
252
,
/* (131) tagNamelist ::= ids */
247
,
/* (132) create_table_args ::= ifnotexists ids cpxName AS select */
251
,
/* (133) columnlist ::= columnlist COMMA column */
251
,
/* (134) columnlist ::= column */
254
,
/* (135) column ::= ids typename */
230
,
/* (136) tagitemlist ::= tagitemlist COMMA tagitem */
230
,
/* (137) tagitemlist ::= tagitem */
255
,
/* (138) tagitem ::= INTEGER */
255
,
/* (139) tagitem ::= FLOAT */
255
,
/* (140) tagitem ::= STRING */
255
,
/* (141) tagitem ::= BOOL */
255
,
/* (142) tagitem ::= NULL */
255
,
/* (143) tagitem ::= MINUS INTEGER */
255
,
/* (144) tagitem ::= MINUS FLOAT */
255
,
/* (145) tagitem ::= PLUS INTEGER */
255
,
/* (146) tagitem ::= PLUS FLOAT */
253
,
/* (147) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
267
,
/* (148) union ::= select */
267
,
/* (149) union ::= LP union RP */
267
,
/* (150) union ::= union UNION ALL select */
267
,
/* (151) union ::= union UNION ALL LP select RP */
211
,
/* (152) cmd ::= union */
253
,
/* (153) select ::= SELECT selcollist */
268
,
/* (154) sclp ::= selcollist COMMA */
268
,
/* (155) sclp ::= */
256
,
/* (156) selcollist ::= sclp distinct expr as */
256
,
/* (157) selcollist ::= sclp STAR */
271
,
/* (158) as ::= AS ids */
271
,
/* (159) as ::= ids */
271
,
/* (160) as ::= */
269
,
/* (161) distinct ::= DISTINCT */
269
,
/* (162) distinct ::= */
257
,
/* (163) from ::= FROM tablelist */
272
,
/* (164) tablelist ::= ids cpxName */
272
,
/* (165) tablelist ::= ids cpxName ids */
272
,
/* (166) tablelist ::= tablelist COMMA ids cpxName */
272
,
/* (167) tablelist ::= tablelist COMMA ids cpxName ids */
273
,
/* (168) tmvar ::= VARIABLE */
259
,
/* (169) interval_opt ::= INTERVAL LP tmvar RP */
259
,
/* (170) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
259
,
/* (171) interval_opt ::= */
260
,
/* (172) fill_opt ::= */
260
,
/* (173) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
260
,
/* (174) fill_opt ::= FILL LP ID RP */
261
,
/* (175) sliding_opt ::= SLIDING LP tmvar RP */
261
,
/* (176) sliding_opt ::= */
263
,
/* (177) orderby_opt ::= */
263
,
/* (178) orderby_opt ::= ORDER BY sortlist */
274
,
/* (179) sortlist ::= sortlist COMMA item sortorder */
274
,
/* (180) sortlist ::= item sortorder */
276
,
/* (181) item ::= ids cpxName */
277
,
/* (182) sortorder ::= ASC */
277
,
/* (183) sortorder ::= DESC */
277
,
/* (184) sortorder ::= */
262
,
/* (185) groupby_opt ::= */
262
,
/* (186) groupby_opt ::= GROUP BY grouplist */
278
,
/* (187) grouplist ::= grouplist COMMA item */
278
,
/* (188) grouplist ::= item */
264
,
/* (189) having_opt ::= */
264
,
/* (190) having_opt ::= HAVING expr */
266
,
/* (191) limit_opt ::= */
266
,
/* (192) limit_opt ::= LIMIT signed */
266
,
/* (193) limit_opt ::= LIMIT signed OFFSET signed */
266
,
/* (194) limit_opt ::= LIMIT signed COMMA signed */
265
,
/* (195) slimit_opt ::= */
265
,
/* (196) slimit_opt ::= SLIMIT signed */
265
,
/* (197) slimit_opt ::= SLIMIT signed SOFFSET signed */
265
,
/* (198) slimit_opt ::= SLIMIT signed COMMA signed */
258
,
/* (199) where_opt ::= */
258
,
/* (200) where_opt ::= WHERE expr */
270
,
/* (201) expr ::= LP expr RP */
270
,
/* (202) expr ::= ID */
270
,
/* (203) expr ::= ID DOT ID */
270
,
/* (204) expr ::= ID DOT STAR */
270
,
/* (205) expr ::= INTEGER */
270
,
/* (206) expr ::= MINUS INTEGER */
270
,
/* (207) expr ::= PLUS INTEGER */
270
,
/* (208) expr ::= FLOAT */
270
,
/* (209) expr ::= MINUS FLOAT */
270
,
/* (210) expr ::= PLUS FLOAT */
270
,
/* (211) expr ::= STRING */
270
,
/* (212) expr ::= NOW */
270
,
/* (213) expr ::= VARIABLE */
270
,
/* (214) expr ::= BOOL */
270
,
/* (215) expr ::= ID LP exprlist RP */
270
,
/* (216) expr ::= ID LP STAR RP */
270
,
/* (217) expr ::= expr IS NULL */
270
,
/* (218) expr ::= expr IS NOT NULL */
270
,
/* (219) expr ::= expr LT expr */
270
,
/* (220) expr ::= expr GT expr */
270
,
/* (221) expr ::= expr LE expr */
270
,
/* (222) expr ::= expr GE expr */
270
,
/* (223) expr ::= expr NE expr */
270
,
/* (224) expr ::= expr EQ expr */
270
,
/* (225) expr ::= expr AND expr */
270
,
/* (226) expr ::= expr OR expr */
270
,
/* (227) expr ::= expr PLUS expr */
270
,
/* (228) expr ::= expr MINUS expr */
270
,
/* (229) expr ::= expr STAR expr */
270
,
/* (230) expr ::= expr SLASH expr */
270
,
/* (231) expr ::= expr REM expr */
270
,
/* (232) expr ::= expr LIKE expr */
270
,
/* (233) expr ::= expr IN LP exprlist RP */
279
,
/* (234) exprlist ::= exprlist COMMA expritem */
279
,
/* (235) exprlist ::= expritem */
280
,
/* (236) expritem ::= expr */
280
,
/* (237) expritem ::= */
211
,
/* (238) cmd ::= RESET QUERY CACHE */
211
,
/* (239) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
211
,
/* (240) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
211
,
/* (241) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
211
,
/* (242) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
211
,
/* (243) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
211
,
/* (244) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
211
,
/* (245) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
211
,
/* (246) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
211
,
/* (247) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
211
,
/* (248) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
211
,
/* (249) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
211
,
/* (250) cmd ::= KILL CONNECTION INTEGER */
211
,
/* (251) cmd ::= KILL STREAM INTEGER COLON INTEGER */
211
,
/* (252) cmd ::= KILL QUERY INTEGER COLON INTEGER */
};
/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
** of symbols on the right-hand side of that rule. */
static
const
signed
char
yyRuleInfoNRhs
[]
=
{
-
1
,
/* (0) program ::= cmd */
-
2
,
/* (1) cmd ::= SHOW DATABASES */
-
2
,
/* (2) cmd ::= SHOW MNODES */
-
2
,
/* (3) cmd ::= SHOW DNODES */
-
2
,
/* (4) cmd ::= SHOW ACCOUNTS */
-
2
,
/* (5) cmd ::= SHOW USERS */
-
2
,
/* (6) cmd ::= SHOW MODULES */
-
2
,
/* (7) cmd ::= SHOW QUERIES */
-
2
,
/* (8) cmd ::= SHOW CONNECTIONS */
-
2
,
/* (9) cmd ::= SHOW STREAMS */
-
2
,
/* (10) cmd ::= SHOW VARIABLES */
-
2
,
/* (11) cmd ::= SHOW SCORES */
-
2
,
/* (12) cmd ::= SHOW GRANTS */
-
2
,
/* (13) cmd ::= SHOW VNODES */
-
3
,
/* (14) cmd ::= SHOW VNODES IPTOKEN */
0
,
/* (15) dbPrefix ::= */
-
2
,
/* (16) dbPrefix ::= ids DOT */
0
,
/* (17) cpxName ::= */
-
2
,
/* (18) cpxName ::= DOT ids */
-
5
,
/* (19) cmd ::= SHOW CREATE TABLE ids cpxName */
-
4
,
/* (20) cmd ::= SHOW CREATE DATABASE ids */
-
3
,
/* (21) cmd ::= SHOW dbPrefix TABLES */
-
5
,
/* (22) cmd ::= SHOW dbPrefix TABLES LIKE ids */
-
3
,
/* (23) cmd ::= SHOW dbPrefix STABLES */
-
5
,
/* (24) cmd ::= SHOW dbPrefix STABLES LIKE ids */
-
3
,
/* (25) cmd ::= SHOW dbPrefix VGROUPS */
-
4
,
/* (26) cmd ::= SHOW dbPrefix VGROUPS ids */
-
5
,
/* (27) cmd ::= DROP TABLE ifexists ids cpxName */
-
5
,
/* (28) cmd ::= DROP STABLE ifexists ids cpxName */
-
4
,
/* (29) cmd ::= DROP DATABASE ifexists ids */
-
3
,
/* (30) cmd ::= DROP DNODE ids */
-
3
,
/* (31) cmd ::= DROP USER ids */
-
3
,
/* (32) cmd ::= DROP ACCOUNT ids */
-
2
,
/* (33) cmd ::= USE ids */
-
3
,
/* (34) cmd ::= DESCRIBE ids cpxName */
-
5
,
/* (35) cmd ::= ALTER USER ids PASS ids */
-
5
,
/* (36) cmd ::= ALTER USER ids PRIVILEGE ids */
-
4
,
/* (37) cmd ::= ALTER DNODE ids ids */
-
5
,
/* (38) cmd ::= ALTER DNODE ids ids ids */
-
3
,
/* (39) cmd ::= ALTER LOCAL ids */
-
4
,
/* (40) cmd ::= ALTER LOCAL ids ids */
-
4
,
/* (41) cmd ::= ALTER DATABASE ids alter_db_optr */
-
4
,
/* (42) cmd ::= ALTER ACCOUNT ids acct_optr */
-
6
,
/* (43) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
-
1
,
/* (44) ids ::= ID */
-
1
,
/* (45) ids ::= STRING */
-
2
,
/* (46) ifexists ::= IF EXISTS */
0
,
/* (47) ifexists ::= */
-
3
,
/* (48) ifnotexists ::= IF NOT EXISTS */
0
,
/* (49) ifnotexists ::= */
-
3
,
/* (50) cmd ::= CREATE DNODE ids */
-
6
,
/* (51) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
-
5
,
/* (52) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
-
5
,
/* (53) cmd ::= CREATE USER ids PASS ids */
0
,
/* (54) pps ::= */
-
2
,
/* (55) pps ::= PPS INTEGER */
0
,
/* (56) tseries ::= */
-
2
,
/* (57) tseries ::= TSERIES INTEGER */
0
,
/* (58) dbs ::= */
-
2
,
/* (59) dbs ::= DBS INTEGER */
0
,
/* (60) streams ::= */
-
2
,
/* (61) streams ::= STREAMS INTEGER */
0
,
/* (62) storage ::= */
-
2
,
/* (63) storage ::= STORAGE INTEGER */
0
,
/* (64) qtime ::= */
-
2
,
/* (65) qtime ::= QTIME INTEGER */
0
,
/* (66) users ::= */
-
2
,
/* (67) users ::= USERS INTEGER */
0
,
/* (68) conns ::= */
-
2
,
/* (69) conns ::= CONNS INTEGER */
0
,
/* (70) state ::= */
-
2
,
/* (71) state ::= STATE ids */
-
9
,
/* (72) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
-
2
,
/* (73) keep ::= KEEP tagitemlist */
-
2
,
/* (74) cache ::= CACHE INTEGER */
-
2
,
/* (75) replica ::= REPLICA INTEGER */
-
2
,
/* (76) quorum ::= QUORUM INTEGER */
-
2
,
/* (77) days ::= DAYS INTEGER */
-
2
,
/* (78) minrows ::= MINROWS INTEGER */
-
2
,
/* (79) maxrows ::= MAXROWS INTEGER */
-
2
,
/* (80) blocks ::= BLOCKS INTEGER */
-
2
,
/* (81) ctime ::= CTIME INTEGER */
-
2
,
/* (82) wal ::= WAL INTEGER */
-
2
,
/* (83) fsync ::= FSYNC INTEGER */
-
2
,
/* (84) comp ::= COMP INTEGER */
-
2
,
/* (85) prec ::= PRECISION STRING */
-
2
,
/* (86) update ::= UPDATE INTEGER */
-
2
,
/* (87) cachelast ::= CACHELAST INTEGER */
0
,
/* (88) db_optr ::= */
-
2
,
/* (89) db_optr ::= db_optr cache */
-
2
,
/* (90) db_optr ::= db_optr replica */
-
2
,
/* (91) db_optr ::= db_optr quorum */
-
2
,
/* (92) db_optr ::= db_optr days */
-
2
,
/* (93) db_optr ::= db_optr minrows */
-
2
,
/* (94) db_optr ::= db_optr maxrows */
-
2
,
/* (95) db_optr ::= db_optr blocks */
-
2
,
/* (96) db_optr ::= db_optr ctime */
-
2
,
/* (97) db_optr ::= db_optr wal */
-
2
,
/* (98) db_optr ::= db_optr fsync */
-
2
,
/* (99) db_optr ::= db_optr comp */
-
2
,
/* (100) db_optr ::= db_optr prec */
-
2
,
/* (101) db_optr ::= db_optr keep */
-
2
,
/* (102) db_optr ::= db_optr update */
-
2
,
/* (103) db_optr ::= db_optr cachelast */
0
,
/* (104) alter_db_optr ::= */
-
2
,
/* (105) alter_db_optr ::= alter_db_optr replica */
-
2
,
/* (106) alter_db_optr ::= alter_db_optr quorum */
-
2
,
/* (107) alter_db_optr ::= alter_db_optr keep */
-
2
,
/* (108) alter_db_optr ::= alter_db_optr blocks */
-
2
,
/* (109) alter_db_optr ::= alter_db_optr comp */
-
2
,
/* (110) alter_db_optr ::= alter_db_optr wal */
-
2
,
/* (111) alter_db_optr ::= alter_db_optr fsync */
-
2
,
/* (112) alter_db_optr ::= alter_db_optr update */
-
2
,
/* (113) alter_db_optr ::= alter_db_optr cachelast */
-
1
,
/* (114) typename ::= ids */
-
4
,
/* (115) typename ::= ids LP signed RP */
-
2
,
/* (116) typename ::= ids UNSIGNED */
-
1
,
/* (117) signed ::= INTEGER */
-
2
,
/* (118) signed ::= PLUS INTEGER */
-
2
,
/* (119) signed ::= MINUS INTEGER */
-
3
,
/* (120) cmd ::= CREATE TABLE create_table_args */
-
3
,
/* (121) cmd ::= CREATE TABLE create_stable_args */
-
3
,
/* (122) cmd ::= CREATE STABLE create_stable_args */
-
3
,
/* (123) cmd ::= CREATE TABLE create_table_list */
-
1
,
/* (124) create_table_list ::= create_from_stable */
-
2
,
/* (125) create_table_list ::= create_table_list create_from_stable */
-
6
,
/* (126) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
-
10
,
/* (127) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
-
10
,
/* (128) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
-
13
,
/* (129) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
-
3
,
/* (130) tagNamelist ::= tagNamelist COMMA ids */
-
1
,
/* (131) tagNamelist ::= ids */
-
5
,
/* (132) create_table_args ::= ifnotexists ids cpxName AS select */
-
3
,
/* (133) columnlist ::= columnlist COMMA column */
-
1
,
/* (134) columnlist ::= column */
-
2
,
/* (135) column ::= ids typename */
-
3
,
/* (136) tagitemlist ::= tagitemlist COMMA tagitem */
-
1
,
/* (137) tagitemlist ::= tagitem */
-
1
,
/* (138) tagitem ::= INTEGER */
-
1
,
/* (139) tagitem ::= FLOAT */
-
1
,
/* (140) tagitem ::= STRING */
-
1
,
/* (141) tagitem ::= BOOL */
-
1
,
/* (142) tagitem ::= NULL */
-
2
,
/* (143) tagitem ::= MINUS INTEGER */
-
2
,
/* (144) tagitem ::= MINUS FLOAT */
-
2
,
/* (145) tagitem ::= PLUS INTEGER */
-
2
,
/* (146) tagitem ::= PLUS FLOAT */
-
12
,
/* (147) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
-
1
,
/* (148) union ::= select */
-
3
,
/* (149) union ::= LP union RP */
-
4
,
/* (150) union ::= union UNION ALL select */
-
6
,
/* (151) union ::= union UNION ALL LP select RP */
-
1
,
/* (152) cmd ::= union */
-
2
,
/* (153) select ::= SELECT selcollist */
-
2
,
/* (154) sclp ::= selcollist COMMA */
0
,
/* (155) sclp ::= */
-
4
,
/* (156) selcollist ::= sclp distinct expr as */
-
2
,
/* (157) selcollist ::= sclp STAR */
-
2
,
/* (158) as ::= AS ids */
-
1
,
/* (159) as ::= ids */
0
,
/* (160) as ::= */
-
1
,
/* (161) distinct ::= DISTINCT */
0
,
/* (162) distinct ::= */
-
2
,
/* (163) from ::= FROM tablelist */
-
2
,
/* (164) tablelist ::= ids cpxName */
-
3
,
/* (165) tablelist ::= ids cpxName ids */
-
4
,
/* (166) tablelist ::= tablelist COMMA ids cpxName */
-
5
,
/* (167) tablelist ::= tablelist COMMA ids cpxName ids */
-
1
,
/* (168) tmvar ::= VARIABLE */
-
4
,
/* (169) interval_opt ::= INTERVAL LP tmvar RP */
-
6
,
/* (170) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
0
,
/* (171) interval_opt ::= */
0
,
/* (172) fill_opt ::= */
-
6
,
/* (173) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
-
4
,
/* (174) fill_opt ::= FILL LP ID RP */
-
4
,
/* (175) sliding_opt ::= SLIDING LP tmvar RP */
0
,
/* (176) sliding_opt ::= */
0
,
/* (177) orderby_opt ::= */
-
3
,
/* (178) orderby_opt ::= ORDER BY sortlist */
-
4
,
/* (179) sortlist ::= sortlist COMMA item sortorder */
-
2
,
/* (180) sortlist ::= item sortorder */
-
2
,
/* (181) item ::= ids cpxName */
-
1
,
/* (182) sortorder ::= ASC */
-
1
,
/* (183) sortorder ::= DESC */
0
,
/* (184) sortorder ::= */
0
,
/* (185) groupby_opt ::= */
-
3
,
/* (186) groupby_opt ::= GROUP BY grouplist */
-
3
,
/* (187) grouplist ::= grouplist COMMA item */
-
1
,
/* (188) grouplist ::= item */
0
,
/* (189) having_opt ::= */
-
2
,
/* (190) having_opt ::= HAVING expr */
0
,
/* (191) limit_opt ::= */
-
2
,
/* (192) limit_opt ::= LIMIT signed */
-
4
,
/* (193) limit_opt ::= LIMIT signed OFFSET signed */
-
4
,
/* (194) limit_opt ::= LIMIT signed COMMA signed */
0
,
/* (195) slimit_opt ::= */
-
2
,
/* (196) slimit_opt ::= SLIMIT signed */
-
4
,
/* (197) slimit_opt ::= SLIMIT signed SOFFSET signed */
-
4
,
/* (198) slimit_opt ::= SLIMIT signed COMMA signed */
0
,
/* (199) where_opt ::= */
-
2
,
/* (200) where_opt ::= WHERE expr */
-
3
,
/* (201) expr ::= LP expr RP */
-
1
,
/* (202) expr ::= ID */
-
3
,
/* (203) expr ::= ID DOT ID */
-
3
,
/* (204) expr ::= ID DOT STAR */
-
1
,
/* (205) expr ::= INTEGER */
-
2
,
/* (206) expr ::= MINUS INTEGER */
-
2
,
/* (207) expr ::= PLUS INTEGER */
-
1
,
/* (208) expr ::= FLOAT */
-
2
,
/* (209) expr ::= MINUS FLOAT */
-
2
,
/* (210) expr ::= PLUS FLOAT */
-
1
,
/* (211) expr ::= STRING */
-
1
,
/* (212) expr ::= NOW */
-
1
,
/* (213) expr ::= VARIABLE */
-
1
,
/* (214) expr ::= BOOL */
-
4
,
/* (215) expr ::= ID LP exprlist RP */
-
4
,
/* (216) expr ::= ID LP STAR RP */
-
3
,
/* (217) expr ::= expr IS NULL */
-
4
,
/* (218) expr ::= expr IS NOT NULL */
-
3
,
/* (219) expr ::= expr LT expr */
-
3
,
/* (220) expr ::= expr GT expr */
-
3
,
/* (221) expr ::= expr LE expr */
-
3
,
/* (222) expr ::= expr GE expr */
-
3
,
/* (223) expr ::= expr NE expr */
-
3
,
/* (224) expr ::= expr EQ expr */
-
3
,
/* (225) expr ::= expr AND expr */
-
3
,
/* (226) expr ::= expr OR expr */
-
3
,
/* (227) expr ::= expr PLUS expr */
-
3
,
/* (228) expr ::= expr MINUS expr */
-
3
,
/* (229) expr ::= expr STAR expr */
-
3
,
/* (230) expr ::= expr SLASH expr */
-
3
,
/* (231) expr ::= expr REM expr */
-
3
,
/* (232) expr ::= expr LIKE expr */
-
5
,
/* (233) expr ::= expr IN LP exprlist RP */
-
3
,
/* (234) exprlist ::= exprlist COMMA expritem */
-
1
,
/* (235) exprlist ::= expritem */
-
1
,
/* (236) expritem ::= expr */
0
,
/* (237) expritem ::= */
-
3
,
/* (238) cmd ::= RESET QUERY CACHE */
-
7
,
/* (239) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
-
7
,
/* (240) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
-
7
,
/* (241) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
-
7
,
/* (242) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
-
8
,
/* (243) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
-
9
,
/* (244) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
-
7
,
/* (245) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
-
7
,
/* (246) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
-
7
,
/* (247) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
-
7
,
/* (248) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
-
8
,
/* (249) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
-
3
,
/* (250) cmd ::= KILL CONNECTION INTEGER */
-
5
,
/* (251) cmd ::= KILL STREAM INTEGER COLON INTEGER */
-
5
,
/* (252) cmd ::= KILL QUERY INTEGER COLON INTEGER */
};
static
void
yy_accept
(
yyParser
*
);
/* Forward Declaration */
...
...
@@ -2013,30 +2292,34 @@ static void yy_accept(yyParser*); /* Forward Declaration */
** only called from one place, optimizing compilers will in-line it, which
** means that the extra parameters have no performance impact.
*/
static
void
yy_reduce
(
static
YYACTIONTYPE
yy_reduce
(
yyParser
*
yypParser
,
/* The parser */
unsigned
int
yyruleno
,
/* Number of the rule by which to reduce */
int
yyLookahead
,
/* Lookahead token, or YYNOCODE if none */
ParseTOKENTYPE
yyLookaheadToken
/* Value of the lookahead token */
ParseCTX_PDECL
/* %extra_context */
){
int
yygoto
;
/* The next state */
int
yyact
;
/* The next action */
YYACTIONTYPE
yyact
;
/* The next action */
yyStackEntry
*
yymsp
;
/* The top of the parser's stack */
int
yysize
;
/* Amount to pop the stack */
ParseARG_FETCH
;
ParseARG_FETCH
(
void
)
yyLookahead
;
(
void
)
yyLookaheadToken
;
yymsp
=
yypParser
->
yytos
;
#ifndef NDEBUG
if
(
yyTraceFILE
&&
yyruleno
<
(
int
)(
sizeof
(
yyRuleName
)
/
sizeof
(
yyRuleName
[
0
]))
){
yysize
=
yyRuleInfo
[
yyruleno
].
nrhs
;
yysize
=
yyRuleInfo
NRhs
[
yyruleno
]
;
if
(
yysize
){
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s]
, go
to state %d.
\n
"
,
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s]
%s, pop back
to state %d.
\n
"
,
yyTracePrompt
,
yyruleno
,
yyRuleName
[
yyruleno
],
yymsp
[
yysize
].
stateno
);
yyruleno
,
yyRuleName
[
yyruleno
],
yyruleno
<
YYNRULE_WITH_ACTION
?
""
:
" without external action"
,
yymsp
[
yysize
].
stateno
);
}
else
{
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s].
\n
"
,
yyTracePrompt
,
yyruleno
,
yyRuleName
[
yyruleno
]);
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s]%s.
\n
"
,
yyTracePrompt
,
yyruleno
,
yyRuleName
[
yyruleno
],
yyruleno
<
YYNRULE_WITH_ACTION
?
""
:
" without external action"
);
}
}
#endif
/* NDEBUG */
...
...
@@ -2044,7 +2327,7 @@ static void yy_reduce(
/* Check that the stack is large enough to grow by a single entry
** if the RHS of the rule is empty. This ensures that there is room
** enough on the stack to push the LHS value */
if
(
yyRuleInfo
[
yyruleno
].
nrhs
==
0
){
if
(
yyRuleInfo
NRhs
[
yyruleno
]
==
0
){
#ifdef YYTRACKMAXSTACKDEPTH
if
(
(
int
)(
yypParser
->
yytos
-
yypParser
->
yystack
)
>
yypParser
->
yyhwm
){
yypParser
->
yyhwm
++
;
...
...
@@ -2054,13 +2337,19 @@ static void yy_reduce(
#if YYSTACKDEPTH>0
if
(
yypParser
->
yytos
>=
yypParser
->
yystackEnd
){
yyStackOverflow
(
yypParser
);
return
;
/* The call to yyStackOverflow() above pops the stack until it is
** empty, causing the main parser loop to exit. So the return value
** is never used and does not matter. */
return
0
;
}
#else
if
(
yypParser
->
yytos
>=&
yypParser
->
yystack
[
yypParser
->
yystksz
-
1
]
){
if
(
yyGrowStack
(
yypParser
)
){
yyStackOverflow
(
yypParser
);
return
;
/* The call to yyStackOverflow() above pops the stack until it is
** empty, causing the main parser loop to exit. So the return value
** is never used and does not matter. */
return
0
;
}
yymsp
=
yypParser
->
yytos
;
}
...
...
@@ -2256,7 +2545,7 @@ static void yy_reduce(
break
;
case
47
:
/* ifexists ::= */
case
49
:
/* ifnotexists ::= */
yytestcase
(
yyruleno
==
49
);
case
1
59
:
/* distinct ::= */
yytestcase
(
yyruleno
==
159
);
case
1
62
:
/* distinct ::= */
yytestcase
(
yyruleno
==
162
);
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;}
break
;
case
48
:
/* ifnotexists ::= IF NOT EXISTS */
...
...
@@ -2486,11 +2775,27 @@ static void yy_reduce(
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yylhsminor
.
yy42
=
createNewChildTableInfo
(
&
yymsp
[
-
5
].
minor
.
yy0
,
yymsp
[
-
1
].
minor
.
yy247
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
yylhsminor
.
yy42
=
createNewChildTableInfo
(
&
yymsp
[
-
5
].
minor
.
yy0
,
NULL
,
yymsp
[
-
1
].
minor
.
yy247
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
}
yymsp
[
-
9
].
minor
.
yy42
=
yylhsminor
.
yy42
;
break
;
case
129
:
/* create_table_args ::= ifnotexists ids cpxName AS select */
case
129
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
{
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yymsp
[
-
11
].
minor
.
yy0
.
n
+=
yymsp
[
-
10
].
minor
.
yy0
.
n
;
yylhsminor
.
yy42
=
createNewChildTableInfo
(
&
yymsp
[
-
8
].
minor
.
yy0
,
yymsp
[
-
5
].
minor
.
yy247
,
yymsp
[
-
1
].
minor
.
yy247
,
&
yymsp
[
-
11
].
minor
.
yy0
,
&
yymsp
[
-
12
].
minor
.
yy0
);
}
yymsp
[
-
12
].
minor
.
yy42
=
yylhsminor
.
yy42
;
break
;
case
130
:
/* tagNamelist ::= tagNamelist COMMA ids */
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy0
);
yylhsminor
.
yy247
=
yymsp
[
-
2
].
minor
.
yy247
;
}
yymsp
[
-
2
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
131
:
/* tagNamelist ::= ids */
{
yylhsminor
.
yy247
=
taosArrayInit
(
4
,
sizeof
(
SStrToken
));
taosArrayPush
(
yylhsminor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy0
);}
yymsp
[
0
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
132
:
/* create_table_args ::= ifnotexists ids cpxName AS select */
{
yylhsminor
.
yy358
=
tSetCreateSqlElems
(
NULL
,
NULL
,
yymsp
[
0
].
minor
.
yy114
,
TSQL_CREATE_STREAM
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy358
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
...
...
@@ -2500,43 +2805,43 @@ static void yy_reduce(
}
yymsp
[
-
4
].
minor
.
yy358
=
yylhsminor
.
yy358
;
break
;
case
13
0
:
/* columnlist ::= columnlist COMMA column */
case
13
3
:
/* columnlist ::= columnlist COMMA column */
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy179
);
yylhsminor
.
yy247
=
yymsp
[
-
2
].
minor
.
yy247
;
}
yymsp
[
-
2
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
13
1
:
/* columnlist ::= column */
case
13
4
:
/* columnlist ::= column */
{
yylhsminor
.
yy247
=
taosArrayInit
(
4
,
sizeof
(
TAOS_FIELD
));
taosArrayPush
(
yylhsminor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy179
);}
yymsp
[
0
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
13
2
:
/* column ::= ids typename */
case
13
5
:
/* column ::= ids typename */
{
tSqlSetColumnInfo
(
&
yylhsminor
.
yy179
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy179
);
}
yymsp
[
-
1
].
minor
.
yy179
=
yylhsminor
.
yy179
;
break
;
case
13
3
:
/* tagitemlist ::= tagitemlist COMMA tagitem */
case
13
6
:
/* tagitemlist ::= tagitemlist COMMA tagitem */
{
yylhsminor
.
yy247
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy378
,
-
1
);
}
yymsp
[
-
2
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
13
4
:
/* tagitemlist ::= tagitem */
case
13
7
:
/* tagitemlist ::= tagitem */
{
yylhsminor
.
yy247
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy378
,
-
1
);
}
yymsp
[
0
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
13
5
:
/* tagitem ::= INTEGER */
case
13
6
:
/* tagitem ::= FLOAT */
yytestcase
(
yyruleno
==
136
);
case
1
37
:
/* tagitem ::= STRING */
yytestcase
(
yyruleno
==
137
);
case
1
38
:
/* tagitem ::= BOOL */
yytestcase
(
yyruleno
==
138
);
case
13
8
:
/* tagitem ::= INTEGER */
case
13
9
:
/* tagitem ::= FLOAT */
yytestcase
(
yyruleno
==
139
);
case
1
40
:
/* tagitem ::= STRING */
yytestcase
(
yyruleno
==
140
);
case
1
41
:
/* tagitem ::= BOOL */
yytestcase
(
yyruleno
==
141
);
{
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
tVariantCreate
(
&
yylhsminor
.
yy378
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
0
].
minor
.
yy378
=
yylhsminor
.
yy378
;
break
;
case
1
39
:
/* tagitem ::= NULL */
case
1
42
:
/* tagitem ::= NULL */
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
tVariantCreate
(
&
yylhsminor
.
yy378
,
&
yymsp
[
0
].
minor
.
yy0
);
}
yymsp
[
0
].
minor
.
yy378
=
yylhsminor
.
yy378
;
break
;
case
14
0
:
/* tagitem ::= MINUS INTEGER */
case
14
1
:
/* tagitem ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
141
);
case
14
2
:
/* tagitem ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
142
);
case
14
3
:
/* tagitem ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
143
);
case
14
3
:
/* tagitem ::= MINUS INTEGER */
case
14
4
:
/* tagitem ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
144
);
case
14
5
:
/* tagitem ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
145
);
case
14
6
:
/* tagitem ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
146
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
yymsp
[
0
].
minor
.
yy0
.
type
;
...
...
@@ -2545,74 +2850,74 @@ static void yy_reduce(
}
yymsp
[
-
1
].
minor
.
yy378
=
yylhsminor
.
yy378
;
break
;
case
14
4
:
/* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
case
14
7
:
/* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
yylhsminor
.
yy114
=
tSetQuerySqlElems
(
&
yymsp
[
-
11
].
minor
.
yy0
,
yymsp
[
-
10
].
minor
.
yy522
,
yymsp
[
-
9
].
minor
.
yy247
,
yymsp
[
-
8
].
minor
.
yy326
,
yymsp
[
-
4
].
minor
.
yy247
,
yymsp
[
-
3
].
minor
.
yy247
,
&
yymsp
[
-
7
].
minor
.
yy430
,
&
yymsp
[
-
5
].
minor
.
yy0
,
yymsp
[
-
6
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy204
,
&
yymsp
[
-
1
].
minor
.
yy204
);
}
yymsp
[
-
11
].
minor
.
yy114
=
yylhsminor
.
yy114
;
break
;
case
14
5
:
/* union ::= select */
case
14
8
:
/* union ::= select */
{
yylhsminor
.
yy219
=
setSubclause
(
NULL
,
yymsp
[
0
].
minor
.
yy114
);
}
yymsp
[
0
].
minor
.
yy219
=
yylhsminor
.
yy219
;
break
;
case
14
6
:
/* union ::= LP union RP */
case
14
9
:
/* union ::= LP union RP */
{
yymsp
[
-
2
].
minor
.
yy219
=
yymsp
[
-
1
].
minor
.
yy219
;
}
break
;
case
1
47
:
/* union ::= union UNION ALL select */
case
1
50
:
/* union ::= union UNION ALL select */
{
yylhsminor
.
yy219
=
appendSelectClause
(
yymsp
[
-
3
].
minor
.
yy219
,
yymsp
[
0
].
minor
.
yy114
);
}
yymsp
[
-
3
].
minor
.
yy219
=
yylhsminor
.
yy219
;
break
;
case
1
48
:
/* union ::= union UNION ALL LP select RP */
case
1
51
:
/* union ::= union UNION ALL LP select RP */
{
yylhsminor
.
yy219
=
appendSelectClause
(
yymsp
[
-
5
].
minor
.
yy219
,
yymsp
[
-
1
].
minor
.
yy114
);
}
yymsp
[
-
5
].
minor
.
yy219
=
yylhsminor
.
yy219
;
break
;
case
1
49
:
/* cmd ::= union */
case
1
52
:
/* cmd ::= union */
{
setSqlInfo
(
pInfo
,
yymsp
[
0
].
minor
.
yy219
,
NULL
,
TSDB_SQL_SELECT
);
}
break
;
case
15
0
:
/* select ::= SELECT selcollist */
case
15
3
:
/* select ::= SELECT selcollist */
{
yylhsminor
.
yy114
=
tSetQuerySqlElems
(
&
yymsp
[
-
1
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy522
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
yymsp
[
-
1
].
minor
.
yy114
=
yylhsminor
.
yy114
;
break
;
case
15
1
:
/* sclp ::= selcollist COMMA */
case
15
4
:
/* sclp ::= selcollist COMMA */
{
yylhsminor
.
yy522
=
yymsp
[
-
1
].
minor
.
yy522
;}
yymsp
[
-
1
].
minor
.
yy522
=
yylhsminor
.
yy522
;
break
;
case
15
2
:
/* sclp ::= */
case
15
5
:
/* sclp ::= */
{
yymsp
[
1
].
minor
.
yy522
=
0
;}
break
;
case
15
3
:
/* selcollist ::= sclp distinct expr as */
case
15
6
:
/* selcollist ::= sclp distinct expr as */
{
yylhsminor
.
yy522
=
tSqlExprListAppend
(
yymsp
[
-
3
].
minor
.
yy522
,
yymsp
[
-
1
].
minor
.
yy326
,
yymsp
[
-
2
].
minor
.
yy0
.
n
?
&
yymsp
[
-
2
].
minor
.
yy0
:
0
,
yymsp
[
0
].
minor
.
yy0
.
n
?&
yymsp
[
0
].
minor
.
yy0
:
0
);
}
yymsp
[
-
3
].
minor
.
yy522
=
yylhsminor
.
yy522
;
break
;
case
15
4
:
/* selcollist ::= sclp STAR */
case
15
7
:
/* selcollist ::= sclp STAR */
{
tSQLExpr
*
pNode
=
tSqlExprIdValueCreate
(
NULL
,
TK_ALL
);
yylhsminor
.
yy522
=
tSqlExprListAppend
(
yymsp
[
-
1
].
minor
.
yy522
,
pNode
,
0
,
0
);
}
yymsp
[
-
1
].
minor
.
yy522
=
yylhsminor
.
yy522
;
break
;
case
15
5
:
/* as ::= AS ids */
case
15
8
:
/* as ::= AS ids */
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
break
;
case
15
6
:
/* as ::= ids */
case
15
9
:
/* as ::= ids */
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
1
57
:
/* as ::= */
case
1
60
:
/* as ::= */
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
break
;
case
1
58
:
/* distinct ::= DISTINCT */
case
1
61
:
/* distinct ::= DISTINCT */
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
16
0
:
/* from ::= FROM tablelist */
case
16
3
:
/* from ::= FROM tablelist */
{
yymsp
[
-
1
].
minor
.
yy247
=
yymsp
[
0
].
minor
.
yy247
;}
break
;
case
16
1
:
/* tablelist ::= ids cpxName */
case
16
4
:
/* tablelist ::= ids cpxName */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
...
...
@@ -2621,7 +2926,7 @@ static void yy_reduce(
}
yymsp
[
-
1
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
16
2
:
/* tablelist ::= ids cpxName ids */
case
16
5
:
/* tablelist ::= ids cpxName ids */
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
...
...
@@ -2631,7 +2936,7 @@ static void yy_reduce(
}
yymsp
[
-
2
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
16
3
:
/* tablelist ::= tablelist COMMA ids cpxName */
case
16
6
:
/* tablelist ::= tablelist COMMA ids cpxName */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
...
...
@@ -2640,7 +2945,7 @@ static void yy_reduce(
}
yymsp
[
-
3
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
16
4
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
case
16
7
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
{
toTSDBType
(
yymsp
[
-
2
].
minor
.
yy0
.
type
);
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
...
...
@@ -2650,23 +2955,23 @@ static void yy_reduce(
}
yymsp
[
-
4
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
16
5
:
/* tmvar ::= VARIABLE */
case
16
8
:
/* tmvar ::= VARIABLE */
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;}
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
16
6
:
/* interval_opt ::= INTERVAL LP tmvar RP */
case
16
9
:
/* interval_opt ::= INTERVAL LP tmvar RP */
{
yymsp
[
-
3
].
minor
.
yy430
.
interval
=
yymsp
[
-
1
].
minor
.
yy0
;
yymsp
[
-
3
].
minor
.
yy430
.
offset
.
n
=
0
;
yymsp
[
-
3
].
minor
.
yy430
.
offset
.
z
=
NULL
;
yymsp
[
-
3
].
minor
.
yy430
.
offset
.
type
=
0
;}
break
;
case
1
67
:
/* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
case
1
70
:
/* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
{
yymsp
[
-
5
].
minor
.
yy430
.
interval
=
yymsp
[
-
3
].
minor
.
yy0
;
yymsp
[
-
5
].
minor
.
yy430
.
offset
=
yymsp
[
-
1
].
minor
.
yy0
;}
break
;
case
1
68
:
/* interval_opt ::= */
case
1
71
:
/* interval_opt ::= */
{
memset
(
&
yymsp
[
1
].
minor
.
yy430
,
0
,
sizeof
(
yymsp
[
1
].
minor
.
yy430
));}
break
;
case
1
69
:
/* fill_opt ::= */
case
1
72
:
/* fill_opt ::= */
{
yymsp
[
1
].
minor
.
yy247
=
0
;
}
break
;
case
17
0
:
/* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
case
17
3
:
/* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
tVariant
A
=
{
0
};
toTSDBType
(
yymsp
[
-
3
].
minor
.
yy0
.
type
);
...
...
@@ -2676,37 +2981,37 @@ static void yy_reduce(
yymsp
[
-
5
].
minor
.
yy247
=
yymsp
[
-
1
].
minor
.
yy247
;
}
break
;
case
17
1
:
/* fill_opt ::= FILL LP ID RP */
case
17
4
:
/* fill_opt ::= FILL LP ID RP */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
3
].
minor
.
yy247
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
break
;
case
17
2
:
/* sliding_opt ::= SLIDING LP tmvar RP */
case
17
5
:
/* sliding_opt ::= SLIDING LP tmvar RP */
{
yymsp
[
-
3
].
minor
.
yy0
=
yymsp
[
-
1
].
minor
.
yy0
;
}
break
;
case
17
3
:
/* sliding_opt ::= */
case
17
6
:
/* sliding_opt ::= */
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
yymsp
[
1
].
minor
.
yy0
.
z
=
NULL
;
yymsp
[
1
].
minor
.
yy0
.
type
=
0
;
}
break
;
case
17
4
:
/* orderby_opt ::= */
case
17
7
:
/* orderby_opt ::= */
{
yymsp
[
1
].
minor
.
yy247
=
0
;}
break
;
case
17
5
:
/* orderby_opt ::= ORDER BY sortlist */
case
17
8
:
/* orderby_opt ::= ORDER BY sortlist */
{
yymsp
[
-
2
].
minor
.
yy247
=
yymsp
[
0
].
minor
.
yy247
;}
break
;
case
17
6
:
/* sortlist ::= sortlist COMMA item sortorder */
case
17
9
:
/* sortlist ::= sortlist COMMA item sortorder */
{
yylhsminor
.
yy247
=
tVariantListAppend
(
yymsp
[
-
3
].
minor
.
yy247
,
&
yymsp
[
-
1
].
minor
.
yy378
,
yymsp
[
0
].
minor
.
yy222
);
}
yymsp
[
-
3
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
1
77
:
/* sortlist ::= item sortorder */
case
1
80
:
/* sortlist ::= item sortorder */
{
yylhsminor
.
yy247
=
tVariantListAppend
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy378
,
yymsp
[
0
].
minor
.
yy222
);
}
yymsp
[
-
1
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
1
78
:
/* item ::= ids cpxName */
case
1
81
:
/* item ::= ids cpxName */
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
...
...
@@ -2715,211 +3020,211 @@ static void yy_reduce(
}
yymsp
[
-
1
].
minor
.
yy378
=
yylhsminor
.
yy378
;
break
;
case
1
79
:
/* sortorder ::= ASC */
case
1
82
:
/* sortorder ::= ASC */
{
yymsp
[
0
].
minor
.
yy222
=
TSDB_ORDER_ASC
;
}
break
;
case
18
0
:
/* sortorder ::= DESC */
case
18
3
:
/* sortorder ::= DESC */
{
yymsp
[
0
].
minor
.
yy222
=
TSDB_ORDER_DESC
;}
break
;
case
18
1
:
/* sortorder ::= */
case
18
4
:
/* sortorder ::= */
{
yymsp
[
1
].
minor
.
yy222
=
TSDB_ORDER_ASC
;
}
break
;
case
18
2
:
/* groupby_opt ::= */
case
18
5
:
/* groupby_opt ::= */
{
yymsp
[
1
].
minor
.
yy247
=
0
;}
break
;
case
18
3
:
/* groupby_opt ::= GROUP BY grouplist */
case
18
6
:
/* groupby_opt ::= GROUP BY grouplist */
{
yymsp
[
-
2
].
minor
.
yy247
=
yymsp
[
0
].
minor
.
yy247
;}
break
;
case
18
4
:
/* grouplist ::= grouplist COMMA item */
case
18
7
:
/* grouplist ::= grouplist COMMA item */
{
yylhsminor
.
yy247
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy247
,
&
yymsp
[
0
].
minor
.
yy378
,
-
1
);
}
yymsp
[
-
2
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
18
5
:
/* grouplist ::= item */
case
18
8
:
/* grouplist ::= item */
{
yylhsminor
.
yy247
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy378
,
-
1
);
}
yymsp
[
0
].
minor
.
yy247
=
yylhsminor
.
yy247
;
break
;
case
18
6
:
/* having_opt ::= */
case
19
6
:
/* where_opt ::= */
yytestcase
(
yyruleno
==
196
);
case
23
4
:
/* expritem ::= */
yytestcase
(
yyruleno
==
234
);
case
18
9
:
/* having_opt ::= */
case
19
9
:
/* where_opt ::= */
yytestcase
(
yyruleno
==
199
);
case
23
7
:
/* expritem ::= */
yytestcase
(
yyruleno
==
237
);
{
yymsp
[
1
].
minor
.
yy326
=
0
;}
break
;
case
1
87
:
/* having_opt ::= HAVING expr */
case
197
:
/* where_opt ::= WHERE expr */
yytestcase
(
yyruleno
==
197
);
case
1
90
:
/* having_opt ::= HAVING expr */
case
200
:
/* where_opt ::= WHERE expr */
yytestcase
(
yyruleno
==
200
);
{
yymsp
[
-
1
].
minor
.
yy326
=
yymsp
[
0
].
minor
.
yy326
;}
break
;
case
1
88
:
/* limit_opt ::= */
case
19
2
:
/* slimit_opt ::= */
yytestcase
(
yyruleno
==
192
);
case
1
91
:
/* limit_opt ::= */
case
19
5
:
/* slimit_opt ::= */
yytestcase
(
yyruleno
==
195
);
{
yymsp
[
1
].
minor
.
yy204
.
limit
=
-
1
;
yymsp
[
1
].
minor
.
yy204
.
offset
=
0
;}
break
;
case
1
89
:
/* limit_opt ::= LIMIT signed */
case
19
3
:
/* slimit_opt ::= SLIMIT signed */
yytestcase
(
yyruleno
==
193
);
case
1
92
:
/* limit_opt ::= LIMIT signed */
case
19
6
:
/* slimit_opt ::= SLIMIT signed */
yytestcase
(
yyruleno
==
196
);
{
yymsp
[
-
1
].
minor
.
yy204
.
limit
=
yymsp
[
0
].
minor
.
yy403
;
yymsp
[
-
1
].
minor
.
yy204
.
offset
=
0
;}
break
;
case
19
0
:
/* limit_opt ::= LIMIT signed OFFSET signed */
case
19
3
:
/* limit_opt ::= LIMIT signed OFFSET signed */
{
yymsp
[
-
3
].
minor
.
yy204
.
limit
=
yymsp
[
-
2
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
0
].
minor
.
yy403
;}
break
;
case
19
1
:
/* limit_opt ::= LIMIT signed COMMA signed */
case
19
4
:
/* limit_opt ::= LIMIT signed COMMA signed */
{
yymsp
[
-
3
].
minor
.
yy204
.
limit
=
yymsp
[
0
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
-
2
].
minor
.
yy403
;}
break
;
case
19
4
:
/* slimit_opt ::= SLIMIT signed SOFFSET signed */
case
19
7
:
/* slimit_opt ::= SLIMIT signed SOFFSET signed */
{
yymsp
[
-
3
].
minor
.
yy204
.
limit
=
yymsp
[
-
2
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
0
].
minor
.
yy403
;}
break
;
case
19
5
:
/* slimit_opt ::= SLIMIT signed COMMA signed */
case
19
8
:
/* slimit_opt ::= SLIMIT signed COMMA signed */
{
yymsp
[
-
3
].
minor
.
yy204
.
limit
=
yymsp
[
0
].
minor
.
yy403
;
yymsp
[
-
3
].
minor
.
yy204
.
offset
=
yymsp
[
-
2
].
minor
.
yy403
;}
break
;
case
198
:
/* expr ::= LP expr RP */
case
201
:
/* expr ::= LP expr RP */
{
yylhsminor
.
yy326
=
yymsp
[
-
1
].
minor
.
yy326
;
yylhsminor
.
yy326
->
token
.
z
=
yymsp
[
-
2
].
minor
.
yy0
.
z
;
yylhsminor
.
yy326
->
token
.
n
=
(
yymsp
[
0
].
minor
.
yy0
.
z
-
yymsp
[
-
2
].
minor
.
yy0
.
z
+
1
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
199
:
/* expr ::= ID */
case
202
:
/* expr ::= ID */
{
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_ID
);}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
20
0
:
/* expr ::= ID DOT ID */
case
20
3
:
/* expr ::= ID DOT ID */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ID
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
20
1
:
/* expr ::= ID DOT STAR */
case
20
4
:
/* expr ::= ID DOT STAR */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ALL
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
20
2
:
/* expr ::= INTEGER */
case
20
5
:
/* expr ::= INTEGER */
{
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_INTEGER
);}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
20
3
:
/* expr ::= MINUS INTEGER */
case
20
4
:
/* expr ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
204
);
case
20
6
:
/* expr ::= MINUS INTEGER */
case
20
7
:
/* expr ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
207
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_INTEGER
;
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_INTEGER
);}
yymsp
[
-
1
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
20
5
:
/* expr ::= FLOAT */
case
20
8
:
/* expr ::= FLOAT */
{
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_FLOAT
);}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
20
6
:
/* expr ::= MINUS FLOAT */
case
2
07
:
/* expr ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
207
);
case
20
9
:
/* expr ::= MINUS FLOAT */
case
2
10
:
/* expr ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
210
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_FLOAT
;
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_FLOAT
);}
yymsp
[
-
1
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
08
:
/* expr ::= STRING */
case
2
11
:
/* expr ::= STRING */
{
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_STRING
);}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
09
:
/* expr ::= NOW */
case
2
12
:
/* expr ::= NOW */
{
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_NOW
);
}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
21
0
:
/* expr ::= VARIABLE */
case
21
3
:
/* expr ::= VARIABLE */
{
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_VARIABLE
);}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
21
1
:
/* expr ::= BOOL */
case
21
4
:
/* expr ::= BOOL */
{
yylhsminor
.
yy326
=
tSqlExprIdValueCreate
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_BOOL
);}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
21
2
:
/* expr ::= ID LP exprlist RP */
case
21
5
:
/* expr ::= ID LP exprlist RP */
{
yylhsminor
.
yy326
=
tSqlExprCreateFunction
(
yymsp
[
-
1
].
minor
.
yy522
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
yymsp
[
-
3
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
21
3
:
/* expr ::= ID LP STAR RP */
case
21
6
:
/* expr ::= ID LP STAR RP */
{
yylhsminor
.
yy326
=
tSqlExprCreateFunction
(
NULL
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
yymsp
[
-
3
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
21
4
:
/* expr ::= expr IS NULL */
case
21
7
:
/* expr ::= expr IS NULL */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
NULL
,
TK_ISNULL
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
21
5
:
/* expr ::= expr IS NOT NULL */
case
21
8
:
/* expr ::= expr IS NOT NULL */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
3
].
minor
.
yy326
,
NULL
,
TK_NOTNULL
);}
yymsp
[
-
3
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
21
6
:
/* expr ::= expr LT expr */
case
21
9
:
/* expr ::= expr LT expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_LT
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
17
:
/* expr ::= expr GT expr */
case
2
20
:
/* expr ::= expr GT expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_GT
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
18
:
/* expr ::= expr LE expr */
case
2
21
:
/* expr ::= expr LE expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_LE
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
19
:
/* expr ::= expr GE expr */
case
2
22
:
/* expr ::= expr GE expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_GE
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
22
0
:
/* expr ::= expr NE expr */
case
22
3
:
/* expr ::= expr NE expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_NE
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
22
1
:
/* expr ::= expr EQ expr */
case
22
4
:
/* expr ::= expr EQ expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_EQ
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
22
2
:
/* expr ::= expr AND expr */
case
22
5
:
/* expr ::= expr AND expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_AND
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
22
3
:
/* expr ::= expr OR expr */
case
22
6
:
/* expr ::= expr OR expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_OR
);
}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
22
4
:
/* expr ::= expr PLUS expr */
case
22
7
:
/* expr ::= expr PLUS expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_PLUS
);
}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
22
5
:
/* expr ::= expr MINUS expr */
case
22
8
:
/* expr ::= expr MINUS expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_MINUS
);
}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
22
6
:
/* expr ::= expr STAR expr */
case
22
9
:
/* expr ::= expr STAR expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_STAR
);
}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
27
:
/* expr ::= expr SLASH expr */
case
2
30
:
/* expr ::= expr SLASH expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_DIVIDE
);}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
28
:
/* expr ::= expr REM expr */
case
2
31
:
/* expr ::= expr REM expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_REM
);
}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
2
29
:
/* expr ::= expr LIKE expr */
case
2
32
:
/* expr ::= expr LIKE expr */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy326
,
yymsp
[
0
].
minor
.
yy326
,
TK_LIKE
);
}
yymsp
[
-
2
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
23
0
:
/* expr ::= expr IN LP exprlist RP */
case
23
3
:
/* expr ::= expr IN LP exprlist RP */
{
yylhsminor
.
yy326
=
tSqlExprCreate
(
yymsp
[
-
4
].
minor
.
yy326
,
(
tSQLExpr
*
)
yymsp
[
-
1
].
minor
.
yy522
,
TK_IN
);
}
yymsp
[
-
4
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
23
1
:
/* exprlist ::= exprlist COMMA expritem */
case
23
4
:
/* exprlist ::= exprlist COMMA expritem */
{
yylhsminor
.
yy522
=
tSqlExprListAppend
(
yymsp
[
-
2
].
minor
.
yy522
,
yymsp
[
0
].
minor
.
yy326
,
0
,
0
);}
yymsp
[
-
2
].
minor
.
yy522
=
yylhsminor
.
yy522
;
break
;
case
23
2
:
/* exprlist ::= expritem */
case
23
5
:
/* exprlist ::= expritem */
{
yylhsminor
.
yy522
=
tSqlExprListAppend
(
0
,
yymsp
[
0
].
minor
.
yy326
,
0
,
0
);}
yymsp
[
0
].
minor
.
yy522
=
yylhsminor
.
yy522
;
break
;
case
23
3
:
/* expritem ::= expr */
case
23
6
:
/* expritem ::= expr */
{
yylhsminor
.
yy326
=
yymsp
[
0
].
minor
.
yy326
;}
yymsp
[
0
].
minor
.
yy326
=
yylhsminor
.
yy326
;
break
;
case
23
5
:
/* cmd ::= RESET QUERY CACHE */
case
23
8
:
/* cmd ::= RESET QUERY CACHE */
{
setDCLSQLElems
(
pInfo
,
TSDB_SQL_RESET_CACHE
,
0
);}
break
;
case
23
6
:
/* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
case
23
9
:
/* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy247
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
2
37
:
/* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
case
2
40
:
/* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -2930,14 +3235,14 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
2
38
:
/* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
case
2
41
:
/* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy247
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
2
39
:
/* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
case
2
42
:
/* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -2948,7 +3253,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
24
0
:
/* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
case
24
3
:
/* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
...
@@ -2962,7 +3267,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
24
1
:
/* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
case
24
4
:
/* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{
yymsp
[
-
6
].
minor
.
yy0
.
n
+=
yymsp
[
-
5
].
minor
.
yy0
.
n
;
...
...
@@ -2974,14 +3279,14 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
24
2
:
/* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
case
24
5
:
/* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy247
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
24
3
:
/* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
case
24
6
:
/* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -2992,14 +3297,14 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
24
4
:
/* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
case
24
7
:
/* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tAlterTableSqlElems
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy247
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
24
5
:
/* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
case
24
8
:
/* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3010,7 +3315,7 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
24
6
:
/* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
case
24
9
:
/* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
...
@@ -3024,22 +3329,22 @@ static void yy_reduce(
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
break
;
case
2
47
:
/* cmd ::= KILL CONNECTION INTEGER */
case
2
50
:
/* cmd ::= KILL CONNECTION INTEGER */
{
setKillSql
(
pInfo
,
TSDB_SQL_KILL_CONNECTION
,
&
yymsp
[
0
].
minor
.
yy0
);}
break
;
case
2
48
:
/* cmd ::= KILL STREAM INTEGER COLON INTEGER */
case
2
51
:
/* cmd ::= KILL STREAM INTEGER COLON INTEGER */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
yymsp
[
-
1
].
minor
.
yy0
.
n
+
yymsp
[
0
].
minor
.
yy0
.
n
);
setKillSql
(
pInfo
,
TSDB_SQL_KILL_STREAM
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
break
;
case
2
49
:
/* cmd ::= KILL QUERY INTEGER COLON INTEGER */
case
2
52
:
/* cmd ::= KILL QUERY INTEGER COLON INTEGER */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
yymsp
[
-
1
].
minor
.
yy0
.
n
+
yymsp
[
0
].
minor
.
yy0
.
n
);
setKillSql
(
pInfo
,
TSDB_SQL_KILL_QUERY
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
break
;
default:
break
;
/********** End reduce actions ************************************************/
};
assert
(
yyruleno
<
sizeof
(
yyRuleInfo
)
/
sizeof
(
yyRuleInfo
[
0
])
);
yygoto
=
yyRuleInfo
[
yyruleno
].
lhs
;
yysize
=
yyRuleInfo
[
yyruleno
].
nrhs
;
assert
(
yyruleno
<
sizeof
(
yyRuleInfo
Lhs
)
/
sizeof
(
yyRuleInfoLhs
[
0
])
);
yygoto
=
yyRuleInfo
Lhs
[
yyruleno
]
;
yysize
=
yyRuleInfo
NRhs
[
yyruleno
]
;
yyact
=
yy_find_reduce_action
(
yymsp
[
yysize
].
stateno
,(
YYCODETYPE
)
yygoto
);
/* There are no SHIFTREDUCE actions on nonterminals because the table
...
...
@@ -3054,6 +3359,7 @@ static void yy_reduce(
yymsp
->
stateno
=
(
YYACTIONTYPE
)
yyact
;
yymsp
->
major
=
(
YYCODETYPE
)
yygoto
;
yyTraceShift
(
yypParser
,
yyact
,
"... then shift"
);
return
yyact
;
}
/*
...
...
@@ -3063,7 +3369,8 @@ static void yy_reduce(
static
void
yy_parse_failed
(
yyParser
*
yypParser
/* The parser */
){
ParseARG_FETCH
;
ParseARG_FETCH
ParseCTX_FETCH
#ifndef NDEBUG
if
(
yyTraceFILE
){
fprintf
(
yyTraceFILE
,
"%sFail!
\n
"
,
yyTracePrompt
);
...
...
@@ -3074,7 +3381,8 @@ static void yy_parse_failed(
** parser fails */
/************ Begin %parse_failure code ***************************************/
/************ End %parse_failure code *****************************************/
ParseARG_STORE
;
/* Suppress warning about unused %extra_argument variable */
ParseARG_STORE
/* Suppress warning about unused %extra_argument variable */
ParseCTX_STORE
}
#endif
/* YYNOERRORRECOVERY */
...
...
@@ -3086,7 +3394,8 @@ static void yy_syntax_error(
int
yymajor
,
/* The major type of the error token */
ParseTOKENTYPE
yyminor
/* The minor type of the error token */
){
ParseARG_FETCH
;
ParseARG_FETCH
ParseCTX_FETCH
#define TOKEN yyminor
/************ Begin %syntax_error code ****************************************/
...
...
@@ -3112,7 +3421,8 @@ static void yy_syntax_error(
assert
(
len
<=
outputBufLen
);
/************ End %syntax_error code ******************************************/
ParseARG_STORE
;
/* Suppress warning about unused %extra_argument variable */
ParseARG_STORE
/* Suppress warning about unused %extra_argument variable */
ParseCTX_STORE
}
/*
...
...
@@ -3121,7 +3431,8 @@ static void yy_syntax_error(
static
void
yy_accept
(
yyParser
*
yypParser
/* The parser */
){
ParseARG_FETCH
;
ParseARG_FETCH
ParseCTX_FETCH
#ifndef NDEBUG
if
(
yyTraceFILE
){
fprintf
(
yyTraceFILE
,
"%sAccept!
\n
"
,
yyTracePrompt
);
...
...
@@ -3136,7 +3447,8 @@ static void yy_accept(
/*********** Begin %parse_accept code *****************************************/
/*********** End %parse_accept code *******************************************/
ParseARG_STORE
;
/* Suppress warning about unused %extra_argument variable */
ParseARG_STORE
/* Suppress warning about unused %extra_argument variable */
ParseCTX_STORE
}
/* The main parser program.
...
...
@@ -3165,45 +3477,47 @@ void Parse(
ParseARG_PDECL
/* Optional %extra_argument parameter */
){
YYMINORTYPE
yyminorunion
;
unsigned
int
yyact
;
/* The parser action. */
YYACTIONTYPE
yyact
;
/* The parser action. */
#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
int
yyendofinput
;
/* True if we are at the end of input */
#endif
#ifdef YYERRORSYMBOL
int
yyerrorhit
=
0
;
/* True if yymajor has invoked an error */
#endif
yyParser
*
yypParser
;
/* The parser */
yyParser
*
yypParser
=
(
yyParser
*
)
yyp
;
/* The parser */
ParseCTX_FETCH
ParseARG_STORE
yypParser
=
(
yyParser
*
)
yyp
;
assert
(
yypParser
->
yytos
!=
0
);
#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
yyendofinput
=
(
yymajor
==
0
);
#endif
ParseARG_STORE
;
yyact
=
yypParser
->
yytos
->
stateno
;
#ifndef NDEBUG
if
(
yyTraceFILE
){
int
stateno
=
yypParser
->
yytos
->
stateno
;
if
(
stateno
<
YY_MIN_REDUCE
){
if
(
yyact
<
YY_MIN_REDUCE
){
fprintf
(
yyTraceFILE
,
"%sInput '%s' in state %d
\n
"
,
yyTracePrompt
,
yyTokenName
[
yymajor
],
stateno
);
yyTracePrompt
,
yyTokenName
[
yymajor
],
yyact
);
}
else
{
fprintf
(
yyTraceFILE
,
"%sInput '%s' with pending reduce %d
\n
"
,
yyTracePrompt
,
yyTokenName
[
yymajor
],
stateno
-
YY_MIN_REDUCE
);
yyTracePrompt
,
yyTokenName
[
yymajor
],
yyact
-
YY_MIN_REDUCE
);
}
}
#endif
do
{
yyact
=
yy_find_shift_action
(
yypParser
,(
YYCODETYPE
)
yymajor
);
assert
(
yyact
==
yypParser
->
yytos
->
stateno
);
yyact
=
yy_find_shift_action
((
YYCODETYPE
)
yymajor
,
yyact
);
if
(
yyact
>=
YY_MIN_REDUCE
){
yy_reduce
(
yypParser
,
yyact
-
YY_MIN_REDUCE
,
yymajor
,
yyminor
);
yyact
=
yy_reduce
(
yypParser
,
yyact
-
YY_MIN_REDUCE
,
yymajor
,
yyminor
ParseCTX_PARAM
);
}
else
if
(
yyact
<=
YY_MAX_SHIFTREDUCE
){
yy_shift
(
yypParser
,
yyact
,
yymajor
,
yyminor
);
yy_shift
(
yypParser
,
yyact
,
(
YYCODETYPE
)
yymajor
,
yyminor
);
#ifndef YYNOERRORRECOVERY
yypParser
->
yyerrcnt
--
;
#endif
yymajor
=
YYNOCODE
;
break
;
}
else
if
(
yyact
==
YY_ACCEPT_ACTION
){
yypParser
->
yytos
--
;
yy_accept
(
yypParser
);
...
...
@@ -3254,10 +3568,9 @@ void Parse(
yymajor
=
YYNOCODE
;
}
else
{
while
(
yypParser
->
yytos
>=
yypParser
->
yystack
&&
yymx
!=
YYERRORSYMBOL
&&
(
yyact
=
yy_find_reduce_action
(
yypParser
->
yytos
->
stateno
,
YYERRORSYMBOL
))
>
=
YY_MIN_
REDUCE
YYERRORSYMBOL
))
>
YY_MAX_SHIFT
REDUCE
){
yy_pop_parser_stack
(
yypParser
);
}
...
...
@@ -3274,6 +3587,8 @@ void Parse(
}
yypParser
->
yyerrcnt
=
3
;
yyerrorhit
=
1
;
if
(
yymajor
==
YYNOCODE
)
break
;
yyact
=
yypParser
->
yytos
->
stateno
;
#elif defined(YYNOERRORRECOVERY)
/* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
** do any kind of error recovery. Instead, simply invoke the syntax
...
...
@@ -3284,8 +3599,7 @@ void Parse(
*/
yy_syntax_error
(
yypParser
,
yymajor
,
yyminor
);
yy_destructor
(
yypParser
,(
YYCODETYPE
)
yymajor
,
&
yyminorunion
);
yymajor
=
YYNOCODE
;
break
;
#else
/* YYERRORSYMBOL is not defined */
/* This is what we do if the grammar does not define ERROR:
**
...
...
@@ -3307,10 +3621,10 @@ void Parse(
yypParser
->
yyerrcnt
=
-
1
;
#endif
}
yymajor
=
YYNOCODE
;
break
;
#endif
}
}
while
(
yy
major
!=
YYNOCODE
&&
yy
pParser
->
yytos
>
yypParser
->
yystack
);
}
while
(
yypParser
->
yytos
>
yypParser
->
yystack
);
#ifndef NDEBUG
if
(
yyTraceFILE
){
yyStackEntry
*
i
;
...
...
@@ -3325,3 +3639,17 @@ void Parse(
#endif
return
;
}
/*
** Return the fallback token corresponding to canonical token iToken, or
** 0 if iToken has no fallback.
*/
int
ParseFallback
(
int
iToken
){
#ifdef YYFALLBACK
assert
(
iToken
<
(
int
)(
sizeof
(
yyFallback
)
/
sizeof
(
yyFallback
[
0
]))
);
return
yyFallback
[
iToken
];
#else
(
void
)
iToken
;
return
0
;
#endif
}
src/tsdb/src/tsdbMeta.c
浏览文件 @
22ab19df
...
...
@@ -50,7 +50,8 @@ int tsdbCreateTable(STsdbRepo *repo, STableCfg *pCfg) {
STsdbMeta
*
pMeta
=
pRepo
->
tsdbMeta
;
STable
*
super
=
NULL
;
STable
*
table
=
NULL
;
int
newSuper
=
0
;
bool
newSuper
=
false
;
bool
superChanged
=
false
;
int
tid
=
pCfg
->
tableId
.
tid
;
STable
*
pTable
=
NULL
;
...
...
@@ -85,7 +86,7 @@ int tsdbCreateTable(STsdbRepo *repo, STableCfg *pCfg) {
if
(
pCfg
->
type
==
TSDB_CHILD_TABLE
)
{
super
=
tsdbGetTableByUid
(
pMeta
,
pCfg
->
superUid
);
if
(
super
==
NULL
)
{
// super table not exists, try to create it
newSuper
=
1
;
newSuper
=
true
;
super
=
tsdbCreateTableFromCfg
(
pCfg
,
true
);
if
(
super
==
NULL
)
goto
_err
;
}
else
{
...
...
@@ -93,6 +94,17 @@ int tsdbCreateTable(STsdbRepo *repo, STableCfg *pCfg) {
terrno
=
TSDB_CODE_TDB_IVD_CREATE_TABLE_INFO
;
goto
_err
;
}
if
(
schemaVersion
(
pCfg
->
tagSchema
)
>
schemaVersion
(
super
->
tagSchema
))
{
// tag schema out of date, need to update super table tag version
STSchema
*
pOldSchema
=
super
->
tagSchema
;
TSDB_WLOCK_TABLE
(
super
);
super
->
tagSchema
=
tdDupSchema
(
pCfg
->
tagSchema
);
TSDB_WUNLOCK_TABLE
(
super
);
tdFreeSchema
(
pOldSchema
);
superChanged
=
true
;
}
}
}
...
...
@@ -117,7 +129,7 @@ int tsdbCreateTable(STsdbRepo *repo, STableCfg *pCfg) {
// TODO: refactor duplicate codes
int
tlen
=
0
;
void
*
pBuf
=
NULL
;
if
(
newSuper
)
{
if
(
newSuper
||
superChanged
)
{
tlen
=
tsdbGetTableEncodeSize
(
TSDB_UPDATE_META
,
super
);
pBuf
=
tsdbAllocBytes
(
pRepo
,
tlen
);
if
(
pBuf
==
NULL
)
goto
_err
;
...
...
src/wal/CMakeLists.txt
浏览文件 @
22ab19df
CMAKE_MINIMUM_REQUIRED
(
VERSION 2.8
)
PROJECT
(
TDengine
)
ADD_DEFINITIONS
(
-DWAL_CHECKSUM_WHOLE
)
INCLUDE_DIRECTORIES
(
inc
)
AUX_SOURCE_DIRECTORY
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/src SRC
)
...
...
src/wal/src/walWrite.c
浏览文件 @
22ab19df
...
...
@@ -111,6 +111,28 @@ void walRemoveAllOldFiles(void *handle) {
pthread_mutex_unlock
(
&
pWal
->
mutex
);
}
#if defined(WAL_CHECKSUM_WHOLE)
static
void
walUpdateChecksum
(
SWalHead
*
pHead
)
{
pHead
->
sver
=
1
;
pHead
->
cksum
=
0
;
pHead
->
cksum
=
taosCalcChecksum
(
0
,
(
uint8_t
*
)
pHead
,
sizeof
(
*
pHead
)
+
pHead
->
len
);
}
static
int
walValidateChecksum
(
SWalHead
*
pHead
)
{
if
(
pHead
->
sver
==
0
)
{
// for compatible with wal before sver 1
return
taosCheckChecksumWhole
((
uint8_t
*
)
pHead
,
sizeof
(
*
pHead
));
}
else
if
(
pHead
->
sver
==
1
)
{
uint32_t
cksum
=
pHead
->
cksum
;
pHead
->
cksum
=
0
;
return
taosCheckChecksum
((
uint8_t
*
)
pHead
,
sizeof
(
*
pHead
)
+
pHead
->
len
,
cksum
);
}
return
0
;
}
#endif
int32_t
walWrite
(
void
*
handle
,
SWalHead
*
pHead
)
{
if
(
handle
==
NULL
)
return
-
1
;
...
...
@@ -123,7 +145,13 @@ int32_t walWrite(void *handle, SWalHead *pHead) {
if
(
pHead
->
version
<=
pWal
->
version
)
return
0
;
pHead
->
signature
=
WAL_SIGNATURE
;
#if defined(WAL_CHECKSUM_WHOLE)
walUpdateChecksum
(
pHead
);
#else
pHead
->
sver
=
0
;
taosCalcChecksumAppend
(
0
,
(
uint8_t
*
)
pHead
,
sizeof
(
SWalHead
));
#endif
int32_t
contLen
=
pHead
->
len
+
sizeof
(
SWalHead
);
pthread_mutex_lock
(
&
pWal
->
mutex
);
...
...
@@ -246,16 +274,40 @@ static int32_t walSkipCorruptedRecord(SWal *pWal, SWalHead *pHead, int64_t tfd,
continue
;
}
#if defined(WAL_CHECKSUM_WHOLE)
if
(
pHead
->
sver
==
0
&&
walValidateChecksum
(
pHead
))
{
wInfo
(
"vgId:%d, wal head cksum check passed, offset:%"
PRId64
,
pWal
->
vgId
,
pos
);
*
offset
=
pos
;
return
TSDB_CODE_SUCCESS
;
}
if
(
pHead
->
sver
==
1
)
{
if
(
tfRead
(
tfd
,
pHead
->
cont
,
pHead
->
len
)
<
pHead
->
len
)
{
wError
(
"vgId:%d, read to end of corrupted wal file, offset:%"
PRId64
,
pWal
->
vgId
,
pos
);
return
TSDB_CODE_WAL_FILE_CORRUPTED
;
}
if
(
walValidateChecksum
(
pHead
))
{
wInfo
(
"vgId:%d, wal whole cksum check passed, offset:%"
PRId64
,
pWal
->
vgId
,
pos
);
*
offset
=
pos
;
return
TSDB_CODE_SUCCESS
;
}
}
#else
if
(
taosCheckChecksumWhole
((
uint8_t
*
)
pHead
,
sizeof
(
SWalHead
)))
{
wInfo
(
"vgId:%d, wal head cksum check passed, offset:%"
PRId64
,
pWal
->
vgId
,
pos
);
*
offset
=
pos
;
return
TSDB_CODE_SUCCESS
;
}
#endif
}
return
TSDB_CODE_WAL_FILE_CORRUPTED
;
}
static
int32_t
walRestoreWalFile
(
SWal
*
pWal
,
void
*
pVnode
,
FWalWrite
writeFp
,
char
*
name
,
int64_t
fileId
)
{
int32_t
size
=
WAL_MAX_SIZE
;
void
*
buffer
=
tmalloc
(
size
);
...
...
@@ -293,6 +345,51 @@ static int32_t walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp, ch
break
;
}
#if defined(WAL_CHECKSUM_WHOLE)
if
(
pHead
->
sver
==
0
&&
!
walValidateChecksum
(
pHead
))
{
wError
(
"vgId:%d, file:%s, wal head cksum is messed up, hver:%"
PRIu64
" len:%d offset:%"
PRId64
,
pWal
->
vgId
,
name
,
pHead
->
version
,
pHead
->
len
,
offset
);
code
=
walSkipCorruptedRecord
(
pWal
,
pHead
,
tfd
,
&
offset
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
walFtruncate
(
pWal
,
tfd
,
offset
);
break
;
}
}
if
(
pHead
->
len
<
0
||
pHead
->
len
>
size
-
sizeof
(
SWalHead
))
{
wError
(
"vgId:%d, file:%s, wal head len out of range, hver:%"
PRIu64
" len:%d offset:%"
PRId64
,
pWal
->
vgId
,
name
,
pHead
->
version
,
pHead
->
len
,
offset
);
code
=
walSkipCorruptedRecord
(
pWal
,
pHead
,
tfd
,
&
offset
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
walFtruncate
(
pWal
,
tfd
,
offset
);
break
;
}
}
ret
=
(
int32_t
)
tfRead
(
tfd
,
pHead
->
cont
,
pHead
->
len
);
if
(
ret
<
0
)
{
wError
(
"vgId:%d, file:%s, failed to read wal body since %s"
,
pWal
->
vgId
,
name
,
strerror
(
errno
));
code
=
TAOS_SYSTEM_ERROR
(
errno
);
break
;
}
if
(
ret
<
pHead
->
len
)
{
wError
(
"vgId:%d, file:%s, failed to read wal body, ret:%d len:%d"
,
pWal
->
vgId
,
name
,
ret
,
pHead
->
len
);
offset
+=
sizeof
(
SWalHead
);
continue
;
}
if
(
pHead
->
sver
==
1
&&
!
walValidateChecksum
(
pHead
))
{
wError
(
"vgId:%d, file:%s, wal whole cksum is messed up, hver:%"
PRIu64
" len:%d offset:%"
PRId64
,
pWal
->
vgId
,
name
,
pHead
->
version
,
pHead
->
len
,
offset
);
code
=
walSkipCorruptedRecord
(
pWal
,
pHead
,
tfd
,
&
offset
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
walFtruncate
(
pWal
,
tfd
,
offset
);
break
;
}
}
#else
if
(
!
taosCheckChecksumWhole
((
uint8_t
*
)
pHead
,
sizeof
(
SWalHead
)))
{
wError
(
"vgId:%d, file:%s, wal head cksum is messed up, hver:%"
PRIu64
" len:%d offset:%"
PRId64
,
pWal
->
vgId
,
name
,
pHead
->
version
,
pHead
->
len
,
offset
);
...
...
@@ -326,6 +423,7 @@ static int32_t walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp, ch
continue
;
}
#endif
offset
=
offset
+
sizeof
(
SWalHead
)
+
pHead
->
len
;
wTrace
(
"vgId:%d, restore wal, fileId:%"
PRId64
" hver:%"
PRIu64
" wver:%"
PRIu64
" len:%d"
,
pWal
->
vgId
,
...
...
tests/Jenkinsfile
浏览文件 @
22ab19df
...
...
@@ -109,6 +109,13 @@ pipeline {
java --class-path=../../../../src/connector/jdbc/target:$JAVA_HOME/jre/lib/ext -jar target/JDBCDemo-SNAPSHOT-jar-with-dependencies.jar -host 127.0.0.1
'''
}
catchError
(
buildResult:
'SUCCESS'
,
stageResult:
'FAILURE'
)
{
sh
'''
cp -rf ${WKC}/tests/examples/nodejs ${JENKINS_HOME}/workspace/
cd ${JENKINS_HOME}/workspace/nodejs
node nodejsChecker.js host=localhost
'''
}
catchError
(
buildResult:
'SUCCESS'
,
stageResult:
'FAILURE'
)
{
sh
'''
cd ${JENKINS_HOME}/workspace/C#NET/src/CheckC#
...
...
tests/examples/c/demo.c
浏览文件 @
22ab19df
...
...
@@ -62,7 +62,10 @@ int main(int argc, char *argv[]) {
}
// init TAOS
taos_init
();
if
(
taos_init
())
{
exit
(
1
);
}
TAOS
*
taos
=
taos_connect
(
argv
[
1
],
"root"
,
"taosdata"
,
NULL
,
0
);
if
(
taos
==
NULL
)
{
printf
(
"failed to connect to server, reason:%s
\n
"
,
"null taos"
/*taos_errstr(taos)*/
);
...
...
tests/examples/c/prepare.c
浏览文件 @
22ab19df
...
...
@@ -23,7 +23,10 @@ int main(int argc, char *argv[])
}
// init TAOS
taos_init
();
if
(
taos_init
())
{
printf
(
"failed to init taos
\n
"
);
exit
(
1
);
}
taos
=
taos_connect
(
argv
[
1
],
"root"
,
"taosdata"
,
NULL
,
0
);
if
(
taos
==
NULL
)
{
...
...
tests/examples/c/stream.c
浏览文件 @
22ab19df
...
...
@@ -55,7 +55,10 @@ int main(int argc, char *argv[])
}
// init TAOS
taos_init
();
if
(
taos_init
())
{
printf
(
"failed to init taos
\n
"
);
exit
(
1
);
}
strcpy
(
db_name
,
argv
[
2
]);
strcpy
(
tbl_name
,
argv
[
3
]);
...
...
tests/examples/c/subscribe.c
浏览文件 @
22ab19df
...
...
@@ -217,7 +217,10 @@ int main(int argc, char *argv[]) {
}
// init TAOS
taos_init
();
if
(
taos_init
())
{
printf
(
"failed to init taos
\n
"
);
exit
(
1
);
}
TAOS
*
taos
=
taos_connect
(
host
,
user
,
passwd
,
""
,
0
);
if
(
taos
==
NULL
)
{
...
...
tests/perftest-scripts/perftest-query.sh
浏览文件 @
22ab19df
...
...
@@ -39,6 +39,8 @@ function buildTDengine {
cd
$WORK_DIR
/TDengine
git remote update
>
/dev/null
git reset
--hard
HEAD
git checkout develop
REMOTE_COMMIT
=
`
git rev-parse
--short
remotes/origin/develop
`
LOCAL_COMMIT
=
`
git rev-parse
--short
@
`
...
...
@@ -54,15 +56,16 @@ function buildTDengine {
cd
debug
rm
-rf
*
cmake ..
>
/dev/null
make
>
/dev/null
make
install
make
&&
make
install
>
/dev/null
fi
}
function
runQueryPerfTest
{
[
-f
$PERFORMANCE_TEST_REPORT
]
&&
rm
$PERFORMANCE_TEST_REPORT
nohup
$WORK_DIR
/TDengine/debug/build/bin/taosd
-c
/etc/taosperf/
>
/dev/null 2>&1 &
echoInfo
"Run Performance Test"
echoInfo
"Wait TDengine to start"
sleep
60
echoInfo
"Run Performance Test"
cd
$WORK_DIR
/TDengine/tests/pytest
python3 query/queryPerformance.py
-c
$LOCAL_COMMIT
|
tee
-a
$PERFORMANCE_TEST_REPORT
...
...
@@ -104,6 +107,7 @@ function sendReport {
stopTaosd
buildTDengine
runQueryPerfTest
stopTaosd
echoInfo
"Send Report"
sendReport
...
...
tests/pytest/crash_gen/crash_gen_main.py
浏览文件 @
22ab19df
...
...
@@ -354,10 +354,11 @@ class ThreadCoordinator:
# end, and maybe signal them to stop
if
isinstance
(
err
,
CrashGenError
):
# our own transition failure
Logging
.
info
(
"State transition error"
)
# TODO: saw an error here once, let's print out stack info for err?
traceback
.
print_stack
()
transitionFailed
=
True
self
.
_te
=
None
# Not running any more
self
.
_execStats
.
registerFailure
(
"State transition error
"
)
self
.
_execStats
.
registerFailure
(
"State transition error
: {}"
.
format
(
err
)
)
else
:
raise
# return transitionFailed # Why did we have this??!!
...
...
@@ -882,8 +883,12 @@ class StateMechine:
self
.
_stateWeights
=
[
1
,
2
,
10
,
40
]
def
init
(
self
,
dbc
:
DbConn
):
# late initailization, don't save the dbConn
self
.
_curState
=
self
.
_findCurrentState
(
dbc
)
# starting state
Logging
.
debug
(
"Found Starting State: {}"
.
format
(
self
.
_curState
))
try
:
self
.
_curState
=
self
.
_findCurrentState
(
dbc
)
# starting state
except
taos
.
error
.
ProgrammingError
as
err
:
Logging
.
error
(
"Failed to initialized state machine, cannot find current state: {}"
.
format
(
err
))
traceback
.
print_stack
()
raise
# re-throw
# TODO: seems no lnoger used, remove?
def
getCurrentState
(
self
):
...
...
@@ -951,6 +956,8 @@ class StateMechine:
# We transition the system to a new state by examining the current state itself
def
transition
(
self
,
tasks
,
dbc
:
DbConn
):
global
gSvcMgr
if
(
len
(
tasks
)
==
0
):
# before 1st step, or otherwise empty
Logging
.
debug
(
"[STT] Starting State: {}"
.
format
(
self
.
_curState
))
return
# do nothing
...
...
@@ -2370,7 +2377,7 @@ class MainExec:
'-n'
,
'--dynamic-db-table-names'
,
action
=
'store_true'
,
help
=
'Use non-fixed names for dbs/tables, useful for multi-instance executions (default: false)'
)
help
=
'Use non-fixed names for dbs/tables,
for -b,
useful for multi-instance executions (default: false)'
)
parser
.
add_argument
(
'-o'
,
'--num-dnodes'
,
...
...
tests/pytest/crash_gen/db.py
浏览文件 @
22ab19df
...
...
@@ -15,6 +15,7 @@ from util.log import *
from
.misc
import
Logging
,
CrashGenError
,
Helper
,
Dice
import
os
import
datetime
import
traceback
# from .service_manager import TdeInstance
class
DbConn
:
...
...
@@ -349,6 +350,7 @@ class DbConnNative(DbConn):
def
execute
(
self
,
sql
):
if
(
not
self
.
isOpen
):
traceback
.
print_stack
()
raise
CrashGenError
(
"Cannot exec SQL unless db connection is open"
,
CrashGenError
.
DB_CONNECTION_NOT_OPEN
)
Logging
.
debug
(
"[SQL] Executing SQL: {}"
.
format
(
sql
))
...
...
@@ -361,6 +363,7 @@ class DbConnNative(DbConn):
def
query
(
self
,
sql
):
# return rows affected
if
(
not
self
.
isOpen
):
traceback
.
print_stack
()
raise
CrashGenError
(
"Cannot query database until connection is open, restarting?"
,
CrashGenError
.
DB_CONNECTION_NOT_OPEN
)
Logging
.
debug
(
"[SQL] Executing SQL: {}"
.
format
(
sql
))
...
...
tests/pytest/fulltest.sh
浏览文件 @
22ab19df
...
...
@@ -66,7 +66,7 @@ python3 ./test.py -f tag_lite/int.py
python3 ./test.py
-f
tag_lite/set.py
python3 ./test.py
-f
tag_lite/smallint.py
python3 ./test.py
-f
tag_lite/tinyint.py
python3 ./test.py
-f
tag_lite/alter_tag.py
#python3 ./test.py -f dbmgmt/database-name-boundary.py
python3 ./test.py
-f
import_merge/importBlock1HO.py
...
...
tests/pytest/insert/basic_unsigned.py
0 → 100644
浏览文件 @
22ab19df
###################################################################
# 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
.
prepare
()
ret
=
tdSql
.
execute
(
'create table tb (ts timestamp, speed int unsigned)'
)
insertRows
=
10
tdLog
.
info
(
"insert %d rows"
%
(
insertRows
))
for
i
in
range
(
0
,
insertRows
):
ret
=
tdSql
.
execute
(
'insert into tb values (now + %dm, %d)'
%
(
i
,
i
))
tdLog
.
info
(
"insert earlier data"
)
tdSql
.
execute
(
'insert into tb values (now - 5m , 10)'
)
tdSql
.
execute
(
'insert into tb values (now - 6m , 10)'
)
tdSql
.
execute
(
'insert into tb values (now - 7m , 10)'
)
tdSql
.
execute
(
'insert into tb values (now - 8m , 4294967294)'
)
tdSql
.
error
(
'insert into tb values (now - 9m, -1)'
)
tdSql
.
error
(
'insert into tb values (now - 9m, 4294967295)'
)
tdSql
.
query
(
"select * from tb"
)
tdSql
.
checkRows
(
insertRows
+
4
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/pytest/pytest_1.sh
浏览文件 @
22ab19df
...
...
@@ -19,7 +19,7 @@ python3 ./test.py -f insert/randomNullCommit.py
#python3 insert/retentionpolicy.py
python3 ./test.py
-f
insert/alterTableAndInsert.py
python3 ./test.py
-f
insert/insertIntoTwoTables.py
#
python3 ./test.py -f insert/before_1970.py
python3 ./test.py
-f
insert/before_1970.py
python3 bug2265.py
#table
...
...
tests/pytest/tag_lite/alter_tag.py
0 → 100644
浏览文件 @
22ab19df
###################################################################
# 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
import
taos
from
util.log
import
tdLog
from
util.cases
import
tdCases
from
util.sql
import
tdSql
from
util.dnodes
import
tdDnodes
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
self
.
ts
=
1538548685000
def
run
(
self
):
tdSql
.
prepare
()
print
(
"==============step1"
)
tdSql
.
execute
(
"CREATE TABLE IF NOT EXISTS ampere (ts TIMESTAMP(8),ampere DOUBLE(8)) TAGS (device_name BINARY(50),build_id BINARY(50),project_id BINARY(50),alias BINARY(50))"
)
tdSql
.
execute
(
"insert into d1001 using ampere tags('test', '2', '2', '2') VALUES (now, 123)"
)
tdSql
.
execute
(
"ALTER TABLE ampere ADD TAG variable_id BINARY(50)"
)
print
(
"==============step2"
)
tdSql
.
execute
(
"insert into d1002 using ampere tags('test', '2', '2', '2', 'test') VALUES (now, 124)"
)
tdSql
.
query
(
"select * from ampere"
)
tdSql
.
checkRows
(
2
)
tdSql
.
checkData
(
0
,
6
,
None
)
tdSql
.
checkData
(
1
,
6
,
'test'
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/script/general/parser/create_tb_with_tag_name.sim
0 → 100644
浏览文件 @
22ab19df
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 2
system sh/exec.sh -n dnode1 -s start
sleep 100
sql connect
print ======================== dnode1 start
$db = testdb
sql create database $db
sql use $db
sql create stable st2 (ts timestamp, f1 int) tags (id int, t1 int, t2 nchar(4), t3 double)
sql insert into tb1 using st2 (id, t1) tags(1,2) values (now, 1)
sql select id,t1,t2,t3 from tb1
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
if $data01 != 2 then
return -1
endi
if $data02 != NULL then
return -1
endi
if $data03 != NULL then
return -1
endi
sql create table tb2 using st2 (t2,t3) tags ("12",22.0)
sql select id,t1,t2,t3 from tb2;
if $rows != 1 then
return -1
endi
if $data00 != NULL then
return -1
endi
if $data01 != NULL then
return -1
endi
if $data02 != 12 then
return -1
endi
if $data03 != 22.000000000 then
return -1
endi
sql create table tb3 using st2 tags (1,2,"3",33.0);
sql select id,t1,t2,t3 from tb3;
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
if $data01 != 2 then
return -1
endi
if $data02 != 3 then
return -1
endi
if $data03 != 33.000000000 then
return -1
endi
sql insert into tb4 using st2 tags(1,2,"33",44.0) values (now, 1);
sql select id,t1,t2,t3 from tb4;
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
if $data01 != 2 then
return -1
endi
if $data02 != 33 then
return -1
endi
if $data03 != 44.000000000 then
return -1
endi
sql_error create table tb5 using st2() tags (3,3,"3",33.0);
sql_error create table tb6 using st2 (id,t1) tags (3,3,"3",33.0);
sql_error create table tb7 using st2 (id,t1) tags (3);
sql_error create table tb8 using st2 (ide) tags (3);
sql_error create table tb9 using st2 (id);
sql_error create table tb10 using st2 (id t1) tags (1,1);
sql_error create table tb10 using st2 (id,,t1) tags (1,1,1);
sql_error create table tb11 using st2 (id,t1,) tags (1,1,1);
sql create table tb12 using st2 (t1,id) tags (2,1);
sql select id,t1,t2,t3 from tb12;
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
if $data01 != 2 then
return -1
endi
if $data02 != NULL then
return -1
endi
if $data03 != NULL then
return -1
endi
sql create table tb13 using st2 ("t1",'id') tags (2,1);
sql select id,t1,t2,t3 from tb13;
if $rows != 1 then
return -1
endi
if $data00 != 1 then
return -1
endi
if $data01 != 2 then
return -1
endi
if $data02 != NULL then
return -1
endi
if $data03 != NULL then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
tests/script/jenkins/basic_2.txt
浏览文件 @
22ab19df
...
...
@@ -72,4 +72,3 @@ cd ../../../debug; make
./test.sh -f unique/cluster/cache.sim
./test.sh -f unique/cluster/vgroup100.sim
./test.sh -f unique/column/replica3.sim
\ No newline at end of file
tests/script/jenkins/basic_4.txt
浏览文件 @
22ab19df
...
...
@@ -35,4 +35,6 @@
./test.sh -f general/stable/refcount.sim
./test.sh -f general/stable/show.sim
./test.sh -f general/stable/values.sim
./test.sh -f general/stable/vnode3.sim
\ No newline at end of file
./test.sh -f general/stable/vnode3.sim
./test.sh -f unique/column/replica3.sim
\ No newline at end of file
tests/tsim/src/simSystem.c
浏览文件 @
22ab19df
...
...
@@ -81,7 +81,9 @@ char *simParseHostName(char *varName) {
}
bool
simSystemInit
()
{
taos_init
();
if
(
taos_init
())
{
return
false
;
}
taosGetFqdn
(
simHostName
);
simInitsimCmdList
();
memset
(
simScriptList
,
0
,
sizeof
(
SScript
*
)
*
MAX_MAIN_SCRIPT_NUM
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录