未验证 提交 b8e47d30 编写于 作者: S Shengliang Guan 提交者: GitHub

Merge branch 'develop' into mtodevelop

...@@ -13,6 +13,9 @@ ENDIF () ...@@ -13,6 +13,9 @@ ENDIF ()
SET(TD_ACCOUNT FALSE) SET(TD_ACCOUNT FALSE)
SET(TD_ADMIN FALSE) SET(TD_ADMIN FALSE)
SET(TD_GRANT FALSE) SET(TD_GRANT FALSE)
SET(TD_SYNC TRUE)
SET(TD_MQTT TRUE)
SET(TD_TSDB_PLUGINS FALSE)
SET(TD_COVER FALSE) SET(TD_COVER FALSE)
SET(TD_MEM_CHECK FALSE) SET(TD_MEM_CHECK FALSE)
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
[![Coverage Status](https://coveralls.io/repos/github/taosdata/TDengine/badge.svg?branch=develop)](https://coveralls.io/github/taosdata/TDengine?branch=develop) [![Coverage Status](https://coveralls.io/repos/github/taosdata/TDengine/badge.svg?branch=develop)](https://coveralls.io/github/taosdata/TDengine?branch=develop)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4201/badge)](https://bestpractices.coreinfrastructure.org/projects/4201) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4201/badge)](https://bestpractices.coreinfrastructure.org/projects/4201)
[![Docker Pulls](https://img.shields.io/docker/pulls/tdengine/tdengine)](https://hub.docker.com/repository/docker/tdengine/tdengine) [![Docker Pulls](https://img.shields.io/docker/pulls/tdengine/tdengine)](https://hub.docker.com/repository/docker/tdengine/tdengine)
[![tdengine](https://snapcraft.io//tdengine/badge.svg)](https://snapcraft.io/tdengine)
[![TDengine](TDenginelogo.png)](https://www.taosdata.com) [![TDengine](TDenginelogo.png)](https://www.taosdata.com)
......
...@@ -121,7 +121,21 @@ func (alert *Alert) refresh(rule *Rule, values map[string]interface{}) { ...@@ -121,7 +121,21 @@ func (alert *Alert) refresh(rule *Rule, values map[string]interface{}) {
alert.Values = values alert.Values = values
res := rule.Expr.Eval(func(key string) interface{} { res := rule.Expr.Eval(func(key string) interface{} {
// ToLower is required as column name in result is in lower case // ToLower is required as column name in result is in lower case
return alert.Values[strings.ToLower(key)] i := alert.Values[strings.ToLower(key)]
switch v := i.(type) {
case int8:
return int64(v)
case int16:
return int64(v)
case int:
return int64(v)
case int32:
return int64(v)
case float32:
return float64(v)
default:
return v
}
}) })
val, ok := res.(bool) val, ok := res.(bool)
......
...@@ -13,6 +13,18 @@ IF (TD_GRANT) ...@@ -13,6 +13,18 @@ IF (TD_GRANT)
ADD_DEFINITIONS(-D_GRANT) ADD_DEFINITIONS(-D_GRANT)
ENDIF () ENDIF ()
IF (TD_SYNC)
ADD_DEFINITIONS(-D_SYNC)
ENDIF ()
IF (TD_MQTT)
ADD_DEFINITIONS(-D_MQTT)
ENDIF ()
IF (TD_TSDB_PLUGINS)
ADD_DEFINITIONS(-D_TSDB_PLUGINS)
ENDIF ()
IF (TD_GODLL) IF (TD_GODLL)
ADD_DEFINITIONS(-D_TD_GO_DLL_) ADD_DEFINITIONS(-D_TD_GO_DLL_)
ENDIF () ENDIF ()
......
...@@ -42,6 +42,16 @@ IF (${MEM_CHECK} MATCHES "true") ...@@ -42,6 +42,16 @@ IF (${MEM_CHECK} MATCHES "true")
MESSAGE(STATUS "build with memory check") MESSAGE(STATUS "build with memory check")
ENDIF () ENDIF ()
IF (${MQTT} MATCHES "false")
SET(TD_MQTT FALSE)
MESSAGE(STATUS "build without mqtt module")
ENDIF ()
IF (${SYNC} MATCHES "false")
SET(TD_SYNC FALSE)
MESSAGE(STATUS "build without sync module")
ENDIF ()
IF (${RANDOM_FILE_FAIL} MATCHES "true") IF (${RANDOM_FILE_FAIL} MATCHES "true")
SET(TD_RANDOM_FILE_FAIL TRUE) SET(TD_RANDOM_FILE_FAIL TRUE)
MESSAGE(STATUS "build with random-file-fail enabled") MESSAGE(STATUS "build with random-file-fail enabled")
......
...@@ -114,6 +114,9 @@ ELSEIF (${OSTYPE} MATCHES "Ningsi80") ...@@ -114,6 +114,9 @@ ELSEIF (${OSTYPE} MATCHES "Ningsi80")
MESSAGE(STATUS "input osType: Ningsi80") MESSAGE(STATUS "input osType: Ningsi80")
ELSEIF (${OSTYPE} MATCHES "Linux") ELSEIF (${OSTYPE} MATCHES "Linux")
MESSAGE(STATUS "input osType: Linux") MESSAGE(STATUS "input osType: Linux")
ELSEIF (${OSTYPE} MATCHES "Alpine")
MESSAGE(STATUS "input osType: Alpine")
SET(TD_APLHINE TRUE)
ELSE () ELSE ()
MESSAGE(STATUS "input osType unknown: " ${OSTYPE}) MESSAGE(STATUS "input osType unknown: " ${OSTYPE})
ENDIF () ENDIF ()
\ No newline at end of file
...@@ -10,6 +10,6 @@ ADD_SUBDIRECTORY(cJson) ...@@ -10,6 +10,6 @@ ADD_SUBDIRECTORY(cJson)
ADD_SUBDIRECTORY(wepoll) ADD_SUBDIRECTORY(wepoll)
ADD_SUBDIRECTORY(MsvcLibX) ADD_SUBDIRECTORY(MsvcLibX)
IF (TD_LINUX) IF (TD_LINUX AND TD_MQTT)
ADD_SUBDIRECTORY(MQTT-C) ADD_SUBDIRECTORY(MQTT-C)
ENDIF () ENDIF ()
\ No newline at end of file
cmake_minimum_required(VERSION 3.5) CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project(MQTT-C VERSION 1.1.2 LANGUAGES C)
# MQTT-C build options # MQTT-C build options
option(MQTT_C_OpenSSL_SUPPORT "Build MQTT-C with OpenSSL support?" OFF) option(MQTT_C_OpenSSL_SUPPORT "Build MQTT-C with OpenSSL support?" OFF)
......
...@@ -95,6 +95,8 @@ TDengine是一个高效的存储、查询、分析时序大数据的平台,专 ...@@ -95,6 +95,8 @@ TDengine是一个高效的存储、查询、分析时序大数据的平台,专
- [数据查询](https://www.taosdata.com/cn/documentation20/taos-sql/#数据查询):支持时间段、值过滤、排序、查询结果手动分页等 - [数据查询](https://www.taosdata.com/cn/documentation20/taos-sql/#数据查询):支持时间段、值过滤、排序、查询结果手动分页等
- [SQL函数](https://www.taosdata.com/cn/documentation20/taos-sql/#SQL函数):支持各种聚合函数、选择函数、计算函数,如avg, min, diff等 - [SQL函数](https://www.taosdata.com/cn/documentation20/taos-sql/#SQL函数):支持各种聚合函数、选择函数、计算函数,如avg, min, diff等
- [时间维度聚合](https://www.taosdata.com/cn/documentation20/taos-sql/#时间维度聚合):将表中数据按照时间段进行切割后聚合,降维处理 - [时间维度聚合](https://www.taosdata.com/cn/documentation20/taos-sql/#时间维度聚合):将表中数据按照时间段进行切割后聚合,降维处理
- [边界线制](https://www.taosdata.com/cn/documentation20/taos-sql/#TAOS-SQL-边界限制):TAOS SQL的边界限制
- [错误码](https://www.taosdata.com/cn/documentation20/Taos-Error-Code):TDengine 2.0 错误码以及对应的十进制码
## TDengine的技术设计 ## TDengine的技术设计
......
...@@ -82,13 +82,39 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic ...@@ -82,13 +82,39 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
``` ```
删除数据库。所包含的全部数据表将被删除,谨慎使用 删除数据库。所包含的全部数据表将被删除,谨慎使用
- **修改数据库参数**
```mysql
ALTER DATABASE db_name COMP 2;
```
COMP参数是指修改数据库文件压缩标志位,取值范围为[0, 2]. 0表示不压缩,1表示一阶段压缩,2表示两阶段压缩。
```mysql
ALTER DATABASE db_name REPLICA 2;
```
REPLICA参数是指修改数据库副本数,取值范围[1, 3]。在集群中使用,副本数必须小于dnode的数目。
```mysql
ALTER DATABASE db_name KEEP 365;
```
KEEP参数是指修改数据文件保存的天数,缺省值为3650,取值范围[days, 365000],必须大于或等于days参数值。
```mysql
ALTER DATABASE db_name QUORUM 365;
```
QUORUM参数是指数据写入成功所需要的确认数。取值范围[1, 3]。对于异步复制,quorum设为1,具有master角色的虚拟节点自己确认即可。对于同步复制,需要至少大于等于2。原则上,Quorum >=1 并且 Quorum <= replica(副本数),这个参数在启动一个同步模块实例时需要提供。
```mysql
ALTER DATABASE db_name BLOCKS 365;
```
BLOCKS参数是每个VNODE (TSDB) 中有多少cache大小的内存块,因此一个VNODE的用的内存大小粗略为(cache * blocks)。取值范围[3, 1000]。
**Tips**: 以上所有参数修改后都可以用show databases来确认是否修改成功。
- **显示系统所有数据库** - **显示系统所有数据库**
```mysql ```mysql
SHOW DATABASES; SHOW DATABASES;
``` ```
## 表管理 ## 表管理
- **创建数据表** - **创建数据表**
......
# TDengine 2.0 错误码以及对应的十进制码
| Code | bit | error code | 错误描述 | 十进制错误码 |
|-----------------------| :---: | :---------: | :------------------------ | ---------------- |
|TSDB_CODE_RPC_ACTION_IN_PROGRESS| 0 | 0x0001| "Action in progress"| -2147483647|
|TSDB_CODE_RPC_AUTH_REQUIRED| 0 | 0x0002 | "Authentication required"| -2147483646|
|TSDB_CODE_RPC_AUTH_FAILURE| 0| 0x0003 | "Authentication failure"| -2147483645|
|TSDB_CODE_RPC_REDIRECT |0 | 0x0004| "Redirect"| -2147483644|
|TSDB_CODE_RPC_NOT_READY| 0 | 0x0005 | "System not ready"| -2147483643|
|TSDB_CODE_RPC_ALREADY_PROCESSED| 0 | 0x0006 |"Message already processed"| -2147483642|
|TSDB_CODE_RPC_LAST_SESSION_NOT_FINISHED| 0 |0x0007| "Last session not finished"| -2147483641|
|TSDB_CODE_RPC_MISMATCHED_LINK_ID| 0| 0x0008 | "Mismatched meter id"| -2147483640|
|TSDB_CODE_RPC_TOO_SLOW| 0 | 0x0009 | "Processing of request timed out"| -2147483639|
|TSDB_CODE_RPC_MAX_SESSIONS| 0 | 0x000A | "Number of sessions reached limit"| -2147483638|
|TSDB_CODE_RPC_NETWORK_UNAVAIL| 0 |0x000B | "Unable to establish connection" |-2147483637|
|TSDB_CODE_RPC_APP_ERROR| 0| 0x000C | "Unexpected generic error in RPC"| -2147483636|
|TSDB_CODE_RPC_UNEXPECTED_RESPONSE| 0 |0x000D | "Unexpected response"| -2147483635|
|TSDB_CODE_RPC_INVALID_VALUE| 0 | 0x000E | "Invalid value"| -2147483634|
|TSDB_CODE_RPC_INVALID_TRAN_ID| 0 | 0x000F | "Invalid transaction id"| -2147483633|
|TSDB_CODE_RPC_INVALID_SESSION_ID| 0| 0x0010 | "Invalid session id"| -2147483632|
|TSDB_CODE_RPC_INVALID_MSG_TYPE| 0| 0x0011| "Invalid message type"| -2147483631|
|TSDB_CODE_RPC_INVALID_RESPONSE_TYPE| 0 | 0x0012| "Invalid response type"| -2147483630|
|TSDB_CODE_RPC_INVALID_TIME_STAMP| 0| 0x0013| "Invalid timestamp"| -2147483629|
|TSDB_CODE_COM_OPS_NOT_SUPPORT| 0 | 0x0100| "Operation not supported"| -2147483392|
|TSDB_CODE_COM_MEMORY_CORRUPTED |0| 0x0101 | "Memory corrupted"| -2147483391|
|TSDB_CODE_COM_OUT_OF_MEMORY| 0| 0x0102| "Out of memory"| -2147483390|
|TSDB_CODE_COM_INVALID_CFG_MSG| 0 | 0x0103| "Invalid config message"| -2147483389|
|TSDB_CODE_COM_FILE_CORRUPTED| 0| 0x0104| "Data file corrupted" |-2147483388|
|TSDB_CODE_TSC_INVALID_SQL| 0| 0x0200 | "Invalid SQL statement"| -2147483136|
|TSDB_CODE_TSC_INVALID_QHANDLE| 0 | 0x0201 | "Invalid qhandle"| -2147483135|
|TSDB_CODE_TSC_INVALID_TIME_STAMP| 0 | 0x0202 | "Invalid combination of client/service time"| -2147483134|
|TSDB_CODE_TSC_INVALID_VALUE| 0 | 0x0203| "Invalid value in client"| -2147483133|
|TSDB_CODE_TSC_INVALID_VERSION| 0 | 0x0204 | "Invalid client version" |-2147483132|
|TSDB_CODE_TSC_INVALID_IE| 0 | 0x0205 | "Invalid client ie" |-2147483131|
|TSDB_CODE_TSC_INVALID_FQDN| 0 | 0x0206| "Invalid host name"| -2147483130|
|TSDB_CODE_TSC_INVALID_USER_LENGTH| 0 | 0x0207| "Invalid user name"| -2147483129|
|TSDB_CODE_TSC_INVALID_PASS_LENGTH| 0 | 0x0208 | "Invalid password"| -2147483128|
|TSDB_CODE_TSC_INVALID_DB_LENGTH| 0 | 0x0209| "Database name too long"| -2147483127|
|TSDB_CODE_TSC_INVALID_TABLE_ID_LENGTH| 0 | 0x020A | "Table name too long"| -2147483126|
|TSDB_CODE_TSC_INVALID_CONNECTION| 0 | 0x020B| "Invalid connection"| -2147483125|
|TSDB_CODE_TSC_OUT_OF_MEMORY| 0 | 0x020C | "System out of memory" |-2147483124|
|TSDB_CODE_TSC_NO_DISKSPACE| 0 | 0x020D | "System out of disk space"| -2147483123|
|TSDB_CODE_TSC_QUERY_CACHE_ERASED| 0 | 0x020E| "Query cache erased"| -2147483122|
|TSDB_CODE_TSC_QUERY_CANCELLED| 0 | 0x020F |"Query terminated"| -2147483121|
|TSDB_CODE_TSC_SORTED_RES_TOO_MANY| 0 |0x0210 | "Result set too large to be sorted"| -2147483120|
|TSDB_CODE_TSC_APP_ERROR| 0 | 0x0211 | "Application error"| -2147483119|
|TSDB_CODE_TSC_ACTION_IN_PROGRESS| 0 |0x0212 | "Action in progress"| -2147483118|
|TSDB_CODE_TSC_DISCONNECTED| 0 | 0x0213 |"Disconnected from service" |-2147483117|
|TSDB_CODE_TSC_NO_WRITE_AUTH| 0 | 0x0214 | "No write permission" |-2147483116|
|TSDB_CODE_MND_MSG_NOT_PROCESSED| 0| 0x0300| "Message not processed"| -2147482880|
|TSDB_CODE_MND_ACTION_IN_PROGRESS| 0 | 0x0301 |"Message is progressing"| -2147482879|
|TSDB_CODE_MND_ACTION_NEED_REPROCESSED| 0 | 0x0302 |"Messag need to be reprocessed"| -2147482878|
|TSDB_CODE_MND_NO_RIGHTS| 0 | 0x0303| "Insufficient privilege for operation"| -2147482877|
|TSDB_CODE_MND_APP_ERROR| 0 | 0x0304 | "Unexpected generic error in mnode"| -2147482876|
|TSDB_CODE_MND_INVALID_CONNECTION| 0 | 0x0305 | "Invalid message connection"| -2147482875|
|TSDB_CODE_MND_INVALID_MSG_VERSION| 0 | 0x0306 | "Incompatible protocol version"| -2147482874|
|TSDB_CODE_MND_INVALID_MSG_LEN| 0| 0x0307 | "Invalid message length"| -2147482873|
|TSDB_CODE_MND_INVALID_MSG_TYPE| 0 | 0x0308 | "Invalid message type" |-2147482872|
|TSDB_CODE_MND_TOO_MANY_SHELL_CONNS| 0 |0x0309 | "Too many connections"| -2147482871|
|TSDB_CODE_MND_OUT_OF_MEMORY| 0 |0x030A | "Out of memory in mnode"| -2147482870|
|TSDB_CODE_MND_INVALID_SHOWOBJ| 0 | 0x030B |"Data expired"| -2147482869|
|TSDB_CODE_MND_INVALID_QUERY_ID |0 | 0x030C |"Invalid query id" |-2147482868|
|TSDB_CODE_MND_INVALID_STREAM_ID| 0 |0x030D | "Invalid stream id"| -2147482867|
|TSDB_CODE_MND_INVALID_CONN_ID| 0| 0x030E | "Invalid connection id" |-2147482866|
|TSDB_CODE_MND_SDB_OBJ_ALREADY_THERE| 0 | 0x0320| "Object already there"| -2147482848|
|TSDB_CODE_MND_SDB_ERROR| 0 |0x0321 | "Unexpected generic error in sdb" |-2147482847|
|TSDB_CODE_MND_SDB_INVALID_TABLE_TYPE| 0 | 0x0322| "Invalid table type" |-2147482846|
|TSDB_CODE_MND_SDB_OBJ_NOT_THERE| 0 | 0x0323 |"Object not there" |-2147482845|
|TSDB_CODE_MND_SDB_INVAID_META_ROW| 0 | 0x0324| "Invalid meta row" |-2147482844|
|TSDB_CODE_MND_SDB_INVAID_KEY_TYPE| 0 | 0x0325 |"Invalid key type" |-2147482843|
|TSDB_CODE_MND_DNODE_ALREADY_EXIST| 0 | 0x0330 | "DNode already exists"| -2147482832|
|TSDB_CODE_MND_DNODE_NOT_EXIST| 0 | 0x0331| "DNode does not exist" |-2147482831|
|TSDB_CODE_MND_VGROUP_NOT_EXIST| 0 | 0x0332 |"VGroup does not exist"| -2147482830|
|TSDB_CODE_MND_NO_REMOVE_MASTER |0 | 0x0333 | "Master DNode cannot be removed"| -2147482829|
|TSDB_CODE_MND_NO_ENOUGH_DNODES |0 | 0x0334| "Out of DNodes"| -2147482828|
|TSDB_CODE_MND_CLUSTER_CFG_INCONSISTENT |0 | 0x0335 | "Cluster cfg inconsistent"| -2147482827|
|TSDB_CODE_MND_INVALID_DNODE_CFG_OPTION| 0 | 0x0336 | "Invalid dnode cfg option"| -2147482826|
|TSDB_CODE_MND_BALANCE_ENABLED| 0 | 0x0337 | "Balance already enabled" |-2147482825|
|TSDB_CODE_MND_VGROUP_NOT_IN_DNODE| 0 |0x0338 | "Vgroup not in dnode"| -2147482824|
|TSDB_CODE_MND_VGROUP_ALREADY_IN_DNODE| 0 | 0x0339 | "Vgroup already in dnode"| -2147482823|
|TSDB_CODE_MND_DNODE_NOT_FREE |0 | 0x033A |"Dnode not avaliable"| -2147482822|
|TSDB_CODE_MND_INVALID_CLUSTER_ID |0 |0x033B | "Cluster id not match"| -2147482821|
|TSDB_CODE_MND_NOT_READY| 0 | 0x033C |"Cluster not ready"| -2147482820|
|TSDB_CODE_MND_ACCT_ALREADY_EXIST| 0 | 0x0340 | "Account already exists" |-2147482816|
|TSDB_CODE_MND_INVALID_ACCT| 0 | 0x0341| "Invalid account"| -2147482815|
|TSDB_CODE_MND_INVALID_ACCT_OPTION| 0 | 0x0342 | "Invalid account options"| -2147482814|
|TSDB_CODE_MND_USER_ALREADY_EXIST| 0 | 0x0350 | "User already exists"| -2147482800|
|TSDB_CODE_MND_INVALID_USER |0 | 0x0351 | "Invalid user" |-2147482799|
|TSDB_CODE_MND_INVALID_USER_FORMAT| |0 |0x0352 |"Invalid user format" |-2147482798|
|TSDB_CODE_MND_INVALID_PASS_FORMAT| 0| 0x0353 | "Invalid password format"| -2147482797|
|TSDB_CODE_MND_NO_USER_FROM_CONN| 0 | 0x0354 | "Can not get user from conn"| -2147482796|
|TSDB_CODE_MND_TOO_MANY_USERS| 0 | 0x0355| "Too many users"| -2147482795|
|TSDB_CODE_MND_TABLE_ALREADY_EXIST| 0| 0x0360| "Table already exists"| -2147482784|
|TSDB_CODE_MND_INVALID_TABLE_ID| 0| 0x0361| "Table name too long"| -2147482783|
|TSDB_CODE_MND_INVALID_TABLE_NAME| 0| 0x0362 | "Table does not exist"| -2147482782|
|TSDB_CODE_MND_INVALID_TABLE_TYPE| 0| 0x0363 | "Invalid table type in tsdb"| -2147482781|
|TSDB_CODE_MND_TOO_MANY_TAGS| 0 | 0x0364| "Too many tags"| -2147482780|
|TSDB_CODE_MND_TOO_MANY_TIMESERIES| 0| 0x0366| "Too many time series"| -2147482778|
|TSDB_CODE_MND_NOT_SUPER_TABLE| 0 |0x0367| "Not super table"| -2147482777|
|TSDB_CODE_MND_COL_NAME_TOO_LONG| 0| 0x0368| "Tag name too long"| -2147482776|
|TSDB_CODE_MND_TAG_ALREAY_EXIST| 0| 0x0369| "Tag already exists"| -2147482775|
|TSDB_CODE_MND_TAG_NOT_EXIST| 0 |0x036A | "Tag does not exist" |-2147482774|
|TSDB_CODE_MND_FIELD_ALREAY_EXIST| 0 | 0x036B| "Field already exists"| -2147482773|
|TSDB_CODE_MND_FIELD_NOT_EXIST| 0 | 0x036C | "Field does not exist"| -2147482772|
|TSDB_CODE_MND_INVALID_STABLE_NAME |0 | 0x036D |"Super table does not exist" |-2147482771|
|TSDB_CODE_MND_DB_NOT_SELECTED| 0 | 0x0380 | "Database not specified or available"| -2147482752|
|TSDB_CODE_MND_DB_ALREADY_EXIST| 0 | 0x0381 | "Database already exists"| -2147482751|
|TSDB_CODE_MND_INVALID_DB_OPTION| 0 | 0x0382 | "Invalid database options"| -2147482750|
|TSDB_CODE_MND_INVALID_DB| |0 | 0x0383 | "Invalid database name"| -2147482749|
|TSDB_CODE_MND_MONITOR_DB_FORBIDDEN| 0 | 0x0384 | "Cannot delete monitor database"| -2147482748|
|TSDB_CODE_MND_TOO_MANY_DATABASES| 0| 0x0385 | "Too many databases for account"| -2147482747|
|TSDB_CODE_MND_DB_IN_DROPPING| 0 | 0x0386| "Database not available" |-2147482746|
|TSDB_CODE_DND_MSG_NOT_PROCESSED| 0| 0x0400 | "Message not processed"| -2147482624|
|TSDB_CODE_DND_OUT_OF_MEMORY |0 | 0x0401 | "Dnode out of memory"| -2147482623|
|TSDB_CODE_DND_NO_WRITE_ACCESS| 0 | 0x0402 | "No permission for disk files in dnode"| -2147482622|
|TSDB_CODE_DND_INVALID_MSG_LEN| 0 | 0x0403 | "Invalid message length"| -2147482621|
|TSDB_CODE_VND_ACTION_IN_PROGRESS |0 |0x0500| "Action in progress" |-2147482368|
|TSDB_CODE_VND_MSG_NOT_PROCESSED| 0 |0x0501 | "Message not processed" |-2147482367|
|TSDB_CODE_VND_ACTION_NEED_REPROCESSED |0 |0x0502| "Action need to be reprocessed"| -2147482366|
|TSDB_CODE_VND_INVALID_VGROUP_ID |0 | 0x0503| "Invalid Vgroup ID"| -2147482365|
|TSDB_CODE_VND_INIT_FAILED| 0 | 0x0504 | "Vnode initialization failed"| -2147482364|
|TSDB_CODE_VND_NO_DISKSPACE| 0 |0x0505| "System out of disk space" |-2147482363|
|TSDB_CODE_VND_NO_DISK_PERMISSIONS| 0 | 0x0506| "No write permission for disk files" |-2147482362|
|TSDB_CODE_VND_NO_SUCH_FILE_OR_DIR| 0 | 0x0507 | "Missing data file"| -2147482361|
|TSDB_CODE_VND_OUT_OF_MEMORY |0| 0x0508 | "Out of memory"| -2147482360|
|TSDB_CODE_VND_APP_ERROR| 0| 0x0509 | "Unexpected generic error in vnode"| -2147482359|
|TSDB_CODE_VND_INVALID_STATUS |0| 0x0510 | "Database not ready"| -2147482352|
|TSDB_CODE_VND_NOT_SYNCED| 0 | 0x0511 | "Database suspended"| -2147482351|
|TSDB_CODE_VND_NO_WRITE_AUTH| 0 | 0x0512| "Write operation denied" |-2147482350|
|TSDB_CODE_TDB_INVALID_TABLE_ID |0 | 0x0600 | "Invalid table ID"| -2147482112|
|TSDB_CODE_TDB_INVALID_TABLE_TYPE| 0| 0x0601 |"Invalid table type"| -2147482111|
|TSDB_CODE_TDB_IVD_TB_SCHEMA_VERSION| 0| 0x0602| "Invalid table schema version"| -2147482110|
|TSDB_CODE_TDB_TABLE_ALREADY_EXIST| 0 | 0x0603| "Table already exists"| -2147482109|
|TSDB_CODE_TDB_INVALID_CONFIG| 0 | 0x0604| "Invalid configuration"| -2147482108|
|TSDB_CODE_TDB_INIT_FAILED| 0 | 0x0605| "Tsdb init failed"| -2147482107|
|TSDB_CODE_TDB_NO_DISKSPACE| 0 | 0x0606| "No diskspace for tsdb"| -2147482106|
|TSDB_CODE_TDB_NO_DISK_PERMISSIONS| 0 | 0x0607| "No permission for disk files"| -2147482105|
|TSDB_CODE_TDB_FILE_CORRUPTED| 0 | 0x0608| "Data file(s) corrupted"| -2147482104|
|TSDB_CODE_TDB_OUT_OF_MEMORY| 0 | 0x0609| "Out of memory"| -2147482103|
|TSDB_CODE_TDB_TAG_VER_OUT_OF_DATE| 0 | 0x060A| "Tag too old"| -2147482102|
|TSDB_CODE_TDB_TIMESTAMP_OUT_OF_RANGE |0| 0x060B | "Timestamp data out of range"| -2147482101|
|TSDB_CODE_TDB_SUBMIT_MSG_MSSED_UP| 0| 0x060C| "Submit message is messed up"| -2147482100|
|TSDB_CODE_TDB_INVALID_ACTION| 0 | 0x060D | "Invalid operation"| -2147482099|
|TSDB_CODE_TDB_INVALID_CREATE_TB_MSG| 0 | 0x060E| "Invalid creation of table"| -2147482098|
|TSDB_CODE_TDB_NO_TABLE_DATA_IN_MEM| 0 | 0x060F| "No table data in memory skiplist" |-2147482097|
|TSDB_CODE_TDB_FILE_ALREADY_EXISTS| 0 | 0x0610| "File already exists"| -2147482096|
|TSDB_CODE_TDB_TABLE_RECONFIGURE| 0 | 0x0611| "Need to reconfigure table"| -2147482095|
|TSDB_CODE_TDB_IVD_CREATE_TABLE_INFO| 0 | 0x0612| "Invalid information to create table"| -2147482094|
|TSDB_CODE_QRY_INVALID_QHANDLE| 0 | 0x0700| "Invalid handle"| -2147481856|
|TSDB_CODE_QRY_INVALID_MSG| 0 | 0x0701| "Invalid message"| -2147481855|
|TSDB_CODE_QRY_NO_DISKSPACE| 0 | 0x0702 | "No diskspace for query"| -2147481854|
|TSDB_CODE_QRY_OUT_OF_MEMORY| 0 | 0x0703 | "System out of memory"| -2147481853|
|TSDB_CODE_QRY_APP_ERROR| 0 | 0x0704 | "Unexpected generic error in query"| -2147481852|
|TSDB_CODE_QRY_DUP_JOIN_KEY| 0 | 0x0705| "Duplicated join key"| -2147481851|
|TSDB_CODE_QRY_EXCEED_TAGS_LIMIT| 0 | 0x0706 | "Tag conditon too many"| -2147481850|
|TSDB_CODE_QRY_NOT_READY |0| 0x0707 | "Query not ready" |-2147481849|
|TSDB_CODE_QRY_HAS_RSP| 0 | 0x0708| "Query should response"| -2147481848|
|TSDB_CODE_GRANT_EXPIRED| 0 | 0x0800| "License expired"| -2147481600|
|TSDB_CODE_GRANT_DNODE_LIMITED| 0 | 0x0801 | "DNode creation limited by licence"| -2147481599|
|TSDB_CODE_GRANT_ACCT_LIMITED |0| 0x0802 |"Account creation limited by license"| -2147481598|
|TSDB_CODE_GRANT_TIMESERIES_LIMITED| 0 | 0x0803 | "Table creation limited by license"| -2147481597|
|TSDB_CODE_GRANT_DB_LIMITED| 0 | 0x0804 | "DB creation limited by license"| -2147481596|
|TSDB_CODE_GRANT_USER_LIMITED| 0 | 0x0805 | "User creation limited by license"| -2147481595|
|TSDB_CODE_GRANT_CONN_LIMITED| 0| 0x0806 | "Conn creation limited by license" |-2147481594|
|TSDB_CODE_GRANT_STREAM_LIMITED| 0 | 0x0807 | "Stream creation limited by license"| -2147481593|
|TSDB_CODE_GRANT_SPEED_LIMITED| 0 | 0x0808 | "Write speed limited by license" |-2147481592|
|TSDB_CODE_GRANT_STORAGE_LIMITED| 0 |0x0809 | "Storage capacity limited by license"| -2147481591|
|TSDB_CODE_GRANT_QUERYTIME_LIMITED| 0 | 0x080A | "Query time limited by license" |-2147481590|
|TSDB_CODE_GRANT_CPU_LIMITED| 0 |0x080B |"CPU cores limited by license"| -2147481589|
|TSDB_CODE_SYN_INVALID_CONFIG| 0 | 0x0900| "Invalid Sync Configuration"| -2147481344|
|TSDB_CODE_SYN_NOT_ENABLED| 0 | 0x0901 | "Sync module not enabled" |-2147481343|
|TSDB_CODE_WAL_APP_ERROR| 0| 0x1000 | "Unexpected generic error in wal" |-2147479552|
\ No newline at end of file
...@@ -47,6 +47,8 @@ Raw DataSize = numOfTables * rowSizePerTable * rowsPerTable ...@@ -47,6 +47,8 @@ Raw DataSize = numOfTables * rowSizePerTable * rowsPerTable
因为TDengine具有很好的水平扩展能力,根据总量,再根据单个物理机或虚拟机的资源,就可以轻松决定需要购置多少台物理机或虚拟机了。 因为TDengine具有很好的水平扩展能力,根据总量,再根据单个物理机或虚拟机的资源,就可以轻松决定需要购置多少台物理机或虚拟机了。
**立即计算CPU、内存、存储,请参见:<a href='https://www.taosdata.com/config/config.html'>资源估算方法</a>**
## 容错和灾备 ## 容错和灾备
### 容错 ### 容错
...@@ -91,6 +93,7 @@ TDengine系统后台服务由taosd提供,可以在配置文件taos.cfg里修 ...@@ -91,6 +93,7 @@ TDengine系统后台服务由taosd提供,可以在配置文件taos.cfg里修
- role:dnode的可选角色。0-any; 既可作为mnode,也可分配vnode;1-mgmt;只能作为mnode,不能分配vnode;2-dnode;不能作为mnode,只能分配vnode - role:dnode的可选角色。0-any; 既可作为mnode,也可分配vnode;1-mgmt;只能作为mnode,不能分配vnode;2-dnode;不能作为mnode,只能分配vnode
- debugFlag:运行日志开关。131(输出错误和警告日志),135( 输出错误、警告和调试日志),143( 输出错误、警告、调试和跟踪日志)。默认值:131或135(不同模块有不同的默认值)。 - debugFlag:运行日志开关。131(输出错误和警告日志),135( 输出错误、警告和调试日志),143( 输出错误、警告、调试和跟踪日志)。默认值:131或135(不同模块有不同的默认值)。
- numOfLogLines:单个日志文件允许的最大行数。默认值:10,000,000行。 - numOfLogLines:单个日志文件允许的最大行数。默认值:10,000,000行。
- logKeepDays:日志文件的最长保存时间。大于0时,日志文件会被重命名为taosdlog.xxx,其中xxx为日志文件最后修改的时间戳,单位为秒。默认值:0天。
- maxSQLLength:单条SQL语句允许最长限制。默认值:65380字节。 - maxSQLLength:单条SQL语句允许最长限制。默认值:65380字节。
- telemetryReporting: 是否允许 TDengine 采集和上报基本使用信息,0表示不允许,1表示允许。 默认值:1。 - telemetryReporting: 是否允许 TDengine 采集和上报基本使用信息,0表示不允许,1表示允许。 默认值:1。
......
...@@ -228,7 +228,8 @@ resultSet.close(); ...@@ -228,7 +228,8 @@ resultSet.close();
stmt.close(); stmt.close();
conn.close(); conn.close();
``` ```
> `注意务必要将 connection 进行关闭`,否则会出现连接泄露。 > `注意务必要将 connection 进行关闭`,否则会出现连接泄露。
## 与连接池使用 ## 与连接池使用
**HikariCP** **HikariCP**
......
...@@ -47,66 +47,11 @@ ...@@ -47,66 +47,11 @@
检查服务器侧TCP端口连接是否工作:`nc -l {port}` 检查服务器侧TCP端口连接是否工作:`nc -l {port}`
检查客户端侧TCP端口链接是否工作:`nc {hostIP} {port}` 检查客户端侧TCP端口链接是否工作:`nc {hostIP} {port}`
10. 可以使用taos程序内嵌的网络连通检测功能:验证服务器和客户端之间指定的端口连接是否通畅(包括TCP和UDP) 10. 也可以使用taos程序内嵌的网络连通检测功能,来验证服务器和客户端之间指定的端口连接是否通畅(包括TCP和UDP):[TDengine 内嵌网络检测工具使用指南](https://www.taosdata.com/blog/2020/09/08/1816.html)
taos通过参数 -n 来确定运行服务端功能,还是客户端功能。-n server:表示运行检测服务端功能;-n client:表示运行检测客户端功能。
1)首先在服务器上停止taosd服务;
2)在服务器上运行taos内嵌的网络连通检测的服务端功能:taos -n server -P 6030 -e 6042 -l 1000; ## 6. 遇到错误“Unexpected generic error in RPC”或者"TDengine Error: Unable to resolve FQDN", 我怎么办?
3)在客户端运行taos内嵌的网络连通检测的客户端功能:taos -n client -h host -P 6030 -e 6042 -l 1000;
-n :指示运行网络连通检测的服务端功能,或客户端功能,缺省值为空,表示不启动网络连通检测;
-h:指示服务端名称,可以是ip地址或fqdn格式。如:192.168.1.160,或 192.168.1.160:6030,或 hostname1,或hostname1:6030。缺省值是127.0.0.1。
-P :检测的起始端口号,缺省值是6030;
-e:检测的结束端口号,必须大于等于起始端口号,缺省值是6042;
-l:指定检测端口连通的报文长度,最大64000字节,缺省值是1000字节,测试时服务端和客户端必须指定相同;
服务端设置的起始端口和结束端口号,必须包含客户端设置的起始端口和结束端口号;
对于起始端口号有三种设置方式:缺省值、-h指定、-P指定,优先级是:-P指定 > -h指定 > 缺省值。
客户端运行的输出样例:
`sum@sum-virtualBox /home/sum $ taos -n client -h ubuntu-vbox6`
`host: ubuntu-vbox6 start port: 6030 end port: 6042 packet len: 1000`
`tcp port:6030 test ok. udp port:6030 test ok.`
`tcp port:6031 test ok. udp port:6031 test ok.`
`tcp port:6032 test ok. udp port:6032 test ok.`
`tcp port:6033 test ok. udp port:6033 test ok.`
`tcp port:6034 test ok. udp port:6034 test ok.`
`tcp port:6035 test ok. udp port:6035 test ok.`
`tcp port:6036 test ok. udp port:6036 test ok.`
`tcp port:6037 test ok. udp port:6037 test ok.`
`tcp port:6038 test ok. udp port:6038 test ok.`
`tcp port:6039 test ok. udp port:6039 test ok.`
`tcp port:6040 test ok. udp port:6040 test ok.`
`tcp port:6041 test ok. udp port:6041 test ok.`
`tcp port:6042 test ok. udp port:6042 test ok.`
如果某个端口不通,会输出 `port:xxxx test fail`的信息。
## 6. 遇到错误“Unexpected generic error in RPC”, 我怎么办?
产生这个错误,是由于客户端或数据节点无法解析FQDN(Fully Qualified Domain Name)导致。对于TAOS Shell或客户端应用,请做如下检查: 产生这个错误,是由于客户端或数据节点无法解析FQDN(Fully Qualified Domain Name)导致。对于TAOS Shell或客户端应用,请做如下检查:
1. 请检查连接的服务器的FQDN是否正确 1. 请检查连接的服务器的FQDN是否正确
......
...@@ -122,11 +122,14 @@ ...@@ -122,11 +122,14 @@
# number of replications, for cluster only # number of replications, for cluster only
# replica 1 # replica 1
# mqtt uri # mqtt hostname
# mqttBrokerAddress mqtt://username:password@hostname:1883/taos/ # mqttHostName test.mosquitto.org
# mqtt client name # mqtt port
# mqttBrokerClientId taos_mqtt # mqttPort 1883
# mqtt topic
# mqttTopic /test
# the compressed rpc message, option: # the compressed rpc message, option:
# -1 (no compression) # -1 (no compression)
...@@ -186,6 +189,9 @@ ...@@ -186,6 +189,9 @@
# max number of rows per log filters # max number of rows per log filters
# numOfLogLines 10000000 # numOfLogLines 10000000
# time of keeping log files, days
# logKeepDays 0
# enable/disable async log # enable/disable async log
# asyncLog 1 # asyncLog 1
......
name: tdengine name: tdengine
base: core18 # the base snap is the execution environment for this snap base: core18
version: '2.0.2.0' # just for humans, typically '1.2+git' or '1.3.2' version: 'RELEASE_VERSION'
icon: snap/gui/t-dengine.svg icon: snap/gui/t-dengine.svg
summary: an open-source big data platform designed and optimized for IoT. summary: an open-source big data platform designed and optimized for IoT.
description: | description: |
...@@ -18,41 +18,18 @@ apps: ...@@ -18,41 +18,18 @@ apps:
- network - network
- network-bind - network-bind
- system-observe - system-observe
- systemfiles
taos: taos:
command: taoswrapper.sh command: taoswrapper.sh
plugs: plugs:
- network - network
- system-observe - system-observe
- systemfiles
- historyfile
taosdemo: taosdemo:
command: usr/bin/taosdemo command: usr/bin/taosdemo
plugs: plugs:
- network - network
plugs:
historyfile:
interface: personal-files
read:
- $HOME/.taos_history
write:
- $HOME/.taos_history
systemfiles:
interface: system-files
read:
- /etc/taos
- /var/lib/taos
- /var/log/taos
- /tmp
write:
- /var/log/taos
- /var/lib/taos
- /tmp
parts: parts:
script: script:
plugin: dump plugin: dump
...@@ -95,7 +72,7 @@ parts: ...@@ -95,7 +72,7 @@ parts:
- usr/bin/taosd - usr/bin/taosd
- usr/bin/taos - usr/bin/taos
- usr/bin/taosdemo - usr/bin/taosdemo
- usr/lib/libtaos.so.2.0.2.0 - usr/lib/libtaos.so.RELEASE_VERSION
- usr/lib/libtaos.so.1 - usr/lib/libtaos.so.1
- usr/lib/libtaos.so - usr/lib/libtaos.so
...@@ -115,8 +92,3 @@ layout: ...@@ -115,8 +92,3 @@ layout:
bind: $SNAP_DATA/var/log/taos bind: $SNAP_DATA/var/log/taos
/etc/taos: /etc/taos:
bind: $SNAP_DATA/etc/taos bind: $SNAP_DATA/etc/taos
hooks:
install:
plugs: [systemfiles, historyfile]
...@@ -10,7 +10,9 @@ ADD_SUBDIRECTORY(client) ...@@ -10,7 +10,9 @@ ADD_SUBDIRECTORY(client)
ADD_SUBDIRECTORY(query) ADD_SUBDIRECTORY(query)
ADD_SUBDIRECTORY(kit) ADD_SUBDIRECTORY(kit)
ADD_SUBDIRECTORY(plugins) ADD_SUBDIRECTORY(plugins)
ADD_SUBDIRECTORY(sync) IF (TD_SYNC)
ADD_SUBDIRECTORY(sync)
ENDIF ()
ADD_SUBDIRECTORY(balance) ADD_SUBDIRECTORY(balance)
ADD_SUBDIRECTORY(mnode) ADD_SUBDIRECTORY(mnode)
ADD_SUBDIRECTORY(vnode) ADD_SUBDIRECTORY(vnode)
......
...@@ -232,8 +232,9 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -232,8 +232,9 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
} else if (pInfo->type == TSDB_SQL_DROP_TABLE) { } else if (pInfo->type == TSDB_SQL_DROP_TABLE) {
assert(pInfo->pDCLInfo->nTokens == 1); assert(pInfo->pDCLInfo->nTokens == 1);
if (tscSetTableFullName(pTableMetaInfo, pzName, pSql) != TSDB_CODE_SUCCESS) { code = tscSetTableFullName(pTableMetaInfo, pzName, pSql);
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3); if(code != TSDB_CODE_SUCCESS) {
return code;
} }
} else if (pInfo->type == TSDB_SQL_DROP_DNODE) { } else if (pInfo->type == TSDB_SQL_DROP_DNODE) {
pzName->n = strdequote(pzName->z); pzName->n = strdequote(pzName->z);
...@@ -348,8 +349,8 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -348,8 +349,8 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
case TSDB_SQL_DESCRIBE_TABLE: { case TSDB_SQL_DESCRIBE_TABLE: {
SStrToken* pToken = &pInfo->pDCLInfo->a[0]; SStrToken* pToken = &pInfo->pDCLInfo->a[0];
const char* msg2 = "table name is too long";
const char* msg1 = "invalid table name"; const char* msg1 = "invalid table name";
const char* msg2 = "table name is too long";
if (tscValidateName(pToken) != TSDB_CODE_SUCCESS) { if (tscValidateName(pToken) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
...@@ -710,7 +711,9 @@ int32_t parseSlidingClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQu ...@@ -710,7 +711,9 @@ int32_t parseSlidingClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQu
} }
int32_t tscSetTableFullName(STableMetaInfo* pTableMetaInfo, SStrToken* pzTableName, SSqlObj* pSql) { int32_t tscSetTableFullName(STableMetaInfo* pTableMetaInfo, SStrToken* pzTableName, SSqlObj* pSql) {
const char* msg = "name too long"; const char* msg1 = "name too long";
const char* msg2 = "invalid db name";
const char *msg = msg1;
SSqlCmd* pCmd = &pSql->cmd; SSqlCmd* pCmd = &pSql->cmd;
int32_t code = TSDB_CODE_SUCCESS; int32_t code = TSDB_CODE_SUCCESS;
...@@ -728,16 +731,14 @@ int32_t tscSetTableFullName(STableMetaInfo* pTableMetaInfo, SStrToken* pzTableNa ...@@ -728,16 +731,14 @@ int32_t tscSetTableFullName(STableMetaInfo* pTableMetaInfo, SStrToken* pzTableNa
} else { // get current DB name first, then set it into path } else { // get current DB name first, then set it into path
SStrToken t = {0}; SStrToken t = {0};
getCurrentDBName(pSql, &t); getCurrentDBName(pSql, &t);
if (t.n == 0) {
msg = msg2;
}
code = setObjFullName(pTableMetaInfo->name, NULL, &t, pzTableName, NULL); code = setObjFullName(pTableMetaInfo->name, NULL, &t, pzTableName, NULL);
} }
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg); invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
} free(oldName);
if (code != TSDB_CODE_SUCCESS) {
free(oldName);
return code; return code;
} }
...@@ -1072,7 +1073,7 @@ int32_t setObjFullName(char* fullName, const char* account, SStrToken* pDB, SStr ...@@ -1072,7 +1073,7 @@ int32_t setObjFullName(char* fullName, const char* account, SStrToken* pDB, SStr
/* db name is not specified, the tableName dose not include db name */ /* db name is not specified, the tableName dose not include db name */
if (pDB != NULL) { if (pDB != NULL) {
if (pDB->n >= TSDB_ACCT_LEN + TSDB_DB_NAME_LEN) { if (pDB->n >= TSDB_ACCT_LEN + TSDB_DB_NAME_LEN || pDB->n == 0) {
return TSDB_CODE_TSC_INVALID_SQL; return TSDB_CODE_TSC_INVALID_SQL;
} }
...@@ -1597,13 +1598,14 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col ...@@ -1597,13 +1598,14 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
SColumnIndex index = COLUMN_INDEX_INITIALIZER; SColumnIndex index = COLUMN_INDEX_INITIALIZER;
if (pItem->pNode->pParam != NULL) { if (pItem->pNode->pParam != NULL) {
SStrToken* pToken = &pItem->pNode->pParam->a[0].pNode->colInfo;
if (pToken->z == NULL || pToken->n == 0) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
tSQLExprItem* pParamElem = &pItem->pNode->pParam->a[0]; tSQLExprItem* pParamElem = &pItem->pNode->pParam->a[0];
if (pParamElem->pNode->nSQLOptr == TK_ALL) { SStrToken* pToken = &pParamElem->pNode->colInfo;
short sqlOptr = pParamElem->pNode->nSQLOptr;
if ((pToken->z == NULL || pToken->n == 0)
&& (TK_INTEGER != sqlOptr)) /*select count(1) from table*/ {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
if (sqlOptr == TK_ALL) {
// select table.* // select table.*
// check if the table name is valid or not // check if the table name is valid or not
SStrToken tmpToken = pParamElem->pNode->colInfo; SStrToken tmpToken = pParamElem->pNode->colInfo;
...@@ -1615,6 +1617,21 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col ...@@ -1615,6 +1617,21 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
index = (SColumnIndex){0, PRIMARYKEY_TIMESTAMP_COL_INDEX}; index = (SColumnIndex){0, PRIMARYKEY_TIMESTAMP_COL_INDEX};
int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize; int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize;
pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, size, false); pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, size, false);
} else if (sqlOptr == TK_INTEGER) { // select count(1) from table1
char buf[8] = {0};
int64_t val = -1;
tVariant* pVariant = &pParamElem->pNode->val;
if (pVariant->nType == TSDB_DATA_TYPE_BIGINT) {
tVariantDump(pVariant, buf, TSDB_DATA_TYPE_BIGINT, true);
val = GET_INT64_VAL(buf);
}
if (val == 1) {
index = (SColumnIndex){0, PRIMARYKEY_TIMESTAMP_COL_INDEX};
int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize;
pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, size, false);
} else {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
} else { } else {
// count the number of meters created according to the super table // count the number of meters created according to the super table
if (getColumnIndexByName(pCmd, pToken, pQueryInfo, &index) != TSDB_CODE_SUCCESS) { if (getColumnIndexByName(pCmd, pToken, pQueryInfo, &index) != TSDB_CODE_SUCCESS) {
...@@ -2739,27 +2756,31 @@ static int32_t doExtractColumnFilterInfo(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, ...@@ -2739,27 +2756,31 @@ static int32_t doExtractColumnFilterInfo(SSqlCmd* pCmd, SQueryInfo* pQueryInfo,
} }
} }
int32_t retVal = TSDB_CODE_SUCCESS;
if (pExpr->nSQLOptr == TK_LE || pExpr->nSQLOptr == TK_LT) { if (pExpr->nSQLOptr == TK_LE || pExpr->nSQLOptr == TK_LT) {
tVariantDump(&pRight->val, (char*)&pColumnFilter->upperBndd, colType, false); retVal = tVariantDump(&pRight->val, (char*)&pColumnFilter->upperBndd, colType, false);
} else { // TK_GT,TK_GE,TK_EQ,TK_NE are based on the pColumn->lowerBndd
if (colType == TSDB_DATA_TYPE_BINARY) {
pColumnFilter->pz = (int64_t)calloc(1, pRight->val.nLen + TSDB_NCHAR_SIZE);
pColumnFilter->len = pRight->val.nLen;
tVariantDump(&pRight->val, (char*)pColumnFilter->pz, colType, false); // TK_GT,TK_GE,TK_EQ,TK_NE are based on the pColumn->lowerBndd
} else if (colType == TSDB_DATA_TYPE_NCHAR) { } else if (colType == TSDB_DATA_TYPE_BINARY) {
// pRight->val.nLen + 1 is larger than the actual nchar string length pColumnFilter->pz = (int64_t)calloc(1, pRight->val.nLen + TSDB_NCHAR_SIZE);
pColumnFilter->pz = (int64_t)calloc(1, (pRight->val.nLen + 1) * TSDB_NCHAR_SIZE); pColumnFilter->len = pRight->val.nLen;
retVal = tVariantDump(&pRight->val, (char*)pColumnFilter->pz, colType, false);
tVariantDump(&pRight->val, (char*)pColumnFilter->pz, colType, false); } else if (colType == TSDB_DATA_TYPE_NCHAR) {
// pRight->val.nLen + 1 is larger than the actual nchar string length
pColumnFilter->pz = (int64_t)calloc(1, (pRight->val.nLen + 1) * TSDB_NCHAR_SIZE);
retVal = tVariantDump(&pRight->val, (char*)pColumnFilter->pz, colType, false);
size_t len = twcslen((wchar_t*)pColumnFilter->pz);
pColumnFilter->len = len * TSDB_NCHAR_SIZE;
size_t len = twcslen((wchar_t*)pColumnFilter->pz); } else {
pColumnFilter->len = len * TSDB_NCHAR_SIZE; retVal = tVariantDump(&pRight->val, (char*)&pColumnFilter->lowerBndd, colType, false);
} else {
tVariantDump(&pRight->val, (char*)&pColumnFilter->lowerBndd, colType, false);
}
} }
if (retVal != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
}
switch (pExpr->nSQLOptr) { switch (pExpr->nSQLOptr) {
case TK_LE: case TK_LE:
pColumnFilter->upperRelOptr = TSDB_RELATION_LESS_EQUAL; pColumnFilter->upperRelOptr = TSDB_RELATION_LESS_EQUAL;
...@@ -4430,7 +4451,6 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -4430,7 +4451,6 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
const int32_t DEFAULT_TABLE_INDEX = 0; const int32_t DEFAULT_TABLE_INDEX = 0;
const char* msg1 = "invalid table name"; const char* msg1 = "invalid table name";
const char* msg2 = "table name too long";
const char* msg3 = "manipulation of tag available for super table"; const char* msg3 = "manipulation of tag available for super table";
const char* msg4 = "set tag value only available for table"; const char* msg4 = "set tag value only available for table";
const char* msg5 = "only support add one tag"; const char* msg5 = "only support add one tag";
...@@ -4463,7 +4483,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -4463,7 +4483,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
} }
if (tscSetTableFullName(pTableMetaInfo, &(pAlterSQL->name), pSql) != TSDB_CODE_SUCCESS) { if (tscSetTableFullName(pTableMetaInfo, &(pAlterSQL->name), pSql) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2); return TSDB_CODE_TSC_INVALID_SQL;
} }
int32_t ret = tscGetTableMeta(pSql, pTableMetaInfo); int32_t ret = tscGetTableMeta(pSql, pTableMetaInfo);
...@@ -5088,7 +5108,7 @@ static int32_t setTimePrecision(SSqlCmd* pCmd, SCMCreateDbMsg* pMsg, SCreateDBIn ...@@ -5088,7 +5108,7 @@ static int32_t setTimePrecision(SSqlCmd* pCmd, SCMCreateDbMsg* pMsg, SCreateDBIn
} }
static void setCreateDBOption(SCMCreateDbMsg* pMsg, SCreateDBInfo* pCreateDb) { static void setCreateDBOption(SCMCreateDbMsg* pMsg, SCreateDBInfo* pCreateDb) {
pMsg->maxTables = htonl(pCreateDb->maxTablesPerVnode); pMsg->maxTables = htonl(-1); // max tables can not be set anymore
pMsg->cacheBlockSize = htonl(pCreateDb->cacheBlockSize); pMsg->cacheBlockSize = htonl(pCreateDb->cacheBlockSize);
pMsg->totalBlocks = htonl(pCreateDb->numOfBlocks); pMsg->totalBlocks = htonl(pCreateDb->numOfBlocks);
pMsg->daysPerFile = htonl(pCreateDb->daysPerFile); pMsg->daysPerFile = htonl(pCreateDb->daysPerFile);
...@@ -5724,7 +5744,6 @@ void tscPrintSelectClause(SSqlObj* pSql, int32_t subClauseIndex) { ...@@ -5724,7 +5744,6 @@ void tscPrintSelectClause(SSqlObj* pSql, int32_t subClauseIndex) {
int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSqlInfo* pInfo) { int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSqlInfo* pInfo) {
const char* msg1 = "invalid table name"; const char* msg1 = "invalid table name";
const char* msg2 = "table name too long";
SSqlCmd* pCmd = &pSql->cmd; SSqlCmd* pCmd = &pSql->cmd;
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, subClauseIndex); SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, subClauseIndex);
...@@ -5745,7 +5764,7 @@ int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSqlInfo* p ...@@ -5745,7 +5764,7 @@ int32_t doCheckForCreateTable(SSqlObj* pSql, int32_t subClauseIndex, SSqlInfo* p
} }
if (tscSetTableFullName(pTableMetaInfo, pzTableName, pSql) != TSDB_CODE_SUCCESS) { if (tscSetTableFullName(pTableMetaInfo, pzTableName, pSql) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2); return TSDB_CODE_TSC_INVALID_SQL;
} }
if (!validateTableColumnInfo(pFieldList, pCmd) || if (!validateTableColumnInfo(pFieldList, pCmd) ||
...@@ -5800,7 +5819,7 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) { ...@@ -5800,7 +5819,7 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
} }
if (tscSetTableFullName(pStableMeterMetaInfo, pToken, pSql) != TSDB_CODE_SUCCESS) { if (tscSetTableFullName(pStableMeterMetaInfo, pToken, pSql) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); return TSDB_CODE_TSC_INVALID_SQL;
} }
// get meter meta from mnode // get meter meta from mnode
...@@ -5992,7 +6011,7 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) { ...@@ -5992,7 +6011,7 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
assert(pQuerySql != NULL && (pQuerySql->from == NULL || pQuerySql->from->nExpr > 0)); assert(pQuerySql != NULL && (pQuerySql->from == NULL || pQuerySql->from->nExpr > 0));
const char* msg0 = "invalid table name"; const char* msg0 = "invalid table name";
const char* msg1 = "table name too long"; //const char* msg1 = "table name too long";
const char* msg2 = "point interpolation query needs timestamp"; const char* msg2 = "point interpolation query needs timestamp";
const char* msg5 = "fill only available for interval query"; const char* msg5 = "fill only available for interval query";
const char* msg6 = "start(end) time of query range required or time range too large"; const char* msg6 = "start(end) time of query range required or time range too large";
...@@ -6065,7 +6084,7 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) { ...@@ -6065,7 +6084,7 @@ int32_t doCheckForQuery(SSqlObj* pSql, SQuerySQL* pQuerySql, int32_t index) {
SStrToken t = {.type = TSDB_DATA_TYPE_BINARY, .n = pTableItem->nLen, .z = pTableItem->pz}; SStrToken t = {.type = TSDB_DATA_TYPE_BINARY, .n = pTableItem->nLen, .z = pTableItem->pz};
if (tscSetTableFullName(pTableMetaInfo1, &t, pSql) != TSDB_CODE_SUCCESS) { if (tscSetTableFullName(pTableMetaInfo1, &t, pSql) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); return TSDB_CODE_TSC_INVALID_SQL;
} }
tVariant* pTableItem1 = &pQuerySql->from->a[i + 1].pVar; tVariant* pTableItem1 = &pQuerySql->from->a[i + 1].pVar;
......
...@@ -406,7 +406,7 @@ int doProcessSql(SSqlObj *pSql) { ...@@ -406,7 +406,7 @@ int doProcessSql(SSqlObj *pSql) {
if (code != TSDB_CODE_SUCCESS) { if (code != TSDB_CODE_SUCCESS) {
pRes->code = code; pRes->code = code;
tscQueueAsyncRes(pSql); tscQueueAsyncRes(pSql);
return pRes->code; return code;
} }
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
...@@ -2013,7 +2013,8 @@ int tscProcessUseDbRsp(SSqlObj *pSql) { ...@@ -2013,7 +2013,8 @@ int tscProcessUseDbRsp(SSqlObj *pSql) {
return 0; return 0;
} }
int tscProcessDropDbRsp(SSqlObj *UNUSED_PARAM(pSql)) { int tscProcessDropDbRsp(SSqlObj *pSql) {
pSql->pTscObj->db[0] = 0;
taosCacheEmpty(tscCacheHandle); taosCacheEmpty(tscCacheHandle);
return 0; return 0;
} }
......
...@@ -718,6 +718,7 @@ int32_t tscMergeTableDataBlocks(SSqlObj* pSql, SArray* pTableDataBlockList) { ...@@ -718,6 +718,7 @@ int32_t tscMergeTableDataBlocks(SSqlObj* pSql, SArray* pTableDataBlockList) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
// TODO: all subqueries should be freed correctly before close this connection.
void tscCloseTscObj(STscObj* pObj) { void tscCloseTscObj(STscObj* pObj) {
assert(pObj != NULL); assert(pObj != NULL);
...@@ -727,6 +728,7 @@ void tscCloseTscObj(STscObj* pObj) { ...@@ -727,6 +728,7 @@ void tscCloseTscObj(STscObj* pObj) {
if (pObj->pDnodeConn != NULL) { if (pObj->pDnodeConn != NULL) {
rpcClose(pObj->pDnodeConn); rpcClose(pObj->pDnodeConn);
pObj->pDnodeConn = NULL;
} }
tscDebug("%p DB connection is closed, dnodeConn:%p", pObj, pObj->pDnodeConn); tscDebug("%p DB connection is closed, dnodeConn:%p", pObj, pObj->pDnodeConn);
......
...@@ -325,8 +325,6 @@ void tdResetKVRowBuilder(SKVRowBuilder *pBuilder); ...@@ -325,8 +325,6 @@ void tdResetKVRowBuilder(SKVRowBuilder *pBuilder);
SKVRow tdGetKVRowFromBuilder(SKVRowBuilder *pBuilder); SKVRow tdGetKVRowFromBuilder(SKVRowBuilder *pBuilder);
static FORCE_INLINE int tdAddColToKVRow(SKVRowBuilder *pBuilder, int16_t colId, int8_t type, void *value) { static FORCE_INLINE int tdAddColToKVRow(SKVRowBuilder *pBuilder, int16_t colId, int8_t type, void *value) {
ASSERT(pBuilder->nCols == 0 || colId > pBuilder->pColIdx[pBuilder->nCols - 1].colId);
if (pBuilder->nCols >= pBuilder->tCols) { if (pBuilder->nCols >= pBuilder->tCols) {
pBuilder->tCols *= 2; pBuilder->tCols *= 2;
pBuilder->pColIdx = (SColIdx *)realloc((void *)(pBuilder->pColIdx), sizeof(SColIdx) * pBuilder->tCols); pBuilder->pColIdx = (SColIdx *)realloc((void *)(pBuilder->pColIdx), sizeof(SColIdx) * pBuilder->tCols);
......
...@@ -104,8 +104,12 @@ extern int32_t tsTelegrafUseFieldNum; ...@@ -104,8 +104,12 @@ extern int32_t tsTelegrafUseFieldNum;
// mqtt // mqtt
extern int32_t tsEnableMqttModule; extern int32_t tsEnableMqttModule;
extern char tsMqttBrokerAddress[]; extern char tsMqttHostName[];
extern char tsMqttBrokerClientId[]; extern char tsMqttPort[];
extern char tsMqttUser[];
extern char tsMqttPass[];
extern char tsMqttClientId[];
extern char tsMqttTopic[];
// monitor // monitor
extern int32_t tsEnableMonitorModule; extern int32_t tsEnableMonitorModule;
...@@ -154,6 +158,7 @@ extern char buildinfo[]; ...@@ -154,6 +158,7 @@ extern char buildinfo[];
// log // log
extern int32_t tsAsyncLog; extern int32_t tsAsyncLog;
extern int32_t tsNumOfLogLines; extern int32_t tsNumOfLogLines;
extern int32_t tsLogKeepDays;
extern int32_t dDebugFlag; extern int32_t dDebugFlag;
extern int32_t vDebugFlag; extern int32_t vDebugFlag;
extern int32_t mDebugFlag; extern int32_t mDebugFlag;
......
...@@ -137,8 +137,12 @@ int32_t tsTelegrafUseFieldNum = 0; ...@@ -137,8 +137,12 @@ int32_t tsTelegrafUseFieldNum = 0;
// mqtt // mqtt
int32_t tsEnableMqttModule = 0; // not finished yet, not started it by default int32_t tsEnableMqttModule = 0; // not finished yet, not started it by default
char tsMqttBrokerAddress[128] = {0}; char tsMqttHostName[TSDB_MQTT_HOSTNAME_LEN] = "test.mosquitto.org";
char tsMqttBrokerClientId[128] = {0}; char tsMqttPort[TSDB_MQTT_PORT_LEN] = "1883";
char tsMqttUser[TSDB_MQTT_USER_LEN] = {0};
char tsMqttPass[TSDB_MQTT_PASS_LEN] = {0};
char tsMqttClientId[TSDB_MQTT_CLIENT_ID_LEN] = "TDengineMqttSubscriber";
char tsMqttTopic[TSDB_MQTT_TOPIC_LEN] = "/test"; // #
// monitor // monitor
int32_t tsEnableMonitorModule = 1; int32_t tsEnableMonitorModule = 1;
...@@ -247,8 +251,11 @@ bool taosCfgDynamicOptions(char *msg) { ...@@ -247,8 +251,11 @@ bool taosCfgDynamicOptions(char *msg) {
for (int32_t i = 0; i < tsGlobalConfigNum; ++i) { for (int32_t i = 0; i < tsGlobalConfigNum; ++i) {
SGlobalCfg *cfg = tsGlobalConfig + i; SGlobalCfg *cfg = tsGlobalConfig + i;
if (!(cfg->cfgType & TSDB_CFG_CTYPE_B_LOG)) continue; //if (!(cfg->cfgType & TSDB_CFG_CTYPE_B_LOG)) continue;
if (cfg->valType != TAOS_CFG_VTYPE_INT32) continue; if (cfg->valType != TAOS_CFG_VTYPE_INT32) continue;
int32_t cfgLen = (int32_t)strlen(cfg->option);
if (cfgLen != olen) continue;
if (strncasecmp(option, cfg->option, olen) != 0) continue; if (strncasecmp(option, cfg->option, olen) != 0) continue;
*((int32_t *)cfg->ptr) = vint; *((int32_t *)cfg->ptr) = vint;
...@@ -767,26 +774,36 @@ static void doInitGlobalConfig(void) { ...@@ -767,26 +774,36 @@ static void doInitGlobalConfig(void) {
cfg.unitType = TAOS_CFG_UTYPE_NONE; cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg); taosInitConfigOption(cfg);
cfg.option = "mqttBrokerAddress"; cfg.option = "mqttHostName";
cfg.ptr = tsMqttBrokerAddress; cfg.ptr = tsMqttHostName;
cfg.valType = TAOS_CFG_VTYPE_STRING;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_NOT_PRINT;
cfg.minValue = 0;
cfg.maxValue = 0;
cfg.ptrLength = TSDB_MQTT_HOSTNAME_LEN;
cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg);
cfg.option = "mqttPort";
cfg.ptr = tsMqttPort;
cfg.valType = TAOS_CFG_VTYPE_STRING; cfg.valType = TAOS_CFG_VTYPE_STRING;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_NOT_PRINT;
cfg.minValue = 0; cfg.minValue = 0;
cfg.maxValue = 0; cfg.maxValue = 0;
cfg.ptrLength = 126; cfg.ptrLength = TSDB_MQTT_PORT_LEN;
cfg.unitType = TAOS_CFG_UTYPE_NONE; cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg); taosInitConfigOption(cfg);
cfg.option = "mqttBrokerClientId"; cfg.option = "mqttTopic";
cfg.ptr = tsMqttBrokerClientId; cfg.ptr = tsMqttTopic;
cfg.valType = TAOS_CFG_VTYPE_STRING; cfg.valType = TAOS_CFG_VTYPE_STRING;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_NOT_PRINT;
cfg.minValue = 0; cfg.minValue = 0;
cfg.maxValue = 0; cfg.maxValue = 0;
cfg.ptrLength = 126; cfg.ptrLength = TSDB_MQTT_TOPIC_LEN;
cfg.unitType = TAOS_CFG_UTYPE_NONE; cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg); taosInitConfigOption(cfg);
cfg.option = "compressMsgSize"; cfg.option = "compressMsgSize";
cfg.ptr = &tsCompressMsgSize; cfg.ptr = &tsCompressMsgSize;
cfg.valType = TAOS_CFG_VTYPE_INT32; cfg.valType = TAOS_CFG_VTYPE_INT32;
...@@ -996,12 +1013,22 @@ static void doInitGlobalConfig(void) { ...@@ -996,12 +1013,22 @@ static void doInitGlobalConfig(void) {
cfg.ptr = &tsNumOfLogLines; cfg.ptr = &tsNumOfLogLines;
cfg.valType = TAOS_CFG_VTYPE_INT32; cfg.valType = TAOS_CFG_VTYPE_INT32;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_LOG | TSDB_CFG_CTYPE_B_CLIENT; cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_LOG | TSDB_CFG_CTYPE_B_CLIENT;
cfg.minValue = 10000; cfg.minValue = 1000;
cfg.maxValue = 2000000000; cfg.maxValue = 2000000000;
cfg.ptrLength = 0; cfg.ptrLength = 0;
cfg.unitType = TAOS_CFG_UTYPE_NONE; cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg); taosInitConfigOption(cfg);
cfg.option = "logKeepDays";
cfg.ptr = &tsLogKeepDays;
cfg.valType = TAOS_CFG_VTYPE_INT32;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_LOG | TSDB_CFG_CTYPE_B_CLIENT;
cfg.minValue = 0;
cfg.maxValue = 365000;
cfg.ptrLength = 0;
cfg.unitType = TAOS_CFG_UTYPE_NONE;
taosInitConfigOption(cfg);
cfg.option = "asyncLog"; cfg.option = "asyncLog";
cfg.ptr = &tsAsyncLog; cfg.ptr = &tsAsyncLog;
cfg.valType = TAOS_CFG_VTYPE_INT16; cfg.valType = TAOS_CFG_VTYPE_INT16;
...@@ -1270,6 +1297,9 @@ void taosInitGlobalCfg() { ...@@ -1270,6 +1297,9 @@ void taosInitGlobalCfg() {
} }
bool taosCheckGlobalCfg() { bool taosCheckGlobalCfg() {
char fqdn[TSDB_FQDN_LEN];
uint16_t port;
if (debugFlag & DEBUG_TRACE || debugFlag & DEBUG_DEBUG || debugFlag & DEBUG_DUMP) { if (debugFlag & DEBUG_TRACE || debugFlag & DEBUG_DEBUG || debugFlag & DEBUG_DUMP) {
taosSetAllDebugFlag(); taosSetAllDebugFlag();
} }
...@@ -1278,17 +1308,23 @@ bool taosCheckGlobalCfg() { ...@@ -1278,17 +1308,23 @@ bool taosCheckGlobalCfg() {
taosGetFqdn(tsLocalFqdn); taosGetFqdn(tsLocalFqdn);
} }
snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%d", tsLocalFqdn, tsServerPort); snprintf(tsLocalEp, sizeof(tsLocalEp), "%s:%u", tsLocalFqdn, tsServerPort);
uInfo("localEp is: %s", tsLocalEp); uInfo("localEp is: %s", tsLocalEp);
if (tsFirst[0] == 0) { if (tsFirst[0] == 0) {
strcpy(tsFirst, tsLocalEp); strcpy(tsFirst, tsLocalEp);
} else {
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
snprintf(tsFirst, sizeof(tsFirst), "%s:%u", fqdn, port);
} }
if (tsSecond[0] == 0) { if (tsSecond[0] == 0) {
strcpy(tsSecond, tsLocalEp); strcpy(tsSecond, tsLocalEp);
} else {
taosGetFqdnPortFromEp(tsSecond, fqdn, &port);
snprintf(tsSecond, sizeof(tsSecond), "%s:%u", fqdn, port);
} }
taosGetSystemInfo(); taosGetSystemInfo();
tsSetLocale(); tsSetLocale();
......
package com.taosdata.jdbc;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.sql.*;
import java.util.Properties;
import java.util.Random;
import static org.junit.Assert.assertEquals;
import java.util.Properties;
import java.util.concurrent.Executors;
import java.util.concurrent.*;
import static org.junit.Assert.assertTrue;
public class QueryDataTest extends BaseTest {
static Connection connection = null;
static Statement statement = null;
static String dbName = "test";
static String stbName = "meters";
static String host = "localhost";
static int numOfTables = 30;
final static int numOfRecordsPerTable = 1000;
static long ts = 1496732686000l;
final static String tablePrefix = "t";
@Before
public void createDatabase() throws SQLException {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
} catch (ClassNotFoundException e) {
return;
}
Properties properties = new Properties();
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
statement = connection.createStatement();
statement.executeUpdate("drop database if exists " + dbName);
statement.executeUpdate("create database if not exists " + dbName);
statement.executeUpdate("use " + dbName);
String createTableSql = "create table " + stbName + "(ts timestamp, name binary(6))";
statement.executeUpdate(createTableSql);
}
@Test
public void testQueryBinaryData() throws SQLException{
String insertSql = "insert into " + stbName + " values(now, 'taosda')";
System.out.println(insertSql);
statement.executeUpdate(insertSql);
String querySql = "select * from " + stbName;
ResultSet rs = statement.executeQuery(querySql);
while(rs.next()) {
String name = rs.getString(2) + "001";
System.out.println("name = " + name);
assertEquals(name, "taosda001");
}
rs.close();
}
@After
public void close() throws Exception {
statement.close();
connection.close();
Thread.sleep(10);
}
}
\ No newline at end of file
...@@ -11,10 +11,12 @@ AUX_SOURCE_DIRECTORY(src SRC) ...@@ -11,10 +11,12 @@ AUX_SOURCE_DIRECTORY(src SRC)
IF (TD_LINUX) IF (TD_LINUX)
ADD_EXECUTABLE(taosd ${SRC}) ADD_EXECUTABLE(taosd ${SRC})
TARGET_LINK_LIBRARIES(taosd mnode monitor http tsdb twal vnode cJson lz4)
IF (TD_SOMODE_STATIC) IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(taosd mnode taos_static monitor http mqtt tsdb twal vnode cJson lz4 balance sync) TARGET_LINK_LIBRARIES(taosd taos_static)
ELSE () ELSE ()
TARGET_LINK_LIBRARIES(taosd mnode taos monitor http mqtt tsdb twal vnode cJson lz4 balance sync) TARGET_LINK_LIBRARIES(taosd taos)
ENDIF () ENDIF ()
IF (TD_ACCOUNT) IF (TD_ACCOUNT)
...@@ -25,6 +27,14 @@ IF (TD_LINUX) ...@@ -25,6 +27,14 @@ IF (TD_LINUX)
TARGET_LINK_LIBRARIES(taosd grant) TARGET_LINK_LIBRARIES(taosd grant)
ENDIF () ENDIF ()
IF (TD_MQTT)
TARGET_LINK_LIBRARIES(taosd mqtt)
ENDIF ()
IF (TD_SYNC)
TARGET_LINK_LIBRARIES(taosd balance sync)
ENDIF ()
SET(PREPARE_ENV_CMD "prepare_env_cmd") SET(PREPARE_ENV_CMD "prepare_env_cmd")
SET(PREPARE_ENV_TARGET "prepare_env_target") SET(PREPARE_ENV_TARGET "prepare_env_target")
ADD_CUSTOM_COMMAND(OUTPUT ${PREPARE_ENV_CMD} ADD_CUSTOM_COMMAND(OUTPUT ${PREPARE_ENV_CMD}
......
...@@ -611,7 +611,7 @@ static bool dnodeReadMnodeInfos() { ...@@ -611,7 +611,7 @@ static bool dnodeReadMnodeInfos() {
} }
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
cJSON* nodeInfo = cJSON_GetArrayItem(nodeInfos, i); cJSON *nodeInfo = cJSON_GetArrayItem(nodeInfos, i);
if (nodeInfo == NULL) continue; if (nodeInfo == NULL) continue;
cJSON *nodeId = cJSON_GetObjectItem(nodeInfo, "nodeId"); cJSON *nodeId = cJSON_GetObjectItem(nodeInfo, "nodeId");
...@@ -627,7 +627,7 @@ static bool dnodeReadMnodeInfos() { ...@@ -627,7 +627,7 @@ static bool dnodeReadMnodeInfos() {
goto PARSE_OVER; goto PARSE_OVER;
} }
strncpy(tsDMnodeInfos.nodeInfos[i].nodeEp, nodeEp->valuestring, TSDB_EP_LEN); strncpy(tsDMnodeInfos.nodeInfos[i].nodeEp, nodeEp->valuestring, TSDB_EP_LEN);
} }
ret = true; ret = true;
......
...@@ -62,6 +62,7 @@ static void dnodeAllocModules() { ...@@ -62,6 +62,7 @@ static void dnodeAllocModules() {
dnodeSetModuleStatus(TSDB_MOD_HTTP); dnodeSetModuleStatus(TSDB_MOD_HTTP);
} }
#ifdef _MQTT
tsModule[TSDB_MOD_MQTT].enable = (tsEnableMqttModule == 1); tsModule[TSDB_MOD_MQTT].enable = (tsEnableMqttModule == 1);
tsModule[TSDB_MOD_MQTT].name = "mqtt"; tsModule[TSDB_MOD_MQTT].name = "mqtt";
tsModule[TSDB_MOD_MQTT].initFp = mqttInitSystem; tsModule[TSDB_MOD_MQTT].initFp = mqttInitSystem;
...@@ -71,6 +72,7 @@ static void dnodeAllocModules() { ...@@ -71,6 +72,7 @@ static void dnodeAllocModules() {
if (tsEnableMqttModule) { if (tsEnableMqttModule) {
dnodeSetModuleStatus(TSDB_MOD_MQTT); dnodeSetModuleStatus(TSDB_MOD_MQTT);
} }
#endif
tsModule[TSDB_MOD_MONITOR].enable = (tsEnableMonitorModule == 1); tsModule[TSDB_MOD_MONITOR].enable = (tsEnableMonitorModule == 1);
tsModule[TSDB_MOD_MONITOR].name = "monitor"; tsModule[TSDB_MOD_MONITOR].name = "monitor";
......
...@@ -154,15 +154,15 @@ static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char ...@@ -154,15 +154,15 @@ static int dnodeRetrieveUserAuthInfo(char *user, char *spi, char *encrypt, char
rpcMsg.contLen = sizeof(SDMAuthMsg); rpcMsg.contLen = sizeof(SDMAuthMsg);
rpcMsg.msgType = TSDB_MSG_TYPE_DM_AUTH; rpcMsg.msgType = TSDB_MSG_TYPE_DM_AUTH;
dDebug("user:%s, send auth msg to mnode", user); dDebug("user:%s, send auth msg to mnodes", user);
SRpcMsg rpcRsp = {0}; SRpcMsg rpcRsp = {0};
dnodeSendMsgToDnodeRecv(&rpcMsg, &rpcRsp); dnodeSendMsgToDnodeRecv(&rpcMsg, &rpcRsp);
if (rpcRsp.code != 0) { if (rpcRsp.code != 0) {
dError("user:%s, auth msg received from mnode, error:%s", user, tstrerror(rpcRsp.code)); dError("user:%s, auth msg received from mnodes, error:%s", user, tstrerror(rpcRsp.code));
} else { } else {
SDMAuthRsp *pRsp = rpcRsp.pCont; SDMAuthRsp *pRsp = rpcRsp.pCont;
dDebug("user:%s, auth msg received from mnode", user); dDebug("user:%s, auth msg received from mnodes", user);
memcpy(secret, pRsp->secret, TSDB_KEY_LEN); memcpy(secret, pRsp->secret, TSDB_KEY_LEN);
memcpy(ckey, pRsp->ckey, TSDB_KEY_LEN); memcpy(ckey, pRsp->ckey, TSDB_KEY_LEN);
*spi = pRsp->spi; *spi = pRsp->spi;
......
...@@ -272,6 +272,13 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size); ...@@ -272,6 +272,13 @@ void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size);
#define TSDB_SHOW_SQL_LEN 64 #define TSDB_SHOW_SQL_LEN 64
#define TSDB_SLOW_QUERY_SQL_LEN 512 #define TSDB_SLOW_QUERY_SQL_LEN 512
#define TSDB_MQTT_HOSTNAME_LEN 64
#define TSDB_MQTT_PORT_LEN 8
#define TSDB_MQTT_USER_LEN 24
#define TSDB_MQTT_PASS_LEN 24
#define TSDB_MQTT_TOPIC_LEN 64
#define TSDB_MQTT_CLIENT_ID_LEN 32
#define TSDB_METER_STATE_OFFLINE 0 #define TSDB_METER_STATE_OFFLINE 0
#define TSDB_METER_STATE_ONLLINE 1 #define TSDB_METER_STATE_ONLLINE 1
......
...@@ -19,11 +19,11 @@ ...@@ -19,11 +19,11 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <stdint.h>
int32_t mqttInitSystem(); int32_t mqttInitSystem();
int32_t mqttStartSystem(); int32_t mqttStartSystem();
void mqttStopSystem(); void mqttStopSystem();
void mqttCleanUpSystem(); void mqttCleanUpSystem();
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -38,6 +38,10 @@ extern "C" { ...@@ -38,6 +38,10 @@ extern "C" {
#define TSDB_STATUS_COMMIT_START 1 #define TSDB_STATUS_COMMIT_START 1
#define TSDB_STATUS_COMMIT_OVER 2 #define TSDB_STATUS_COMMIT_OVER 2
// TSDB STATE DEFINITION
#define TSDB_STATE_OK 0x0
#define TSDB_STATE_BAD_FILE 0x1
// --------- TSDB APPLICATION HANDLE DEFINITION // --------- TSDB APPLICATION HANDLE DEFINITION
typedef struct { typedef struct {
void *appH; void *appH;
...@@ -80,6 +84,7 @@ int32_t tsdbDropRepo(char *rootDir); ...@@ -80,6 +84,7 @@ int32_t tsdbDropRepo(char *rootDir);
TSDB_REPO_T *tsdbOpenRepo(char *rootDir, STsdbAppH *pAppH); TSDB_REPO_T *tsdbOpenRepo(char *rootDir, STsdbAppH *pAppH);
void tsdbCloseRepo(TSDB_REPO_T *repo, int toCommit); void tsdbCloseRepo(TSDB_REPO_T *repo, int toCommit);
int32_t tsdbConfigRepo(TSDB_REPO_T *repo, STsdbCfg *pCfg); int32_t tsdbConfigRepo(TSDB_REPO_T *repo, STsdbCfg *pCfg);
int tsdbGetState(TSDB_REPO_T *repo);
// --------- TSDB TABLE DEFINITION // --------- TSDB TABLE DEFINITION
typedef struct { typedef struct {
......
...@@ -101,127 +101,126 @@ ...@@ -101,127 +101,126 @@
#define TK_CONNS 83 #define TK_CONNS 83
#define TK_STATE 84 #define TK_STATE 84
#define TK_KEEP 85 #define TK_KEEP 85
#define TK_MAXTABLES 86 #define TK_CACHE 86
#define TK_CACHE 87 #define TK_REPLICA 87
#define TK_REPLICA 88 #define TK_QUORUM 88
#define TK_QUORUM 89 #define TK_DAYS 89
#define TK_DAYS 90 #define TK_MINROWS 90
#define TK_MINROWS 91 #define TK_MAXROWS 91
#define TK_MAXROWS 92 #define TK_BLOCKS 92
#define TK_BLOCKS 93 #define TK_CTIME 93
#define TK_CTIME 94 #define TK_WAL 94
#define TK_WAL 95 #define TK_FSYNC 95
#define TK_FSYNC 96 #define TK_COMP 96
#define TK_COMP 97 #define TK_PRECISION 97
#define TK_PRECISION 98 #define TK_LP 98
#define TK_LP 99 #define TK_RP 99
#define TK_RP 100 #define TK_TAGS 100
#define TK_TAGS 101 #define TK_USING 101
#define TK_USING 102 #define TK_AS 102
#define TK_AS 103 #define TK_COMMA 103
#define TK_COMMA 104 #define TK_NULL 104
#define TK_NULL 105 #define TK_SELECT 105
#define TK_SELECT 106 #define TK_UNION 106
#define TK_UNION 107 #define TK_ALL 107
#define TK_ALL 108 #define TK_FROM 108
#define TK_FROM 109 #define TK_VARIABLE 109
#define TK_VARIABLE 110 #define TK_INTERVAL 110
#define TK_INTERVAL 111 #define TK_FILL 111
#define TK_FILL 112 #define TK_SLIDING 112
#define TK_SLIDING 113 #define TK_ORDER 113
#define TK_ORDER 114 #define TK_BY 114
#define TK_BY 115 #define TK_ASC 115
#define TK_ASC 116 #define TK_DESC 116
#define TK_DESC 117 #define TK_GROUP 117
#define TK_GROUP 118 #define TK_HAVING 118
#define TK_HAVING 119 #define TK_LIMIT 119
#define TK_LIMIT 120 #define TK_OFFSET 120
#define TK_OFFSET 121 #define TK_SLIMIT 121
#define TK_SLIMIT 122 #define TK_SOFFSET 122
#define TK_SOFFSET 123 #define TK_WHERE 123
#define TK_WHERE 124 #define TK_NOW 124
#define TK_NOW 125 #define TK_RESET 125
#define TK_RESET 126 #define TK_QUERY 126
#define TK_QUERY 127 #define TK_ADD 127
#define TK_ADD 128 #define TK_COLUMN 128
#define TK_COLUMN 129 #define TK_TAG 129
#define TK_TAG 130 #define TK_CHANGE 130
#define TK_CHANGE 131 #define TK_SET 131
#define TK_SET 132 #define TK_KILL 132
#define TK_KILL 133 #define TK_CONNECTION 133
#define TK_CONNECTION 134 #define TK_STREAM 134
#define TK_STREAM 135 #define TK_COLON 135
#define TK_COLON 136 #define TK_ABORT 136
#define TK_ABORT 137 #define TK_AFTER 137
#define TK_AFTER 138 #define TK_ATTACH 138
#define TK_ATTACH 139 #define TK_BEFORE 139
#define TK_BEFORE 140 #define TK_BEGIN 140
#define TK_BEGIN 141 #define TK_CASCADE 141
#define TK_CASCADE 142 #define TK_CLUSTER 142
#define TK_CLUSTER 143 #define TK_CONFLICT 143
#define TK_CONFLICT 144 #define TK_COPY 144
#define TK_COPY 145 #define TK_DEFERRED 145
#define TK_DEFERRED 146 #define TK_DELIMITERS 146
#define TK_DELIMITERS 147 #define TK_DETACH 147
#define TK_DETACH 148 #define TK_EACH 148
#define TK_EACH 149 #define TK_END 149
#define TK_END 150 #define TK_EXPLAIN 150
#define TK_EXPLAIN 151 #define TK_FAIL 151
#define TK_FAIL 152 #define TK_FOR 152
#define TK_FOR 153 #define TK_IGNORE 153
#define TK_IGNORE 154 #define TK_IMMEDIATE 154
#define TK_IMMEDIATE 155 #define TK_INITIALLY 155
#define TK_INITIALLY 156 #define TK_INSTEAD 156
#define TK_INSTEAD 157 #define TK_MATCH 157
#define TK_MATCH 158 #define TK_KEY 158
#define TK_KEY 159 #define TK_OF 159
#define TK_OF 160 #define TK_RAISE 160
#define TK_RAISE 161 #define TK_REPLACE 161
#define TK_REPLACE 162 #define TK_RESTRICT 162
#define TK_RESTRICT 163 #define TK_ROW 163
#define TK_ROW 164 #define TK_STATEMENT 164
#define TK_STATEMENT 165 #define TK_TRIGGER 165
#define TK_TRIGGER 166 #define TK_VIEW 166
#define TK_VIEW 167 #define TK_COUNT 167
#define TK_COUNT 168 #define TK_SUM 168
#define TK_SUM 169 #define TK_AVG 169
#define TK_AVG 170 #define TK_MIN 170
#define TK_MIN 171 #define TK_MAX 171
#define TK_MAX 172 #define TK_FIRST 172
#define TK_FIRST 173 #define TK_LAST 173
#define TK_LAST 174 #define TK_TOP 174
#define TK_TOP 175 #define TK_BOTTOM 175
#define TK_BOTTOM 176 #define TK_STDDEV 176
#define TK_STDDEV 177 #define TK_PERCENTILE 177
#define TK_PERCENTILE 178 #define TK_APERCENTILE 178
#define TK_APERCENTILE 179 #define TK_LEASTSQUARES 179
#define TK_LEASTSQUARES 180 #define TK_HISTOGRAM 180
#define TK_HISTOGRAM 181 #define TK_DIFF 181
#define TK_DIFF 182 #define TK_SPREAD 182
#define TK_SPREAD 183 #define TK_TWA 183
#define TK_TWA 184 #define TK_INTERP 184
#define TK_INTERP 185 #define TK_LAST_ROW 185
#define TK_LAST_ROW 186 #define TK_RATE 186
#define TK_RATE 187 #define TK_IRATE 187
#define TK_IRATE 188 #define TK_SUM_RATE 188
#define TK_SUM_RATE 189 #define TK_SUM_IRATE 189
#define TK_SUM_IRATE 190 #define TK_AVG_RATE 190
#define TK_AVG_RATE 191 #define TK_AVG_IRATE 191
#define TK_AVG_IRATE 192 #define TK_TBID 192
#define TK_TBID 193 #define TK_SEMI 193
#define TK_SEMI 194 #define TK_NONE 194
#define TK_NONE 195 #define TK_PREV 195
#define TK_PREV 196 #define TK_LINEAR 196
#define TK_LINEAR 197 #define TK_IMPORT 197
#define TK_IMPORT 198 #define TK_METRIC 198
#define TK_METRIC 199 #define TK_TBNAME 199
#define TK_TBNAME 200 #define TK_JOIN 200
#define TK_JOIN 201 #define TK_METRICS 201
#define TK_METRICS 202 #define TK_STABLE 202
#define TK_STABLE 203 #define TK_INSERT 203
#define TK_INSERT 204 #define TK_INTO 204
#define TK_INTO 205 #define TK_VALUES 205
#define TK_VALUES 206
#define TK_SPACE 300 #define TK_SPACE 300
......
...@@ -409,7 +409,7 @@ void set_terminal_mode() { ...@@ -409,7 +409,7 @@ void set_terminal_mode() {
} }
} }
void get_history_path(char *history) { sprintf(history, "%s/%s", getpwuid(getuid())->pw_dir, HISTORY_FILE); } void get_history_path(char *history) { sprintf(history, "%s/%s", getenv("HOME"), HISTORY_FILE); }
void clearScreen(int ecmd_pos, int cursor_pos) { void clearScreen(int ecmd_pos, int cursor_pos) {
struct winsize w; struct winsize w;
......
...@@ -211,8 +211,8 @@ static int32_t mnodeCreateRootAcct() { ...@@ -211,8 +211,8 @@ static int32_t mnodeCreateRootAcct() {
strcpy(pAcct->user, TSDB_DEFAULT_USER); strcpy(pAcct->user, TSDB_DEFAULT_USER);
taosEncryptPass((uint8_t *)TSDB_DEFAULT_PASS, strlen(TSDB_DEFAULT_PASS), pAcct->pass); taosEncryptPass((uint8_t *)TSDB_DEFAULT_PASS, strlen(TSDB_DEFAULT_PASS), pAcct->pass);
pAcct->cfg = (SAcctCfg){ pAcct->cfg = (SAcctCfg){
.maxUsers = 10, .maxUsers = 128,
.maxDbs = 64, .maxDbs = 128,
.maxTimeSeries = INT32_MAX, .maxTimeSeries = INT32_MAX,
.maxConnections = 1024, .maxConnections = 1024,
.maxStreams = 1000, .maxStreams = 1000,
......
...@@ -242,6 +242,7 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) { ...@@ -242,6 +242,7 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) {
return TSDB_CODE_MND_INVALID_DB_OPTION; return TSDB_CODE_MND_INVALID_DB_OPTION;
} }
#if 0
if (pCfg->daysToKeep2 < TSDB_MIN_KEEP || pCfg->daysToKeep2 > pCfg->daysToKeep) { if (pCfg->daysToKeep2 < TSDB_MIN_KEEP || pCfg->daysToKeep2 > pCfg->daysToKeep) {
mError("invalid db option daysToKeep2:%d valid range: [%d, %d]", pCfg->daysToKeep, TSDB_MIN_KEEP, pCfg->daysToKeep); mError("invalid db option daysToKeep2:%d valid range: [%d, %d]", pCfg->daysToKeep, TSDB_MIN_KEEP, pCfg->daysToKeep);
return TSDB_CODE_MND_INVALID_DB_OPTION; return TSDB_CODE_MND_INVALID_DB_OPTION;
...@@ -251,6 +252,7 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) { ...@@ -251,6 +252,7 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) {
mError("invalid db option daysToKeep1:%d valid range: [%d, %d]", pCfg->daysToKeep1, TSDB_MIN_KEEP, pCfg->daysToKeep2); mError("invalid db option daysToKeep1:%d valid range: [%d, %d]", pCfg->daysToKeep1, TSDB_MIN_KEEP, pCfg->daysToKeep2);
return TSDB_CODE_MND_INVALID_DB_OPTION; return TSDB_CODE_MND_INVALID_DB_OPTION;
} }
#endif
if (pCfg->maxRowsPerFileBlock < TSDB_MIN_MAX_ROW_FBLOCK || pCfg->maxRowsPerFileBlock > TSDB_MAX_MAX_ROW_FBLOCK) { if (pCfg->maxRowsPerFileBlock < TSDB_MIN_MAX_ROW_FBLOCK || pCfg->maxRowsPerFileBlock > TSDB_MAX_MAX_ROW_FBLOCK) {
mError("invalid db option maxRowsPerFileBlock:%d valid range: [%d, %d]", pCfg->maxRowsPerFileBlock, mError("invalid db option maxRowsPerFileBlock:%d valid range: [%d, %d]", pCfg->maxRowsPerFileBlock,
...@@ -310,6 +312,13 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) { ...@@ -310,6 +312,13 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) {
return TSDB_CODE_MND_INVALID_DB_OPTION; return TSDB_CODE_MND_INVALID_DB_OPTION;
} }
#ifndef _SYNC
if (pCfg->replications != 1) {
mError("invalid db option replications:%d can only be 1 in this version", pCfg->replications);
return TSDB_CODE_MND_INVALID_DB_OPTION;
}
#endif
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
......
...@@ -72,12 +72,16 @@ static int32_t mnodeDnodeActionInsert(SSdbOper *pOper) { ...@@ -72,12 +72,16 @@ static int32_t mnodeDnodeActionInsert(SSdbOper *pOper) {
pDnode->lastAccess = tsAccessSquence; pDnode->lastAccess = tsAccessSquence;
} }
mInfo("dnode:%d, fqdn:%s ep:%s port:%d, do insert action", pDnode->dnodeId, pDnode->dnodeFqdn, pDnode->dnodeEp, pDnode->dnodePort);
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
static int32_t mnodeDnodeActionDelete(SSdbOper *pOper) { static int32_t mnodeDnodeActionDelete(SSdbOper *pOper) {
SDnodeObj *pDnode = pOper->pObj; SDnodeObj *pDnode = pOper->pObj;
#ifndef _SYNC
mnodeDropAllDnodeVgroups(pDnode);
#endif
mnodeDropMnodeLocal(pDnode->dnodeId); mnodeDropMnodeLocal(pDnode->dnodeId);
balanceAsyncNotify(); balanceAsyncNotify();
...@@ -585,7 +589,11 @@ static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) { ...@@ -585,7 +589,11 @@ static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) {
mInfo("dnode:%d, start to drop it", pDnode->dnodeId); mInfo("dnode:%d, start to drop it", pDnode->dnodeId);
#ifndef _SYNC
int32_t code = mnodeDropDnode(pDnode, pMsg);
#else
int32_t code = balanceDropDnode(pDnode); int32_t code = balanceDropDnode(pDnode);
#endif
mnodeDecDnodeRef(pDnode); mnodeDecDnodeRef(pDnode);
return code; return code;
} }
...@@ -1043,3 +1051,59 @@ static char* mnodeGetDnodeAlternativeRoleStr(int32_t alternativeRole) { ...@@ -1043,3 +1051,59 @@ static char* mnodeGetDnodeAlternativeRoleStr(int32_t alternativeRole) {
} }
} }
#ifndef _SYNC
int32_t balanceInit() { return TSDB_CODE_SUCCESS; }
void balanceCleanUp() {}
void balanceAsyncNotify() {}
void balanceSyncNotify() {}
void balanceReset() {}
int32_t balanceAlterDnode(struct SDnodeObj *pDnode, int32_t vnodeId, int32_t dnodeId) { return TSDB_CODE_SYN_NOT_ENABLED; }
char* syncRole[] = {
"offline",
"unsynced",
"syncing",
"slave",
"master"
};
int32_t balanceAllocVnodes(SVgObj *pVgroup) {
void * pIter = NULL;
SDnodeObj *pDnode = NULL;
SDnodeObj *pSelDnode = NULL;
float vnodeUsage = 1000.0;
while (1) {
pIter = mnodeGetNextDnode(pIter, &pDnode);
if (pDnode == NULL) break;
if (pDnode->numOfCores > 0 && pDnode->openVnodes < TSDB_MAX_VNODES) {
float openVnodes = pDnode->openVnodes;
if (pDnode->isMgmt) openVnodes += tsMnodeEqualVnodeNum;
float usage = openVnodes / pDnode->numOfCores;
if (usage <= vnodeUsage) {
pSelDnode = pDnode;
vnodeUsage = usage;
}
}
mnodeDecDnodeRef(pDnode);
}
sdbFreeIter(pIter);
if (pSelDnode == NULL) {
mError("failed to alloc vnode to vgroup");
return TSDB_CODE_MND_NO_ENOUGH_DNODES;
}
pVgroup->vnodeGid[0].dnodeId = pSelDnode->dnodeId;
pVgroup->vnodeGid[0].pDnode = pSelDnode;
mDebug("dnode:%d, alloc one vnode to vgroup, openVnodes:%d", pSelDnode->dnodeId, pSelDnode->openVnodes);
return TSDB_CODE_SUCCESS;
}
#endif
...@@ -68,6 +68,7 @@ static int32_t mnodeMnodeActionInsert(SSdbOper *pOper) { ...@@ -68,6 +68,7 @@ static int32_t mnodeMnodeActionInsert(SSdbOper *pOper) {
pDnode->isMgmt = true; pDnode->isMgmt = true;
mnodeDecDnodeRef(pDnode); mnodeDecDnodeRef(pDnode);
mInfo("mnode:%d, fqdn:%s ep:%s port:%d, do insert action", pMnode->mnodeId, pDnode->dnodeFqdn, pDnode->dnodeEp, pDnode->dnodePort);
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
......
...@@ -98,8 +98,10 @@ SConnObj *mnodeCreateConn(char *user, uint32_t ip, uint16_t port) { ...@@ -98,8 +98,10 @@ SConnObj *mnodeCreateConn(char *user, uint32_t ip, uint16_t port) {
.connId = connId, .connId = connId,
.stime = taosGetTimestampMs() .stime = taosGetTimestampMs()
}; };
tstrncpy(connObj.user, user, sizeof(connObj.user)); tstrncpy(connObj.user, user, sizeof(connObj.user));
connObj.lastAccess = connObj.stime;
SConnObj *pConn = taosCachePut(tsMnodeConnCache, &connId, sizeof(int32_t), &connObj, sizeof(connObj), CONN_KEEP_TIME * 1000); SConnObj *pConn = taosCachePut(tsMnodeConnCache, &connId, sizeof(int32_t), &connObj, sizeof(connObj), CONN_KEEP_TIME * 1000);
mDebug("connId:%d, is created, user:%s ip:%s:%u", connId, user, taosIpStr(ip), port); mDebug("connId:%d, is created, user:%s ip:%s:%u", connId, user, taosIpStr(ip), port);
...@@ -244,6 +246,7 @@ static int32_t mnodeRetrieveConns(SShowObj *pShow, char *data, int32_t rows, voi ...@@ -244,6 +246,7 @@ static int32_t mnodeRetrieveConns(SShowObj *pShow, char *data, int32_t rows, voi
cols++; cols++;
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows; pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
if (pConnObj->lastAccess < pConnObj->stime) pConnObj->lastAccess = pConnObj->stime;
*(int64_t *)pWrite = pConnObj->lastAccess; *(int64_t *)pWrite = pConnObj->lastAccess;
cols++; cols++;
......
...@@ -612,8 +612,8 @@ static int sdbWrite(void *param, void *data, int type) { ...@@ -612,8 +612,8 @@ static int sdbWrite(void *param, void *data, int type) {
} else if (action == SDB_ACTION_DELETE) { } else if (action == SDB_ACTION_DELETE) {
void *pRow = sdbGetRowMeta(pTable, pHead->cont); void *pRow = sdbGetRowMeta(pTable, pHead->cont);
if (pRow == NULL) { if (pRow == NULL) {
sdbError("table:%s, failed to get object:%s from wal while dispose delete action", pTable->tableName, sdbDebug("table:%s, object:%s not exist in hash, ignore delete action", pTable->tableName,
pHead->cont); sdbGetKeyStr(pTable, pHead->cont));
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
SSdbOper oper = {.table = pTable, .pObj = pRow}; SSdbOper oper = {.table = pTable, .pObj = pRow};
...@@ -621,8 +621,8 @@ static int sdbWrite(void *param, void *data, int type) { ...@@ -621,8 +621,8 @@ static int sdbWrite(void *param, void *data, int type) {
} else if (action == SDB_ACTION_UPDATE) { } else if (action == SDB_ACTION_UPDATE) {
void *pRow = sdbGetRowMeta(pTable, pHead->cont); void *pRow = sdbGetRowMeta(pTable, pHead->cont);
if (pRow == NULL) { if (pRow == NULL) {
sdbError("table:%s, failed to get object:%s from wal while dispose update action", pTable->tableName, sdbDebug("table:%s, object:%s not exist in hash, ignore update action", pTable->tableName,
pHead->cont); sdbGetKeyStr(pTable, pHead->cont));
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
SSdbOper oper = {.rowSize = pHead->len, .rowData = pHead->cont, .table = pTable}; SSdbOper oper = {.rowSize = pHead->len, .rowData = pHead->cont, .table = pTable};
......
...@@ -1711,14 +1711,20 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) { ...@@ -1711,14 +1711,20 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) {
mnodeDestroyChildTable(pTable); mnodeDestroyChildTable(pTable);
return TSDB_CODE_MND_INVALID_TABLE_NAME; return TSDB_CODE_MND_INVALID_TABLE_NAME;
} }
pTable->suid = pMsg->pSTable->uid; pTable->suid = pMsg->pSTable->uid;
pTable->uid = (((uint64_t)pTable->vgId) << 40) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 16) + pTable->uid = (((uint64_t)pTable->vgId) << 48) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 24) +
(sdbGetVersion() & ((1ul << 16) - 1ul)); ((sdbGetVersion() & ((1ul << 16) - 1ul)) << 8) + (taosRand() & ((1ul << 8) - 1ul));
pTable->superTable = pMsg->pSTable; pTable->superTable = pMsg->pSTable;
} else { } else {
pTable->uid = (((uint64_t)pTable->vgId) << 40) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 16) + if (pTable->info.type == TSDB_SUPER_TABLE) {
(sdbGetVersion() & ((1ul << 16) - 1ul)); int64_t us = taosGetTimestampUs();
pTable->uid = (us << 24) + ((sdbGetVersion() & ((1ul << 16) - 1ul)) << 8) + (taosRand() & ((1ul << 8) - 1ul));
} else {
pTable->uid = (((uint64_t)pTable->vgId) << 48) + ((((uint64_t)pTable->sid) & ((1ul << 24) - 1ul)) << 24) +
((sdbGetVersion() & ((1ul << 16) - 1ul)) << 8) + (taosRand() & ((1ul << 8) - 1ul));
}
pTable->sversion = 0; pTable->sversion = 0;
pTable->numOfColumns = htons(pCreate->numOfColumns); pTable->numOfColumns = htons(pCreate->numOfColumns);
pTable->sqlLen = htons(pCreate->sqlLen); pTable->sqlLen = htons(pCreate->sqlLen);
......
...@@ -581,7 +581,7 @@ void mnodeDropAllUsers(SAcctObj *pAcct) { ...@@ -581,7 +581,7 @@ void mnodeDropAllUsers(SAcctObj *pAcct) {
int32_t mnodeRetriveAuth(char *user, char *spi, char *encrypt, char *secret, char *ckey) { int32_t mnodeRetriveAuth(char *user, char *spi, char *encrypt, char *secret, char *ckey) {
if (!sdbIsMaster()) { if (!sdbIsMaster()) {
*secret = 0; *secret = 0;
mDebug("user:%s, failed to auth user, reason:%s", user, tstrerror(TSDB_CODE_APP_NOT_READY)); mDebug("user:%s, failed to auth user, mnode is not master", user);
return TSDB_CODE_APP_NOT_READY; return TSDB_CODE_APP_NOT_READY;
} }
......
...@@ -36,7 +36,7 @@ extern "C" { ...@@ -36,7 +36,7 @@ extern "C" {
#include "osLinux32.h" #include "osLinux32.h"
#endif #endif
#ifdef _TD_ALPINE #ifdef _ALPINE
#include "osAlpine.h" #include "osAlpine.h"
#endif #endif
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef TDENGINE_OS_LINUX64_H #ifndef TDENGINE_OS_ALPINE_H
#define TDENGINE_OS_LINUX64_H #define TDENGINE_OS_ALPINE_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
......
...@@ -24,6 +24,7 @@ extern "C" { ...@@ -24,6 +24,7 @@ extern "C" {
void taosRemoveDir(char *rootDir); void taosRemoveDir(char *rootDir);
int taosMkDir(const char *pathname, mode_t mode); int taosMkDir(const char *pathname, mode_t mode);
void taosRename(char* oldName, char *newName); void taosRename(char* oldName, char *newName);
void taosRemoveOldLogFiles(char *rootDir, int32_t keepDays);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -75,7 +75,9 @@ extern "C" { ...@@ -75,7 +75,9 @@ extern "C" {
#include <fcntl.h> #include <fcntl.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#include <sys/resource.h> #include <sys/resource.h>
#ifndef _ALPINE
#include <error.h> #include <error.h>
#endif
#include <linux/sysctl.h> #include <linux/sysctl.h>
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <Winsock2.h> #include <Winsock2.h>
#include <time.h> #include <time.h>
#include <inttypes.h> #include <inttypes.h>
#include <conio.h>
#include "msvcProcess.h" #include "msvcProcess.h"
#include "msvcDirect.h" #include "msvcDirect.h"
#include "msvcFcntl.h" #include "msvcFcntl.h"
...@@ -58,8 +59,6 @@ extern "C" { ...@@ -58,8 +59,6 @@ extern "C" {
int32_t BUILDIN_CTZL(uint64_t val); int32_t BUILDIN_CTZL(uint64_t val);
int32_t BUILDIN_CTZ(uint32_t val); int32_t BUILDIN_CTZ(uint32_t val);
#define TAOS_OS_FUNC_DIR
#define TAOS_OS_FUNC_FILE #define TAOS_OS_FUNC_FILE
#define TAOS_OS_FUNC_FILE_ISREG #define TAOS_OS_FUNC_FILE_ISREG
#define TAOS_OS_FUNC_FILE_ISDIR #define TAOS_OS_FUNC_FILE_ISDIR
......
...@@ -18,8 +18,6 @@ ...@@ -18,8 +18,6 @@
#include "tglobal.h" #include "tglobal.h"
#include "tulog.h" #include "tulog.h"
#ifndef TAOS_OS_FUNC_DIR
void taosRemoveDir(char *rootDir) { void taosRemoveDir(char *rootDir) {
DIR *dir = opendir(rootDir); DIR *dir = opendir(rootDir);
if (dir == NULL) return; if (dir == NULL) return;
...@@ -51,18 +49,54 @@ int taosMkDir(const char *path, mode_t mode) { ...@@ -51,18 +49,54 @@ int taosMkDir(const char *path, mode_t mode) {
} }
void taosRename(char* oldName, char *newName) { void taosRename(char* oldName, char *newName) {
if (0 == tsEnableVnodeBak) {
uInfo("vnode backup not enabled");
return;
}
// if newName in not empty, rename return fail. // if newName in not empty, rename return fail.
// the newName must be empty or does not exist // the newName must be empty or does not exist
if (rename(oldName, newName)) { if (rename(oldName, newName)) {
uError("%s is modify to %s fail, reason:%s", oldName, newName, strerror(errno)); uError("failed to rename file %s to %s, reason:%s", oldName, newName, strerror(errno));
} else { } else {
uInfo("%s is modify to %s success!", oldName, newName); uInfo("successfully to rename file %s to %s", oldName, newName);
} }
} }
#endif void taosRemoveOldLogFiles(char *rootDir, int32_t keepDays) {
DIR *dir = opendir(rootDir);
if (dir == NULL) return;
int64_t sec = taosGetTimestampSec();
struct dirent *de = NULL;
while ((de = readdir(dir)) != NULL) {
if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) continue;
char filename[1024];
snprintf(filename, 1023, "%s/%s", rootDir, de->d_name);
if (de->d_type & DT_DIR) {
continue;
} else {
// struct stat fState;
// if (stat(fname, &fState) < 0) {
// continue;
// }
int32_t len = (int32_t)strlen(filename);
int64_t fileSec = 0;
for (int i = len - 1; i >= 0; i--) {
if (filename[i] == '.') {
fileSec = atoll(filename + i + 1);
break;
}
}
if (fileSec <= 100) continue;
int32_t days = (int32_t)(ABS(sec - fileSec) / 86400 + 1);
if (days > keepDays) {
(void)remove(filename);
uInfo("file:%s is removed, days:%d keepDays:%d", filename, days, keepDays);
} else {
uTrace("file:%s won't be removed, days:%d keepDays:%d", filename, days, keepDays);
}
}
}
closedir(dir);
rmdir(rootDir);
}
...@@ -579,7 +579,11 @@ void taosSetCoreDump() { ...@@ -579,7 +579,11 @@ void taosSetCoreDump() {
struct rlimit rlim; struct rlimit rlim;
struct rlimit rlim_new; struct rlimit rlim_new;
if (getrlimit(RLIMIT_CORE, &rlim) == 0) { if (getrlimit(RLIMIT_CORE, &rlim) == 0) {
#ifndef _ALPINE
uInfo("the old unlimited para: rlim_cur=%" PRIu64 ", rlim_max=%" PRIu64, rlim.rlim_cur, rlim.rlim_max); uInfo("the old unlimited para: rlim_cur=%" PRIu64 ", rlim_max=%" PRIu64, rlim.rlim_cur, rlim.rlim_max);
#else
uInfo("the old unlimited para: rlim_cur=%llu, rlim_max=%llu", rlim.rlim_cur, rlim.rlim_max);
#endif
rlim_new.rlim_cur = RLIM_INFINITY; rlim_new.rlim_cur = RLIM_INFINITY;
rlim_new.rlim_max = RLIM_INFINITY; rlim_new.rlim_max = RLIM_INFINITY;
if (setrlimit(RLIMIT_CORE, &rlim_new) != 0) { if (setrlimit(RLIMIT_CORE, &rlim_new) != 0) {
...@@ -591,7 +595,11 @@ void taosSetCoreDump() { ...@@ -591,7 +595,11 @@ void taosSetCoreDump() {
} }
if (getrlimit(RLIMIT_CORE, &rlim) == 0) { if (getrlimit(RLIMIT_CORE, &rlim) == 0) {
#ifndef _ALPINE
uInfo("the new unlimited para: rlim_cur=%" PRIu64 ", rlim_max=%" PRIu64, rlim.rlim_cur, rlim.rlim_max); uInfo("the new unlimited para: rlim_cur=%" PRIu64 ", rlim_max=%" PRIu64, rlim.rlim_cur, rlim.rlim_max);
#else
uInfo("the new unlimited para: rlim_cur=%llu, rlim_max=%llu", rlim.rlim_cur, rlim.rlim_max);
#endif
} }
#ifndef _TD_ARM_ #ifndef _TD_ARM_
...@@ -659,4 +667,4 @@ bool taosGetSystemUid(char *uid) { ...@@ -659,4 +667,4 @@ bool taosGetSystemUid(char *uid) {
return false; return false;
} }
#endif #endif
\ No newline at end of file
...@@ -58,11 +58,20 @@ char *strsep(char **stringp, const char *delim) { ...@@ -58,11 +58,20 @@ char *strsep(char **stringp, const char *delim) {
char *getpass(const char *prefix) { char *getpass(const char *prefix) {
static char passwd[TSDB_KEY_LEN] = {0}; static char passwd[TSDB_KEY_LEN] = {0};
memset(passwd, 0, TSDB_KEY_LEN);
printf("%s", prefix); printf("%s", prefix);
scanf("%s", passwd);
char n = getchar(); int32_t index = 0;
char ch;
while (index < TSDB_KEY_LEN) {
ch = getch();
if (ch == '\n' || ch == '\r') {
break;
} else {
passwd[index++] = ch;
}
}
return passwd; return passwd;
} }
...@@ -131,11 +140,11 @@ int tasoUcs4Compare(void *f1_ucs4, void *f2_ucs4, int bytes) { ...@@ -131,11 +140,11 @@ int tasoUcs4Compare(void *f1_ucs4, void *f2_ucs4, int bytes) {
} }
/* Copy memory to memory until the specified number of bytes /* Copy memory to memory until the specified number of bytes
has been copied, return pointer to following byte. has been copied, return pointer to following byte.
Overlap is NOT handled correctly. */ Overlap is NOT handled correctly. */
void *mempcpy(void *dest, const void *src, size_t len) { void *mempcpy(void *dest, const void *src, size_t len) {
return (char*)memcpy(dest, src, len) + len; return (char*)memcpy(dest, src, len) + len;
} }
/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */
......
...@@ -3,4 +3,6 @@ PROJECT(TDengine) ...@@ -3,4 +3,6 @@ PROJECT(TDengine)
ADD_SUBDIRECTORY(monitor) ADD_SUBDIRECTORY(monitor)
ADD_SUBDIRECTORY(http) ADD_SUBDIRECTORY(http)
ADD_SUBDIRECTORY(mqtt) IF (TD_MQTT)
ADD_SUBDIRECTORY(mqtt)
ENDIF ()
\ No newline at end of file
...@@ -11,11 +11,12 @@ AUX_SOURCE_DIRECTORY(src SRC) ...@@ -11,11 +11,12 @@ AUX_SOURCE_DIRECTORY(src SRC)
IF (TD_LINUX) IF (TD_LINUX)
ADD_LIBRARY(http ${SRC}) ADD_LIBRARY(http ${SRC})
TARGET_LINK_LIBRARIES(http z)
IF (TD_SOMODE_STATIC) IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(http taos_static z) TARGET_LINK_LIBRARIES(http taos_static)
ELSE () ELSE ()
TARGET_LINK_LIBRARIES(http taos z) TARGET_LINK_LIBRARIES(http taos)
ENDIF () ENDIF ()
IF (TD_ADMIN) IF (TD_ADMIN)
......
...@@ -2,11 +2,11 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) ...@@ -2,11 +2,11 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(TDengine) PROJECT(TDengine)
INCLUDE_DIRECTORIES(inc) INCLUDE_DIRECTORIES(inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc)
AUX_SOURCE_DIRECTORY(./src SRC) AUX_SOURCE_DIRECTORY(./src SRC)
IF (TD_LINUX) IF (TD_LINUX)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc)
ADD_LIBRARY(monitor ${SRC}) ADD_LIBRARY(monitor ${SRC})
IF (TD_SOMODE_STATIC) IF (TD_SOMODE_STATIC)
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include "tsclient.h" #include "tsclient.h"
#include "dnode.h" #include "dnode.h"
#include "monitor.h" #include "monitor.h"
#include "taoserror.h"
#define monitorFatal(...) { if (monitorDebugFlag & DEBUG_FATAL) { taosPrintLog("MON FATAL ", 255, __VA_ARGS__); }} #define monitorFatal(...) { if (monitorDebugFlag & DEBUG_FATAL) { taosPrintLog("MON FATAL ", 255, __VA_ARGS__); }}
#define monitorError(...) { if (monitorDebugFlag & DEBUG_ERROR) { taosPrintLog("MON ERROR ", 255, __VA_ARGS__); }} #define monitorError(...) { if (monitorDebugFlag & DEBUG_ERROR) { taosPrintLog("MON ERROR ", 255, __VA_ARGS__); }}
...@@ -33,129 +34,159 @@ ...@@ -33,129 +34,159 @@
#define monitorDebug(...) { if (monitorDebugFlag & DEBUG_DEBUG) { taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); }} #define monitorDebug(...) { if (monitorDebugFlag & DEBUG_DEBUG) { taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); }}
#define monitorTrace(...) { if (monitorDebugFlag & DEBUG_TRACE) { taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); }} #define monitorTrace(...) { if (monitorDebugFlag & DEBUG_TRACE) { taosPrintLog("MON ", monitorDebugFlag, __VA_ARGS__); }}
#define SQL_LENGTH 1024 #define SQL_LENGTH 1030
#define LOG_LEN_STR 100 #define LOG_LEN_STR 100
#define IP_LEN_STR TSDB_EP_LEN #define IP_LEN_STR TSDB_EP_LEN
#define CHECK_INTERVAL 1000 #define CHECK_INTERVAL 1000
typedef enum { typedef enum {
MONITOR_CMD_CREATE_DB, MON_CMD_CREATE_DB,
MONITOR_CMD_CREATE_TB_LOG, MON_CMD_CREATE_TB_LOG,
MONITOR_CMD_CREATE_MT_DN, MON_CMD_CREATE_MT_DN,
MONITOR_CMD_CREATE_MT_ACCT, MON_CMD_CREATE_MT_ACCT,
MONITOR_CMD_CREATE_TB_DN, MON_CMD_CREATE_TB_DN,
MONITOR_CMD_CREATE_TB_ACCT_ROOT, MON_CMD_CREATE_TB_ACCT_ROOT,
MONITOR_CMD_CREATE_TB_SLOWQUERY, MON_CMD_CREATE_TB_SLOWQUERY,
MONITOR_CMD_MAX MON_CMD_MAX
} EMonitorCommand; } EMonitorCommand;
typedef enum { typedef enum {
MONITOR_STATE_UN_INIT, MON_STATE_NOT_INIT,
MONITOR_STATE_INITIALIZING, MON_STATE_INITED
MONITOR_STATE_INITIALIZED,
MONITOR_STATE_STOPPED
} EMonitorState; } EMonitorState;
typedef struct { typedef struct {
void * conn; pthread_t thread;
void * timer; void * conn;
char ep[TSDB_EP_LEN]; char ep[TSDB_EP_LEN];
int8_t cmdIndex; int8_t cmdIndex;
int8_t state; int8_t state;
char sql[SQL_LENGTH + 1]; int8_t start; // enable/disable by mnode
void * initTimer; int8_t quiting; // taosd is quiting
void * diskTimer; char sql[SQL_LENGTH + 1];
} SMonitorConn; } SMonitorConn;
static SMonitorConn tsMonitorConn; static SMonitorConn tsMonitor = {0};
static void monitorInitConn(void *para, void *unused); static void monitorSaveSystemInfo();
static void monitorInitConnCb(void *param, TAOS_RES *result, int32_t code); static void *monitorThreadFunc(void *param);
static void monitorInitDatabase(); static void monitorBuildMonitorSql(char *sql, int32_t cmd);
static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code);
static void monitorStartTimer();
static void monitorSaveSystemInfo();
extern int32_t (*monitorStartSystemFp)(); extern int32_t (*monitorStartSystemFp)();
extern void (*monitorStopSystemFp)(); extern void (*monitorStopSystemFp)();
extern void (*monitorExecuteSQLFp)(char *sql); extern void (*monitorExecuteSQLFp)(char *sql);
static void monitorCheckDiskUsage(void *para, void *unused) {
taosGetDisk();
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer);
}
int32_t monitorInitSystem() { int32_t monitorInitSystem() {
taos_init(); if (tsMonitor.ep[0] == 0) {
taosTmrReset(monitorCheckDiskUsage, CHECK_INTERVAL, NULL, tscTmr, &tsMonitorConn.diskTimer); strcpy(tsMonitor.ep, tsLocalEp);
}
int len = strlen(tsMonitor.ep);
for (int i = 0; i < len; ++i) {
if (tsMonitor.ep[i] == ':' || tsMonitor.ep[i] == '-' || tsMonitor.ep[i] == '.') {
tsMonitor.ep[i] = '_';
}
}
pthread_attr_t thAttr;
pthread_attr_init(&thAttr);
pthread_attr_setdetachstate(&thAttr, PTHREAD_CREATE_JOINABLE);
if (pthread_create(&tsMonitor.thread, &thAttr, monitorThreadFunc, NULL)) {
monitorError("failed to create thread to for monitor module, reason:%s", strerror(errno));
return -1;
}
pthread_attr_destroy(&thAttr);
monitorDebug("monitor thread is launched");
monitorStartSystemFp = monitorStartSystem; monitorStartSystemFp = monitorStartSystem;
monitorStopSystemFp = monitorStopSystem; monitorStopSystemFp = monitorStopSystem;
return 0; return 0;
} }
int32_t monitorStartSystem() { int32_t monitorStartSystem() {
monitorInfo("start monitor module"); taos_init();
monitorInitSystem(); tsMonitor.start = 1;
taosTmrReset(monitorInitConn, 10, NULL, tscTmr, &tsMonitorConn.initTimer); monitorExecuteSQLFp = monitorExecuteSQL;
monitorInfo("monitor module start");
return 0; return 0;
} }
static void monitorStartSystemRetry() { static void *monitorThreadFunc(void *param) {
if (tsMonitorConn.initTimer != NULL) { monitorDebug("starting to initialize monitor module ...");
taosTmrReset(monitorInitConn, 3000, NULL, tscTmr, &tsMonitorConn.initTimer);
}
}
static void monitorInitConn(void *para, void *unused) { while (1) {
if (dnodeGetDnodeId() <= 0) { static int32_t accessTimes = 0;
monitorStartSystemRetry(); accessTimes++;
return; taosMsleep(1000);
}
monitorInfo("starting to initialize monitor service ..");
tsMonitorConn.state = MONITOR_STATE_INITIALIZING;
if (tsMonitorConn.ep[0] == 0) if (tsMonitor.quiting) {
strcpy(tsMonitorConn.ep, tsLocalEp); tsMonitor.state = MON_STATE_NOT_INIT;
monitorInfo("monitor thread will quit, for taosd is quiting");
break;
} else {
taosGetDisk();
}
int len = strlen(tsMonitorConn.ep); if (tsMonitor.start == 0) {
for (int i = 0; i < len; ++i) { continue;
if (tsMonitorConn.ep[i] == ':' || tsMonitorConn.ep[i] == '-') { }
tsMonitorConn.ep[i] = '_';
if (dnodeGetDnodeId() <= 0) {
monitorDebug("dnode not initialized, waiting for 3000 ms to start monitor module");
continue;
} }
}
if (tsMonitorConn.conn == NULL) { if (tsMonitor.conn == NULL) {
taos_connect_a(NULL, "monitor", tsInternalPass, "", 0, monitorInitConnCb, &tsMonitorConn, &(tsMonitorConn.conn)); tsMonitor.state = MON_STATE_NOT_INIT;
} else { tsMonitor.conn = taos_connect(NULL, "monitor", tsInternalPass, "", 0);
monitorInitDatabase(); if (tsMonitor.conn == NULL) {
} monitorError("failed to connect to database, reason:%s", tstrerror(terrno));
} continue;
} else {
monitorDebug("connect to database success");
}
}
static void monitorInitConnCb(void *param, TAOS_RES *result, int32_t code) { if (tsMonitor.state == MON_STATE_NOT_INIT) {
// free it firstly in any cases. for (; tsMonitor.cmdIndex < MON_CMD_MAX; ++tsMonitor.cmdIndex) {
taos_free_result(result); monitorBuildMonitorSql(tsMonitor.sql, tsMonitor.cmdIndex);
void *res = taos_query(tsMonitor.conn, tsMonitor.sql);
int code = taos_errno(res);
taos_free_result(res);
if (code != 0) {
monitorError("failed to exec sql:%s, reason:%s", tsMonitor.sql, tstrerror(code));
break;
} else {
monitorDebug("successfully to exec sql:%s", tsMonitor.sql);
}
}
if (tsMonitor.start) {
tsMonitor.state = MON_STATE_INITED;
}
}
if (code != TSDB_CODE_SUCCESS) { if (tsMonitor.state == MON_STATE_INITED) {
monitorError("monitor:%p, connect to database failed, reason:%s", tsMonitorConn.conn, tstrerror(code)); if (accessTimes % tsMonitorInterval == 0) {
taos_close(tsMonitorConn.conn); monitorSaveSystemInfo();
tsMonitorConn.conn = NULL; }
tsMonitorConn.state = MONITOR_STATE_UN_INIT; }
monitorStartSystemRetry();
return;
} }
monitorDebug("monitor:%p, connect to database success, reason:%s", tsMonitorConn.conn, tstrerror(code)); monitorInfo("monitor thread is stopped");
monitorInitDatabase(); return NULL;
} }
static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { static void monitorBuildMonitorSql(char *sql, int32_t cmd) {
memset(sql, 0, SQL_LENGTH); memset(sql, 0, SQL_LENGTH);
if (cmd == MONITOR_CMD_CREATE_DB) { if (cmd == MON_CMD_CREATE_DB) {
snprintf(sql, SQL_LENGTH, snprintf(sql, SQL_LENGTH,
"create database if not exists %s replica 1 days 10 keep 30 cache %d " "create database if not exists %s replica 1 days 10 keep 30 cache %d "
"blocks %d maxtables 16 precision 'us'", "blocks %d precision 'us'",
tsMonitorDbName, TSDB_MIN_CACHE_BLOCK_SIZE, TSDB_MIN_TOTAL_BLOCKS); tsMonitorDbName, TSDB_MIN_CACHE_BLOCK_SIZE, TSDB_MIN_TOTAL_BLOCKS);
} else if (cmd == MONITOR_CMD_CREATE_MT_DN) { } else if (cmd == MON_CMD_CREATE_MT_DN) {
snprintf(sql, SQL_LENGTH, snprintf(sql, SQL_LENGTH,
"create table if not exists %s.dn(ts timestamp" "create table if not exists %s.dn(ts timestamp"
", cpu_taosd float, cpu_system float, cpu_cores int" ", cpu_taosd float, cpu_system float, cpu_cores int"
...@@ -166,10 +197,10 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { ...@@ -166,10 +197,10 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) {
", req_http int, req_select int, req_insert int" ", req_http int, req_select int, req_insert int"
") tags (dnodeid int, fqdn binary(%d))", ") tags (dnodeid int, fqdn binary(%d))",
tsMonitorDbName, TSDB_FQDN_LEN); tsMonitorDbName, TSDB_FQDN_LEN);
} else if (cmd == MONITOR_CMD_CREATE_TB_DN) { } else if (cmd == MON_CMD_CREATE_TB_DN) {
snprintf(sql, SQL_LENGTH, "create table if not exists %s.dn%d using %s.dn tags(%d, '%s')", tsMonitorDbName, snprintf(sql, SQL_LENGTH, "create table if not exists %s.dn%d using %s.dn tags(%d, '%s')", tsMonitorDbName,
dnodeGetDnodeId(), tsMonitorDbName, dnodeGetDnodeId(), tsLocalEp); dnodeGetDnodeId(), tsMonitorDbName, dnodeGetDnodeId(), tsLocalEp);
} else if (cmd == MONITOR_CMD_CREATE_MT_ACCT) { } else if (cmd == MON_CMD_CREATE_MT_ACCT) {
snprintf(sql, SQL_LENGTH, snprintf(sql, SQL_LENGTH,
"create table if not exists %s.acct(ts timestamp " "create table if not exists %s.acct(ts timestamp "
", currentPointsPerSecond bigint, maxPointsPerSecond bigint" ", currentPointsPerSecond bigint, maxPointsPerSecond bigint"
...@@ -185,15 +216,15 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { ...@@ -185,15 +216,15 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) {
", accessState smallint" ", accessState smallint"
") tags (acctId binary(%d))", ") tags (acctId binary(%d))",
tsMonitorDbName, TSDB_USER_LEN); tsMonitorDbName, TSDB_USER_LEN);
} else if (cmd == MONITOR_CMD_CREATE_TB_ACCT_ROOT) { } else if (cmd == MON_CMD_CREATE_TB_ACCT_ROOT) {
snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, TSDB_DEFAULT_USER, snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, TSDB_DEFAULT_USER,
tsMonitorDbName, TSDB_DEFAULT_USER); tsMonitorDbName, TSDB_DEFAULT_USER);
} else if (cmd == MONITOR_CMD_CREATE_TB_SLOWQUERY) { } else if (cmd == MON_CMD_CREATE_TB_SLOWQUERY) {
snprintf(sql, SQL_LENGTH, snprintf(sql, SQL_LENGTH,
"create table if not exists %s.slowquery(ts timestamp, username " "create table if not exists %s.slowquery(ts timestamp, username "
"binary(%d), created_time timestamp, time bigint, sql binary(%d))", "binary(%d), created_time timestamp, time bigint, sql binary(%d))",
tsMonitorDbName, TSDB_TABLE_FNAME_LEN - 1, TSDB_SLOW_QUERY_SQL_LEN); tsMonitorDbName, TSDB_TABLE_FNAME_LEN - 1, TSDB_SLOW_QUERY_SQL_LEN);
} else if (cmd == MONITOR_CMD_CREATE_TB_LOG) { } else if (cmd == MON_CMD_CREATE_TB_LOG) {
snprintf(sql, SQL_LENGTH, snprintf(sql, SQL_LENGTH,
"create table if not exists %s.log(ts timestamp, level tinyint, " "create table if not exists %s.log(ts timestamp, level tinyint, "
"content binary(%d), ipaddr binary(%d))", "content binary(%d), ipaddr binary(%d))",
...@@ -203,75 +234,22 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) { ...@@ -203,75 +234,22 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) {
sql[SQL_LENGTH] = 0; sql[SQL_LENGTH] = 0;
} }
static void monitorInitDatabase() {
if (tsMonitorConn.cmdIndex < MONITOR_CMD_MAX) {
dnodeBuildMonitorSql(tsMonitorConn.sql, tsMonitorConn.cmdIndex);
taos_query_a(tsMonitorConn.conn, tsMonitorConn.sql, monitorInitDatabaseCb, NULL);
} else {
tsMonitorConn.state = MONITOR_STATE_INITIALIZED;
monitorExecuteSQLFp = monitorExecuteSQL;
monitorInfo("monitor service init success");
monitorStartTimer();
}
}
static void monitorInitDatabaseCb(void *param, TAOS_RES *result, int32_t code) {
if (code == TSDB_CODE_MND_TABLE_ALREADY_EXIST || code == TSDB_CODE_MND_DB_ALREADY_EXIST || code >= 0) {
monitorDebug("monitor:%p, sql success, reason:%s, %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql);
if (tsMonitorConn.cmdIndex == MONITOR_CMD_CREATE_TB_LOG) {
monitorInfo("dnode:%s is started", tsLocalEp);
}
tsMonitorConn.cmdIndex++;
monitorInitDatabase();
} else {
monitorError("monitor:%p, sql failed, reason:%s, %s", tsMonitorConn.conn, tstrerror(code), tsMonitorConn.sql);
tsMonitorConn.state = MONITOR_STATE_UN_INIT;
monitorStartSystemRetry();
}
taos_free_result(result);
}
void monitorStopSystem() { void monitorStopSystem() {
if (tsMonitorConn.state == MONITOR_STATE_STOPPED) return; tsMonitor.start = 0;
tsMonitorConn.state = MONITOR_STATE_STOPPED; tsMonitor.state = MON_STATE_NOT_INIT;
monitorExecuteSQLFp = NULL; monitorExecuteSQLFp = NULL;
monitorInfo("monitor module stopped");
monitorInfo("monitor module is stopped");
if (tsMonitorConn.initTimer != NULL) {
taosTmrStopA(&(tsMonitorConn.initTimer));
}
if (tsMonitorConn.timer != NULL) {
taosTmrStopA(&(tsMonitorConn.timer));
}
if (tsMonitorConn.conn != NULL) {
taos_close(tsMonitorConn.conn);
tsMonitorConn.conn = NULL;
}
} }
void monitorCleanUpSystem() { void monitorCleanUpSystem() {
tsMonitor.quiting = 1;
monitorStopSystem(); monitorStopSystem();
monitorInfo("monitor module cleanup"); pthread_join(tsMonitor.thread, NULL);
} if (tsMonitor.conn != NULL) {
taos_close(tsMonitor.conn);
static void monitorStartTimer() { tsMonitor.conn = NULL;
taosTmrReset(monitorSaveSystemInfo, tsMonitorInterval * 1000, NULL, tscTmr, &tsMonitorConn.timer);
}
static void dnodeMontiorLogCallback(void *param, TAOS_RES *result, int32_t code) {
int32_t c = taos_errno(result);
if (c != TSDB_CODE_SUCCESS) {
monitorError("monitor:%p, save %s failed, reason:%s", tsMonitorConn.conn, (char *)param, tstrerror(c));
} else {
int32_t rows = taos_affected_rows(result);
monitorDebug("monitor:%p, save %s succ, rows:%d", tsMonitorConn.conn, (char *)param, rows);
} }
monitorInfo("monitor module is cleaned up");
taos_free_result(result);
} }
// unit is MB // unit is MB
...@@ -279,13 +257,13 @@ static int32_t monitorBuildMemorySql(char *sql) { ...@@ -279,13 +257,13 @@ static int32_t monitorBuildMemorySql(char *sql) {
float sysMemoryUsedMB = 0; float sysMemoryUsedMB = 0;
bool suc = taosGetSysMemory(&sysMemoryUsedMB); bool suc = taosGetSysMemory(&sysMemoryUsedMB);
if (!suc) { if (!suc) {
monitorError("monitor:%p, get sys memory info failed.", tsMonitorConn.conn); monitorDebug("failed to get sys memory info");
} }
float procMemoryUsedMB = 0; float procMemoryUsedMB = 0;
suc = taosGetProcMemory(&procMemoryUsedMB); suc = taosGetProcMemory(&procMemoryUsedMB);
if (!suc) { if (!suc) {
monitorError("monitor:%p, get proc memory info failed.", tsMonitorConn.conn); monitorDebug("failed to get proc memory info");
} }
return sprintf(sql, ", %f, %f, %d", procMemoryUsedMB, sysMemoryUsedMB, tsTotalMemoryMB); return sprintf(sql, ", %f, %f, %d", procMemoryUsedMB, sysMemoryUsedMB, tsTotalMemoryMB);
...@@ -296,11 +274,11 @@ static int32_t monitorBuildCpuSql(char *sql) { ...@@ -296,11 +274,11 @@ static int32_t monitorBuildCpuSql(char *sql) {
float sysCpuUsage = 0, procCpuUsage = 0; float sysCpuUsage = 0, procCpuUsage = 0;
bool suc = taosGetCpuUsage(&sysCpuUsage, &procCpuUsage); bool suc = taosGetCpuUsage(&sysCpuUsage, &procCpuUsage);
if (!suc) { if (!suc) {
monitorError("monitor:%p, get cpu usage failed.", tsMonitorConn.conn); monitorDebug("failed to get cpu usage");
} }
if (sysCpuUsage <= procCpuUsage) { if (sysCpuUsage <= procCpuUsage) {
sysCpuUsage = procCpuUsage + (float)0.1; sysCpuUsage = procCpuUsage + 0.1f;
} }
return sprintf(sql, ", %f, %f, %d", procCpuUsage, sysCpuUsage, tsNumOfCores); return sprintf(sql, ", %f, %f, %d", procCpuUsage, sysCpuUsage, tsNumOfCores);
...@@ -316,14 +294,14 @@ static int32_t monitorBuildBandSql(char *sql) { ...@@ -316,14 +294,14 @@ static int32_t monitorBuildBandSql(char *sql) {
float bandSpeedKb = 0; float bandSpeedKb = 0;
bool suc = taosGetBandSpeed(&bandSpeedKb); bool suc = taosGetBandSpeed(&bandSpeedKb);
if (!suc) { if (!suc) {
monitorError("monitor:%p, get bandwidth speed failed.", tsMonitorConn.conn); monitorDebug("failed to get bandwidth speed");
} }
return sprintf(sql, ", %f", bandSpeedKb); return sprintf(sql, ", %f", bandSpeedKb);
} }
static int32_t monitorBuildReqSql(char *sql) { static int32_t monitorBuildReqSql(char *sql) {
SDnodeStatisInfo info = dnodeGetStatisInfo(); SDnodeStatisInfo info = dnodeGetStatisInfo();
return sprintf(sql, ", %d, %d, %d)", info.httpReqNum, info.queryReqNum, info.submitReqNum); return sprintf(sql, ", %d, %d, %d)", info.httpReqNum, info.queryReqNum, info.submitReqNum);
} }
...@@ -331,20 +309,15 @@ static int32_t monitorBuildIoSql(char *sql) { ...@@ -331,20 +309,15 @@ static int32_t monitorBuildIoSql(char *sql) {
float readKB = 0, writeKB = 0; float readKB = 0, writeKB = 0;
bool suc = taosGetProcIO(&readKB, &writeKB); bool suc = taosGetProcIO(&readKB, &writeKB);
if (!suc) { if (!suc) {
monitorError("monitor:%p, get io info failed.", tsMonitorConn.conn); monitorDebug("failed to get io info");
} }
return sprintf(sql, ", %f, %f", readKB, writeKB); return sprintf(sql, ", %f, %f", readKB, writeKB);
} }
static void monitorSaveSystemInfo() { static void monitorSaveSystemInfo() {
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) {
monitorStartTimer();
return;
}
int64_t ts = taosGetTimestampUs(); int64_t ts = taosGetTimestampUs();
char * sql = tsMonitorConn.sql; char * sql = tsMonitor.sql;
int32_t pos = snprintf(sql, SQL_LENGTH, "insert into %s.dn%d values(%" PRId64, tsMonitorDbName, dnodeGetDnodeId(), ts); int32_t pos = snprintf(sql, SQL_LENGTH, "insert into %s.dn%d values(%" PRId64, tsMonitorDbName, dnodeGetDnodeId(), ts);
pos += monitorBuildCpuSql(sql + pos); pos += monitorBuildCpuSql(sql + pos);
...@@ -354,16 +327,31 @@ static void monitorSaveSystemInfo() { ...@@ -354,16 +327,31 @@ static void monitorSaveSystemInfo() {
pos += monitorBuildIoSql(sql + pos); pos += monitorBuildIoSql(sql + pos);
pos += monitorBuildReqSql(sql + pos); pos += monitorBuildReqSql(sql + pos);
monitorDebug("monitor:%p, save system info, sql:%s", tsMonitorConn.conn, sql); void *res = taos_query(tsMonitor.conn, tsMonitor.sql);
taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "sys"); int code = taos_errno(res);
taos_free_result(res);
if (code != 0) {
monitorError("failed to save system info, reason:%s, sql:%s", tstrerror(code), tsMonitor.sql);
} else {
monitorDebug("successfully to save system info, sql:%s", tsMonitor.sql);
}
}
if (tsMonitorConn.timer != NULL && tsMonitorConn.state != MONITOR_STATE_STOPPED) { static void montiorExecSqlCb(void *param, TAOS_RES *result, int32_t code) {
monitorStartTimer(); int32_t c = taos_errno(result);
if (c != TSDB_CODE_SUCCESS) {
monitorError("save %s failed, reason:%s", (char *)param, tstrerror(c));
} else {
int32_t rows = taos_affected_rows(result);
monitorDebug("save %s succ, rows:%d", (char *)param, rows);
} }
taos_free_result(result);
} }
void monitorSaveAcctLog(SAcctMonitorObj *pMon) { void monitorSaveAcctLog(SAcctMonitorObj *pMon) {
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return; if (tsMonitor.state != MON_STATE_INITED) return;
char sql[1024] = {0}; char sql[1024] = {0};
sprintf(sql, sprintf(sql,
...@@ -392,19 +380,16 @@ void monitorSaveAcctLog(SAcctMonitorObj *pMon) { ...@@ -392,19 +380,16 @@ void monitorSaveAcctLog(SAcctMonitorObj *pMon) {
pMon->totalConns, pMon->maxConns, pMon->totalConns, pMon->maxConns,
pMon->accessState); pMon->accessState);
monitorDebug("monitor:%p, save account info, sql %s", tsMonitorConn.conn, sql); monitorDebug("save account info, sql:%s", sql);
taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "account"); taos_query_a(tsMonitor.conn, sql, montiorExecSqlCb, "account info");
} }
void monitorSaveLog(int32_t level, const char *const format, ...) { void monitorSaveLog(int32_t level, const char *const format, ...) {
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return; if (tsMonitor.state != MON_STATE_INITED) return;
va_list argpointer; va_list argpointer;
char sql[SQL_LENGTH] = {0}; char sql[SQL_LENGTH] = {0};
int32_t max_length = SQL_LENGTH - 30; int32_t max_length = SQL_LENGTH - 30;
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return;
int32_t len = snprintf(sql, (size_t)max_length, "insert into %s.log values(%" PRId64 ", %d,'", tsMonitorDbName, int32_t len = snprintf(sql, (size_t)max_length, "insert into %s.log values(%" PRId64 ", %d,'", tsMonitorDbName,
taosGetTimestampUs(), level); taosGetTimestampUs(), level);
...@@ -416,12 +401,13 @@ void monitorSaveLog(int32_t level, const char *const format, ...) { ...@@ -416,12 +401,13 @@ void monitorSaveLog(int32_t level, const char *const format, ...) {
len += sprintf(sql + len, "', '%s')", tsLocalEp); len += sprintf(sql + len, "', '%s')", tsLocalEp);
sql[len++] = 0; sql[len++] = 0;
monitorDebug("monitor:%p, save log, sql: %s", tsMonitorConn.conn, sql); monitorDebug("save log, sql: %s", sql);
taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "log"); taos_query_a(tsMonitor.conn, sql, montiorExecSqlCb, "log");
} }
void monitorExecuteSQL(char *sql) { void monitorExecuteSQL(char *sql) {
if (tsMonitorConn.state != MONITOR_STATE_INITIALIZED) return; if (tsMonitor.state != MON_STATE_INITED) return;
monitorDebug("monitor:%p, execute sql: %s", tsMonitorConn.conn, sql);
taos_query_a(tsMonitorConn.conn, sql, dnodeMontiorLogCallback, "sql"); monitorDebug("execute sql:%s", sql);
taos_query_a(tsMonitor.conn, sql, montiorExecSqlCb, "sql");
} }
...@@ -2,21 +2,19 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) ...@@ -2,21 +2,19 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(TDengine) PROJECT(TDengine)
INCLUDE_DIRECTORIES(inc) INCLUDE_DIRECTORIES(inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/include)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/examples/templates)
AUX_SOURCE_DIRECTORY(src SRC) AUX_SOURCE_DIRECTORY(src SRC)
IF (TD_LINUX) IF (TD_LINUX)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/client/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/src/query/inc)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/include)
INCLUDE_DIRECTORIES(${TD_COMMUNITY_DIR}/deps/MQTT-C/examples/templates)
ADD_LIBRARY(mqtt ${SRC}) ADD_LIBRARY(mqtt ${SRC})
TARGET_LINK_LIBRARIES(mqtt cJson mqttc)
IF (TD_SOMODE_STATIC) IF (TD_SOMODE_STATIC)
TARGET_LINK_LIBRARIES(mqtt taos_static cJson mqttc) TARGET_LINK_LIBRARIES(mqtt taos_static)
ELSE () ELSE ()
TARGET_LINK_LIBRARIES(mqtt taos cJson mqttc) TARGET_LINK_LIBRARIES(mqtt taos)
ENDIF ()
IF (TD_ADMIN)
TARGET_LINK_LIBRARIES(mqtt admin cJson)
ENDIF () ENDIF ()
ENDIF () ENDIF ()
...@@ -23,11 +23,12 @@ extern "C" { ...@@ -23,11 +23,12 @@ extern "C" {
* @file * @file
* A simple subscriber program that performs automatic reconnections. * A simple subscriber program that performs automatic reconnections.
*/ */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "mqtt.h" #include "mqtt.h"
#include "taos.h"
#define QOS 1
#define TIMEOUT 10000L
#define MQTT_SEND_BUF_SIZE 102400
#define MQTT_RECV_BUF_SIZE 102400
/** /**
* @brief A structure that I will use to keep track of some data needed * @brief A structure that I will use to keep track of some data needed
...@@ -36,18 +37,12 @@ extern "C" { ...@@ -36,18 +37,12 @@ extern "C" {
* An instance of this struct will be created in my \c main(). Then, whenever * An instance of this struct will be created in my \c main(). Then, whenever
* \ref mqttReconnectClient is called, this instance will be passed. * \ref mqttReconnectClient is called, this instance will be passed.
*/ */
struct reconnect_state_t { typedef struct SMqttReconnectState {
char* hostname;
char* port;
char* topic;
char* client_id;
char* user_name;
char* password;
uint8_t* sendbuf; uint8_t* sendbuf;
size_t sendbufsz; size_t sendbufsz;
uint8_t* recvbuf; uint8_t* recvbuf;
size_t recvbufsz; size_t recvbufsz;
}; } SMqttReconnectState;
/** /**
* @brief My reconnect callback. It will reestablish the connection whenever * @brief My reconnect callback. It will reestablish the connection whenever
...@@ -58,7 +53,7 @@ void mqttReconnectClient(struct mqtt_client* client, void** reconnect_state_vptr ...@@ -58,7 +53,7 @@ void mqttReconnectClient(struct mqtt_client* client, void** reconnect_state_vptr
/** /**
* @brief The function will be called whenever a PUBLISH message is received. * @brief The function will be called whenever a PUBLISH message is received.
*/ */
void mqtt_PublishCallback(void** unused, struct mqtt_response_publish* published); void mqttPublishCallback(void** unused, struct mqtt_response_publish* published);
/** /**
* @brief The client's refresher. This function triggers back-end routines to * @brief The client's refresher. This function triggers back-end routines to
...@@ -73,12 +68,7 @@ void* mqttClientRefresher(void* client); ...@@ -73,12 +68,7 @@ void* mqttClientRefresher(void* client);
/** /**
* @brief Safelty closes the \p sockfd and cancels the \p client_daemon before \c exit. * @brief Safelty closes the \p sockfd and cancels the \p client_daemon before \c exit.
*/ */
void mqttCleanupRes(int status, int sockfd, pthread_t* client_daemon);
void mqttCleanup(int status, int sockfd, pthread_t* client_daemon);
void mqttInitConnCb(void* param, TAOS_RES* result, int32_t code);
void mqttQueryInsertCallback(void* param, TAOS_RES* result, int32_t code);
#define QOS 1
#define TIMEOUT 10000L
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -15,11 +15,13 @@ ...@@ -15,11 +15,13 @@
#ifndef TDENGINE_MQTT_PLYLOAD_H #ifndef TDENGINE_MQTT_PLYLOAD_H
#define TDENGINE_MQTT_PLYLOAD_H #define TDENGINE_MQTT_PLYLOAD_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
char split(char str[], char delims[], char** p_p_cmd_part, int max);
char* converJsonToSql(char* json, char* _dbname, char* _tablename); char* mqttConverJsonToSql(char* json, int maxSize);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -14,52 +14,146 @@ ...@@ -14,52 +14,146 @@
*/ */
#define _DEFAULT_SOURCE #define _DEFAULT_SOURCE
#include "mqttPayload.h" #include "os.h"
#include "cJSON.h" #include "cJSON.h"
#include "string.h"
#include "taos.h"
#include "mqttLog.h" #include "mqttLog.h"
#include "os.h" #include "mqttPayload.h"
char split(char str[], char delims[], char** p_p_cmd_part, int max) {
char* token = strtok(str, delims); // subscribe message like this
char part_index = 0;
char** tmp_part = p_p_cmd_part; /*
while (token) { /test {
*tmp_part++ = token; "timestamp": 1599121290,
token = strtok(NULL, delims); "gateway": {
part_index++; "name": "AcuLink 810 Gateway",
if (part_index >= max) break; "model": "AcuLink810-868",
} "serial": "S8P20200207"
return part_index; },
"device": {
"name": "Acuvim L V3 .221",
"model": "Acuvim-L-V3",
"serial": "221",
"online": true,
"readings": [
{
"param": "Freq_Hz",
"value": "59.977539",
"unit": "Hz"
},
{
"param": "Va_V",
"value": "122.002907",
"unit": "V"
},
{
"param": "DI4",
"value": "5.000000",
"unit": ""
}
]
}
} }
*/
// send msg cmd
// mosquitto_pub -h test.mosquitto.org -t "/test" -m '{"timestamp": 1599121290,"gateway": {"name": "AcuLink 810 Gateway","model": "AcuLink810-868","serial": "S8P20200207"},"device": {"name": "Acuvim L V3 .221","model": "Acuvim-L-V3","serial": "221","online": true,"readings": [{"param": "Freq_Hz","value": "59.977539","unit": "Hz"},{"param": "Va_V","value": "122.002907","unit": "V"},{"param": "DI4","value": "5.000000","unit": ""}]}}'
/*
* This is an example, this function needs to be implemented in order to parse the json file into a sql statement
* Note that you need to create a super table and database before writing data
* In this case:
* create database mqttdb;
* create table mqttdb.devices(ts timestamp, value bigint) tags(name binary(32), model binary(32), serial binary(16), param binary(16), unit binary(16));
*/
char* mqttConverJsonToSql(char* json, int maxSize) {
// const int32_t maxSize = 10240;
maxSize *= 5;
char* sql = malloc(maxSize);
cJSON* root = cJSON_Parse(json);
if (root == NULL) {
mqttError("failed to parse msg, invalid json format");
goto MQTT_PARSE_OVER;
}
cJSON* timestamp = cJSON_GetObjectItem(root, "timestamp");
if (!timestamp || timestamp->type != cJSON_Number) {
mqttError("failed to parse msg, timestamp not found");
goto MQTT_PARSE_OVER;
}
cJSON* device = cJSON_GetObjectItem(root, "device");
if (!device) {
mqttError("failed to parse msg, device not found");
goto MQTT_PARSE_OVER;
}
char* converJsonToSql(char* json, char* _dbname, char* _tablename) { cJSON* name = cJSON_GetObjectItem(device, "name");
cJSON* jPlayload = cJSON_Parse(json); if (!name || name->type != cJSON_String) {
char _names[102400] = {0}; mqttError("failed to parse msg, name not found");
char _values[102400] = {0}; goto MQTT_PARSE_OVER;
int i = 0; }
int count = cJSON_GetArraySize(jPlayload);
for (; i < count; i++) cJSON* model = cJSON_GetObjectItem(device, "model");
{ if (!model || model->type != cJSON_String) {
cJSON* item = cJSON_GetArrayItem(jPlayload, i); mqttError("failed to parse msg, model not found");
if (cJSON_Object == item->type) { goto MQTT_PARSE_OVER;
mqttInfo("The item '%s' is not supported", item->string); }
} else {
strcat(_names, item->string); cJSON* serial = cJSON_GetObjectItem(device, "serial");
if (i < count - 1) { if (!serial || serial->type != cJSON_String) {
strcat(_names, ","); mqttError("failed to parse msg, serial not found");
} goto MQTT_PARSE_OVER;
char* __value_json = cJSON_Print(item); }
strcat(_values, __value_json);
free(__value_json); cJSON* readings = cJSON_GetObjectItem(device, "readings");
if (i < count - 1) { if (!readings || readings->type != cJSON_Array) {
strcat(_values, ","); mqttError("failed to parse msg, readings not found");
} goto MQTT_PARSE_OVER;
}
int count = cJSON_GetArraySize(readings);
if (count <= 0) {
mqttError("failed to parse msg, readings size smaller than 0");
goto MQTT_PARSE_OVER;
}
int len = snprintf(sql, maxSize, "insert into");
for (int i = 0; i < count; ++i) {
cJSON* reading = cJSON_GetArrayItem(readings, i);
if (reading == NULL) continue;
cJSON* param = cJSON_GetObjectItem(reading, "param");
if (!param || param->type != cJSON_String) {
mqttError("failed to parse msg, param not found");
goto MQTT_PARSE_OVER;
} }
cJSON* value = cJSON_GetObjectItem(reading, "value");
if (!value || value->type != cJSON_String) {
mqttError("failed to parse msg, value not found");
goto MQTT_PARSE_OVER;
}
cJSON* unit = cJSON_GetObjectItem(reading, "unit");
if (!unit || unit->type != cJSON_String) {
mqttError("failed to parse msg, unit not found");
goto MQTT_PARSE_OVER;
}
len += snprintf(sql + len, maxSize - len,
" mqttdb.serial_%s_%s using mqttdb.devices tags('%s', '%s', '%s', '%s', '%s') values(%" PRId64 ", %s)",
serial->valuestring, param->valuestring, name->valuestring, model->valuestring, serial->valuestring,
param->valuestring, unit->valuestring, timestamp->valueint * 1000, value->valuestring);
} }
cJSON_free(jPlayload);
int sqllen = strlen(_names) + strlen(_values) + strlen(_dbname) + strlen(_tablename) + 1024; cJSON_free(root);
char* _sql = calloc(1, sqllen); return sql;
sprintf(_sql, "INSERT INTO %s.%s (%s) VALUES(%s);", _dbname, _tablename, _names, _values);
return _sql; MQTT_PARSE_OVER:
cJSON_free(root);
free(sql);
return NULL;
} }
\ No newline at end of file
...@@ -14,244 +14,131 @@ ...@@ -14,244 +14,131 @@
*/ */
#define _DEFAULT_SOURCE #define _DEFAULT_SOURCE
#include "os.h"
#include "cJSON.h"
#include "mqtt.h" #include "mqtt.h"
#include "mqttInit.h" #include "mqttInit.h"
#include "mqttLog.h" #include "mqttLog.h"
#include "mqttPayload.h" #include "mqttPayload.h"
#include "os.h" #include "tmqtt.h"
#include "posix_sockets.h" #include "posix_sockets.h"
#include "string.h"
#include "taos.h" #include "taos.h"
#include "tglobal.h" #include "tglobal.h"
#include "tmqtt.h" #include "taoserror.h"
#include "tsclient.h"
#include "tsocket.h"
#include "ttimer.h"
#include "mqttSystem.h"
struct mqtt_client mqttClient = {0};
pthread_t clientDaemonThread = {0};
void* mqttConnect=NULL;
struct reconnect_state_t recntStatus = {0};
char* topicPath=NULL;
int mttIsRuning = 1;
int32_t mqttInitSystem() { struct SMqttReconnectState tsMqttStatus = {0};
int rc = 0; struct mqtt_client tsMqttClient = {0};
#if 0 static pthread_t tsMqttClientDaemonThread = {0};
uint8_t sendbuf[2048]; static void* tsMqttConnect = NULL;
uint8_t recvbuf[1024]; static bool tsMqttIsRuning = false;
recntStatus.sendbuf = sendbuf;
recntStatus.sendbufsz = sizeof(sendbuf);
recntStatus.recvbuf = recvbuf;
recntStatus.recvbufsz = sizeof(recvbuf);
char* url = tsMqttBrokerAddress;
recntStatus.user_name = strstr(url, "@") != NULL ? strbetween(url, "//", ":") : NULL;
char * passStr = strstr(url, recntStatus.user_name);
if (passStr != NULL) {
recntStatus.password = strstr(url, "@") != NULL ? strbetween(passStr, ":", "@") : NULL;
}
if (strlen(url) == 0) { int32_t mqttInitSystem() { return 0; }
mqttDebug("mqtt module not init, url is null");
return rc;
}
if (strstr(url, "@") != NULL) {
recntStatus.hostname = strbetween(url, "@", ":");
} else if (strstr(strstr(url, "://") + 3, ":") != NULL) {
recntStatus.hostname = strbetween(url, "//", ":");
} else {
recntStatus.hostname = strbetween(url, "//", "/");
}
char* _begin_hostname = strstr(url, recntStatus.hostname); int32_t mqttStartSystem() {
if (_begin_hostname != NULL && strstr(_begin_hostname, ":") != NULL) { tsMqttStatus.sendbufsz = MQTT_SEND_BUF_SIZE;
recntStatus.port = strbetween(_begin_hostname, ":", "/"); tsMqttStatus.recvbufsz = MQTT_RECV_BUF_SIZE;
} else { tsMqttStatus.sendbuf = malloc(MQTT_SEND_BUF_SIZE);
recntStatus.port = strbetween("'1883'", "'", "'"); tsMqttStatus.recvbuf = malloc(MQTT_RECV_BUF_SIZE);
} tsMqttIsRuning = true;
char* portStr = recntStatus.hostname; mqtt_init_reconnect(&tsMqttClient, mqttReconnectClient, &tsMqttStatus, mqttPublishCallback);
if (_begin_hostname != NULL) { if (pthread_create(&tsMqttClientDaemonThread, NULL, mqttClientRefresher, &tsMqttClient)) {
char* colonStr = strstr(_begin_hostname, ":"); mqttError("mqtt failed to start daemon.");
if (colonStr != NULL) { mqttCleanupRes(EXIT_FAILURE, -1, NULL);
portStr = recntStatus.port; return -1;
}
} }
char* topicStr = strstr(url, portStr); mqttInfo("mqtt listening for topic:%s messages", tsMqttTopic);
if (topicStr != NULL) { return 0;
topicPath = strbetween(topicStr, "/", "/");
char* _topic = "+/+/+/";
int _tpsize = strlen(topicPath) + strlen(_topic) + 1;
recntStatus.topic = calloc(1, _tpsize);
sprintf(recntStatus.topic, "/%s/%s", topicPath, _topic);
recntStatus.client_id = strlen(tsMqttBrokerClientId) < 3 ? tsMqttBrokerClientId : "taos_mqtt";
mqttConnect = NULL;
} else {
topicPath = NULL;
}
#endif
return rc;
} }
int32_t mqttStartSystem() { void mqttStopSystem() {
int rc = 0; if (tsMqttIsRuning) {
#if 0 tsMqttIsRuning = false;
if (recntStatus.user_name != NULL && recntStatus.password != NULL) { tsMqttClient.error = MQTT_ERROR_SOCKET_ERROR;
mqttInfo("connecting to mqtt://%s:%s@%s:%s/%s/", recntStatus.user_name, recntStatus.password,
recntStatus.hostname, recntStatus.port, topicPath);
} else if (recntStatus.user_name != NULL && recntStatus.password == NULL) {
mqttInfo("connecting to mqtt://%s@%s:%s/%s/", recntStatus.user_name, recntStatus.hostname, recntStatus.port,
topicPath);
}
mqtt_init_reconnect(&mqttClient, mqttReconnectClient, &recntStatus, mqtt_PublishCallback); taosMsleep(300);
if (pthread_create(&clientDaemonThread, NULL, mqttClientRefresher, &mqttClient)) { mqttCleanupRes(EXIT_SUCCESS, tsMqttClient.socketfd, &tsMqttClientDaemonThread);
mqttError("Failed to start client daemon.");
mqttCleanup(EXIT_FAILURE, -1, NULL);
rc = -1;
} else {
mqttInfo("listening for '%s' messages.", recntStatus.topic);
}
#endif
return rc;
}
void mqttStopSystem() { mqttInfo("mqtt is stopped");
#if 0 }
mqttClient.error = MQTT_ERROR_SOCKET_ERROR;
mttIsRuning = 0;
usleep(300000U);
mqttCleanup(EXIT_SUCCESS, mqttClient.socketfd, &clientDaemonThread);
mqttInfo("mqtt is stoped");
#endif
} }
void mqttCleanUpSystem() { void mqttCleanUpSystem() {
#if 0 mqttStopSystem();
mqttInfo("starting to cleanup mqtt");
free(recntStatus.user_name);
free(recntStatus.password);
free(recntStatus.hostname);
free(recntStatus.port);
free(recntStatus.topic);
free(topicPath);
mqttInfo("mqtt is cleaned up"); mqttInfo("mqtt is cleaned up");
#endif
} }
void mqtt_PublishCallback(void** unused, struct mqtt_response_publish* published) { void mqttPublishCallback(void** unused, struct mqtt_response_publish* published) {
/* note that published->topic_name is NOT null-terminated (here we'll change it to a c-string) */ const char* content = published->application_message;
char* topic_name = (char*)malloc(published->topic_name_size + 1); mqttDebug("receive mqtt message, size:%d", (int)published->application_message_size);
memcpy(topic_name, published->topic_name, published->topic_name_size);
topic_name[published->topic_name_size] = '\0'; if (tsMqttConnect == NULL) {
mqttInfo("received publish('%s'): %s", topic_name, (const char*)published->application_message); tsMqttConnect = taos_connect(NULL, "_root", tsInternalPass, "", 0);
char _token[128] = {0}; if (tsMqttConnect == NULL) {
char _dbname[128] = {0}; mqttError("failed to connect to tdengine, reason:%s", tstrerror(terrno));
char _tablename[128] = {0}; return;
if (mqttConnect == NULL) {
mqttInfo("connect database");
taos_connect_a(NULL, "_root", tsInternalPass, "", 0, mqttInitConnCb, &mqttClient, &mqttConnect);
}
if (topic_name[1]=='/' && strncmp((char*)&topic_name[1], topicPath, strlen(topicPath)) == 0) {
char* p_p_cmd_part[5] = {0};
char copystr[1024] = {0};
strncpy(copystr, topic_name, MIN(1024, published->topic_name_size));
char part_index = split(copystr, "/", p_p_cmd_part, 10);
if (part_index < 4) {
mqttError("The topic %s is't format '/path/token/dbname/table name/'. for expmle: '/taos/token/db/t'", topic_name);
} else { } else {
strncpy(_token, p_p_cmd_part[1], 127); mqttInfo("successfully connected to the tdengine");
strncpy(_dbname, p_p_cmd_part[2], 127); }
strncpy(_tablename, p_p_cmd_part[3], 127); }
mqttInfo("part count=%d,access token:%s,database name:%s, table name:%s", part_index, _token, _dbname,
_tablename);
if (mqttConnect != NULL) { mqttTrace("receive mqtt message, content:%s", content);
char* _sql = converJsonToSql((char*)published->application_message, _dbname, _tablename);
mqttInfo("query:%s", _sql); char* sql = mqttConverJsonToSql((char*)content, (int)published->application_message_size);
taos_query_a(mqttConnect, _sql, mqttQueryInsertCallback, &mqttClient); if (sql != NULL) {
mqttInfo("free sql:%s", _sql); void* res = taos_query(tsMqttConnect, sql);
free(_sql); int code = taos_errno(res);
} if (code != 0) {
mqttError("failed to exec sql, reason:%s sql:%s", tstrerror(code), sql);
} else {
mqttTrace("successfully to exec sql:%s", sql);
} }
taos_free_result(res);
} else {
mqttError("failed to parse mqtt message");
} }
free(topic_name);
} }
void* mqttClientRefresher(void* client) { void* mqttClientRefresher(void* client) {
while (mttIsRuning) { while (tsMqttIsRuning) {
mqtt_sync((struct mqtt_client*)client); mqtt_sync((struct mqtt_client*)client);
taosMsleep(100); taosMsleep(100);
} }
mqttDebug("quit refresher");
mqttDebug("mqtt quit refresher");
return NULL; return NULL;
} }
void mqttCleanup(int status, int sockfd, pthread_t* client_daemon) { void mqttCleanupRes(int status, int sockfd, pthread_t* client_daemon) {
#if 0
mqttInfo("clean up mqtt module"); mqttInfo("clean up mqtt module");
if (sockfd != -1) close(sockfd); if (sockfd != -1) {
if (client_daemon != NULL) pthread_cancel(*client_daemon); close(sockfd);
#endif
}
void mqttInitConnCb(void* param, TAOS_RES* result, int32_t code) {
if (code < 0) {
mqttError("mqtt:%d, connect to database failed, reason:%s", code, tstrerror(code));
taos_close(mqttConnect);
mqttConnect = NULL;
return;
} }
mqttDebug("mqtt:%d, connect to database success, reason:%s", code, tstrerror(code));
}
void mqttQueryInsertCallback(void* param, TAOS_RES* result, int32_t code) { if (client_daemon != NULL) {
if (code < 0) { pthread_cancel(*client_daemon);
mqttError("mqtt:%d, save data failed, code:%s", code, tstrerror(code));
} else if (code == 0) {
mqttError("mqtt:%d, save data failed, affect rows:%d", code, code);
} else {
mqttInfo("mqtt:%d, save data success, code:%s", code, tstrerror(code));
} }
} }
void mqttReconnectClient(struct mqtt_client* client, void** reconnect_state_vptr) { void mqttReconnectClient(struct mqtt_client* client, void** unused) {
mqttInfo("reconnect client"); mqttInfo("mqtt tries to connect to the mqtt server");
struct reconnect_state_t* reconnect_state = *((struct reconnect_state_t**)reconnect_state_vptr);
/* Close the clients socket if this isn't the initial reconnect call */
if (client->error != MQTT_ERROR_INITIAL_RECONNECT) { if (client->error != MQTT_ERROR_INITIAL_RECONNECT) {
close(client->socketfd); close(client->socketfd);
} }
/* Perform error handling here. */
if (client->error != MQTT_ERROR_INITIAL_RECONNECT) { if (client->error != MQTT_ERROR_INITIAL_RECONNECT) {
mqttError("mqttReconnectClient: called while client was in error state \"%s\"", mqtt_error_str(client->error)); mqttError("mqtt client was in error state %s", mqtt_error_str(client->error));
} }
/* Open a new socket. */ int sockfd = open_nb_socket(tsMqttHostName, tsMqttPort);
int sockfd = open_nb_socket(reconnect_state->hostname, reconnect_state->port); if (sockfd < 0) {
if (sockfd == -1) { mqttError("mqtt client failed to open socket %s:%s", tsMqttHostName, tsMqttPort);
mqttError("failed to open socket: "); //mqttCleanupRes(EXIT_FAILURE, sockfd, NULL);
mqttCleanup(EXIT_FAILURE, sockfd, NULL); return;
} }
/* Reinitialize the client. */ mqtt_reinit(client, sockfd, tsMqttStatus.sendbuf, tsMqttStatus.sendbufsz, tsMqttStatus.recvbuf, tsMqttStatus.recvbufsz);
mqtt_reinit(client, sockfd, reconnect_state->sendbuf, reconnect_state->sendbufsz, reconnect_state->recvbuf, mqtt_connect(client, tsMqttClientId, NULL, NULL, 0, tsMqttUser, tsMqttPass, MQTT_CONNECT_CLEAN_SESSION, 400);
reconnect_state->recvbufsz); mqtt_subscribe(client, tsMqttTopic, 0);
/* Ensure we have a clean session */
uint8_t connect_flags = MQTT_CONNECT_CLEAN_SESSION;
/* Send connection request to the broker. */
mqtt_connect(client, reconnect_state->client_id, NULL, NULL, 0, reconnect_state->user_name, reconnect_state->password,connect_flags, 400);
/* Subscribe to the topic. */
mqtt_subscribe(client, reconnect_state->topic, 0);
} }
\ No newline at end of file
...@@ -8,10 +8,9 @@ INCLUDE_DIRECTORIES(inc) ...@@ -8,10 +8,9 @@ INCLUDE_DIRECTORIES(inc)
AUX_SOURCE_DIRECTORY(src SRC) AUX_SOURCE_DIRECTORY(src SRC)
ADD_LIBRARY(query ${SRC}) ADD_LIBRARY(query ${SRC})
SET_SOURCE_FILES_PROPERTIES(src/sql.c PROPERTIES COMPILE_FLAGS -w) SET_SOURCE_FILES_PROPERTIES(src/sql.c PROPERTIES COMPILE_FLAGS -w)
TARGET_LINK_LIBRARIES(query tsdb tutil)
IF (TD_LINUX) IF (TD_LINUX)
TARGET_LINK_LIBRARIES(query tsdb tutil m rt) TARGET_LINK_LIBRARIES(query m rt)
ADD_SUBDIRECTORY(tests) ADD_SUBDIRECTORY(tests)
ELSEIF (TD_WINDOWS)
TARGET_LINK_LIBRARIES(query tsdb tutil)
ENDIF () ENDIF ()
...@@ -217,7 +217,6 @@ acct_optr(Y) ::= pps(C) tseries(D) storage(P) streams(F) qtime(Q) dbs(E) users(K ...@@ -217,7 +217,6 @@ acct_optr(Y) ::= pps(C) tseries(D) storage(P) streams(F) qtime(Q) dbs(E) users(K
%destructor keep {tVariantListDestroy($$);} %destructor keep {tVariantListDestroy($$);}
keep(Y) ::= KEEP tagitemlist(X). { Y = X; } keep(Y) ::= KEEP tagitemlist(X). { Y = X; }
tables(Y) ::= MAXTABLES INTEGER(X). { Y = X; }
cache(Y) ::= CACHE INTEGER(X). { Y = X; } cache(Y) ::= CACHE INTEGER(X). { Y = X; }
replica(Y) ::= REPLICA INTEGER(X). { Y = X; } replica(Y) ::= REPLICA INTEGER(X). { Y = X; }
quorum(Y) ::= QUORUM INTEGER(X). { Y = X; } quorum(Y) ::= QUORUM INTEGER(X). { Y = X; }
...@@ -234,7 +233,6 @@ prec(Y) ::= PRECISION STRING(X). { Y = X; } ...@@ -234,7 +233,6 @@ prec(Y) ::= PRECISION STRING(X). { Y = X; }
%type db_optr {SCreateDBInfo} %type db_optr {SCreateDBInfo}
db_optr(Y) ::= . {setDefaultCreateDbOption(&Y);} db_optr(Y) ::= . {setDefaultCreateDbOption(&Y);}
db_optr(Y) ::= db_optr(Z) tables(X). { Y = Z; Y.maxTablesPerVnode = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) cache(X). { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) cache(X). { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); } db_optr(Y) ::= db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
...@@ -254,7 +252,6 @@ alter_db_optr(Y) ::= . { setDefaultCreateDbOption(&Y);} ...@@ -254,7 +252,6 @@ alter_db_optr(Y) ::= . { setDefaultCreateDbOption(&Y);}
alter_db_optr(Y) ::= alter_db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
alter_db_optr(Y) ::= alter_db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
alter_db_optr(Y) ::= alter_db_optr(Z) tables(X). { Y = Z; Y.maxTablesPerVnode = strtol(X.z, NULL, 10); }
alter_db_optr(Y) ::= alter_db_optr(Z) keep(X). { Y = Z; Y.keep = X; } alter_db_optr(Y) ::= alter_db_optr(Z) keep(X). { Y = Z; Y.keep = X; }
alter_db_optr(Y) ::= alter_db_optr(Z) blocks(X). { Y = Z; Y.numOfBlocks = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) blocks(X). { Y = Z; Y.numOfBlocks = strtol(X.z, NULL, 10); }
alter_db_optr(Y) ::= alter_db_optr(Z) comp(X). { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); } alter_db_optr(Y) ::= alter_db_optr(Z) comp(X). { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); }
......
...@@ -121,7 +121,6 @@ static SKeyword keywordTable[] = { ...@@ -121,7 +121,6 @@ static SKeyword keywordTable[] = {
{"MINROWS", TK_MINROWS}, {"MINROWS", TK_MINROWS},
{"MAXROWS", TK_MAXROWS}, {"MAXROWS", TK_MAXROWS},
{"BLOCKS", TK_BLOCKS}, {"BLOCKS", TK_BLOCKS},
{"MAXTABLES", TK_MAXTABLES},
{"CACHE", TK_CACHE}, {"CACHE", TK_CACHE},
{"CTIME", TK_CTIME}, {"CTIME", TK_CTIME},
{"WAL", TK_WAL}, {"WAL", TK_WAL},
......
...@@ -97,26 +97,26 @@ ...@@ -97,26 +97,26 @@
#endif #endif
/************* Begin control #defines *****************************************/ /************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int #define YYCODETYPE unsigned short int
#define YYNOCODE 274 #define YYNOCODE 272
#define YYACTIONTYPE unsigned short int #define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken #define ParseTOKENTYPE SStrToken
typedef union { typedef union {
int yyinit; int yyinit;
ParseTOKENTYPE yy0; ParseTOKENTYPE yy0;
int yy46; SSubclauseInfo* yy25;
tSQLExpr* yy64; tSQLExpr* yy66;
tVariant yy134; SCreateAcctSQL yy73;
SCreateAcctSQL yy149; int yy82;
int64_t yy207; SQuerySQL* yy150;
SLimitVal yy216; SCreateDBInfo yy158;
TAOS_FIELD yy223; TAOS_FIELD yy181;
SSubclauseInfo* yy231; SLimitVal yy188;
SCreateDBInfo yy268; tSQLExprList* yy224;
tSQLExprList* yy290; int64_t yy271;
SQuerySQL* yy414; tVariant yy312;
SCreateTableSQL* yy470; SCreateTableSQL* yy374;
tVariantList* yy498; tFieldList* yy449;
tFieldList* yy523; tVariantList* yy494;
} YYMINORTYPE; } YYMINORTYPE;
#ifndef YYSTACKDEPTH #ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100 #define YYSTACKDEPTH 100
...@@ -126,17 +126,17 @@ typedef union { ...@@ -126,17 +126,17 @@ typedef union {
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo #define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo #define ParseARG_STORE yypParser->pInfo = pInfo
#define YYFALLBACK 1 #define YYFALLBACK 1
#define YYNSTATE 245 #define YYNSTATE 244
#define YYNRULE 228 #define YYNRULE 225
#define YYNTOKEN 207 #define YYNTOKEN 206
#define YY_MAX_SHIFT 244 #define YY_MAX_SHIFT 243
#define YY_MIN_SHIFTREDUCE 407 #define YY_MIN_SHIFTREDUCE 403
#define YY_MAX_SHIFTREDUCE 634 #define YY_MAX_SHIFTREDUCE 627
#define YY_ERROR_ACTION 635 #define YY_ERROR_ACTION 628
#define YY_ACCEPT_ACTION 636 #define YY_ACCEPT_ACTION 629
#define YY_NO_ACTION 637 #define YY_NO_ACTION 630
#define YY_MIN_REDUCE 638 #define YY_MIN_REDUCE 631
#define YY_MAX_REDUCE 865 #define YY_MAX_REDUCE 855
/************* End control #defines *******************************************/ /************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined /* Define the yytestcase() macro to be a no-op if is not already defined
...@@ -202,219 +202,217 @@ typedef union { ...@@ -202,219 +202,217 @@ typedef union {
** yy_default[] Default action for each state. ** yy_default[] Default action for each state.
** **
*********** Begin parsing tables **********************************************/ *********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (554) #define YY_ACTTAB_COUNT (549)
static const YYACTIONTYPE yy_action[] = { static const YYACTIONTYPE yy_action[] = {
/* 0 */ 105, 448, 137, 677, 636, 244, 128, 517, 137, 449, /* 0 */ 731, 444, 221, 729, 730, 629, 243, 510, 732, 445,
/* 10 */ 137, 160, 853, 41, 43, 11, 35, 36, 852, 159, /* 10 */ 734, 735, 733, 41, 43, 526, 35, 36, 523, 11,
/* 20 */ 853, 29, 136, 448, 199, 39, 37, 40, 38, 157, /* 20 */ 524, 29, 525, 444, 199, 39, 37, 40, 38, 155,
/* 30 */ 105, 449, 141, 34, 33, 219, 218, 32, 31, 30, /* 30 */ 241, 445, 748, 34, 33, 219, 218, 32, 31, 30,
/* 40 */ 41, 43, 771, 35, 36, 32, 31, 30, 29, 760, /* 40 */ 41, 43, 761, 35, 36, 136, 172, 173, 29, 137,
/* 50 */ 448, 199, 39, 37, 40, 38, 184, 808, 449, 194, /* 50 */ 21, 199, 39, 37, 40, 38, 184, 141, 160, 843,
/* 60 */ 34, 33, 21, 21, 32, 31, 30, 408, 409, 410, /* 60 */ 34, 33, 839, 772, 32, 31, 30, 404, 405, 406,
/* 70 */ 411, 412, 413, 414, 415, 416, 417, 418, 419, 243, /* 70 */ 407, 408, 409, 410, 411, 412, 413, 414, 415, 242,
/* 80 */ 41, 43, 230, 35, 36, 196, 849, 60, 29, 21, /* 80 */ 41, 43, 230, 35, 36, 746, 62, 137, 29, 137,
/* 90 */ 848, 199, 39, 37, 40, 38, 168, 169, 757, 757, /* 90 */ 21, 199, 39, 37, 40, 38, 159, 843, 27, 842,
/* 100 */ 34, 33, 170, 56, 32, 31, 30, 782, 847, 16, /* 100 */ 34, 33, 56, 838, 32, 31, 30, 105, 43, 8,
/* 110 */ 237, 210, 236, 235, 209, 208, 207, 234, 206, 233, /* 110 */ 35, 36, 63, 115, 769, 29, 761, 527, 199, 39,
/* 120 */ 232, 231, 205, 217, 153, 757, 736, 590, 723, 724, /* 120 */ 37, 40, 38, 168, 539, 747, 583, 34, 33, 18,
/* 130 */ 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, /* 130 */ 156, 32, 31, 30, 16, 210, 236, 235, 209, 208,
/* 140 */ 735, 43, 8, 35, 36, 63, 115, 21, 29, 155, /* 140 */ 207, 234, 206, 233, 232, 231, 205, 727, 105, 715,
/* 150 */ 242, 199, 39, 37, 40, 38, 241, 240, 97, 779, /* 150 */ 716, 717, 718, 719, 720, 721, 722, 723, 724, 725,
/* 160 */ 34, 33, 167, 101, 32, 31, 30, 171, 35, 36, /* 160 */ 726, 35, 36, 798, 837, 194, 29, 177, 157, 199,
/* 170 */ 216, 215, 596, 29, 599, 105, 199, 39, 37, 40, /* 170 */ 39, 37, 40, 38, 181, 180, 21, 21, 34, 33,
/* 180 */ 38, 222, 760, 757, 238, 34, 33, 177, 12, 32, /* 180 */ 444, 12, 32, 31, 30, 164, 596, 750, 445, 587,
/* 190 */ 31, 30, 164, 603, 181, 180, 594, 771, 597, 105, /* 190 */ 153, 590, 154, 593, 105, 164, 596, 21, 17, 587,
/* 200 */ 600, 163, 164, 603, 760, 17, 594, 150, 597, 154, /* 200 */ 150, 590, 196, 593, 60, 26, 90, 89, 144, 169,
/* 210 */ 600, 156, 26, 90, 89, 144, 187, 571, 572, 16, /* 210 */ 217, 747, 747, 16, 149, 236, 235, 161, 162, 167,
/* 220 */ 237, 149, 236, 235, 161, 162, 221, 234, 198, 233, /* 220 */ 234, 198, 233, 232, 231, 142, 670, 161, 162, 128,
/* 230 */ 232, 231, 807, 78, 161, 162, 164, 603, 549, 230, /* 230 */ 222, 542, 747, 164, 596, 17, 143, 587, 750, 590,
/* 240 */ 594, 3, 597, 17, 600, 76, 80, 85, 88, 79, /* 240 */ 105, 593, 26, 39, 37, 40, 38, 100, 170, 145,
/* 250 */ 26, 39, 37, 40, 38, 82, 61, 758, 21, 34, /* 250 */ 797, 34, 33, 101, 26, 32, 31, 30, 32, 31,
/* 260 */ 33, 546, 62, 32, 31, 30, 18, 142, 161, 162, /* 260 */ 30, 78, 183, 564, 565, 161, 162, 230, 589, 152,
/* 270 */ 183, 741, 541, 740, 27, 738, 739, 152, 686, 186, /* 270 */ 592, 76, 80, 85, 88, 79, 240, 239, 97, 34,
/* 280 */ 742, 128, 744, 745, 743, 678, 533, 143, 128, 530, /* 280 */ 33, 82, 42, 32, 31, 30, 118, 119, 70, 66,
/* 290 */ 42, 531, 562, 532, 756, 595, 46, 598, 34, 33, /* 290 */ 69, 237, 42, 595, 679, 163, 61, 128, 132, 130,
/* 300 */ 42, 602, 32, 31, 30, 118, 119, 70, 66, 69, /* 300 */ 93, 92, 91, 595, 671, 187, 585, 128, 594, 588,
/* 310 */ 592, 602, 145, 50, 75, 74, 601, 172, 173, 132, /* 310 */ 750, 591, 171, 534, 47, 216, 215, 146, 594, 555,
/* 320 */ 130, 93, 92, 91, 100, 47, 601, 146, 563, 620, /* 320 */ 186, 147, 556, 46, 613, 148, 14, 597, 13, 139,
/* 330 */ 51, 26, 14, 13, 42, 147, 604, 523, 522, 203, /* 330 */ 42, 13, 50, 48, 3, 135, 75, 74, 140, 516,
/* 340 */ 13, 46, 22, 22, 48, 602, 593, 10, 9, 537, /* 340 */ 515, 595, 586, 46, 22, 138, 203, 10, 9, 51,
/* 350 */ 535, 538, 536, 87, 86, 148, 139, 135, 862, 140, /* 350 */ 22, 852, 530, 528, 531, 529, 594, 87, 86, 749,
/* 360 */ 601, 138, 759, 818, 817, 165, 814, 813, 166, 781, /* 360 */ 808, 807, 165, 804, 803, 166, 771, 741, 220, 776,
/* 370 */ 751, 220, 800, 786, 788, 773, 102, 799, 26, 116, /* 370 */ 763, 778, 102, 790, 789, 116, 117, 114, 681, 204,
/* 380 */ 114, 117, 688, 185, 204, 133, 24, 213, 685, 534, /* 380 */ 133, 24, 213, 678, 214, 851, 72, 850, 848, 26,
/* 390 */ 214, 861, 95, 72, 860, 858, 558, 120, 706, 25, /* 390 */ 120, 699, 25, 23, 185, 95, 134, 668, 81, 551,
/* 400 */ 23, 134, 52, 188, 675, 81, 673, 83, 84, 671, /* 400 */ 666, 83, 84, 664, 188, 663, 174, 129, 661, 660,
/* 410 */ 670, 174, 192, 129, 668, 667, 666, 665, 664, 656, /* 410 */ 659, 658, 657, 649, 131, 655, 653, 192, 52, 651,
/* 420 */ 49, 131, 662, 660, 658, 770, 57, 58, 801, 44, /* 420 */ 760, 57, 49, 58, 791, 44, 197, 195, 193, 191,
/* 430 */ 197, 195, 193, 191, 189, 28, 106, 212, 77, 223, /* 430 */ 189, 28, 212, 77, 223, 224, 225, 226, 227, 228,
/* 440 */ 224, 225, 226, 201, 53, 227, 228, 229, 239, 64, /* 440 */ 229, 238, 627, 176, 175, 626, 201, 178, 179, 53,
/* 450 */ 67, 634, 151, 175, 176, 633, 178, 179, 632, 669, /* 450 */ 625, 618, 182, 536, 64, 151, 186, 67, 552, 55,
/* 460 */ 186, 625, 94, 96, 123, 127, 2, 122, 707, 755, /* 460 */ 103, 158, 662, 59, 200, 94, 96, 123, 700, 121,
/* 470 */ 121, 124, 125, 111, 107, 108, 126, 109, 110, 112, /* 470 */ 126, 106, 107, 122, 124, 125, 127, 112, 108, 109,
/* 480 */ 663, 113, 182, 1, 543, 55, 59, 559, 103, 158, /* 480 */ 113, 745, 110, 656, 111, 1, 2, 190, 5, 557,
/* 490 */ 564, 5, 190, 104, 6, 65, 490, 605, 4, 19, /* 490 */ 104, 19, 6, 598, 20, 4, 15, 7, 65, 485,
/* 500 */ 20, 15, 200, 7, 202, 486, 484, 483, 482, 479, /* 500 */ 202, 481, 479, 478, 477, 474, 448, 211, 68, 45,
/* 510 */ 452, 211, 68, 45, 22, 71, 73, 519, 518, 516, /* 510 */ 71, 73, 22, 512, 511, 509, 54, 469, 467, 459,
/* 520 */ 54, 473, 471, 463, 469, 465, 467, 461, 459, 489, /* 520 */ 465, 461, 463, 457, 455, 484, 483, 482, 480, 476,
/* 530 */ 488, 487, 485, 481, 480, 478, 46, 450, 423, 421, /* 530 */ 475, 46, 446, 419, 417, 631, 630, 630, 630, 630,
/* 540 */ 638, 637, 637, 637, 637, 637, 637, 637, 637, 637, /* 540 */ 630, 630, 630, 630, 630, 630, 630, 98, 99,
/* 550 */ 637, 637, 98, 99,
}; };
static const YYCODETYPE yy_lookahead[] = { static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 211, 1, 262, 215, 208, 209, 218, 5, 262, 9, /* 0 */ 226, 1, 210, 229, 230, 207, 208, 5, 234, 9,
/* 10 */ 262, 271, 272, 13, 14, 262, 16, 17, 272, 271, /* 10 */ 236, 237, 238, 13, 14, 2, 16, 17, 5, 260,
/* 20 */ 272, 21, 262, 1, 24, 25, 26, 27, 28, 228, /* 20 */ 7, 21, 9, 1, 24, 25, 26, 27, 28, 209,
/* 30 */ 211, 9, 262, 33, 34, 33, 34, 37, 38, 39, /* 30 */ 210, 9, 240, 33, 34, 33, 34, 37, 38, 39,
/* 40 */ 13, 14, 246, 16, 17, 37, 38, 39, 21, 248, /* 40 */ 13, 14, 244, 16, 17, 260, 33, 34, 21, 260,
/* 50 */ 1, 24, 25, 26, 27, 28, 260, 268, 9, 270, /* 50 */ 210, 24, 25, 26, 27, 28, 258, 260, 269, 270,
/* 60 */ 33, 34, 211, 211, 37, 38, 39, 45, 46, 47, /* 60 */ 33, 34, 260, 210, 37, 38, 39, 45, 46, 47,
/* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, /* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
/* 80 */ 13, 14, 78, 16, 17, 266, 262, 268, 21, 211, /* 80 */ 13, 14, 78, 16, 17, 245, 247, 260, 21, 260,
/* 90 */ 262, 24, 25, 26, 27, 28, 245, 245, 247, 247, /* 90 */ 210, 24, 25, 26, 27, 28, 269, 270, 259, 270,
/* 100 */ 33, 34, 63, 103, 37, 38, 39, 211, 262, 85, /* 100 */ 33, 34, 102, 260, 37, 38, 39, 210, 14, 98,
/* 110 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 110 */ 16, 17, 101, 102, 261, 21, 244, 104, 24, 25,
/* 120 */ 96, 97, 98, 245, 262, 247, 227, 100, 229, 230, /* 120 */ 26, 27, 28, 243, 103, 245, 99, 33, 34, 108,
/* 130 */ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, /* 130 */ 258, 37, 38, 39, 85, 86, 87, 88, 89, 90,
/* 140 */ 241, 14, 99, 16, 17, 102, 103, 211, 21, 210, /* 140 */ 91, 92, 93, 94, 95, 96, 97, 226, 210, 228,
/* 150 */ 211, 24, 25, 26, 27, 28, 60, 61, 62, 263, /* 150 */ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
/* 160 */ 33, 34, 228, 211, 37, 38, 39, 128, 16, 17, /* 160 */ 239, 16, 17, 266, 260, 268, 21, 126, 227, 24,
/* 170 */ 131, 132, 5, 21, 7, 211, 24, 25, 26, 27, /* 170 */ 25, 26, 27, 28, 133, 134, 210, 210, 33, 34,
/* 180 */ 28, 245, 248, 247, 228, 33, 34, 127, 44, 37, /* 180 */ 1, 44, 37, 38, 39, 1, 2, 246, 9, 5,
/* 190 */ 38, 39, 1, 2, 134, 135, 5, 246, 7, 211, /* 190 */ 260, 7, 260, 9, 210, 1, 2, 210, 98, 5,
/* 200 */ 9, 59, 1, 2, 248, 99, 5, 63, 7, 262, /* 200 */ 63, 7, 264, 9, 266, 105, 69, 70, 71, 243,
/* 210 */ 9, 260, 106, 69, 70, 71, 264, 116, 117, 85, /* 210 */ 243, 245, 245, 85, 77, 87, 88, 33, 34, 227,
/* 220 */ 86, 77, 88, 89, 33, 34, 211, 93, 37, 95, /* 220 */ 92, 37, 94, 95, 96, 260, 214, 33, 34, 217,
/* 230 */ 96, 97, 268, 72, 33, 34, 1, 2, 37, 78, /* 230 */ 243, 37, 245, 1, 2, 98, 260, 5, 246, 7,
/* 240 */ 5, 99, 7, 99, 9, 64, 65, 66, 67, 68, /* 240 */ 210, 9, 105, 25, 26, 27, 28, 98, 63, 260,
/* 250 */ 106, 25, 26, 27, 28, 74, 268, 242, 211, 33, /* 250 */ 266, 33, 34, 210, 105, 37, 38, 39, 37, 38,
/* 260 */ 34, 104, 249, 37, 38, 39, 109, 262, 33, 34, /* 260 */ 39, 72, 125, 115, 116, 33, 34, 78, 5, 132,
/* 270 */ 126, 227, 100, 229, 261, 231, 232, 133, 215, 107, /* 270 */ 7, 64, 65, 66, 67, 68, 60, 61, 62, 33,
/* 280 */ 236, 218, 238, 239, 240, 215, 2, 262, 218, 5, /* 280 */ 34, 74, 98, 37, 38, 39, 64, 65, 66, 67,
/* 290 */ 99, 7, 100, 9, 247, 5, 104, 7, 33, 34, /* 290 */ 68, 227, 98, 109, 214, 59, 266, 217, 64, 65,
/* 300 */ 99, 110, 37, 38, 39, 64, 65, 66, 67, 68, /* 300 */ 66, 67, 68, 109, 214, 262, 1, 217, 124, 5,
/* 310 */ 1, 110, 262, 104, 129, 130, 125, 33, 34, 64, /* 310 */ 246, 7, 127, 99, 103, 130, 131, 260, 124, 99,
/* 320 */ 65, 66, 67, 68, 99, 104, 125, 262, 100, 100, /* 320 */ 106, 260, 99, 103, 99, 260, 103, 99, 103, 260,
/* 330 */ 121, 106, 104, 104, 99, 262, 100, 100, 100, 100, /* 330 */ 98, 103, 103, 122, 98, 260, 128, 129, 260, 99,
/* 340 */ 104, 104, 104, 104, 123, 110, 37, 129, 130, 5, /* 340 */ 99, 109, 37, 103, 103, 260, 99, 128, 129, 120,
/* 350 */ 5, 7, 7, 72, 73, 262, 262, 262, 248, 262, /* 350 */ 103, 246, 5, 5, 7, 7, 124, 72, 73, 246,
/* 360 */ 125, 262, 248, 243, 243, 243, 243, 243, 243, 211, /* 360 */ 241, 241, 241, 241, 241, 241, 210, 242, 241, 210,
/* 370 */ 244, 243, 269, 211, 211, 246, 211, 269, 106, 211, /* 370 */ 244, 210, 210, 267, 267, 210, 210, 248, 210, 210,
/* 380 */ 250, 211, 211, 246, 211, 211, 211, 211, 211, 105, /* 380 */ 210, 210, 210, 210, 210, 210, 210, 210, 210, 105,
/* 390 */ 211, 211, 59, 211, 211, 211, 110, 211, 211, 211, /* 390 */ 210, 210, 210, 210, 244, 59, 210, 210, 210, 109,
/* 400 */ 211, 211, 120, 265, 211, 211, 211, 211, 211, 211, /* 400 */ 210, 210, 210, 210, 263, 210, 210, 210, 210, 210,
/* 410 */ 211, 211, 265, 211, 211, 211, 211, 211, 211, 211, /* 410 */ 210, 210, 210, 210, 210, 210, 210, 263, 119, 210,
/* 420 */ 122, 211, 211, 211, 211, 259, 212, 212, 212, 119, /* 420 */ 257, 211, 121, 211, 211, 118, 113, 117, 112, 111,
/* 430 */ 114, 118, 113, 112, 111, 124, 258, 75, 84, 83, /* 430 */ 110, 123, 75, 84, 83, 49, 80, 82, 53, 81,
/* 440 */ 49, 80, 82, 212, 212, 53, 81, 79, 75, 216, /* 440 */ 79, 75, 5, 5, 135, 5, 211, 135, 5, 211,
/* 450 */ 216, 5, 212, 136, 5, 5, 136, 5, 5, 212, /* 450 */ 5, 86, 126, 99, 215, 211, 106, 215, 99, 107,
/* 460 */ 107, 87, 213, 213, 220, 219, 214, 224, 226, 246, /* 460 */ 98, 1, 211, 103, 100, 212, 212, 219, 225, 224,
/* 470 */ 225, 223, 221, 253, 257, 256, 222, 255, 254, 252, /* 470 */ 221, 256, 255, 223, 222, 220, 218, 250, 254, 253,
/* 480 */ 212, 251, 127, 217, 100, 108, 104, 100, 99, 1, /* 480 */ 249, 244, 252, 211, 251, 216, 213, 98, 114, 99,
/* 490 */ 100, 115, 99, 99, 115, 72, 9, 100, 99, 104, /* 490 */ 98, 103, 114, 99, 103, 98, 98, 98, 72, 9,
/* 500 */ 104, 99, 101, 99, 101, 5, 5, 5, 5, 5, /* 500 */ 100, 5, 5, 5, 5, 5, 76, 15, 72, 16,
/* 510 */ 76, 15, 72, 16, 104, 130, 130, 5, 5, 100, /* 510 */ 129, 129, 103, 5, 5, 99, 98, 5, 5, 5,
/* 520 */ 99, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* 520 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 530 */ 5, 5, 5, 5, 5, 5, 104, 76, 59, 58, /* 530 */ 5, 103, 76, 59, 58, 0, 271, 271, 271, 271,
/* 540 */ 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 540 */ 271, 271, 271, 271, 271, 271, 271, 21, 21, 271,
/* 550 */ 273, 273, 21, 21, 273, 273, 273, 273, 273, 273, /* 550 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 560 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 560 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 570 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 570 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 580 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 580 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 590 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 590 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 600 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 600 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 610 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 610 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 620 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 620 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 630 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 630 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 640 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 640 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 650 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 650 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 660 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 660 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 670 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 670 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 680 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 680 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 690 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 690 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 700 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 700 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 710 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 710 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 720 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 720 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 730 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 730 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 740 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 740 */ 271, 271, 271, 271, 271, 271, 271, 271, 271, 271,
/* 750 */ 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, /* 750 */ 271, 271, 271, 271, 271,
/* 760 */ 273,
}; };
#define YY_SHIFT_COUNT (244) #define YY_SHIFT_COUNT (243)
#define YY_SHIFT_MIN (0) #define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (540) #define YY_SHIFT_MAX (535)
static const unsigned short int yy_shift_ofst[] = { static const unsigned short int yy_shift_ofst[] = {
/* 0 */ 144, 24, 134, 191, 235, 49, 49, 49, 49, 49, /* 0 */ 137, 49, 128, 184, 232, 179, 179, 179, 179, 179,
/* 10 */ 49, 0, 22, 235, 284, 284, 284, 106, 49, 49, /* 10 */ 179, 0, 22, 232, 13, 13, 13, 100, 179, 179,
/* 20 */ 49, 49, 49, 161, 4, 4, 554, 201, 235, 235, /* 20 */ 179, 179, 179, 189, 4, 4, 549, 194, 232, 232,
/* 30 */ 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, /* 30 */ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
/* 40 */ 235, 235, 235, 235, 235, 284, 284, 2, 2, 2, /* 40 */ 232, 232, 232, 232, 232, 13, 13, 2, 2, 2,
/* 50 */ 2, 2, 2, 43, 2, 225, 49, 49, 49, 49, /* 50 */ 2, 2, 2, 11, 2, 149, 179, 179, 179, 179,
/* 60 */ 101, 101, 157, 49, 49, 49, 49, 49, 49, 49, /* 60 */ 148, 148, 21, 179, 179, 179, 179, 179, 179, 179,
/* 70 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, /* 70 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
/* 80 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, /* 80 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
/* 90 */ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, /* 90 */ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
/* 100 */ 272, 333, 333, 286, 286, 333, 282, 298, 310, 316, /* 100 */ 284, 336, 336, 290, 290, 336, 299, 301, 307, 313,
/* 110 */ 313, 319, 321, 323, 311, 272, 333, 333, 362, 362, /* 110 */ 310, 316, 318, 320, 308, 284, 336, 336, 357, 357,
/* 120 */ 333, 354, 356, 391, 361, 360, 392, 365, 368, 333, /* 120 */ 336, 349, 351, 386, 356, 355, 385, 358, 361, 336,
/* 130 */ 373, 333, 373, 554, 554, 27, 67, 67, 67, 127, /* 130 */ 366, 336, 366, 549, 549, 27, 67, 67, 67, 94,
/* 140 */ 152, 226, 226, 226, 181, 265, 265, 265, 265, 241, /* 140 */ 145, 218, 218, 218, 207, 246, 246, 246, 246, 222,
/* 150 */ 255, 39, 60, 8, 8, 96, 172, 192, 228, 229, /* 150 */ 234, 185, 41, 221, 221, 216, 214, 220, 223, 225,
/* 160 */ 236, 167, 290, 309, 142, 221, 209, 237, 238, 239, /* 160 */ 228, 263, 304, 305, 236, 211, 229, 240, 241, 247,
/* 170 */ 185, 218, 344, 345, 281, 446, 317, 449, 450, 320, /* 170 */ 208, 219, 347, 348, 285, 437, 309, 438, 440, 312,
/* 180 */ 452, 453, 374, 355, 353, 384, 377, 382, 387, 389, /* 180 */ 443, 445, 365, 326, 350, 354, 352, 360, 359, 362,
/* 190 */ 488, 393, 390, 394, 395, 376, 396, 379, 397, 399, /* 190 */ 460, 389, 390, 392, 388, 374, 391, 378, 394, 397,
/* 200 */ 402, 401, 404, 403, 423, 487, 500, 501, 502, 503, /* 200 */ 398, 364, 399, 400, 426, 490, 496, 497, 498, 499,
/* 210 */ 504, 434, 496, 440, 497, 385, 386, 410, 512, 513, /* 210 */ 500, 430, 492, 436, 493, 381, 382, 409, 508, 509,
/* 220 */ 419, 421, 410, 516, 517, 518, 519, 520, 521, 522, /* 220 */ 416, 418, 409, 512, 513, 514, 515, 516, 517, 518,
/* 230 */ 523, 524, 525, 526, 527, 528, 529, 530, 432, 461, /* 230 */ 519, 520, 521, 522, 523, 524, 525, 428, 456, 526,
/* 240 */ 531, 532, 479, 481, 540, /* 240 */ 527, 474, 476, 535,
}; };
#define YY_REDUCE_COUNT (134) #define YY_REDUCE_COUNT (134)
#define YY_REDUCE_MIN (-260) #define YY_REDUCE_MIN (-241)
#define YY_REDUCE_MAX (268) #define YY_REDUCE_MAX (273)
static const short yy_reduce_ofst[] = { static const short yy_reduce_ofst[] = {
/* 0 */ -204, -101, 44, -260, -252, -211, -181, -149, -148, -122, /* 0 */ -202, -79, -226, -211, -173, -103, -62, -120, -34, -33,
/* 10 */ -64, -104, -61, -254, -199, -66, -44, -49, -48, -36, /* 10 */ -13, -147, -180, -171, -59, -8, 64, -128, 43, -16,
/* 20 */ -12, 15, 47, -212, 63, 70, 13, -247, -240, -230, /* 20 */ 30, -208, -160, 12, 80, 90, -161, -241, -215, -203,
/* 30 */ -176, -172, -154, -138, -53, 5, 25, 50, 65, 73, /* 30 */ -198, -157, -96, -70, -68, -35, -24, -11, 57, 61,
/* 40 */ 93, 94, 95, 97, 99, 110, 114, 120, 121, 122, /* 40 */ 65, 69, 75, 78, 85, 105, 113, 119, 120, 121,
/* 50 */ 123, 124, 125, 126, 128, 129, 158, 162, 163, 165, /* 50 */ 122, 123, 124, 125, 127, 126, 156, 159, 161, 162,
/* 60 */ 103, 108, 130, 168, 170, 171, 173, 174, 175, 176, /* 60 */ 106, 107, 129, 165, 166, 168, 169, 170, 171, 172,
/* 70 */ 177, 179, 180, 182, 183, 184, 186, 187, 188, 189, /* 70 */ 173, 174, 175, 176, 177, 178, 180, 181, 182, 183,
/* 80 */ 190, 193, 194, 195, 196, 197, 198, 199, 200, 202, /* 80 */ 186, 187, 188, 190, 191, 192, 193, 195, 196, 197,
/* 90 */ 203, 204, 205, 206, 207, 208, 210, 211, 212, 213, /* 90 */ 198, 199, 200, 201, 202, 203, 204, 205, 206, 209,
/* 100 */ 137, 214, 215, 138, 147, 216, 166, 178, 217, 219, /* 100 */ 150, 210, 212, 141, 154, 213, 163, 215, 217, 224,
/* 110 */ 222, 224, 220, 227, 230, 223, 231, 232, 233, 234, /* 110 */ 226, 230, 233, 227, 231, 237, 235, 238, 239, 242,
/* 120 */ 240, 242, 245, 243, 244, 248, 251, 254, 246, 247, /* 120 */ 244, 243, 245, 250, 248, 252, 255, 249, 258, 251,
/* 130 */ 249, 268, 250, 266, 252, /* 130 */ 253, 272, 254, 269, 273,
}; };
static const YYACTIONTYPE yy_default[] = { static const YYACTIONTYPE yy_default[] = {
/* 0 */ 635, 687, 676, 855, 855, 635, 635, 635, 635, 635, /* 0 */ 628, 680, 669, 845, 845, 628, 628, 628, 628, 628,
/* 10 */ 635, 783, 653, 855, 635, 635, 635, 635, 635, 635, /* 10 */ 628, 773, 646, 845, 628, 628, 628, 628, 628, 628,
/* 20 */ 635, 635, 635, 689, 689, 689, 778, 635, 635, 635, /* 20 */ 628, 628, 628, 682, 682, 682, 768, 628, 628, 628,
/* 30 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, /* 30 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628,
/* 40 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, /* 40 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628,
/* 50 */ 635, 635, 635, 635, 635, 635, 635, 785, 787, 635, /* 50 */ 628, 628, 628, 628, 628, 628, 628, 775, 777, 628,
/* 60 */ 804, 804, 776, 635, 635, 635, 635, 635, 635, 635, /* 60 */ 794, 794, 766, 628, 628, 628, 628, 628, 628, 628,
/* 70 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, /* 70 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628,
/* 80 */ 635, 674, 635, 672, 635, 635, 635, 635, 635, 635, /* 80 */ 628, 667, 628, 665, 628, 628, 628, 628, 628, 628,
/* 90 */ 635, 635, 635, 635, 635, 635, 635, 661, 635, 635, /* 90 */ 628, 628, 628, 628, 628, 628, 628, 654, 628, 628,
/* 100 */ 635, 655, 655, 635, 635, 655, 811, 815, 809, 797, /* 100 */ 628, 648, 648, 628, 628, 648, 801, 805, 799, 787,
/* 110 */ 805, 796, 792, 791, 819, 635, 655, 655, 684, 684, /* 110 */ 795, 786, 782, 781, 809, 628, 648, 648, 677, 677,
/* 120 */ 655, 705, 703, 701, 693, 699, 695, 697, 691, 655, /* 120 */ 648, 698, 696, 694, 686, 692, 688, 690, 684, 648,
/* 130 */ 682, 655, 682, 722, 737, 635, 820, 854, 810, 838, /* 130 */ 675, 648, 675, 714, 728, 628, 810, 844, 800, 828,
/* 140 */ 837, 850, 844, 843, 635, 842, 841, 840, 839, 635, /* 140 */ 827, 840, 834, 833, 628, 832, 831, 830, 829, 628,
/* 150 */ 635, 635, 635, 846, 845, 635, 635, 635, 635, 635, /* 150 */ 628, 628, 628, 836, 835, 628, 628, 628, 628, 628,
/* 160 */ 635, 635, 635, 635, 822, 816, 812, 635, 635, 635, /* 160 */ 628, 628, 628, 628, 812, 806, 802, 628, 628, 628,
/* 170 */ 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, /* 170 */ 628, 628, 628, 628, 628, 628, 628, 628, 628, 628,
/* 180 */ 635, 635, 635, 635, 775, 635, 635, 784, 635, 635, /* 180 */ 628, 628, 628, 628, 765, 628, 628, 774, 628, 628,
/* 190 */ 635, 635, 635, 635, 806, 635, 798, 635, 635, 635, /* 190 */ 628, 628, 628, 628, 796, 628, 788, 628, 628, 628,
/* 200 */ 635, 635, 635, 752, 635, 635, 635, 635, 635, 635, /* 200 */ 628, 628, 628, 742, 628, 628, 628, 628, 628, 628,
/* 210 */ 635, 635, 635, 635, 635, 635, 635, 859, 635, 635, /* 210 */ 628, 628, 628, 628, 628, 628, 628, 849, 628, 628,
/* 220 */ 635, 746, 857, 635, 635, 635, 635, 635, 635, 635, /* 220 */ 628, 736, 847, 628, 628, 628, 628, 628, 628, 628,
/* 230 */ 635, 635, 635, 635, 635, 635, 635, 635, 708, 635, /* 230 */ 628, 628, 628, 628, 628, 628, 628, 701, 628, 652,
/* 240 */ 659, 657, 635, 651, 635, /* 240 */ 650, 628, 644, 628,
}; };
/********** End of lemon-generated parsing tables *****************************/ /********** End of lemon-generated parsing tables *****************************/
...@@ -520,7 +518,6 @@ static const YYCODETYPE yyFallback[] = { ...@@ -520,7 +518,6 @@ static const YYCODETYPE yyFallback[] = {
0, /* CONNS => nothing */ 0, /* CONNS => nothing */
0, /* STATE => nothing */ 0, /* STATE => nothing */
0, /* KEEP => nothing */ 0, /* KEEP => nothing */
0, /* MAXTABLES => nothing */
0, /* CACHE => nothing */ 0, /* CACHE => nothing */
0, /* REPLICA => nothing */ 0, /* REPLICA => nothing */
0, /* QUORUM => nothing */ 0, /* QUORUM => nothing */
...@@ -813,193 +810,191 @@ static const char *const yyTokenName[] = { ...@@ -813,193 +810,191 @@ static const char *const yyTokenName[] = {
/* 83 */ "CONNS", /* 83 */ "CONNS",
/* 84 */ "STATE", /* 84 */ "STATE",
/* 85 */ "KEEP", /* 85 */ "KEEP",
/* 86 */ "MAXTABLES", /* 86 */ "CACHE",
/* 87 */ "CACHE", /* 87 */ "REPLICA",
/* 88 */ "REPLICA", /* 88 */ "QUORUM",
/* 89 */ "QUORUM", /* 89 */ "DAYS",
/* 90 */ "DAYS", /* 90 */ "MINROWS",
/* 91 */ "MINROWS", /* 91 */ "MAXROWS",
/* 92 */ "MAXROWS", /* 92 */ "BLOCKS",
/* 93 */ "BLOCKS", /* 93 */ "CTIME",
/* 94 */ "CTIME", /* 94 */ "WAL",
/* 95 */ "WAL", /* 95 */ "FSYNC",
/* 96 */ "FSYNC", /* 96 */ "COMP",
/* 97 */ "COMP", /* 97 */ "PRECISION",
/* 98 */ "PRECISION", /* 98 */ "LP",
/* 99 */ "LP", /* 99 */ "RP",
/* 100 */ "RP", /* 100 */ "TAGS",
/* 101 */ "TAGS", /* 101 */ "USING",
/* 102 */ "USING", /* 102 */ "AS",
/* 103 */ "AS", /* 103 */ "COMMA",
/* 104 */ "COMMA", /* 104 */ "NULL",
/* 105 */ "NULL", /* 105 */ "SELECT",
/* 106 */ "SELECT", /* 106 */ "UNION",
/* 107 */ "UNION", /* 107 */ "ALL",
/* 108 */ "ALL", /* 108 */ "FROM",
/* 109 */ "FROM", /* 109 */ "VARIABLE",
/* 110 */ "VARIABLE", /* 110 */ "INTERVAL",
/* 111 */ "INTERVAL", /* 111 */ "FILL",
/* 112 */ "FILL", /* 112 */ "SLIDING",
/* 113 */ "SLIDING", /* 113 */ "ORDER",
/* 114 */ "ORDER", /* 114 */ "BY",
/* 115 */ "BY", /* 115 */ "ASC",
/* 116 */ "ASC", /* 116 */ "DESC",
/* 117 */ "DESC", /* 117 */ "GROUP",
/* 118 */ "GROUP", /* 118 */ "HAVING",
/* 119 */ "HAVING", /* 119 */ "LIMIT",
/* 120 */ "LIMIT", /* 120 */ "OFFSET",
/* 121 */ "OFFSET", /* 121 */ "SLIMIT",
/* 122 */ "SLIMIT", /* 122 */ "SOFFSET",
/* 123 */ "SOFFSET", /* 123 */ "WHERE",
/* 124 */ "WHERE", /* 124 */ "NOW",
/* 125 */ "NOW", /* 125 */ "RESET",
/* 126 */ "RESET", /* 126 */ "QUERY",
/* 127 */ "QUERY", /* 127 */ "ADD",
/* 128 */ "ADD", /* 128 */ "COLUMN",
/* 129 */ "COLUMN", /* 129 */ "TAG",
/* 130 */ "TAG", /* 130 */ "CHANGE",
/* 131 */ "CHANGE", /* 131 */ "SET",
/* 132 */ "SET", /* 132 */ "KILL",
/* 133 */ "KILL", /* 133 */ "CONNECTION",
/* 134 */ "CONNECTION", /* 134 */ "STREAM",
/* 135 */ "STREAM", /* 135 */ "COLON",
/* 136 */ "COLON", /* 136 */ "ABORT",
/* 137 */ "ABORT", /* 137 */ "AFTER",
/* 138 */ "AFTER", /* 138 */ "ATTACH",
/* 139 */ "ATTACH", /* 139 */ "BEFORE",
/* 140 */ "BEFORE", /* 140 */ "BEGIN",
/* 141 */ "BEGIN", /* 141 */ "CASCADE",
/* 142 */ "CASCADE", /* 142 */ "CLUSTER",
/* 143 */ "CLUSTER", /* 143 */ "CONFLICT",
/* 144 */ "CONFLICT", /* 144 */ "COPY",
/* 145 */ "COPY", /* 145 */ "DEFERRED",
/* 146 */ "DEFERRED", /* 146 */ "DELIMITERS",
/* 147 */ "DELIMITERS", /* 147 */ "DETACH",
/* 148 */ "DETACH", /* 148 */ "EACH",
/* 149 */ "EACH", /* 149 */ "END",
/* 150 */ "END", /* 150 */ "EXPLAIN",
/* 151 */ "EXPLAIN", /* 151 */ "FAIL",
/* 152 */ "FAIL", /* 152 */ "FOR",
/* 153 */ "FOR", /* 153 */ "IGNORE",
/* 154 */ "IGNORE", /* 154 */ "IMMEDIATE",
/* 155 */ "IMMEDIATE", /* 155 */ "INITIALLY",
/* 156 */ "INITIALLY", /* 156 */ "INSTEAD",
/* 157 */ "INSTEAD", /* 157 */ "MATCH",
/* 158 */ "MATCH", /* 158 */ "KEY",
/* 159 */ "KEY", /* 159 */ "OF",
/* 160 */ "OF", /* 160 */ "RAISE",
/* 161 */ "RAISE", /* 161 */ "REPLACE",
/* 162 */ "REPLACE", /* 162 */ "RESTRICT",
/* 163 */ "RESTRICT", /* 163 */ "ROW",
/* 164 */ "ROW", /* 164 */ "STATEMENT",
/* 165 */ "STATEMENT", /* 165 */ "TRIGGER",
/* 166 */ "TRIGGER", /* 166 */ "VIEW",
/* 167 */ "VIEW", /* 167 */ "COUNT",
/* 168 */ "COUNT", /* 168 */ "SUM",
/* 169 */ "SUM", /* 169 */ "AVG",
/* 170 */ "AVG", /* 170 */ "MIN",
/* 171 */ "MIN", /* 171 */ "MAX",
/* 172 */ "MAX", /* 172 */ "FIRST",
/* 173 */ "FIRST", /* 173 */ "LAST",
/* 174 */ "LAST", /* 174 */ "TOP",
/* 175 */ "TOP", /* 175 */ "BOTTOM",
/* 176 */ "BOTTOM", /* 176 */ "STDDEV",
/* 177 */ "STDDEV", /* 177 */ "PERCENTILE",
/* 178 */ "PERCENTILE", /* 178 */ "APERCENTILE",
/* 179 */ "APERCENTILE", /* 179 */ "LEASTSQUARES",
/* 180 */ "LEASTSQUARES", /* 180 */ "HISTOGRAM",
/* 181 */ "HISTOGRAM", /* 181 */ "DIFF",
/* 182 */ "DIFF", /* 182 */ "SPREAD",
/* 183 */ "SPREAD", /* 183 */ "TWA",
/* 184 */ "TWA", /* 184 */ "INTERP",
/* 185 */ "INTERP", /* 185 */ "LAST_ROW",
/* 186 */ "LAST_ROW", /* 186 */ "RATE",
/* 187 */ "RATE", /* 187 */ "IRATE",
/* 188 */ "IRATE", /* 188 */ "SUM_RATE",
/* 189 */ "SUM_RATE", /* 189 */ "SUM_IRATE",
/* 190 */ "SUM_IRATE", /* 190 */ "AVG_RATE",
/* 191 */ "AVG_RATE", /* 191 */ "AVG_IRATE",
/* 192 */ "AVG_IRATE", /* 192 */ "TBID",
/* 193 */ "TBID", /* 193 */ "SEMI",
/* 194 */ "SEMI", /* 194 */ "NONE",
/* 195 */ "NONE", /* 195 */ "PREV",
/* 196 */ "PREV", /* 196 */ "LINEAR",
/* 197 */ "LINEAR", /* 197 */ "IMPORT",
/* 198 */ "IMPORT", /* 198 */ "METRIC",
/* 199 */ "METRIC", /* 199 */ "TBNAME",
/* 200 */ "TBNAME", /* 200 */ "JOIN",
/* 201 */ "JOIN", /* 201 */ "METRICS",
/* 202 */ "METRICS", /* 202 */ "STABLE",
/* 203 */ "STABLE", /* 203 */ "INSERT",
/* 204 */ "INSERT", /* 204 */ "INTO",
/* 205 */ "INTO", /* 205 */ "VALUES",
/* 206 */ "VALUES", /* 206 */ "error",
/* 207 */ "error", /* 207 */ "program",
/* 208 */ "program", /* 208 */ "cmd",
/* 209 */ "cmd", /* 209 */ "dbPrefix",
/* 210 */ "dbPrefix", /* 210 */ "ids",
/* 211 */ "ids", /* 211 */ "cpxName",
/* 212 */ "cpxName", /* 212 */ "ifexists",
/* 213 */ "ifexists", /* 213 */ "alter_db_optr",
/* 214 */ "alter_db_optr", /* 214 */ "acct_optr",
/* 215 */ "acct_optr", /* 215 */ "ifnotexists",
/* 216 */ "ifnotexists", /* 216 */ "db_optr",
/* 217 */ "db_optr", /* 217 */ "pps",
/* 218 */ "pps", /* 218 */ "tseries",
/* 219 */ "tseries", /* 219 */ "dbs",
/* 220 */ "dbs", /* 220 */ "streams",
/* 221 */ "streams", /* 221 */ "storage",
/* 222 */ "storage", /* 222 */ "qtime",
/* 223 */ "qtime", /* 223 */ "users",
/* 224 */ "users", /* 224 */ "conns",
/* 225 */ "conns", /* 225 */ "state",
/* 226 */ "state", /* 226 */ "keep",
/* 227 */ "keep", /* 227 */ "tagitemlist",
/* 228 */ "tagitemlist", /* 228 */ "cache",
/* 229 */ "tables", /* 229 */ "replica",
/* 230 */ "cache", /* 230 */ "quorum",
/* 231 */ "replica", /* 231 */ "days",
/* 232 */ "quorum", /* 232 */ "minrows",
/* 233 */ "days", /* 233 */ "maxrows",
/* 234 */ "minrows", /* 234 */ "blocks",
/* 235 */ "maxrows", /* 235 */ "ctime",
/* 236 */ "blocks", /* 236 */ "wal",
/* 237 */ "ctime", /* 237 */ "fsync",
/* 238 */ "wal", /* 238 */ "comp",
/* 239 */ "fsync", /* 239 */ "prec",
/* 240 */ "comp", /* 240 */ "typename",
/* 241 */ "prec", /* 241 */ "signed",
/* 242 */ "typename", /* 242 */ "create_table_args",
/* 243 */ "signed", /* 243 */ "columnlist",
/* 244 */ "create_table_args", /* 244 */ "select",
/* 245 */ "columnlist", /* 245 */ "column",
/* 246 */ "select", /* 246 */ "tagitem",
/* 247 */ "column", /* 247 */ "selcollist",
/* 248 */ "tagitem", /* 248 */ "from",
/* 249 */ "selcollist", /* 249 */ "where_opt",
/* 250 */ "from", /* 250 */ "interval_opt",
/* 251 */ "where_opt", /* 251 */ "fill_opt",
/* 252 */ "interval_opt", /* 252 */ "sliding_opt",
/* 253 */ "fill_opt", /* 253 */ "groupby_opt",
/* 254 */ "sliding_opt", /* 254 */ "orderby_opt",
/* 255 */ "groupby_opt", /* 255 */ "having_opt",
/* 256 */ "orderby_opt", /* 256 */ "slimit_opt",
/* 257 */ "having_opt", /* 257 */ "limit_opt",
/* 258 */ "slimit_opt", /* 258 */ "union",
/* 259 */ "limit_opt", /* 259 */ "sclp",
/* 260 */ "union", /* 260 */ "expr",
/* 261 */ "sclp", /* 261 */ "as",
/* 262 */ "expr", /* 262 */ "tablelist",
/* 263 */ "as", /* 263 */ "tmvar",
/* 264 */ "tablelist", /* 264 */ "sortlist",
/* 265 */ "tmvar", /* 265 */ "sortitem",
/* 266 */ "sortlist", /* 266 */ "item",
/* 267 */ "sortitem", /* 267 */ "sortorder",
/* 268 */ "item", /* 268 */ "grouplist",
/* 269 */ "sortorder", /* 269 */ "exprlist",
/* 270 */ "grouplist", /* 270 */ "expritem",
/* 271 */ "exprlist",
/* 272 */ "expritem",
}; };
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
...@@ -1078,163 +1073,160 @@ static const char *const yyRuleName[] = { ...@@ -1078,163 +1073,160 @@ static const char *const yyRuleName[] = {
/* 68 */ "state ::= STATE ids", /* 68 */ "state ::= STATE ids",
/* 69 */ "acct_optr ::= pps tseries storage streams qtime dbs users conns state", /* 69 */ "acct_optr ::= pps tseries storage streams qtime dbs users conns state",
/* 70 */ "keep ::= KEEP tagitemlist", /* 70 */ "keep ::= KEEP tagitemlist",
/* 71 */ "tables ::= MAXTABLES INTEGER", /* 71 */ "cache ::= CACHE INTEGER",
/* 72 */ "cache ::= CACHE INTEGER", /* 72 */ "replica ::= REPLICA INTEGER",
/* 73 */ "replica ::= REPLICA INTEGER", /* 73 */ "quorum ::= QUORUM INTEGER",
/* 74 */ "quorum ::= QUORUM INTEGER", /* 74 */ "days ::= DAYS INTEGER",
/* 75 */ "days ::= DAYS INTEGER", /* 75 */ "minrows ::= MINROWS INTEGER",
/* 76 */ "minrows ::= MINROWS INTEGER", /* 76 */ "maxrows ::= MAXROWS INTEGER",
/* 77 */ "maxrows ::= MAXROWS INTEGER", /* 77 */ "blocks ::= BLOCKS INTEGER",
/* 78 */ "blocks ::= BLOCKS INTEGER", /* 78 */ "ctime ::= CTIME INTEGER",
/* 79 */ "ctime ::= CTIME INTEGER", /* 79 */ "wal ::= WAL INTEGER",
/* 80 */ "wal ::= WAL INTEGER", /* 80 */ "fsync ::= FSYNC INTEGER",
/* 81 */ "fsync ::= FSYNC INTEGER", /* 81 */ "comp ::= COMP INTEGER",
/* 82 */ "comp ::= COMP INTEGER", /* 82 */ "prec ::= PRECISION STRING",
/* 83 */ "prec ::= PRECISION STRING", /* 83 */ "db_optr ::=",
/* 84 */ "db_optr ::=", /* 84 */ "db_optr ::= db_optr cache",
/* 85 */ "db_optr ::= db_optr tables", /* 85 */ "db_optr ::= db_optr replica",
/* 86 */ "db_optr ::= db_optr cache", /* 86 */ "db_optr ::= db_optr quorum",
/* 87 */ "db_optr ::= db_optr replica", /* 87 */ "db_optr ::= db_optr days",
/* 88 */ "db_optr ::= db_optr quorum", /* 88 */ "db_optr ::= db_optr minrows",
/* 89 */ "db_optr ::= db_optr days", /* 89 */ "db_optr ::= db_optr maxrows",
/* 90 */ "db_optr ::= db_optr minrows", /* 90 */ "db_optr ::= db_optr blocks",
/* 91 */ "db_optr ::= db_optr maxrows", /* 91 */ "db_optr ::= db_optr ctime",
/* 92 */ "db_optr ::= db_optr blocks", /* 92 */ "db_optr ::= db_optr wal",
/* 93 */ "db_optr ::= db_optr ctime", /* 93 */ "db_optr ::= db_optr fsync",
/* 94 */ "db_optr ::= db_optr wal", /* 94 */ "db_optr ::= db_optr comp",
/* 95 */ "db_optr ::= db_optr fsync", /* 95 */ "db_optr ::= db_optr prec",
/* 96 */ "db_optr ::= db_optr comp", /* 96 */ "db_optr ::= db_optr keep",
/* 97 */ "db_optr ::= db_optr prec", /* 97 */ "alter_db_optr ::=",
/* 98 */ "db_optr ::= db_optr keep", /* 98 */ "alter_db_optr ::= alter_db_optr replica",
/* 99 */ "alter_db_optr ::=", /* 99 */ "alter_db_optr ::= alter_db_optr quorum",
/* 100 */ "alter_db_optr ::= alter_db_optr replica", /* 100 */ "alter_db_optr ::= alter_db_optr keep",
/* 101 */ "alter_db_optr ::= alter_db_optr quorum", /* 101 */ "alter_db_optr ::= alter_db_optr blocks",
/* 102 */ "alter_db_optr ::= alter_db_optr tables", /* 102 */ "alter_db_optr ::= alter_db_optr comp",
/* 103 */ "alter_db_optr ::= alter_db_optr keep", /* 103 */ "alter_db_optr ::= alter_db_optr wal",
/* 104 */ "alter_db_optr ::= alter_db_optr blocks", /* 104 */ "alter_db_optr ::= alter_db_optr fsync",
/* 105 */ "alter_db_optr ::= alter_db_optr comp", /* 105 */ "typename ::= ids",
/* 106 */ "alter_db_optr ::= alter_db_optr wal", /* 106 */ "typename ::= ids LP signed RP",
/* 107 */ "alter_db_optr ::= alter_db_optr fsync", /* 107 */ "signed ::= INTEGER",
/* 108 */ "typename ::= ids", /* 108 */ "signed ::= PLUS INTEGER",
/* 109 */ "typename ::= ids LP signed RP", /* 109 */ "signed ::= MINUS INTEGER",
/* 110 */ "signed ::= INTEGER", /* 110 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args",
/* 111 */ "signed ::= PLUS INTEGER", /* 111 */ "create_table_args ::= LP columnlist RP",
/* 112 */ "signed ::= MINUS INTEGER", /* 112 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP",
/* 113 */ "cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args", /* 113 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP",
/* 114 */ "create_table_args ::= LP columnlist RP", /* 114 */ "create_table_args ::= AS select",
/* 115 */ "create_table_args ::= LP columnlist RP TAGS LP columnlist RP", /* 115 */ "columnlist ::= columnlist COMMA column",
/* 116 */ "create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP", /* 116 */ "columnlist ::= column",
/* 117 */ "create_table_args ::= AS select", /* 117 */ "column ::= ids typename",
/* 118 */ "columnlist ::= columnlist COMMA column", /* 118 */ "tagitemlist ::= tagitemlist COMMA tagitem",
/* 119 */ "columnlist ::= column", /* 119 */ "tagitemlist ::= tagitem",
/* 120 */ "column ::= ids typename", /* 120 */ "tagitem ::= INTEGER",
/* 121 */ "tagitemlist ::= tagitemlist COMMA tagitem", /* 121 */ "tagitem ::= FLOAT",
/* 122 */ "tagitemlist ::= tagitem", /* 122 */ "tagitem ::= STRING",
/* 123 */ "tagitem ::= INTEGER", /* 123 */ "tagitem ::= BOOL",
/* 124 */ "tagitem ::= FLOAT", /* 124 */ "tagitem ::= NULL",
/* 125 */ "tagitem ::= STRING", /* 125 */ "tagitem ::= MINUS INTEGER",
/* 126 */ "tagitem ::= BOOL", /* 126 */ "tagitem ::= MINUS FLOAT",
/* 127 */ "tagitem ::= NULL", /* 127 */ "tagitem ::= PLUS INTEGER",
/* 128 */ "tagitem ::= MINUS INTEGER", /* 128 */ "tagitem ::= PLUS FLOAT",
/* 129 */ "tagitem ::= MINUS FLOAT", /* 129 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt",
/* 130 */ "tagitem ::= PLUS INTEGER", /* 130 */ "union ::= select",
/* 131 */ "tagitem ::= PLUS FLOAT", /* 131 */ "union ::= LP union RP",
/* 132 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt", /* 132 */ "union ::= union UNION ALL select",
/* 133 */ "union ::= select", /* 133 */ "union ::= union UNION ALL LP select RP",
/* 134 */ "union ::= LP union RP", /* 134 */ "cmd ::= union",
/* 135 */ "union ::= union UNION ALL select", /* 135 */ "select ::= SELECT selcollist",
/* 136 */ "union ::= union UNION ALL LP select RP", /* 136 */ "sclp ::= selcollist COMMA",
/* 137 */ "cmd ::= union", /* 137 */ "sclp ::=",
/* 138 */ "select ::= SELECT selcollist", /* 138 */ "selcollist ::= sclp expr as",
/* 139 */ "sclp ::= selcollist COMMA", /* 139 */ "selcollist ::= sclp STAR",
/* 140 */ "sclp ::=", /* 140 */ "as ::= AS ids",
/* 141 */ "selcollist ::= sclp expr as", /* 141 */ "as ::= ids",
/* 142 */ "selcollist ::= sclp STAR", /* 142 */ "as ::=",
/* 143 */ "as ::= AS ids", /* 143 */ "from ::= FROM tablelist",
/* 144 */ "as ::= ids", /* 144 */ "tablelist ::= ids cpxName",
/* 145 */ "as ::=", /* 145 */ "tablelist ::= ids cpxName ids",
/* 146 */ "from ::= FROM tablelist", /* 146 */ "tablelist ::= tablelist COMMA ids cpxName",
/* 147 */ "tablelist ::= ids cpxName", /* 147 */ "tablelist ::= tablelist COMMA ids cpxName ids",
/* 148 */ "tablelist ::= ids cpxName ids", /* 148 */ "tmvar ::= VARIABLE",
/* 149 */ "tablelist ::= tablelist COMMA ids cpxName", /* 149 */ "interval_opt ::= INTERVAL LP tmvar RP",
/* 150 */ "tablelist ::= tablelist COMMA ids cpxName ids", /* 150 */ "interval_opt ::=",
/* 151 */ "tmvar ::= VARIABLE", /* 151 */ "fill_opt ::=",
/* 152 */ "interval_opt ::= INTERVAL LP tmvar RP", /* 152 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
/* 153 */ "interval_opt ::=", /* 153 */ "fill_opt ::= FILL LP ID RP",
/* 154 */ "fill_opt ::=", /* 154 */ "sliding_opt ::= SLIDING LP tmvar RP",
/* 155 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP", /* 155 */ "sliding_opt ::=",
/* 156 */ "fill_opt ::= FILL LP ID RP", /* 156 */ "orderby_opt ::=",
/* 157 */ "sliding_opt ::= SLIDING LP tmvar RP", /* 157 */ "orderby_opt ::= ORDER BY sortlist",
/* 158 */ "sliding_opt ::=", /* 158 */ "sortlist ::= sortlist COMMA item sortorder",
/* 159 */ "orderby_opt ::=", /* 159 */ "sortlist ::= item sortorder",
/* 160 */ "orderby_opt ::= ORDER BY sortlist", /* 160 */ "item ::= ids cpxName",
/* 161 */ "sortlist ::= sortlist COMMA item sortorder", /* 161 */ "sortorder ::= ASC",
/* 162 */ "sortlist ::= item sortorder", /* 162 */ "sortorder ::= DESC",
/* 163 */ "item ::= ids cpxName", /* 163 */ "sortorder ::=",
/* 164 */ "sortorder ::= ASC", /* 164 */ "groupby_opt ::=",
/* 165 */ "sortorder ::= DESC", /* 165 */ "groupby_opt ::= GROUP BY grouplist",
/* 166 */ "sortorder ::=", /* 166 */ "grouplist ::= grouplist COMMA item",
/* 167 */ "groupby_opt ::=", /* 167 */ "grouplist ::= item",
/* 168 */ "groupby_opt ::= GROUP BY grouplist", /* 168 */ "having_opt ::=",
/* 169 */ "grouplist ::= grouplist COMMA item", /* 169 */ "having_opt ::= HAVING expr",
/* 170 */ "grouplist ::= item", /* 170 */ "limit_opt ::=",
/* 171 */ "having_opt ::=", /* 171 */ "limit_opt ::= LIMIT signed",
/* 172 */ "having_opt ::= HAVING expr", /* 172 */ "limit_opt ::= LIMIT signed OFFSET signed",
/* 173 */ "limit_opt ::=", /* 173 */ "limit_opt ::= LIMIT signed COMMA signed",
/* 174 */ "limit_opt ::= LIMIT signed", /* 174 */ "slimit_opt ::=",
/* 175 */ "limit_opt ::= LIMIT signed OFFSET signed", /* 175 */ "slimit_opt ::= SLIMIT signed",
/* 176 */ "limit_opt ::= LIMIT signed COMMA signed", /* 176 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
/* 177 */ "slimit_opt ::=", /* 177 */ "slimit_opt ::= SLIMIT signed COMMA signed",
/* 178 */ "slimit_opt ::= SLIMIT signed", /* 178 */ "where_opt ::=",
/* 179 */ "slimit_opt ::= SLIMIT signed SOFFSET signed", /* 179 */ "where_opt ::= WHERE expr",
/* 180 */ "slimit_opt ::= SLIMIT signed COMMA signed", /* 180 */ "expr ::= LP expr RP",
/* 181 */ "where_opt ::=", /* 181 */ "expr ::= ID",
/* 182 */ "where_opt ::= WHERE expr", /* 182 */ "expr ::= ID DOT ID",
/* 183 */ "expr ::= LP expr RP", /* 183 */ "expr ::= ID DOT STAR",
/* 184 */ "expr ::= ID", /* 184 */ "expr ::= INTEGER",
/* 185 */ "expr ::= ID DOT ID", /* 185 */ "expr ::= MINUS INTEGER",
/* 186 */ "expr ::= ID DOT STAR", /* 186 */ "expr ::= PLUS INTEGER",
/* 187 */ "expr ::= INTEGER", /* 187 */ "expr ::= FLOAT",
/* 188 */ "expr ::= MINUS INTEGER", /* 188 */ "expr ::= MINUS FLOAT",
/* 189 */ "expr ::= PLUS INTEGER", /* 189 */ "expr ::= PLUS FLOAT",
/* 190 */ "expr ::= FLOAT", /* 190 */ "expr ::= STRING",
/* 191 */ "expr ::= MINUS FLOAT", /* 191 */ "expr ::= NOW",
/* 192 */ "expr ::= PLUS FLOAT", /* 192 */ "expr ::= VARIABLE",
/* 193 */ "expr ::= STRING", /* 193 */ "expr ::= BOOL",
/* 194 */ "expr ::= NOW", /* 194 */ "expr ::= ID LP exprlist RP",
/* 195 */ "expr ::= VARIABLE", /* 195 */ "expr ::= ID LP STAR RP",
/* 196 */ "expr ::= BOOL", /* 196 */ "expr ::= expr AND expr",
/* 197 */ "expr ::= ID LP exprlist RP", /* 197 */ "expr ::= expr OR expr",
/* 198 */ "expr ::= ID LP STAR RP", /* 198 */ "expr ::= expr LT expr",
/* 199 */ "expr ::= expr AND expr", /* 199 */ "expr ::= expr GT expr",
/* 200 */ "expr ::= expr OR expr", /* 200 */ "expr ::= expr LE expr",
/* 201 */ "expr ::= expr LT expr", /* 201 */ "expr ::= expr GE expr",
/* 202 */ "expr ::= expr GT expr", /* 202 */ "expr ::= expr NE expr",
/* 203 */ "expr ::= expr LE expr", /* 203 */ "expr ::= expr EQ expr",
/* 204 */ "expr ::= expr GE expr", /* 204 */ "expr ::= expr PLUS expr",
/* 205 */ "expr ::= expr NE expr", /* 205 */ "expr ::= expr MINUS expr",
/* 206 */ "expr ::= expr EQ expr", /* 206 */ "expr ::= expr STAR expr",
/* 207 */ "expr ::= expr PLUS expr", /* 207 */ "expr ::= expr SLASH expr",
/* 208 */ "expr ::= expr MINUS expr", /* 208 */ "expr ::= expr REM expr",
/* 209 */ "expr ::= expr STAR expr", /* 209 */ "expr ::= expr LIKE expr",
/* 210 */ "expr ::= expr SLASH expr", /* 210 */ "expr ::= expr IN LP exprlist RP",
/* 211 */ "expr ::= expr REM expr", /* 211 */ "exprlist ::= exprlist COMMA expritem",
/* 212 */ "expr ::= expr LIKE expr", /* 212 */ "exprlist ::= expritem",
/* 213 */ "expr ::= expr IN LP exprlist RP", /* 213 */ "expritem ::= expr",
/* 214 */ "exprlist ::= exprlist COMMA expritem", /* 214 */ "expritem ::=",
/* 215 */ "exprlist ::= expritem", /* 215 */ "cmd ::= RESET QUERY CACHE",
/* 216 */ "expritem ::= expr", /* 216 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
/* 217 */ "expritem ::=", /* 217 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
/* 218 */ "cmd ::= RESET QUERY CACHE", /* 218 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
/* 219 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", /* 219 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
/* 220 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", /* 220 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
/* 221 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", /* 221 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
/* 222 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", /* 222 */ "cmd ::= KILL CONNECTION INTEGER",
/* 223 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", /* 223 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 224 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", /* 224 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
/* 225 */ "cmd ::= KILL CONNECTION INTEGER",
/* 226 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
/* 227 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
}; };
#endif /* NDEBUG */ #endif /* NDEBUG */
...@@ -1355,50 +1347,50 @@ static void yy_destructor( ...@@ -1355,50 +1347,50 @@ static void yy_destructor(
** inside the C code. ** inside the C code.
*/ */
/********* Begin destructor definitions ***************************************/ /********* Begin destructor definitions ***************************************/
case 227: /* keep */ case 226: /* keep */
case 228: /* tagitemlist */ case 227: /* tagitemlist */
case 253: /* fill_opt */ case 251: /* fill_opt */
case 255: /* groupby_opt */ case 253: /* groupby_opt */
case 256: /* orderby_opt */ case 254: /* orderby_opt */
case 266: /* sortlist */ case 264: /* sortlist */
case 270: /* grouplist */ case 268: /* grouplist */
{ {
tVariantListDestroy((yypminor->yy498)); tVariantListDestroy((yypminor->yy494));
} }
break; break;
case 245: /* columnlist */ case 243: /* columnlist */
{ {
tFieldListDestroy((yypminor->yy523)); tFieldListDestroy((yypminor->yy449));
} }
break; break;
case 246: /* select */ case 244: /* select */
{ {
doDestroyQuerySql((yypminor->yy414)); doDestroyQuerySql((yypminor->yy150));
} }
break; break;
case 249: /* selcollist */ case 247: /* selcollist */
case 261: /* sclp */ case 259: /* sclp */
case 271: /* exprlist */ case 269: /* exprlist */
{ {
tSQLExprListDestroy((yypminor->yy290)); tSQLExprListDestroy((yypminor->yy224));
} }
break; break;
case 251: /* where_opt */ case 249: /* where_opt */
case 257: /* having_opt */ case 255: /* having_opt */
case 262: /* expr */ case 260: /* expr */
case 272: /* expritem */ case 270: /* expritem */
{ {
tSQLExprDestroy((yypminor->yy64)); tSQLExprDestroy((yypminor->yy66));
} }
break; break;
case 260: /* union */ case 258: /* union */
{ {
destroyAllSelectClause((yypminor->yy231)); destroyAllSelectClause((yypminor->yy25));
} }
break; break;
case 267: /* sortitem */ case 265: /* sortitem */
{ {
tVariantDestroy(&(yypminor->yy134)); tVariantDestroy(&(yypminor->yy312));
} }
break; break;
/********* End destructor definitions *****************************************/ /********* End destructor definitions *****************************************/
...@@ -1692,234 +1684,231 @@ static const struct { ...@@ -1692,234 +1684,231 @@ static const struct {
YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
signed char nrhs; /* Negative of the number of RHS symbols in the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */
} yyRuleInfo[] = { } yyRuleInfo[] = {
{ 208, -1 }, /* (0) program ::= cmd */ { 207, -1 }, /* (0) program ::= cmd */
{ 209, -2 }, /* (1) cmd ::= SHOW DATABASES */ { 208, -2 }, /* (1) cmd ::= SHOW DATABASES */
{ 209, -2 }, /* (2) cmd ::= SHOW MNODES */ { 208, -2 }, /* (2) cmd ::= SHOW MNODES */
{ 209, -2 }, /* (3) cmd ::= SHOW DNODES */ { 208, -2 }, /* (3) cmd ::= SHOW DNODES */
{ 209, -2 }, /* (4) cmd ::= SHOW ACCOUNTS */ { 208, -2 }, /* (4) cmd ::= SHOW ACCOUNTS */
{ 209, -2 }, /* (5) cmd ::= SHOW USERS */ { 208, -2 }, /* (5) cmd ::= SHOW USERS */
{ 209, -2 }, /* (6) cmd ::= SHOW MODULES */ { 208, -2 }, /* (6) cmd ::= SHOW MODULES */
{ 209, -2 }, /* (7) cmd ::= SHOW QUERIES */ { 208, -2 }, /* (7) cmd ::= SHOW QUERIES */
{ 209, -2 }, /* (8) cmd ::= SHOW CONNECTIONS */ { 208, -2 }, /* (8) cmd ::= SHOW CONNECTIONS */
{ 209, -2 }, /* (9) cmd ::= SHOW STREAMS */ { 208, -2 }, /* (9) cmd ::= SHOW STREAMS */
{ 209, -2 }, /* (10) cmd ::= SHOW VARIABLES */ { 208, -2 }, /* (10) cmd ::= SHOW VARIABLES */
{ 209, -2 }, /* (11) cmd ::= SHOW SCORES */ { 208, -2 }, /* (11) cmd ::= SHOW SCORES */
{ 209, -2 }, /* (12) cmd ::= SHOW GRANTS */ { 208, -2 }, /* (12) cmd ::= SHOW GRANTS */
{ 209, -2 }, /* (13) cmd ::= SHOW VNODES */ { 208, -2 }, /* (13) cmd ::= SHOW VNODES */
{ 209, -3 }, /* (14) cmd ::= SHOW VNODES IPTOKEN */ { 208, -3 }, /* (14) cmd ::= SHOW VNODES IPTOKEN */
{ 210, 0 }, /* (15) dbPrefix ::= */ { 209, 0 }, /* (15) dbPrefix ::= */
{ 210, -2 }, /* (16) dbPrefix ::= ids DOT */ { 209, -2 }, /* (16) dbPrefix ::= ids DOT */
{ 212, 0 }, /* (17) cpxName ::= */ { 211, 0 }, /* (17) cpxName ::= */
{ 212, -2 }, /* (18) cpxName ::= DOT ids */ { 211, -2 }, /* (18) cpxName ::= DOT ids */
{ 209, -3 }, /* (19) cmd ::= SHOW dbPrefix TABLES */ { 208, -3 }, /* (19) cmd ::= SHOW dbPrefix TABLES */
{ 209, -5 }, /* (20) cmd ::= SHOW dbPrefix TABLES LIKE ids */ { 208, -5 }, /* (20) cmd ::= SHOW dbPrefix TABLES LIKE ids */
{ 209, -3 }, /* (21) cmd ::= SHOW dbPrefix STABLES */ { 208, -3 }, /* (21) cmd ::= SHOW dbPrefix STABLES */
{ 209, -5 }, /* (22) cmd ::= SHOW dbPrefix STABLES LIKE ids */ { 208, -5 }, /* (22) cmd ::= SHOW dbPrefix STABLES LIKE ids */
{ 209, -3 }, /* (23) cmd ::= SHOW dbPrefix VGROUPS */ { 208, -3 }, /* (23) cmd ::= SHOW dbPrefix VGROUPS */
{ 209, -4 }, /* (24) cmd ::= SHOW dbPrefix VGROUPS ids */ { 208, -4 }, /* (24) cmd ::= SHOW dbPrefix VGROUPS ids */
{ 209, -5 }, /* (25) cmd ::= DROP TABLE ifexists ids cpxName */ { 208, -5 }, /* (25) cmd ::= DROP TABLE ifexists ids cpxName */
{ 209, -4 }, /* (26) cmd ::= DROP DATABASE ifexists ids */ { 208, -4 }, /* (26) cmd ::= DROP DATABASE ifexists ids */
{ 209, -3 }, /* (27) cmd ::= DROP DNODE ids */ { 208, -3 }, /* (27) cmd ::= DROP DNODE ids */
{ 209, -3 }, /* (28) cmd ::= DROP USER ids */ { 208, -3 }, /* (28) cmd ::= DROP USER ids */
{ 209, -3 }, /* (29) cmd ::= DROP ACCOUNT ids */ { 208, -3 }, /* (29) cmd ::= DROP ACCOUNT ids */
{ 209, -2 }, /* (30) cmd ::= USE ids */ { 208, -2 }, /* (30) cmd ::= USE ids */
{ 209, -3 }, /* (31) cmd ::= DESCRIBE ids cpxName */ { 208, -3 }, /* (31) cmd ::= DESCRIBE ids cpxName */
{ 209, -5 }, /* (32) cmd ::= ALTER USER ids PASS ids */ { 208, -5 }, /* (32) cmd ::= ALTER USER ids PASS ids */
{ 209, -5 }, /* (33) cmd ::= ALTER USER ids PRIVILEGE ids */ { 208, -5 }, /* (33) cmd ::= ALTER USER ids PRIVILEGE ids */
{ 209, -4 }, /* (34) cmd ::= ALTER DNODE ids ids */ { 208, -4 }, /* (34) cmd ::= ALTER DNODE ids ids */
{ 209, -5 }, /* (35) cmd ::= ALTER DNODE ids ids ids */ { 208, -5 }, /* (35) cmd ::= ALTER DNODE ids ids ids */
{ 209, -3 }, /* (36) cmd ::= ALTER LOCAL ids */ { 208, -3 }, /* (36) cmd ::= ALTER LOCAL ids */
{ 209, -4 }, /* (37) cmd ::= ALTER LOCAL ids ids */ { 208, -4 }, /* (37) cmd ::= ALTER LOCAL ids ids */
{ 209, -4 }, /* (38) cmd ::= ALTER DATABASE ids alter_db_optr */ { 208, -4 }, /* (38) cmd ::= ALTER DATABASE ids alter_db_optr */
{ 209, -4 }, /* (39) cmd ::= ALTER ACCOUNT ids acct_optr */ { 208, -4 }, /* (39) cmd ::= ALTER ACCOUNT ids acct_optr */
{ 209, -6 }, /* (40) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ { 208, -6 }, /* (40) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ 211, -1 }, /* (41) ids ::= ID */ { 210, -1 }, /* (41) ids ::= ID */
{ 211, -1 }, /* (42) ids ::= STRING */ { 210, -1 }, /* (42) ids ::= STRING */
{ 213, -2 }, /* (43) ifexists ::= IF EXISTS */ { 212, -2 }, /* (43) ifexists ::= IF EXISTS */
{ 213, 0 }, /* (44) ifexists ::= */ { 212, 0 }, /* (44) ifexists ::= */
{ 216, -3 }, /* (45) ifnotexists ::= IF NOT EXISTS */ { 215, -3 }, /* (45) ifnotexists ::= IF NOT EXISTS */
{ 216, 0 }, /* (46) ifnotexists ::= */ { 215, 0 }, /* (46) ifnotexists ::= */
{ 209, -3 }, /* (47) cmd ::= CREATE DNODE ids */ { 208, -3 }, /* (47) cmd ::= CREATE DNODE ids */
{ 209, -6 }, /* (48) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ { 208, -6 }, /* (48) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ 209, -5 }, /* (49) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ { 208, -5 }, /* (49) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ 209, -5 }, /* (50) cmd ::= CREATE USER ids PASS ids */ { 208, -5 }, /* (50) cmd ::= CREATE USER ids PASS ids */
{ 218, 0 }, /* (51) pps ::= */ { 217, 0 }, /* (51) pps ::= */
{ 218, -2 }, /* (52) pps ::= PPS INTEGER */ { 217, -2 }, /* (52) pps ::= PPS INTEGER */
{ 219, 0 }, /* (53) tseries ::= */ { 218, 0 }, /* (53) tseries ::= */
{ 219, -2 }, /* (54) tseries ::= TSERIES INTEGER */ { 218, -2 }, /* (54) tseries ::= TSERIES INTEGER */
{ 220, 0 }, /* (55) dbs ::= */ { 219, 0 }, /* (55) dbs ::= */
{ 220, -2 }, /* (56) dbs ::= DBS INTEGER */ { 219, -2 }, /* (56) dbs ::= DBS INTEGER */
{ 221, 0 }, /* (57) streams ::= */ { 220, 0 }, /* (57) streams ::= */
{ 221, -2 }, /* (58) streams ::= STREAMS INTEGER */ { 220, -2 }, /* (58) streams ::= STREAMS INTEGER */
{ 222, 0 }, /* (59) storage ::= */ { 221, 0 }, /* (59) storage ::= */
{ 222, -2 }, /* (60) storage ::= STORAGE INTEGER */ { 221, -2 }, /* (60) storage ::= STORAGE INTEGER */
{ 223, 0 }, /* (61) qtime ::= */ { 222, 0 }, /* (61) qtime ::= */
{ 223, -2 }, /* (62) qtime ::= QTIME INTEGER */ { 222, -2 }, /* (62) qtime ::= QTIME INTEGER */
{ 224, 0 }, /* (63) users ::= */ { 223, 0 }, /* (63) users ::= */
{ 224, -2 }, /* (64) users ::= USERS INTEGER */ { 223, -2 }, /* (64) users ::= USERS INTEGER */
{ 225, 0 }, /* (65) conns ::= */ { 224, 0 }, /* (65) conns ::= */
{ 225, -2 }, /* (66) conns ::= CONNS INTEGER */ { 224, -2 }, /* (66) conns ::= CONNS INTEGER */
{ 226, 0 }, /* (67) state ::= */ { 225, 0 }, /* (67) state ::= */
{ 226, -2 }, /* (68) state ::= STATE ids */ { 225, -2 }, /* (68) state ::= STATE ids */
{ 215, -9 }, /* (69) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ { 214, -9 }, /* (69) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ 227, -2 }, /* (70) keep ::= KEEP tagitemlist */ { 226, -2 }, /* (70) keep ::= KEEP tagitemlist */
{ 229, -2 }, /* (71) tables ::= MAXTABLES INTEGER */ { 228, -2 }, /* (71) cache ::= CACHE INTEGER */
{ 230, -2 }, /* (72) cache ::= CACHE INTEGER */ { 229, -2 }, /* (72) replica ::= REPLICA INTEGER */
{ 231, -2 }, /* (73) replica ::= REPLICA INTEGER */ { 230, -2 }, /* (73) quorum ::= QUORUM INTEGER */
{ 232, -2 }, /* (74) quorum ::= QUORUM INTEGER */ { 231, -2 }, /* (74) days ::= DAYS INTEGER */
{ 233, -2 }, /* (75) days ::= DAYS INTEGER */ { 232, -2 }, /* (75) minrows ::= MINROWS INTEGER */
{ 234, -2 }, /* (76) minrows ::= MINROWS INTEGER */ { 233, -2 }, /* (76) maxrows ::= MAXROWS INTEGER */
{ 235, -2 }, /* (77) maxrows ::= MAXROWS INTEGER */ { 234, -2 }, /* (77) blocks ::= BLOCKS INTEGER */
{ 236, -2 }, /* (78) blocks ::= BLOCKS INTEGER */ { 235, -2 }, /* (78) ctime ::= CTIME INTEGER */
{ 237, -2 }, /* (79) ctime ::= CTIME INTEGER */ { 236, -2 }, /* (79) wal ::= WAL INTEGER */
{ 238, -2 }, /* (80) wal ::= WAL INTEGER */ { 237, -2 }, /* (80) fsync ::= FSYNC INTEGER */
{ 239, -2 }, /* (81) fsync ::= FSYNC INTEGER */ { 238, -2 }, /* (81) comp ::= COMP INTEGER */
{ 240, -2 }, /* (82) comp ::= COMP INTEGER */ { 239, -2 }, /* (82) prec ::= PRECISION STRING */
{ 241, -2 }, /* (83) prec ::= PRECISION STRING */ { 216, 0 }, /* (83) db_optr ::= */
{ 217, 0 }, /* (84) db_optr ::= */ { 216, -2 }, /* (84) db_optr ::= db_optr cache */
{ 217, -2 }, /* (85) db_optr ::= db_optr tables */ { 216, -2 }, /* (85) db_optr ::= db_optr replica */
{ 217, -2 }, /* (86) db_optr ::= db_optr cache */ { 216, -2 }, /* (86) db_optr ::= db_optr quorum */
{ 217, -2 }, /* (87) db_optr ::= db_optr replica */ { 216, -2 }, /* (87) db_optr ::= db_optr days */
{ 217, -2 }, /* (88) db_optr ::= db_optr quorum */ { 216, -2 }, /* (88) db_optr ::= db_optr minrows */
{ 217, -2 }, /* (89) db_optr ::= db_optr days */ { 216, -2 }, /* (89) db_optr ::= db_optr maxrows */
{ 217, -2 }, /* (90) db_optr ::= db_optr minrows */ { 216, -2 }, /* (90) db_optr ::= db_optr blocks */
{ 217, -2 }, /* (91) db_optr ::= db_optr maxrows */ { 216, -2 }, /* (91) db_optr ::= db_optr ctime */
{ 217, -2 }, /* (92) db_optr ::= db_optr blocks */ { 216, -2 }, /* (92) db_optr ::= db_optr wal */
{ 217, -2 }, /* (93) db_optr ::= db_optr ctime */ { 216, -2 }, /* (93) db_optr ::= db_optr fsync */
{ 217, -2 }, /* (94) db_optr ::= db_optr wal */ { 216, -2 }, /* (94) db_optr ::= db_optr comp */
{ 217, -2 }, /* (95) db_optr ::= db_optr fsync */ { 216, -2 }, /* (95) db_optr ::= db_optr prec */
{ 217, -2 }, /* (96) db_optr ::= db_optr comp */ { 216, -2 }, /* (96) db_optr ::= db_optr keep */
{ 217, -2 }, /* (97) db_optr ::= db_optr prec */ { 213, 0 }, /* (97) alter_db_optr ::= */
{ 217, -2 }, /* (98) db_optr ::= db_optr keep */ { 213, -2 }, /* (98) alter_db_optr ::= alter_db_optr replica */
{ 214, 0 }, /* (99) alter_db_optr ::= */ { 213, -2 }, /* (99) alter_db_optr ::= alter_db_optr quorum */
{ 214, -2 }, /* (100) alter_db_optr ::= alter_db_optr replica */ { 213, -2 }, /* (100) alter_db_optr ::= alter_db_optr keep */
{ 214, -2 }, /* (101) alter_db_optr ::= alter_db_optr quorum */ { 213, -2 }, /* (101) alter_db_optr ::= alter_db_optr blocks */
{ 214, -2 }, /* (102) alter_db_optr ::= alter_db_optr tables */ { 213, -2 }, /* (102) alter_db_optr ::= alter_db_optr comp */
{ 214, -2 }, /* (103) alter_db_optr ::= alter_db_optr keep */ { 213, -2 }, /* (103) alter_db_optr ::= alter_db_optr wal */
{ 214, -2 }, /* (104) alter_db_optr ::= alter_db_optr blocks */ { 213, -2 }, /* (104) alter_db_optr ::= alter_db_optr fsync */
{ 214, -2 }, /* (105) alter_db_optr ::= alter_db_optr comp */ { 240, -1 }, /* (105) typename ::= ids */
{ 214, -2 }, /* (106) alter_db_optr ::= alter_db_optr wal */ { 240, -4 }, /* (106) typename ::= ids LP signed RP */
{ 214, -2 }, /* (107) alter_db_optr ::= alter_db_optr fsync */ { 241, -1 }, /* (107) signed ::= INTEGER */
{ 242, -1 }, /* (108) typename ::= ids */ { 241, -2 }, /* (108) signed ::= PLUS INTEGER */
{ 242, -4 }, /* (109) typename ::= ids LP signed RP */ { 241, -2 }, /* (109) signed ::= MINUS INTEGER */
{ 243, -1 }, /* (110) signed ::= INTEGER */ { 208, -6 }, /* (110) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */
{ 243, -2 }, /* (111) signed ::= PLUS INTEGER */ { 242, -3 }, /* (111) create_table_args ::= LP columnlist RP */
{ 243, -2 }, /* (112) signed ::= MINUS INTEGER */ { 242, -7 }, /* (112) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */
{ 209, -6 }, /* (113) cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ { 242, -7 }, /* (113) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */
{ 244, -3 }, /* (114) create_table_args ::= LP columnlist RP */ { 242, -2 }, /* (114) create_table_args ::= AS select */
{ 244, -7 }, /* (115) create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ { 243, -3 }, /* (115) columnlist ::= columnlist COMMA column */
{ 244, -7 }, /* (116) create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ { 243, -1 }, /* (116) columnlist ::= column */
{ 244, -2 }, /* (117) create_table_args ::= AS select */ { 245, -2 }, /* (117) column ::= ids typename */
{ 245, -3 }, /* (118) columnlist ::= columnlist COMMA column */ { 227, -3 }, /* (118) tagitemlist ::= tagitemlist COMMA tagitem */
{ 245, -1 }, /* (119) columnlist ::= column */ { 227, -1 }, /* (119) tagitemlist ::= tagitem */
{ 247, -2 }, /* (120) column ::= ids typename */ { 246, -1 }, /* (120) tagitem ::= INTEGER */
{ 228, -3 }, /* (121) tagitemlist ::= tagitemlist COMMA tagitem */ { 246, -1 }, /* (121) tagitem ::= FLOAT */
{ 228, -1 }, /* (122) tagitemlist ::= tagitem */ { 246, -1 }, /* (122) tagitem ::= STRING */
{ 248, -1 }, /* (123) tagitem ::= INTEGER */ { 246, -1 }, /* (123) tagitem ::= BOOL */
{ 248, -1 }, /* (124) tagitem ::= FLOAT */ { 246, -1 }, /* (124) tagitem ::= NULL */
{ 248, -1 }, /* (125) tagitem ::= STRING */ { 246, -2 }, /* (125) tagitem ::= MINUS INTEGER */
{ 248, -1 }, /* (126) tagitem ::= BOOL */ { 246, -2 }, /* (126) tagitem ::= MINUS FLOAT */
{ 248, -1 }, /* (127) tagitem ::= NULL */ { 246, -2 }, /* (127) tagitem ::= PLUS INTEGER */
{ 248, -2 }, /* (128) tagitem ::= MINUS INTEGER */ { 246, -2 }, /* (128) tagitem ::= PLUS FLOAT */
{ 248, -2 }, /* (129) tagitem ::= MINUS FLOAT */ { 244, -12 }, /* (129) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{ 248, -2 }, /* (130) tagitem ::= PLUS INTEGER */ { 258, -1 }, /* (130) union ::= select */
{ 248, -2 }, /* (131) tagitem ::= PLUS FLOAT */ { 258, -3 }, /* (131) union ::= LP union RP */
{ 246, -12 }, /* (132) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ { 258, -4 }, /* (132) union ::= union UNION ALL select */
{ 260, -1 }, /* (133) union ::= select */ { 258, -6 }, /* (133) union ::= union UNION ALL LP select RP */
{ 260, -3 }, /* (134) union ::= LP union RP */ { 208, -1 }, /* (134) cmd ::= union */
{ 260, -4 }, /* (135) union ::= union UNION ALL select */ { 244, -2 }, /* (135) select ::= SELECT selcollist */
{ 260, -6 }, /* (136) union ::= union UNION ALL LP select RP */ { 259, -2 }, /* (136) sclp ::= selcollist COMMA */
{ 209, -1 }, /* (137) cmd ::= union */ { 259, 0 }, /* (137) sclp ::= */
{ 246, -2 }, /* (138) select ::= SELECT selcollist */ { 247, -3 }, /* (138) selcollist ::= sclp expr as */
{ 261, -2 }, /* (139) sclp ::= selcollist COMMA */ { 247, -2 }, /* (139) selcollist ::= sclp STAR */
{ 261, 0 }, /* (140) sclp ::= */ { 261, -2 }, /* (140) as ::= AS ids */
{ 249, -3 }, /* (141) selcollist ::= sclp expr as */ { 261, -1 }, /* (141) as ::= ids */
{ 249, -2 }, /* (142) selcollist ::= sclp STAR */ { 261, 0 }, /* (142) as ::= */
{ 263, -2 }, /* (143) as ::= AS ids */ { 248, -2 }, /* (143) from ::= FROM tablelist */
{ 263, -1 }, /* (144) as ::= ids */ { 262, -2 }, /* (144) tablelist ::= ids cpxName */
{ 263, 0 }, /* (145) as ::= */ { 262, -3 }, /* (145) tablelist ::= ids cpxName ids */
{ 250, -2 }, /* (146) from ::= FROM tablelist */ { 262, -4 }, /* (146) tablelist ::= tablelist COMMA ids cpxName */
{ 264, -2 }, /* (147) tablelist ::= ids cpxName */ { 262, -5 }, /* (147) tablelist ::= tablelist COMMA ids cpxName ids */
{ 264, -3 }, /* (148) tablelist ::= ids cpxName ids */ { 263, -1 }, /* (148) tmvar ::= VARIABLE */
{ 264, -4 }, /* (149) tablelist ::= tablelist COMMA ids cpxName */ { 250, -4 }, /* (149) interval_opt ::= INTERVAL LP tmvar RP */
{ 264, -5 }, /* (150) tablelist ::= tablelist COMMA ids cpxName ids */ { 250, 0 }, /* (150) interval_opt ::= */
{ 265, -1 }, /* (151) tmvar ::= VARIABLE */ { 251, 0 }, /* (151) fill_opt ::= */
{ 252, -4 }, /* (152) interval_opt ::= INTERVAL LP tmvar RP */ { 251, -6 }, /* (152) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ 252, 0 }, /* (153) interval_opt ::= */ { 251, -4 }, /* (153) fill_opt ::= FILL LP ID RP */
{ 253, 0 }, /* (154) fill_opt ::= */ { 252, -4 }, /* (154) sliding_opt ::= SLIDING LP tmvar RP */
{ 253, -6 }, /* (155) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ { 252, 0 }, /* (155) sliding_opt ::= */
{ 253, -4 }, /* (156) fill_opt ::= FILL LP ID RP */ { 254, 0 }, /* (156) orderby_opt ::= */
{ 254, -4 }, /* (157) sliding_opt ::= SLIDING LP tmvar RP */ { 254, -3 }, /* (157) orderby_opt ::= ORDER BY sortlist */
{ 254, 0 }, /* (158) sliding_opt ::= */ { 264, -4 }, /* (158) sortlist ::= sortlist COMMA item sortorder */
{ 256, 0 }, /* (159) orderby_opt ::= */ { 264, -2 }, /* (159) sortlist ::= item sortorder */
{ 256, -3 }, /* (160) orderby_opt ::= ORDER BY sortlist */ { 266, -2 }, /* (160) item ::= ids cpxName */
{ 266, -4 }, /* (161) sortlist ::= sortlist COMMA item sortorder */ { 267, -1 }, /* (161) sortorder ::= ASC */
{ 266, -2 }, /* (162) sortlist ::= item sortorder */ { 267, -1 }, /* (162) sortorder ::= DESC */
{ 268, -2 }, /* (163) item ::= ids cpxName */ { 267, 0 }, /* (163) sortorder ::= */
{ 269, -1 }, /* (164) sortorder ::= ASC */ { 253, 0 }, /* (164) groupby_opt ::= */
{ 269, -1 }, /* (165) sortorder ::= DESC */ { 253, -3 }, /* (165) groupby_opt ::= GROUP BY grouplist */
{ 269, 0 }, /* (166) sortorder ::= */ { 268, -3 }, /* (166) grouplist ::= grouplist COMMA item */
{ 255, 0 }, /* (167) groupby_opt ::= */ { 268, -1 }, /* (167) grouplist ::= item */
{ 255, -3 }, /* (168) groupby_opt ::= GROUP BY grouplist */ { 255, 0 }, /* (168) having_opt ::= */
{ 270, -3 }, /* (169) grouplist ::= grouplist COMMA item */ { 255, -2 }, /* (169) having_opt ::= HAVING expr */
{ 270, -1 }, /* (170) grouplist ::= item */ { 257, 0 }, /* (170) limit_opt ::= */
{ 257, 0 }, /* (171) having_opt ::= */ { 257, -2 }, /* (171) limit_opt ::= LIMIT signed */
{ 257, -2 }, /* (172) having_opt ::= HAVING expr */ { 257, -4 }, /* (172) limit_opt ::= LIMIT signed OFFSET signed */
{ 259, 0 }, /* (173) limit_opt ::= */ { 257, -4 }, /* (173) limit_opt ::= LIMIT signed COMMA signed */
{ 259, -2 }, /* (174) limit_opt ::= LIMIT signed */ { 256, 0 }, /* (174) slimit_opt ::= */
{ 259, -4 }, /* (175) limit_opt ::= LIMIT signed OFFSET signed */ { 256, -2 }, /* (175) slimit_opt ::= SLIMIT signed */
{ 259, -4 }, /* (176) limit_opt ::= LIMIT signed COMMA signed */ { 256, -4 }, /* (176) slimit_opt ::= SLIMIT signed SOFFSET signed */
{ 258, 0 }, /* (177) slimit_opt ::= */ { 256, -4 }, /* (177) slimit_opt ::= SLIMIT signed COMMA signed */
{ 258, -2 }, /* (178) slimit_opt ::= SLIMIT signed */ { 249, 0 }, /* (178) where_opt ::= */
{ 258, -4 }, /* (179) slimit_opt ::= SLIMIT signed SOFFSET signed */ { 249, -2 }, /* (179) where_opt ::= WHERE expr */
{ 258, -4 }, /* (180) slimit_opt ::= SLIMIT signed COMMA signed */ { 260, -3 }, /* (180) expr ::= LP expr RP */
{ 251, 0 }, /* (181) where_opt ::= */ { 260, -1 }, /* (181) expr ::= ID */
{ 251, -2 }, /* (182) where_opt ::= WHERE expr */ { 260, -3 }, /* (182) expr ::= ID DOT ID */
{ 262, -3 }, /* (183) expr ::= LP expr RP */ { 260, -3 }, /* (183) expr ::= ID DOT STAR */
{ 262, -1 }, /* (184) expr ::= ID */ { 260, -1 }, /* (184) expr ::= INTEGER */
{ 262, -3 }, /* (185) expr ::= ID DOT ID */ { 260, -2 }, /* (185) expr ::= MINUS INTEGER */
{ 262, -3 }, /* (186) expr ::= ID DOT STAR */ { 260, -2 }, /* (186) expr ::= PLUS INTEGER */
{ 262, -1 }, /* (187) expr ::= INTEGER */ { 260, -1 }, /* (187) expr ::= FLOAT */
{ 262, -2 }, /* (188) expr ::= MINUS INTEGER */ { 260, -2 }, /* (188) expr ::= MINUS FLOAT */
{ 262, -2 }, /* (189) expr ::= PLUS INTEGER */ { 260, -2 }, /* (189) expr ::= PLUS FLOAT */
{ 262, -1 }, /* (190) expr ::= FLOAT */ { 260, -1 }, /* (190) expr ::= STRING */
{ 262, -2 }, /* (191) expr ::= MINUS FLOAT */ { 260, -1 }, /* (191) expr ::= NOW */
{ 262, -2 }, /* (192) expr ::= PLUS FLOAT */ { 260, -1 }, /* (192) expr ::= VARIABLE */
{ 262, -1 }, /* (193) expr ::= STRING */ { 260, -1 }, /* (193) expr ::= BOOL */
{ 262, -1 }, /* (194) expr ::= NOW */ { 260, -4 }, /* (194) expr ::= ID LP exprlist RP */
{ 262, -1 }, /* (195) expr ::= VARIABLE */ { 260, -4 }, /* (195) expr ::= ID LP STAR RP */
{ 262, -1 }, /* (196) expr ::= BOOL */ { 260, -3 }, /* (196) expr ::= expr AND expr */
{ 262, -4 }, /* (197) expr ::= ID LP exprlist RP */ { 260, -3 }, /* (197) expr ::= expr OR expr */
{ 262, -4 }, /* (198) expr ::= ID LP STAR RP */ { 260, -3 }, /* (198) expr ::= expr LT expr */
{ 262, -3 }, /* (199) expr ::= expr AND expr */ { 260, -3 }, /* (199) expr ::= expr GT expr */
{ 262, -3 }, /* (200) expr ::= expr OR expr */ { 260, -3 }, /* (200) expr ::= expr LE expr */
{ 262, -3 }, /* (201) expr ::= expr LT expr */ { 260, -3 }, /* (201) expr ::= expr GE expr */
{ 262, -3 }, /* (202) expr ::= expr GT expr */ { 260, -3 }, /* (202) expr ::= expr NE expr */
{ 262, -3 }, /* (203) expr ::= expr LE expr */ { 260, -3 }, /* (203) expr ::= expr EQ expr */
{ 262, -3 }, /* (204) expr ::= expr GE expr */ { 260, -3 }, /* (204) expr ::= expr PLUS expr */
{ 262, -3 }, /* (205) expr ::= expr NE expr */ { 260, -3 }, /* (205) expr ::= expr MINUS expr */
{ 262, -3 }, /* (206) expr ::= expr EQ expr */ { 260, -3 }, /* (206) expr ::= expr STAR expr */
{ 262, -3 }, /* (207) expr ::= expr PLUS expr */ { 260, -3 }, /* (207) expr ::= expr SLASH expr */
{ 262, -3 }, /* (208) expr ::= expr MINUS expr */ { 260, -3 }, /* (208) expr ::= expr REM expr */
{ 262, -3 }, /* (209) expr ::= expr STAR expr */ { 260, -3 }, /* (209) expr ::= expr LIKE expr */
{ 262, -3 }, /* (210) expr ::= expr SLASH expr */ { 260, -5 }, /* (210) expr ::= expr IN LP exprlist RP */
{ 262, -3 }, /* (211) expr ::= expr REM expr */ { 269, -3 }, /* (211) exprlist ::= exprlist COMMA expritem */
{ 262, -3 }, /* (212) expr ::= expr LIKE expr */ { 269, -1 }, /* (212) exprlist ::= expritem */
{ 262, -5 }, /* (213) expr ::= expr IN LP exprlist RP */ { 270, -1 }, /* (213) expritem ::= expr */
{ 271, -3 }, /* (214) exprlist ::= exprlist COMMA expritem */ { 270, 0 }, /* (214) expritem ::= */
{ 271, -1 }, /* (215) exprlist ::= expritem */ { 208, -3 }, /* (215) cmd ::= RESET QUERY CACHE */
{ 272, -1 }, /* (216) expritem ::= expr */ { 208, -7 }, /* (216) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ 272, 0 }, /* (217) expritem ::= */ { 208, -7 }, /* (217) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ 209, -3 }, /* (218) cmd ::= RESET QUERY CACHE */ { 208, -7 }, /* (218) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ 209, -7 }, /* (219) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ { 208, -7 }, /* (219) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ 209, -7 }, /* (220) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ { 208, -8 }, /* (220) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ 209, -7 }, /* (221) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ { 208, -9 }, /* (221) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ 209, -7 }, /* (222) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ { 208, -3 }, /* (222) cmd ::= KILL CONNECTION INTEGER */
{ 209, -8 }, /* (223) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ { 208, -5 }, /* (223) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 209, -9 }, /* (224) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ { 208, -5 }, /* (224) cmd ::= KILL QUERY INTEGER COLON INTEGER */
{ 209, -3 }, /* (225) cmd ::= KILL CONNECTION INTEGER */
{ 209, -5 }, /* (226) cmd ::= KILL STREAM INTEGER COLON INTEGER */
{ 209, -5 }, /* (227) cmd ::= KILL QUERY INTEGER COLON INTEGER */
}; };
static void yy_accept(yyParser*); /* Forward Declaration */ static void yy_accept(yyParser*); /* Forward Declaration */
...@@ -2139,13 +2128,13 @@ static void yy_reduce( ...@@ -2139,13 +2128,13 @@ static void yy_reduce(
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
break; break;
case 38: /* cmd ::= ALTER DATABASE ids alter_db_optr */ case 38: /* cmd ::= ALTER DATABASE ids alter_db_optr */
{ SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &t);} { SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy158, &t);}
break; break;
case 39: /* cmd ::= ALTER ACCOUNT ids acct_optr */ case 39: /* cmd ::= ALTER ACCOUNT ids acct_optr */
{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy149);} { setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy73);}
break; break;
case 40: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ case 40: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
{ setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy149);} { setCreateAcctSQL(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy73);}
break; break;
case 41: /* ids ::= ID */ case 41: /* ids ::= ID */
case 42: /* ids ::= STRING */ yytestcase(yyruleno==42); case 42: /* ids ::= STRING */ yytestcase(yyruleno==42);
...@@ -2166,10 +2155,10 @@ static void yy_reduce( ...@@ -2166,10 +2155,10 @@ static void yy_reduce(
{ setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);} { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);}
break; break;
case 48: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ case 48: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
{ setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy149);} { setCreateAcctSQL(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy73);}
break; break;
case 49: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */ case 49: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy268, &yymsp[-2].minor.yy0);} { setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy158, &yymsp[-2].minor.yy0);}
break; break;
case 50: /* cmd ::= CREATE USER ids PASS ids */ case 50: /* cmd ::= CREATE USER ids PASS ids */
{ setCreateUserSQL(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);} { setCreateUserSQL(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
...@@ -2198,562 +2187,556 @@ static void yy_reduce( ...@@ -2198,562 +2187,556 @@ static void yy_reduce(
break; break;
case 69: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */ case 69: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{ {
yylhsminor.yy149.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; yylhsminor.yy73.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
yylhsminor.yy149.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; yylhsminor.yy73.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
yylhsminor.yy149.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; yylhsminor.yy73.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
yylhsminor.yy149.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; yylhsminor.yy73.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
yylhsminor.yy149.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; yylhsminor.yy73.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
yylhsminor.yy149.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; yylhsminor.yy73.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy149.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; yylhsminor.yy73.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
yylhsminor.yy149.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; yylhsminor.yy73.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
yylhsminor.yy149.stat = yymsp[0].minor.yy0; yylhsminor.yy73.stat = yymsp[0].minor.yy0;
} }
yymsp[-8].minor.yy149 = yylhsminor.yy149; yymsp[-8].minor.yy73 = yylhsminor.yy73;
break; break;
case 70: /* keep ::= KEEP tagitemlist */ case 70: /* keep ::= KEEP tagitemlist */
{ yymsp[-1].minor.yy498 = yymsp[0].minor.yy498; } { yymsp[-1].minor.yy494 = yymsp[0].minor.yy494; }
break; break;
case 71: /* tables ::= MAXTABLES INTEGER */ case 71: /* cache ::= CACHE INTEGER */
case 72: /* cache ::= CACHE INTEGER */ yytestcase(yyruleno==72); case 72: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==72);
case 73: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==73); case 73: /* quorum ::= QUORUM INTEGER */ yytestcase(yyruleno==73);
case 74: /* quorum ::= QUORUM INTEGER */ yytestcase(yyruleno==74); case 74: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==74);
case 75: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==75); case 75: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==75);
case 76: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==76); case 76: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==76);
case 77: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==77); case 77: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==77);
case 78: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==78); case 78: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==78);
case 79: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==79); case 79: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==79);
case 80: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==80); case 80: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==80);
case 81: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==81); case 81: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==81);
case 82: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==82); case 82: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==82);
case 83: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==83);
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break; break;
case 84: /* db_optr ::= */ case 83: /* db_optr ::= */
{setDefaultCreateDbOption(&yymsp[1].minor.yy268);} {setDefaultCreateDbOption(&yymsp[1].minor.yy158);}
break; break;
case 85: /* db_optr ::= db_optr tables */ case 84: /* db_optr ::= db_optr cache */
case 102: /* alter_db_optr ::= alter_db_optr tables */ yytestcase(yyruleno==102); { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.maxTablesPerVnode = strtol(yymsp[0].minor.yy0.z, NULL, 10); } yymsp[-1].minor.yy158 = yylhsminor.yy158;
yymsp[-1].minor.yy268 = yylhsminor.yy268; break;
break; case 85: /* db_optr ::= db_optr replica */
case 86: /* db_optr ::= db_optr cache */ case 98: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==98);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy158 = yylhsminor.yy158;
break; break;
case 87: /* db_optr ::= db_optr replica */ case 86: /* db_optr ::= db_optr quorum */
case 100: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==100); case 99: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==99);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy158 = yylhsminor.yy158;
break; break;
case 88: /* db_optr ::= db_optr quorum */ case 87: /* db_optr ::= db_optr days */
case 101: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==101); { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); } yymsp[-1].minor.yy158 = yylhsminor.yy158;
yymsp[-1].minor.yy268 = yylhsminor.yy268; break;
break; case 88: /* db_optr ::= db_optr minrows */
case 89: /* db_optr ::= db_optr days */ { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } yymsp[-1].minor.yy158 = yylhsminor.yy158;
yymsp[-1].minor.yy268 = yylhsminor.yy268; break;
break; case 89: /* db_optr ::= db_optr maxrows */
case 90: /* db_optr ::= db_optr minrows */ { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } yymsp[-1].minor.yy158 = yylhsminor.yy158;
yymsp[-1].minor.yy268 = yylhsminor.yy268; break;
break; case 90: /* db_optr ::= db_optr blocks */
case 91: /* db_optr ::= db_optr maxrows */ case 101: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==101);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy158 = yylhsminor.yy158;
break; break;
case 92: /* db_optr ::= db_optr blocks */ case 91: /* db_optr ::= db_optr ctime */
case 104: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==104); { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } yymsp[-1].minor.yy158 = yylhsminor.yy158;
yymsp[-1].minor.yy268 = yylhsminor.yy268; break;
break; case 92: /* db_optr ::= db_optr wal */
case 93: /* db_optr ::= db_optr ctime */ case 103: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==103);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy158 = yylhsminor.yy158;
break; break;
case 94: /* db_optr ::= db_optr wal */ case 93: /* db_optr ::= db_optr fsync */
case 106: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==106); case 104: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==104);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy158 = yylhsminor.yy158;
break; break;
case 95: /* db_optr ::= db_optr fsync */ case 94: /* db_optr ::= db_optr comp */
case 107: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==107); case 102: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==102);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy158 = yylhsminor.yy158;
break; break;
case 96: /* db_optr ::= db_optr comp */ case 95: /* db_optr ::= db_optr prec */
case 105: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==105); { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.precision = yymsp[0].minor.yy0; }
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } yymsp[-1].minor.yy158 = yylhsminor.yy158;
yymsp[-1].minor.yy268 = yylhsminor.yy268; break;
break; case 96: /* db_optr ::= db_optr keep */
case 97: /* db_optr ::= db_optr prec */ case 100: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==100);
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.precision = yymsp[0].minor.yy0; } { yylhsminor.yy158 = yymsp[-1].minor.yy158; yylhsminor.yy158.keep = yymsp[0].minor.yy494; }
yymsp[-1].minor.yy268 = yylhsminor.yy268; yymsp[-1].minor.yy158 = yylhsminor.yy158;
break; break;
case 98: /* db_optr ::= db_optr keep */ case 97: /* alter_db_optr ::= */
case 103: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==103); { setDefaultCreateDbOption(&yymsp[1].minor.yy158);}
{ yylhsminor.yy268 = yymsp[-1].minor.yy268; yylhsminor.yy268.keep = yymsp[0].minor.yy498; } break;
yymsp[-1].minor.yy268 = yylhsminor.yy268; case 105: /* typename ::= ids */
break;
case 99: /* alter_db_optr ::= */
{ setDefaultCreateDbOption(&yymsp[1].minor.yy268);}
break;
case 108: /* typename ::= ids */
{ {
yymsp[0].minor.yy0.type = 0; yymsp[0].minor.yy0.type = 0;
tSQLSetColumnType (&yylhsminor.yy223, &yymsp[0].minor.yy0); tSQLSetColumnType (&yylhsminor.yy181, &yymsp[0].minor.yy0);
} }
yymsp[0].minor.yy223 = yylhsminor.yy223; yymsp[0].minor.yy181 = yylhsminor.yy181;
break; break;
case 109: /* typename ::= ids LP signed RP */ case 106: /* typename ::= ids LP signed RP */
{ {
if (yymsp[-1].minor.yy207 <= 0) { if (yymsp[-1].minor.yy271 <= 0) {
yymsp[-3].minor.yy0.type = 0; yymsp[-3].minor.yy0.type = 0;
tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0); tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0);
} else { } else {
yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy207; // negative value of name length yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy271; // negative value of name length
tSQLSetColumnType(&yylhsminor.yy223, &yymsp[-3].minor.yy0); tSQLSetColumnType(&yylhsminor.yy181, &yymsp[-3].minor.yy0);
} }
} }
yymsp[-3].minor.yy223 = yylhsminor.yy223; yymsp[-3].minor.yy181 = yylhsminor.yy181;
break; break;
case 110: /* signed ::= INTEGER */ case 107: /* signed ::= INTEGER */
{ yylhsminor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yylhsminor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
yymsp[0].minor.yy207 = yylhsminor.yy207; yymsp[0].minor.yy271 = yylhsminor.yy271;
break; break;
case 111: /* signed ::= PLUS INTEGER */ case 108: /* signed ::= PLUS INTEGER */
{ yymsp[-1].minor.yy207 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } { yymsp[-1].minor.yy271 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
break; break;
case 112: /* signed ::= MINUS INTEGER */ case 109: /* signed ::= MINUS INTEGER */
{ yymsp[-1].minor.yy207 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} { yymsp[-1].minor.yy271 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
break; break;
case 113: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */ case 110: /* cmd ::= CREATE TABLE ifnotexists ids cpxName create_table_args */
{ {
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
setCreatedTableName(pInfo, &yymsp[-2].minor.yy0, &yymsp[-3].minor.yy0); setCreatedTableName(pInfo, &yymsp[-2].minor.yy0, &yymsp[-3].minor.yy0);
} }
break; break;
case 114: /* create_table_args ::= LP columnlist RP */ case 111: /* create_table_args ::= LP columnlist RP */
{ {
yymsp[-2].minor.yy470 = tSetCreateSQLElems(yymsp[-1].minor.yy523, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE); yymsp[-2].minor.yy374 = tSetCreateSQLElems(yymsp[-1].minor.yy449, NULL, NULL, NULL, NULL, TSQL_CREATE_TABLE);
setSQLInfo(pInfo, yymsp[-2].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSQLInfo(pInfo, yymsp[-2].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE);
} }
break; break;
case 115: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */ case 112: /* create_table_args ::= LP columnlist RP TAGS LP columnlist RP */
{ {
yymsp[-6].minor.yy470 = tSetCreateSQLElems(yymsp[-5].minor.yy523, yymsp[-1].minor.yy523, NULL, NULL, NULL, TSQL_CREATE_STABLE); yymsp[-6].minor.yy374 = tSetCreateSQLElems(yymsp[-5].minor.yy449, yymsp[-1].minor.yy449, NULL, NULL, NULL, TSQL_CREATE_STABLE);
setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSQLInfo(pInfo, yymsp[-6].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE);
} }
break; break;
case 116: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */ case 113: /* create_table_args ::= USING ids cpxName TAGS LP tagitemlist RP */
{ {
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
yymsp[-6].minor.yy470 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy498, NULL, TSQL_CREATE_TABLE_FROM_STABLE); yymsp[-6].minor.yy374 = tSetCreateSQLElems(NULL, NULL, &yymsp[-5].minor.yy0, yymsp[-1].minor.yy494, NULL, TSQL_CREATE_TABLE_FROM_STABLE);
setSQLInfo(pInfo, yymsp[-6].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSQLInfo(pInfo, yymsp[-6].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE);
} }
break; break;
case 117: /* create_table_args ::= AS select */ case 114: /* create_table_args ::= AS select */
{ {
yymsp[-1].minor.yy470 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy414, TSQL_CREATE_STREAM); yymsp[-1].minor.yy374 = tSetCreateSQLElems(NULL, NULL, NULL, NULL, yymsp[0].minor.yy150, TSQL_CREATE_STREAM);
setSQLInfo(pInfo, yymsp[-1].minor.yy470, NULL, TSDB_SQL_CREATE_TABLE); setSQLInfo(pInfo, yymsp[-1].minor.yy374, NULL, TSDB_SQL_CREATE_TABLE);
} }
break; break;
case 118: /* columnlist ::= columnlist COMMA column */ case 115: /* columnlist ::= columnlist COMMA column */
{yylhsminor.yy523 = tFieldListAppend(yymsp[-2].minor.yy523, &yymsp[0].minor.yy223); } {yylhsminor.yy449 = tFieldListAppend(yymsp[-2].minor.yy449, &yymsp[0].minor.yy181); }
yymsp[-2].minor.yy523 = yylhsminor.yy523; yymsp[-2].minor.yy449 = yylhsminor.yy449;
break; break;
case 119: /* columnlist ::= column */ case 116: /* columnlist ::= column */
{yylhsminor.yy523 = tFieldListAppend(NULL, &yymsp[0].minor.yy223);} {yylhsminor.yy449 = tFieldListAppend(NULL, &yymsp[0].minor.yy181);}
yymsp[0].minor.yy523 = yylhsminor.yy523; yymsp[0].minor.yy449 = yylhsminor.yy449;
break; break;
case 120: /* column ::= ids typename */ case 117: /* column ::= ids typename */
{ {
tSQLSetColumnInfo(&yylhsminor.yy223, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy223); tSQLSetColumnInfo(&yylhsminor.yy181, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy181);
} }
yymsp[-1].minor.yy223 = yylhsminor.yy223; yymsp[-1].minor.yy181 = yylhsminor.yy181;
break; break;
case 121: /* tagitemlist ::= tagitemlist COMMA tagitem */ case 118: /* tagitemlist ::= tagitemlist COMMA tagitem */
{ yylhsminor.yy498 = tVariantListAppend(yymsp[-2].minor.yy498, &yymsp[0].minor.yy134, -1); } { yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1); }
yymsp[-2].minor.yy498 = yylhsminor.yy498; yymsp[-2].minor.yy494 = yylhsminor.yy494;
break; break;
case 122: /* tagitemlist ::= tagitem */ case 119: /* tagitemlist ::= tagitem */
{ yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1); } { yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1); }
yymsp[0].minor.yy498 = yylhsminor.yy498; yymsp[0].minor.yy494 = yylhsminor.yy494;
break; break;
case 123: /* tagitem ::= INTEGER */ case 120: /* tagitem ::= INTEGER */
case 124: /* tagitem ::= FLOAT */ yytestcase(yyruleno==124); case 121: /* tagitem ::= FLOAT */ yytestcase(yyruleno==121);
case 125: /* tagitem ::= STRING */ yytestcase(yyruleno==125); case 122: /* tagitem ::= STRING */ yytestcase(yyruleno==122);
case 126: /* tagitem ::= BOOL */ yytestcase(yyruleno==126); case 123: /* tagitem ::= BOOL */ yytestcase(yyruleno==123);
{toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); } {toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy312, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy134 = yylhsminor.yy134; yymsp[0].minor.yy312 = yylhsminor.yy312;
break; break;
case 127: /* tagitem ::= NULL */ case 124: /* tagitem ::= NULL */
{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy134, &yymsp[0].minor.yy0); } { yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy312, &yymsp[0].minor.yy0); }
yymsp[0].minor.yy134 = yylhsminor.yy134; yymsp[0].minor.yy312 = yylhsminor.yy312;
break; break;
case 128: /* tagitem ::= MINUS INTEGER */ case 125: /* tagitem ::= MINUS INTEGER */
case 129: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==129); case 126: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==126);
case 130: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==130); case 127: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==127);
case 131: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==131); case 128: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==128);
{ {
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type; yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type;
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0); tVariantCreate(&yylhsminor.yy312, &yymsp[-1].minor.yy0);
} }
yymsp[-1].minor.yy134 = yylhsminor.yy134; yymsp[-1].minor.yy312 = yylhsminor.yy312;
break; break;
case 132: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ case 129: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{ {
yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy290, yymsp[-9].minor.yy498, yymsp[-8].minor.yy64, yymsp[-4].minor.yy498, yymsp[-3].minor.yy498, &yymsp[-7].minor.yy0, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy498, &yymsp[0].minor.yy216, &yymsp[-1].minor.yy216); yylhsminor.yy150 = tSetQuerySQLElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy224, yymsp[-9].minor.yy494, yymsp[-8].minor.yy66, yymsp[-4].minor.yy494, yymsp[-3].minor.yy494, &yymsp[-7].minor.yy0, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy494, &yymsp[0].minor.yy188, &yymsp[-1].minor.yy188);
} }
yymsp[-11].minor.yy414 = yylhsminor.yy414; yymsp[-11].minor.yy150 = yylhsminor.yy150;
break; break;
case 133: /* union ::= select */ case 130: /* union ::= select */
{ yylhsminor.yy231 = setSubclause(NULL, yymsp[0].minor.yy414); } { yylhsminor.yy25 = setSubclause(NULL, yymsp[0].minor.yy150); }
yymsp[0].minor.yy231 = yylhsminor.yy231; yymsp[0].minor.yy25 = yylhsminor.yy25;
break; break;
case 134: /* union ::= LP union RP */ case 131: /* union ::= LP union RP */
{ yymsp[-2].minor.yy231 = yymsp[-1].minor.yy231; } { yymsp[-2].minor.yy25 = yymsp[-1].minor.yy25; }
break; break;
case 135: /* union ::= union UNION ALL select */ case 132: /* union ::= union UNION ALL select */
{ yylhsminor.yy231 = appendSelectClause(yymsp[-3].minor.yy231, yymsp[0].minor.yy414); } { yylhsminor.yy25 = appendSelectClause(yymsp[-3].minor.yy25, yymsp[0].minor.yy150); }
yymsp[-3].minor.yy231 = yylhsminor.yy231; yymsp[-3].minor.yy25 = yylhsminor.yy25;
break; break;
case 136: /* union ::= union UNION ALL LP select RP */ case 133: /* union ::= union UNION ALL LP select RP */
{ yylhsminor.yy231 = appendSelectClause(yymsp[-5].minor.yy231, yymsp[-1].minor.yy414); } { yylhsminor.yy25 = appendSelectClause(yymsp[-5].minor.yy25, yymsp[-1].minor.yy150); }
yymsp[-5].minor.yy231 = yylhsminor.yy231; yymsp[-5].minor.yy25 = yylhsminor.yy25;
break; break;
case 137: /* cmd ::= union */ case 134: /* cmd ::= union */
{ setSQLInfo(pInfo, yymsp[0].minor.yy231, NULL, TSDB_SQL_SELECT); } { setSQLInfo(pInfo, yymsp[0].minor.yy25, NULL, TSDB_SQL_SELECT); }
break; break;
case 138: /* select ::= SELECT selcollist */ case 135: /* select ::= SELECT selcollist */
{ {
yylhsminor.yy414 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy290, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); yylhsminor.yy150 = tSetQuerySQLElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy224, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
} }
yymsp[-1].minor.yy414 = yylhsminor.yy414; yymsp[-1].minor.yy150 = yylhsminor.yy150;
break; break;
case 139: /* sclp ::= selcollist COMMA */ case 136: /* sclp ::= selcollist COMMA */
{yylhsminor.yy290 = yymsp[-1].minor.yy290;} {yylhsminor.yy224 = yymsp[-1].minor.yy224;}
yymsp[-1].minor.yy290 = yylhsminor.yy290; yymsp[-1].minor.yy224 = yylhsminor.yy224;
break; break;
case 140: /* sclp ::= */ case 137: /* sclp ::= */
{yymsp[1].minor.yy290 = 0;} {yymsp[1].minor.yy224 = 0;}
break; break;
case 141: /* selcollist ::= sclp expr as */ case 138: /* selcollist ::= sclp expr as */
{ {
yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290, yymsp[-1].minor.yy64, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224, yymsp[-1].minor.yy66, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
} }
yymsp[-2].minor.yy290 = yylhsminor.yy290; yymsp[-2].minor.yy224 = yylhsminor.yy224;
break; break;
case 142: /* selcollist ::= sclp STAR */ case 139: /* selcollist ::= sclp STAR */
{ {
tSQLExpr *pNode = tSQLExprIdValueCreate(NULL, TK_ALL); tSQLExpr *pNode = tSQLExprIdValueCreate(NULL, TK_ALL);
yylhsminor.yy290 = tSQLExprListAppend(yymsp[-1].minor.yy290, pNode, 0); yylhsminor.yy224 = tSQLExprListAppend(yymsp[-1].minor.yy224, pNode, 0);
} }
yymsp[-1].minor.yy290 = yylhsminor.yy290; yymsp[-1].minor.yy224 = yylhsminor.yy224;
break; break;
case 143: /* as ::= AS ids */ case 140: /* as ::= AS ids */
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break; break;
case 144: /* as ::= ids */ case 141: /* as ::= ids */
{ yylhsminor.yy0 = yymsp[0].minor.yy0; } { yylhsminor.yy0 = yymsp[0].minor.yy0; }
yymsp[0].minor.yy0 = yylhsminor.yy0; yymsp[0].minor.yy0 = yylhsminor.yy0;
break; break;
case 145: /* as ::= */ case 142: /* as ::= */
{ yymsp[1].minor.yy0.n = 0; } { yymsp[1].minor.yy0.n = 0; }
break; break;
case 146: /* from ::= FROM tablelist */ case 143: /* from ::= FROM tablelist */
{yymsp[-1].minor.yy498 = yymsp[0].minor.yy498;} {yymsp[-1].minor.yy494 = yymsp[0].minor.yy494;}
break; break;
case 147: /* tablelist ::= ids cpxName */ case 144: /* tablelist ::= ids cpxName */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy498 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); yylhsminor.yy494 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[-1].minor.yy0, -1); // table alias name yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[-1].minor.yy0, -1); // table alias name
} }
yymsp[-1].minor.yy498 = yylhsminor.yy498; yymsp[-1].minor.yy494 = yylhsminor.yy494;
break; break;
case 148: /* tablelist ::= ids cpxName ids */ case 145: /* tablelist ::= ids cpxName ids */
{ {
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
toTSDBType(yymsp[0].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type);
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy498 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); yylhsminor.yy494 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[0].minor.yy0, -1); yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[0].minor.yy0, -1);
} }
yymsp[-2].minor.yy498 = yylhsminor.yy498; yymsp[-2].minor.yy494 = yylhsminor.yy494;
break; break;
case 149: /* tablelist ::= tablelist COMMA ids cpxName */ case 146: /* tablelist ::= tablelist COMMA ids cpxName */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
yylhsminor.yy498 = tVariantListAppendToken(yymsp[-3].minor.yy498, &yymsp[-1].minor.yy0, -1); yylhsminor.yy494 = tVariantListAppendToken(yymsp[-3].minor.yy494, &yymsp[-1].minor.yy0, -1);
yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[-1].minor.yy0, -1); yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[-1].minor.yy0, -1);
} }
yymsp[-3].minor.yy498 = yylhsminor.yy498; yymsp[-3].minor.yy494 = yylhsminor.yy494;
break; break;
case 150: /* tablelist ::= tablelist COMMA ids cpxName ids */ case 147: /* tablelist ::= tablelist COMMA ids cpxName ids */
{ {
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
toTSDBType(yymsp[0].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type);
yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n;
yylhsminor.yy498 = tVariantListAppendToken(yymsp[-4].minor.yy498, &yymsp[-2].minor.yy0, -1); yylhsminor.yy494 = tVariantListAppendToken(yymsp[-4].minor.yy494, &yymsp[-2].minor.yy0, -1);
yylhsminor.yy498 = tVariantListAppendToken(yylhsminor.yy498, &yymsp[0].minor.yy0, -1); yylhsminor.yy494 = tVariantListAppendToken(yylhsminor.yy494, &yymsp[0].minor.yy0, -1);
} }
yymsp[-4].minor.yy498 = yylhsminor.yy498; yymsp[-4].minor.yy494 = yylhsminor.yy494;
break; break;
case 151: /* tmvar ::= VARIABLE */ case 148: /* tmvar ::= VARIABLE */
{yylhsminor.yy0 = yymsp[0].minor.yy0;} {yylhsminor.yy0 = yymsp[0].minor.yy0;}
yymsp[0].minor.yy0 = yylhsminor.yy0; yymsp[0].minor.yy0 = yylhsminor.yy0;
break; break;
case 152: /* interval_opt ::= INTERVAL LP tmvar RP */ case 149: /* interval_opt ::= INTERVAL LP tmvar RP */
case 157: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==157); case 154: /* sliding_opt ::= SLIDING LP tmvar RP */ yytestcase(yyruleno==154);
{yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; } {yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; }
break; break;
case 153: /* interval_opt ::= */ case 150: /* interval_opt ::= */
case 158: /* sliding_opt ::= */ yytestcase(yyruleno==158); case 155: /* sliding_opt ::= */ yytestcase(yyruleno==155);
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; } {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; }
break; break;
case 154: /* fill_opt ::= */ case 151: /* fill_opt ::= */
{yymsp[1].minor.yy498 = 0; } {yymsp[1].minor.yy494 = 0; }
break; break;
case 155: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ case 152: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{ {
tVariant A = {0}; tVariant A = {0};
toTSDBType(yymsp[-3].minor.yy0.type); toTSDBType(yymsp[-3].minor.yy0.type);
tVariantCreate(&A, &yymsp[-3].minor.yy0); tVariantCreate(&A, &yymsp[-3].minor.yy0);
tVariantListInsert(yymsp[-1].minor.yy498, &A, -1, 0); tVariantListInsert(yymsp[-1].minor.yy494, &A, -1, 0);
yymsp[-5].minor.yy498 = yymsp[-1].minor.yy498; yymsp[-5].minor.yy494 = yymsp[-1].minor.yy494;
} }
break; break;
case 156: /* fill_opt ::= FILL LP ID RP */ case 153: /* fill_opt ::= FILL LP ID RP */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-3].minor.yy498 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); yymsp[-3].minor.yy494 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
} }
break; break;
case 159: /* orderby_opt ::= */ case 156: /* orderby_opt ::= */
case 167: /* groupby_opt ::= */ yytestcase(yyruleno==167); case 164: /* groupby_opt ::= */ yytestcase(yyruleno==164);
{yymsp[1].minor.yy498 = 0;} {yymsp[1].minor.yy494 = 0;}
break; break;
case 160: /* orderby_opt ::= ORDER BY sortlist */ case 157: /* orderby_opt ::= ORDER BY sortlist */
case 168: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==168); case 165: /* groupby_opt ::= GROUP BY grouplist */ yytestcase(yyruleno==165);
{yymsp[-2].minor.yy498 = yymsp[0].minor.yy498;} {yymsp[-2].minor.yy494 = yymsp[0].minor.yy494;}
break; break;
case 161: /* sortlist ::= sortlist COMMA item sortorder */ case 158: /* sortlist ::= sortlist COMMA item sortorder */
{ {
yylhsminor.yy498 = tVariantListAppend(yymsp[-3].minor.yy498, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46); yylhsminor.yy494 = tVariantListAppend(yymsp[-3].minor.yy494, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82);
} }
yymsp[-3].minor.yy498 = yylhsminor.yy498; yymsp[-3].minor.yy494 = yylhsminor.yy494;
break; break;
case 162: /* sortlist ::= item sortorder */ case 159: /* sortlist ::= item sortorder */
{ {
yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[-1].minor.yy134, yymsp[0].minor.yy46); yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[-1].minor.yy312, yymsp[0].minor.yy82);
} }
yymsp[-1].minor.yy498 = yylhsminor.yy498; yymsp[-1].minor.yy494 = yylhsminor.yy494;
break; break;
case 163: /* item ::= ids cpxName */ case 160: /* item ::= ids cpxName */
{ {
toTSDBType(yymsp[-1].minor.yy0.type); toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
tVariantCreate(&yylhsminor.yy134, &yymsp[-1].minor.yy0); tVariantCreate(&yylhsminor.yy312, &yymsp[-1].minor.yy0);
} }
yymsp[-1].minor.yy134 = yylhsminor.yy134; yymsp[-1].minor.yy312 = yylhsminor.yy312;
break; break;
case 164: /* sortorder ::= ASC */ case 161: /* sortorder ::= ASC */
{yymsp[0].minor.yy46 = TSDB_ORDER_ASC; } {yymsp[0].minor.yy82 = TSDB_ORDER_ASC; }
break; break;
case 165: /* sortorder ::= DESC */ case 162: /* sortorder ::= DESC */
{yymsp[0].minor.yy46 = TSDB_ORDER_DESC;} {yymsp[0].minor.yy82 = TSDB_ORDER_DESC;}
break; break;
case 166: /* sortorder ::= */ case 163: /* sortorder ::= */
{yymsp[1].minor.yy46 = TSDB_ORDER_ASC;} {yymsp[1].minor.yy82 = TSDB_ORDER_ASC;}
break; break;
case 169: /* grouplist ::= grouplist COMMA item */ case 166: /* grouplist ::= grouplist COMMA item */
{ {
yylhsminor.yy498 = tVariantListAppend(yymsp[-2].minor.yy498, &yymsp[0].minor.yy134, -1); yylhsminor.yy494 = tVariantListAppend(yymsp[-2].minor.yy494, &yymsp[0].minor.yy312, -1);
} }
yymsp[-2].minor.yy498 = yylhsminor.yy498; yymsp[-2].minor.yy494 = yylhsminor.yy494;
break; break;
case 170: /* grouplist ::= item */ case 167: /* grouplist ::= item */
{ {
yylhsminor.yy498 = tVariantListAppend(NULL, &yymsp[0].minor.yy134, -1); yylhsminor.yy494 = tVariantListAppend(NULL, &yymsp[0].minor.yy312, -1);
} }
yymsp[0].minor.yy498 = yylhsminor.yy498; yymsp[0].minor.yy494 = yylhsminor.yy494;
break; break;
case 171: /* having_opt ::= */ case 168: /* having_opt ::= */
case 181: /* where_opt ::= */ yytestcase(yyruleno==181); case 178: /* where_opt ::= */ yytestcase(yyruleno==178);
case 217: /* expritem ::= */ yytestcase(yyruleno==217); case 214: /* expritem ::= */ yytestcase(yyruleno==214);
{yymsp[1].minor.yy64 = 0;} {yymsp[1].minor.yy66 = 0;}
break; break;
case 172: /* having_opt ::= HAVING expr */ case 169: /* having_opt ::= HAVING expr */
case 182: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==182); case 179: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==179);
{yymsp[-1].minor.yy64 = yymsp[0].minor.yy64;} {yymsp[-1].minor.yy66 = yymsp[0].minor.yy66;}
break; break;
case 173: /* limit_opt ::= */ case 170: /* limit_opt ::= */
case 177: /* slimit_opt ::= */ yytestcase(yyruleno==177); case 174: /* slimit_opt ::= */ yytestcase(yyruleno==174);
{yymsp[1].minor.yy216.limit = -1; yymsp[1].minor.yy216.offset = 0;} {yymsp[1].minor.yy188.limit = -1; yymsp[1].minor.yy188.offset = 0;}
break; break;
case 174: /* limit_opt ::= LIMIT signed */ case 171: /* limit_opt ::= LIMIT signed */
case 178: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==178); case 175: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==175);
{yymsp[-1].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-1].minor.yy216.offset = 0;} {yymsp[-1].minor.yy188.limit = yymsp[0].minor.yy271; yymsp[-1].minor.yy188.offset = 0;}
break; break;
case 175: /* limit_opt ::= LIMIT signed OFFSET signed */ case 172: /* limit_opt ::= LIMIT signed OFFSET signed */
case 179: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ yytestcase(yyruleno==179); case 176: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ yytestcase(yyruleno==176);
{yymsp[-3].minor.yy216.limit = yymsp[-2].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[0].minor.yy207;} {yymsp[-3].minor.yy188.limit = yymsp[-2].minor.yy271; yymsp[-3].minor.yy188.offset = yymsp[0].minor.yy271;}
break; break;
case 176: /* limit_opt ::= LIMIT signed COMMA signed */ case 173: /* limit_opt ::= LIMIT signed COMMA signed */
case 180: /* slimit_opt ::= SLIMIT signed COMMA signed */ yytestcase(yyruleno==180); case 177: /* slimit_opt ::= SLIMIT signed COMMA signed */ yytestcase(yyruleno==177);
{yymsp[-3].minor.yy216.limit = yymsp[0].minor.yy207; yymsp[-3].minor.yy216.offset = yymsp[-2].minor.yy207;} {yymsp[-3].minor.yy188.limit = yymsp[0].minor.yy271; yymsp[-3].minor.yy188.offset = yymsp[-2].minor.yy271;}
break; break;
case 183: /* expr ::= LP expr RP */ case 180: /* expr ::= LP expr RP */
{yymsp[-2].minor.yy64 = yymsp[-1].minor.yy64; } {yymsp[-2].minor.yy66 = yymsp[-1].minor.yy66; }
break; break;
case 184: /* expr ::= ID */ case 181: /* expr ::= ID */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);} {yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 185: /* expr ::= ID DOT ID */ case 182: /* expr ::= ID DOT ID */
{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);} {yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 186: /* expr ::= ID DOT STAR */ case 183: /* expr ::= ID DOT STAR */
{yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);} {yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 187: /* expr ::= INTEGER */ case 184: /* expr ::= INTEGER */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);} {yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 188: /* expr ::= MINUS INTEGER */ case 185: /* expr ::= MINUS INTEGER */
case 189: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==189); case 186: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==186);
{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);} {yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);}
yymsp[-1].minor.yy64 = yylhsminor.yy64; yymsp[-1].minor.yy66 = yylhsminor.yy66;
break; break;
case 190: /* expr ::= FLOAT */ case 187: /* expr ::= FLOAT */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);} {yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 191: /* expr ::= MINUS FLOAT */ case 188: /* expr ::= MINUS FLOAT */
case 192: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==192); case 189: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==189);
{yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);} {yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);}
yymsp[-1].minor.yy64 = yylhsminor.yy64; yymsp[-1].minor.yy66 = yylhsminor.yy66;
break; break;
case 193: /* expr ::= STRING */ case 190: /* expr ::= STRING */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);} {yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 194: /* expr ::= NOW */ case 191: /* expr ::= NOW */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); } {yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); }
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 195: /* expr ::= VARIABLE */ case 192: /* expr ::= VARIABLE */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);} {yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 196: /* expr ::= BOOL */ case 193: /* expr ::= BOOL */
{yylhsminor.yy64 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);} {yylhsminor.yy66 = tSQLExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 197: /* expr ::= ID LP exprlist RP */ case 194: /* expr ::= ID LP exprlist RP */
{ {
yylhsminor.yy64 = tSQLExprCreateFunction(yymsp[-1].minor.yy290, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); yylhsminor.yy66 = tSQLExprCreateFunction(yymsp[-1].minor.yy224, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type);
} }
yymsp[-3].minor.yy64 = yylhsminor.yy64; yymsp[-3].minor.yy66 = yylhsminor.yy66;
break; break;
case 198: /* expr ::= ID LP STAR RP */ case 195: /* expr ::= ID LP STAR RP */
{ {
yylhsminor.yy64 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); yylhsminor.yy66 = tSQLExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type);
} }
yymsp[-3].minor.yy64 = yylhsminor.yy64; yymsp[-3].minor.yy66 = yylhsminor.yy66;
break; break;
case 199: /* expr ::= expr AND expr */ case 196: /* expr ::= expr AND expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_AND);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_AND);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 200: /* expr ::= expr OR expr */ case 197: /* expr ::= expr OR expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_OR); } {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_OR); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 201: /* expr ::= expr LT expr */ case 198: /* expr ::= expr LT expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LT);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LT);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 202: /* expr ::= expr GT expr */ case 199: /* expr ::= expr GT expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GT);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_GT);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 203: /* expr ::= expr LE expr */ case 200: /* expr ::= expr LE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LE);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 204: /* expr ::= expr GE expr */ case 201: /* expr ::= expr GE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_GE);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_GE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 205: /* expr ::= expr NE expr */ case 202: /* expr ::= expr NE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_NE);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_NE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 206: /* expr ::= expr EQ expr */ case 203: /* expr ::= expr EQ expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_EQ);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_EQ);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 207: /* expr ::= expr PLUS expr */ case 204: /* expr ::= expr PLUS expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_PLUS); } {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_PLUS); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 208: /* expr ::= expr MINUS expr */ case 205: /* expr ::= expr MINUS expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_MINUS); } {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_MINUS); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 209: /* expr ::= expr STAR expr */ case 206: /* expr ::= expr STAR expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_STAR); } {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_STAR); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 210: /* expr ::= expr SLASH expr */ case 207: /* expr ::= expr SLASH expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_DIVIDE);} {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_DIVIDE);}
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 211: /* expr ::= expr REM expr */ case 208: /* expr ::= expr REM expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_REM); } {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_REM); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 212: /* expr ::= expr LIKE expr */ case 209: /* expr ::= expr LIKE expr */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-2].minor.yy64, yymsp[0].minor.yy64, TK_LIKE); } {yylhsminor.yy66 = tSQLExprCreate(yymsp[-2].minor.yy66, yymsp[0].minor.yy66, TK_LIKE); }
yymsp[-2].minor.yy64 = yylhsminor.yy64; yymsp[-2].minor.yy66 = yylhsminor.yy66;
break; break;
case 213: /* expr ::= expr IN LP exprlist RP */ case 210: /* expr ::= expr IN LP exprlist RP */
{yylhsminor.yy64 = tSQLExprCreate(yymsp[-4].minor.yy64, (tSQLExpr*)yymsp[-1].minor.yy290, TK_IN); } {yylhsminor.yy66 = tSQLExprCreate(yymsp[-4].minor.yy66, (tSQLExpr*)yymsp[-1].minor.yy224, TK_IN); }
yymsp[-4].minor.yy64 = yylhsminor.yy64; yymsp[-4].minor.yy66 = yylhsminor.yy66;
break; break;
case 214: /* exprlist ::= exprlist COMMA expritem */ case 211: /* exprlist ::= exprlist COMMA expritem */
{yylhsminor.yy290 = tSQLExprListAppend(yymsp[-2].minor.yy290,yymsp[0].minor.yy64,0);} {yylhsminor.yy224 = tSQLExprListAppend(yymsp[-2].minor.yy224,yymsp[0].minor.yy66,0);}
yymsp[-2].minor.yy290 = yylhsminor.yy290; yymsp[-2].minor.yy224 = yylhsminor.yy224;
break; break;
case 215: /* exprlist ::= expritem */ case 212: /* exprlist ::= expritem */
{yylhsminor.yy290 = tSQLExprListAppend(0,yymsp[0].minor.yy64,0);} {yylhsminor.yy224 = tSQLExprListAppend(0,yymsp[0].minor.yy66,0);}
yymsp[0].minor.yy290 = yylhsminor.yy290; yymsp[0].minor.yy224 = yylhsminor.yy224;
break; break;
case 216: /* expritem ::= expr */ case 213: /* expritem ::= expr */
{yylhsminor.yy64 = yymsp[0].minor.yy64;} {yylhsminor.yy66 = yymsp[0].minor.yy66;}
yymsp[0].minor.yy64 = yylhsminor.yy64; yymsp[0].minor.yy66 = yylhsminor.yy66;
break; break;
case 218: /* cmd ::= RESET QUERY CACHE */ case 215: /* cmd ::= RESET QUERY CACHE */
{ setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} { setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
break; break;
case 219: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ case 216: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy523, NULL, TSDB_ALTER_TABLE_ADD_COLUMN); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy449, NULL, TSDB_ALTER_TABLE_ADD_COLUMN);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 220: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ case 217: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -2764,14 +2747,14 @@ static void yy_reduce( ...@@ -2764,14 +2747,14 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 221: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ case 218: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy523, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy449, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 222: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ case 219: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{ {
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
...@@ -2782,7 +2765,7 @@ static void yy_reduce( ...@@ -2782,7 +2765,7 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 223: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ case 220: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{ {
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
...@@ -2796,25 +2779,25 @@ static void yy_reduce( ...@@ -2796,25 +2779,25 @@ static void yy_reduce(
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 224: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ case 221: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
{ {
yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n; yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n;
toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[-2].minor.yy0.type);
tVariantList* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); tVariantList* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
A = tVariantListAppend(A, &yymsp[0].minor.yy134, -1); A = tVariantListAppend(A, &yymsp[0].minor.yy312, -1);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL);
setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); setSQLInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
} }
break; break;
case 225: /* cmd ::= KILL CONNECTION INTEGER */ case 222: /* cmd ::= KILL CONNECTION INTEGER */
{setKillSQL(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);} {setKillSQL(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);}
break; break;
case 226: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ case 223: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */
{yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);} {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);}
break; break;
case 227: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ case 224: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */
{yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);} {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSQL(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);}
break; break;
default: default:
......
...@@ -709,21 +709,21 @@ static SRpcConn *rpcAllocateServerConn(SRpcInfo *pRpc, SRecvInfo *pRecv) { ...@@ -709,21 +709,21 @@ static SRpcConn *rpcAllocateServerConn(SRpcInfo *pRpc, SRecvInfo *pRecv) {
} }
if (terrno != 0) { if (terrno != 0) {
taosFreeId(pRpc->idPool, sid); // sid shall be released taosFreeId(pRpc->idPool, sid); // sid shall be released
pConn = NULL; pConn = NULL;
} }
} }
} }
if (pConn) { if (pConn) {
if (pRecv->connType == RPC_CONN_UDPS && pRpc->numOfThreads > 1) { if (pRecv->connType == RPC_CONN_UDPS && pRpc->numOfThreads > 1) {
// UDP server, assign to new connection // UDP server, assign to new connection
pRpc->index = (pRpc->index+1) % pRpc->numOfThreads; pRpc->index = (pRpc->index + 1) % pRpc->numOfThreads;
pConn->localPort = (pRpc->localPort + pRpc->index); pConn->localPort = (pRpc->localPort + pRpc->index);
} }
taosHashPut(pRpc->hash, hashstr, size, (char *)&pConn, POINTER_BYTES); taosHashPut(pRpc->hash, hashstr, size, (char *)&pConn, POINTER_BYTES);
tDebug("%s %p server connection is allocated, uid:0x%x", pRpc->label, pConn, pConn->linkUid); tDebug("%s %p server connection is allocated, uid:0x%x sid:%d key:%s", pRpc->label, pConn, pConn->linkUid, sid, hashstr);
} }
return pConn; return pConn;
......
...@@ -797,9 +797,11 @@ static void syncRecoverFromMaster(SSyncPeer *pPeer) { ...@@ -797,9 +797,11 @@ static void syncRecoverFromMaster(SSyncPeer *pPeer) {
} }
taosTmrStopA(&pPeer->timer); taosTmrStopA(&pPeer->timer);
if (tsSyncNum >= tsMaxSyncNum) {
// Ensure the sync of mnode not interrupted
if (pNode->vgId != 1 && tsSyncNum >= tsMaxSyncNum) {
sInfo("%s, %d syncs are in process, try later", pPeer->id, tsSyncNum); sInfo("%s, %d syncs are in process, try later", pPeer->id, tsSyncNum);
taosTmrReset(syncTryRecoverFromMaster, 500 + (pNode->vgId*10)%200, pPeer, syncTmrCtrl, &pPeer->timer); taosTmrReset(syncTryRecoverFromMaster, 500 + (pNode->vgId * 10) % 200, pPeer, syncTmrCtrl, &pPeer->timer);
return; return;
} }
......
...@@ -3,13 +3,10 @@ PROJECT(TDengine) ...@@ -3,13 +3,10 @@ PROJECT(TDengine)
INCLUDE_DIRECTORIES(inc) INCLUDE_DIRECTORIES(inc)
AUX_SOURCE_DIRECTORY(src SRC) AUX_SOURCE_DIRECTORY(src SRC)
ADD_LIBRARY(tsdb ${SRC})
TARGET_LINK_LIBRARIES(tsdb common tutil)
IF (TD_LINUX) IF (TD_LINUX)
ADD_LIBRARY(tsdb ${SRC})
TARGET_LINK_LIBRARIES(tsdb common tutil)
# Someone has no gtest directory, so comment it # Someone has no gtest directory, so comment it
# ADD_SUBDIRECTORY(tests) # ADD_SUBDIRECTORY(tests)
ELSEIF (TD_WINDOWS)
ADD_LIBRARY(tsdb ${SRC})
TARGET_LINK_LIBRARIES(tsdb common tutil)
ENDIF () ENDIF ()
...@@ -45,6 +45,8 @@ extern int tsdbDebugFlag; ...@@ -45,6 +45,8 @@ extern int tsdbDebugFlag;
#define TSDB_FILE_DELIMITER 0xF00AFA0F #define TSDB_FILE_DELIMITER 0xF00AFA0F
#define TSDB_FILE_INIT_MAGIC 0xFFFFFFFF #define TSDB_FILE_INIT_MAGIC 0xFFFFFFFF
#define TAOS_IN_RANGE(key, keyMin, keyLast) (((key) >= (keyMin)) && ((key) <= (keyMax)))
// NOTE: Any file format change must increase this version number by 1 // NOTE: Any file format change must increase this version number by 1
// Also, implement the convert function // Also, implement the convert function
#define TSDB_FILE_VERSION ((uint32_t)0) #define TSDB_FILE_VERSION ((uint32_t)0)
...@@ -318,6 +320,16 @@ typedef struct { ...@@ -318,6 +320,16 @@ typedef struct {
void* compBuffer; // Buffer for temperary compress/decompress purpose void* compBuffer; // Buffer for temperary compress/decompress purpose
} SRWHelper; } SRWHelper;
// ------------------ tsdbScan.c
typedef struct {
SFileGroup fGroup;
int numOfIdx;
SCompIdx* pCompIdx;
SCompInfo* pCompInfo;
void* pBuf;
FILE* tLogStream;
} STsdbScanHandle;
// Operations // Operations
// ------------------ tsdbMeta.c // ------------------ tsdbMeta.c
#define TSDB_INIT_NTABLES 1024 #define TSDB_INIT_NTABLES 1024
...@@ -475,6 +487,7 @@ int tsdbUpdateFileHeader(SFile* pFile); ...@@ -475,6 +487,7 @@ int tsdbUpdateFileHeader(SFile* pFile);
int tsdbEncodeSFileInfo(void** buf, const STsdbFileInfo* pInfo); int tsdbEncodeSFileInfo(void** buf, const STsdbFileInfo* pInfo);
void* tsdbDecodeSFileInfo(void* buf, STsdbFileInfo* pInfo); void* tsdbDecodeSFileInfo(void* buf, STsdbFileInfo* pInfo);
void tsdbRemoveFileGroup(STsdbRepo* pRepo, SFileGroup* pFGroup); void tsdbRemoveFileGroup(STsdbRepo* pRepo, SFileGroup* pFGroup);
int tsdbLoadFileHeader(SFile* pFile, uint32_t* version);
void tsdbGetFileInfoImpl(char* fname, uint32_t* magic, int64_t* size); void tsdbGetFileInfoImpl(char* fname, uint32_t* magic, int64_t* size);
void tsdbGetFidKeyRange(int daysPerFile, int8_t precision, int fileId, TSKEY *minKey, TSKEY *maxKey); void tsdbGetFidKeyRange(int daysPerFile, int8_t precision, int fileId, TSKEY *minKey, TSKEY *maxKey);
...@@ -513,7 +526,10 @@ int tsdbCommitTableData(SRWHelper* pHelper, SCommitIter* pCommitIter, SDataCols ...@@ -513,7 +526,10 @@ int tsdbCommitTableData(SRWHelper* pHelper, SCommitIter* pCommitIter, SDataCols
int tsdbMoveLastBlockIfNeccessary(SRWHelper* pHelper); int tsdbMoveLastBlockIfNeccessary(SRWHelper* pHelper);
int tsdbWriteCompInfo(SRWHelper* pHelper); int tsdbWriteCompInfo(SRWHelper* pHelper);
int tsdbWriteCompIdx(SRWHelper* pHelper); int tsdbWriteCompIdx(SRWHelper* pHelper);
int tsdbLoadCompIdxImpl(SFile* pFile, uint32_t offset, uint32_t len, void* buffer);
int tsdbDecodeSCompIdxImpl(void* buffer, uint32_t len, SCompIdx** ppCompIdx, int* numOfIdx);
int tsdbLoadCompIdx(SRWHelper* pHelper, void* target); int tsdbLoadCompIdx(SRWHelper* pHelper, void* target);
int tsdbLoadCompInfoImpl(SFile* pFile, SCompIdx* pIdx, SCompInfo** ppCompInfo);
int tsdbLoadCompInfo(SRWHelper* pHelper, void* target); int tsdbLoadCompInfo(SRWHelper* pHelper, void* target);
int tsdbLoadCompData(SRWHelper* phelper, SCompBlock* pcompblock, void* target); int tsdbLoadCompData(SRWHelper* phelper, SCompBlock* pcompblock, void* target);
void tsdbGetDataStatis(SRWHelper* pHelper, SDataStatis* pStatis, int numOfCols); void tsdbGetDataStatis(SRWHelper* pHelper, SDataStatis* pStatis, int numOfCols);
...@@ -537,7 +553,7 @@ static FORCE_INLINE int compTSKEY(const void* key1, const void* key2) { ...@@ -537,7 +553,7 @@ static FORCE_INLINE int compTSKEY(const void* key1, const void* key2) {
#define TSDB_SUBMIT_MSG_HEAD_SIZE sizeof(SSubmitMsg) #define TSDB_SUBMIT_MSG_HEAD_SIZE sizeof(SSubmitMsg)
char* tsdbGetMetaFileName(char* rootDir); char* tsdbGetMetaFileName(char* rootDir);
void tsdbGetDataFileName(STsdbRepo* pRepo, int fid, int type, char* fname); void tsdbGetDataFileName(char* rootDir, int vid, int fid, int type, char* fname);
int tsdbLockRepo(STsdbRepo* pRepo); int tsdbLockRepo(STsdbRepo* pRepo);
int tsdbUnlockRepo(STsdbRepo* pRepo); int tsdbUnlockRepo(STsdbRepo* pRepo);
char* tsdbGetDataDirName(char* rootDir); char* tsdbGetDataDirName(char* rootDir);
...@@ -546,6 +562,16 @@ STsdbMeta* tsdbGetMeta(TSDB_REPO_T* pRepo); ...@@ -546,6 +562,16 @@ STsdbMeta* tsdbGetMeta(TSDB_REPO_T* pRepo);
STsdbFileH* tsdbGetFile(TSDB_REPO_T* pRepo); STsdbFileH* tsdbGetFile(TSDB_REPO_T* pRepo);
int tsdbCheckCommit(STsdbRepo* pRepo); int tsdbCheckCommit(STsdbRepo* pRepo);
// ------------------ tsdbScan.c
int tsdbScanFGroup(STsdbScanHandle* pScanHandle, char* rootDir, int fid);
STsdbScanHandle* tsdbNewScanHandle();
void tsdbSetScanLogStream(STsdbScanHandle* pScanHandle, FILE* fLogStream);
int tsdbSetAndOpenScanFile(STsdbScanHandle* pScanHandle, char* rootDir, int fid);
int tsdbScanSCompIdx(STsdbScanHandle* pScanHandle);
int tsdbScanSCompBlock(STsdbScanHandle* pScanHandle, int idx);
int tsdbCloseScanFile(STsdbScanHandle* pScanHandle);
void tsdbFreeScanHandle(STsdbScanHandle* pScanHandle);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -11,20 +11,4 @@ ...@@ -11,20 +11,4 @@
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
\ No newline at end of file
#ifndef TDENGINE_MQTT_SYSTEM_H
#define TDENGINE_MQTT_SYSTEM_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
int32_t mqttInitSystem();
int32_t mqttStartSystem();
void mqttStopSystem();
void mqttCleanUpSystem();
#ifdef __cplusplus
}
#endif
#endif
...@@ -128,7 +128,7 @@ int tsdbOpenFileH(STsdbRepo *pRepo) { ...@@ -128,7 +128,7 @@ int tsdbOpenFileH(STsdbRepo *pRepo) {
if (fid < mfid) { if (fid < mfid) {
for (int type = 0; type < TSDB_FILE_TYPE_MAX; type++) { for (int type = 0; type < TSDB_FILE_TYPE_MAX; type++) {
tsdbGetDataFileName(pRepo, fid, type, fname); tsdbGetDataFileName(pRepo->rootDir, pCfg->tsdbId, fid, type, fname);
(void)remove(fname); (void)remove(fname);
} }
continue; continue;
...@@ -345,7 +345,7 @@ int tsdbCreateFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type) { ...@@ -345,7 +345,7 @@ int tsdbCreateFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type) {
memset((void *)pFile, 0, sizeof(SFile)); memset((void *)pFile, 0, sizeof(SFile));
pFile->fd = -1; pFile->fd = -1;
tsdbGetDataFileName(pRepo, fid, type, pFile->fname); tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), fid, type, pFile->fname);
if (access(pFile->fname, F_OK) == 0) { if (access(pFile->fname, F_OK) == 0) {
tsdbError("vgId:%d file %s already exists", REPO_ID(pRepo), pFile->fname); tsdbError("vgId:%d file %s already exists", REPO_ID(pRepo), pFile->fname);
...@@ -466,33 +466,57 @@ void tsdbRemoveFileGroup(STsdbRepo *pRepo, SFileGroup *pFGroup) { ...@@ -466,33 +466,57 @@ void tsdbRemoveFileGroup(STsdbRepo *pRepo, SFileGroup *pFGroup) {
} }
} }
void tsdbGetFileInfoImpl(char *fname, uint32_t *magic, int64_t *size) { int tsdbLoadFileHeader(SFile *pFile, uint32_t *version) {
char buf[TSDB_FILE_HEAD_SIZE] = "\0"; char buf[TSDB_FILE_HEAD_SIZE] = "\0";
uint32_t version = 0;
STsdbFileInfo info = {0};
int fd = open(fname, O_RDONLY); if (lseek(pFile->fd, 0, SEEK_SET) < 0) {
if (fd < 0) goto _err; tsdbError("failed to lseek file %s to start since %s", pFile->fname, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
if (taosTRead(fd, buf, TSDB_FILE_HEAD_SIZE) < TSDB_FILE_HEAD_SIZE) goto _err; if (taosTRead(pFile->fd, buf, TSDB_FILE_HEAD_SIZE) < TSDB_FILE_HEAD_SIZE) {
tsdbError("failed to read file %s header part with %d bytes, reason:%s", pFile->fname, TSDB_FILE_HEAD_SIZE,
strerror(errno));
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
if (!taosCheckChecksumWhole((uint8_t *)buf, TSDB_FILE_HEAD_SIZE)) goto _err; if (!taosCheckChecksumWhole((uint8_t *)buf, TSDB_FILE_HEAD_SIZE)) {
tsdbError("file %s header part is corrupted with failed checksum", pFile->fname);
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
void *pBuf = (void *)buf; void *pBuf = (void *)buf;
pBuf = taosDecodeFixedU32(pBuf, &version); pBuf = taosDecodeFixedU32(pBuf, version);
pBuf = tsdbDecodeSFileInfo(pBuf, &info); pBuf = tsdbDecodeSFileInfo(pBuf, &(pFile->info));
return 0;
}
off_t offset = lseek(fd, 0, SEEK_END); void tsdbGetFileInfoImpl(char *fname, uint32_t *magic, int64_t *size) {
uint32_t version = 0;
SFile file;
SFile * pFile = &file;
strncpy(pFile->fname, fname, TSDB_FILENAME_LEN);
pFile->fd = -1;
if (tsdbOpenFile(pFile, O_RDONLY) < 0) goto _err;
if (tsdbLoadFileHeader(pFile, &version) < 0) goto _err;
off_t offset = lseek(pFile->fd, 0, SEEK_END);
if (offset < 0) goto _err; if (offset < 0) goto _err;
close(fd); tsdbCloseFile(pFile);
*magic = info.magic; *magic = pFile->info.magic;
*size = offset; *size = offset;
return; return;
_err: _err:
if (fd >= 0) close(fd); tsdbCloseFile(pFile);
*magic = TSDB_FILE_INIT_MAGIC; *magic = TSDB_FILE_INIT_MAGIC;
*size = 0; *size = 0;
} }
...@@ -500,34 +524,23 @@ _err: ...@@ -500,34 +524,23 @@ _err:
// ---------------- LOCAL FUNCTIONS ---------------- // ---------------- LOCAL FUNCTIONS ----------------
static int tsdbInitFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type) { static int tsdbInitFile(SFile *pFile, STsdbRepo *pRepo, int fid, int type) {
uint32_t version; uint32_t version;
char buf[512] = "\0";
tsdbGetDataFileName(pRepo, fid, type, pFile->fname); tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), fid, type, pFile->fname);
pFile->fd = -1; pFile->fd = -1;
if (tsdbOpenFile(pFile, O_RDONLY) < 0) goto _err; if (tsdbOpenFile(pFile, O_RDONLY) < 0) goto _err;
if (taosTRead(pFile->fd, buf, TSDB_FILE_HEAD_SIZE) < TSDB_FILE_HEAD_SIZE) { if (tsdbLoadFileHeader(pFile, &version) < 0) {
tsdbError("vgId:%d failed to read %d bytes from file %s since %s", REPO_ID(pRepo), TSDB_FILE_HEAD_SIZE, tsdbError("vgId:%d failed to load file %s header part since %s", REPO_ID(pRepo), pFile->fname, tstrerror(terrno));
pFile->fname, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
goto _err; goto _err;
} }
if (!taosCheckChecksumWhole((uint8_t *)buf, TSDB_FILE_HEAD_SIZE)) {
tsdbError("vgId:%d file %s head part is corrupted", REPO_ID(pRepo), pFile->fname);
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
goto _err;
}
void *pBuf = buf;
pBuf = taosDecodeFixedU32(pBuf, &version);
pBuf = tsdbDecodeSFileInfo(pBuf, &(pFile->info));
if (pFile->info.size == TSDB_FILE_HEAD_SIZE) { if (pFile->info.size == TSDB_FILE_HEAD_SIZE) {
pFile->info.size = lseek(pFile->fd, 0, SEEK_END); pFile->info.size = lseek(pFile->fd, 0, SEEK_END);
} }
if (version != TSDB_FILE_VERSION) { if (version != TSDB_FILE_VERSION) {
// TODO: deal with error
tsdbError("vgId:%d file %s version %u is not the same as program version %u which may cause problem", tsdbError("vgId:%d file %s version %u is not the same as program version %u which may cause problem",
REPO_ID(pRepo), pFile->fname, version, TSDB_FILE_VERSION); REPO_ID(pRepo), pFile->fname, version, TSDB_FILE_VERSION);
} }
...@@ -571,6 +584,7 @@ static void tsdbInitFileGroup(SFileGroup *pFGroup, STsdbRepo *pRepo) { ...@@ -571,6 +584,7 @@ static void tsdbInitFileGroup(SFileGroup *pFGroup, STsdbRepo *pRepo) {
memset(&pFGroup->files[type].info, 0, sizeof(STsdbFileInfo)); memset(&pFGroup->files[type].info, 0, sizeof(STsdbFileInfo));
pFGroup->files[type].info.magic = TSDB_FILE_INIT_MAGIC; pFGroup->files[type].info.magic = TSDB_FILE_INIT_MAGIC;
pFGroup->state = 1; pFGroup->state = 1;
pRepo->state = TSDB_STATE_BAD_FILE;
terrno = TSDB_CODE_TDB_FILE_CORRUPTED; terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
} }
} }
...@@ -581,5 +595,5 @@ static TSKEY tsdbGetCurrMinKey(int8_t precision, int32_t keep) { ...@@ -581,5 +595,5 @@ static TSKEY tsdbGetCurrMinKey(int8_t precision, int32_t keep) {
} }
static int tsdbGetCurrMinFid(int8_t precision, int32_t keep, int32_t days) { static int tsdbGetCurrMinFid(int8_t precision, int32_t keep, int32_t days) {
return (int32_t)(TSDB_KEY_FILEID(tsdbGetCurrMinKey(precision, keep), days, precision)); return (int)(TSDB_KEY_FILEID(tsdbGetCurrMinKey(precision, keep), days, precision));
} }
\ No newline at end of file
...@@ -142,7 +142,6 @@ TSDB_REPO_T *tsdbOpenRepo(char *rootDir, STsdbAppH *pAppH) { ...@@ -142,7 +142,6 @@ TSDB_REPO_T *tsdbOpenRepo(char *rootDir, STsdbAppH *pAppH) {
} }
tsdbStartStream(pRepo); tsdbStartStream(pRepo);
// pRepo->state = TSDB_REPO_STATE_ACTIVE;
tsdbDebug("vgId:%d open tsdb repository succeed!", REPO_ID(pRepo)); tsdbDebug("vgId:%d open tsdb repository succeed!", REPO_ID(pRepo));
...@@ -341,6 +340,10 @@ void tsdbReportStat(void *repo, int64_t *totalPoints, int64_t *totalStorage, int ...@@ -341,6 +340,10 @@ void tsdbReportStat(void *repo, int64_t *totalPoints, int64_t *totalStorage, int
*compStorage = pRepo->stat.compStorage; *compStorage = pRepo->stat.compStorage;
} }
int tsdbGetState(TSDB_REPO_T *repo) {
return ((STsdbRepo *)repo)->state;
}
// ----------------- INTERNAL FUNCTIONS ----------------- // ----------------- INTERNAL FUNCTIONS -----------------
char *tsdbGetMetaFileName(char *rootDir) { char *tsdbGetMetaFileName(char *rootDir) {
int tlen = (int)(strlen(rootDir) + strlen(TSDB_META_FILE_NAME) + 2); int tlen = (int)(strlen(rootDir) + strlen(TSDB_META_FILE_NAME) + 2);
...@@ -354,8 +357,8 @@ char *tsdbGetMetaFileName(char *rootDir) { ...@@ -354,8 +357,8 @@ char *tsdbGetMetaFileName(char *rootDir) {
return fname; return fname;
} }
void tsdbGetDataFileName(STsdbRepo *pRepo, int fid, int type, char *fname) { void tsdbGetDataFileName(char *rootDir, int vid, int fid, int type, char *fname) {
snprintf(fname, TSDB_FILENAME_LEN, "%s/%s/v%df%d%s", pRepo->rootDir, TSDB_DATA_DIR_NAME, REPO_ID(pRepo), fid, tsdbFileSuffix[type]); snprintf(fname, TSDB_FILENAME_LEN, "%s/%s/v%df%d%s", rootDir, TSDB_DATA_DIR_NAME, vid, fid, tsdbFileSuffix[type]);
} }
int tsdbLockRepo(STsdbRepo *pRepo) { int tsdbLockRepo(STsdbRepo *pRepo) {
...@@ -661,6 +664,8 @@ static STsdbRepo *tsdbNewRepo(char *rootDir, STsdbAppH *pAppH, STsdbCfg *pCfg) { ...@@ -661,6 +664,8 @@ static STsdbRepo *tsdbNewRepo(char *rootDir, STsdbAppH *pAppH, STsdbCfg *pCfg) {
goto _err; goto _err;
} }
pRepo->state = TSDB_STATE_OK;
int code = pthread_mutex_init(&pRepo->mutex, NULL); int code = pthread_mutex_init(&pRepo->mutex, NULL);
if (code != 0) { if (code != 0) {
terrno = TAOS_SYSTEM_ERROR(code); terrno = TAOS_SYSTEM_ERROR(code);
......
...@@ -102,7 +102,8 @@ void tsdbResetHelper(SRWHelper *pHelper) { ...@@ -102,7 +102,8 @@ void tsdbResetHelper(SRWHelper *pHelper) {
int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup) { int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup) {
ASSERT(pHelper != NULL && pGroup != NULL); ASSERT(pHelper != NULL && pGroup != NULL);
SFile *pFile = NULL; SFile * pFile = NULL;
STsdbRepo *pRepo = pHelper->pRepo;
// Clear the helper object // Clear the helper object
tsdbResetHelper(pHelper); tsdbResetHelper(pHelper);
...@@ -112,8 +113,10 @@ int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup) { ...@@ -112,8 +113,10 @@ int tsdbSetAndOpenHelperFile(SRWHelper *pHelper, SFileGroup *pGroup) {
// Set the files // Set the files
pHelper->files.fGroup = *pGroup; pHelper->files.fGroup = *pGroup;
if (helperType(pHelper) == TSDB_WRITE_HELPER) { if (helperType(pHelper) == TSDB_WRITE_HELPER) {
tsdbGetDataFileName(pHelper->pRepo, pGroup->fileId, TSDB_FILE_TYPE_NHEAD, helperNewHeadF(pHelper)->fname); tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), pGroup->fileId, TSDB_FILE_TYPE_NHEAD,
tsdbGetDataFileName(pHelper->pRepo, pGroup->fileId, TSDB_FILE_TYPE_NLAST, helperNewLastF(pHelper)->fname); helperNewHeadF(pHelper)->fname);
tsdbGetDataFileName(pRepo->rootDir, REPO_ID(pRepo), pGroup->fileId, TSDB_FILE_TYPE_NLAST,
helperNewLastF(pHelper)->fname);
} }
// Open the files // Open the files
...@@ -443,10 +446,64 @@ int tsdbWriteCompIdx(SRWHelper *pHelper) { ...@@ -443,10 +446,64 @@ int tsdbWriteCompIdx(SRWHelper *pHelper) {
return 0; return 0;
} }
int tsdbLoadCompIdxImpl(SFile *pFile, uint32_t offset, uint32_t len, void *buffer) {
const char *prefixMsg = "failed to load SCompIdx part";
if (lseek(pFile->fd, offset, SEEK_SET) < 0) {
tsdbError("%s: seek to file %s offset %u failed since %s", prefixMsg, pFile->fname, offset, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
if (taosTRead(pFile->fd, buffer, len) < len) {
tsdbError("%s: read file %s offset %u len %u failed since %s", prefixMsg, pFile->fname, offset, len,
strerror(errno));
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
if (!taosCheckChecksumWhole((uint8_t *)buffer, len)) {
tsdbError("%s: file %s corrupted, offset %u len %u", prefixMsg, pFile->fname, offset, len);
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
return 0;
}
int tsdbDecodeSCompIdxImpl(void *buffer, uint32_t len, SCompIdx **ppCompIdx, int *numOfIdx) {
int nIdx = 0;
void *pPtr = buffer;
while (POINTER_DISTANCE(pPtr, buffer) < (int)(len - sizeof(TSCKSUM))) {
size_t tlen = taosTSizeof(*ppCompIdx);
if (tlen < sizeof(SCompIdx) * (nIdx + 1)) {
*ppCompIdx = (SCompIdx *)taosTRealloc(*ppCompIdx, (tlen == 0) ? 1024 : tlen * 2);
if (*ppCompIdx == NULL) {
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
return -1;
}
}
pPtr = tsdbDecodeSCompIdx(pPtr, &((*ppCompIdx)[nIdx]));
if (pPtr == NULL) {
tsdbError("failed to decode SCompIdx part, idx:%d", nIdx);
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
nIdx++;
ASSERT(nIdx == 1 || (*ppCompIdx)[nIdx - 1].tid > (*ppCompIdx)[nIdx - 2].tid);
ASSERT(POINTER_DISTANCE(pPtr, buffer) <= (int)(len - sizeof(TSCKSUM)));
}
*numOfIdx = nIdx;
return 0;
}
int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) { int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) {
ASSERT(pHelper->state == TSDB_HELPER_FILE_SET_AND_OPEN); ASSERT(pHelper->state == TSDB_HELPER_FILE_SET_AND_OPEN);
SFile *pFile = helperHeadF(pHelper); SFile *pFile = helperHeadF(pHelper);
int fd = pFile->fd;
if (!helperHasState(pHelper, TSDB_HELPER_IDX_LOAD)) { if (!helperHasState(pHelper, TSDB_HELPER_IDX_LOAD)) {
// If not load from file, just load it in object // If not load from file, just load it in object
...@@ -456,54 +513,18 @@ int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) { ...@@ -456,54 +513,18 @@ int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) {
return -1; return -1;
} }
if (lseek(fd, pFile->info.offset, SEEK_SET) < 0) { // Load SCompIdx binary from file
tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), pFile->fname, strerror(errno)); if (tsdbLoadCompIdxImpl(pFile, pFile->info.offset, pFile->info.len, (void *)(pHelper->pBuffer)) < 0) {
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
if (taosTRead(fd, (void *)(pHelper->pBuffer), pFile->info.len) < (int)pFile->info.len) {
tsdbError("vgId:%d failed to read %d bytes from file %s since %s", REPO_ID(pHelper->pRepo), pFile->info.len,
pFile->fname, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
return -1; return -1;
} }
if (!taosCheckChecksumWhole((uint8_t *)(pHelper->pBuffer), pFile->info.len)) { // Decode the SCompIdx part
tsdbError("vgId:%d file %s SCompIdx part is corrupted. len %u", REPO_ID(pHelper->pRepo), pFile->fname, if (tsdbDecodeSCompIdxImpl(pHelper->pBuffer, pFile->info.len, &(pHelper->idxH.pIdxArray),
pFile->info.len); &(pHelper->idxH.numOfIdx)) < 0) {
terrno = TSDB_CODE_TDB_FILE_CORRUPTED; tsdbError("vgId:%d failed to decode SCompIdx part from file %s since %s", REPO_ID(pHelper->pRepo), pFile->fname,
tstrerror(errno));
return -1; return -1;
} }
// Decode it
pHelper->idxH.numOfIdx = 0;
void *ptr = pHelper->pBuffer;
while (POINTER_DISTANCE(ptr, pHelper->pBuffer) < (int)(pFile->info.len - sizeof(TSCKSUM))) {
size_t tlen = taosTSizeof(pHelper->idxH.pIdxArray);
pHelper->idxH.numOfIdx++;
if (tlen < pHelper->idxH.numOfIdx * sizeof(SCompIdx)) {
pHelper->idxH.pIdxArray = (SCompIdx *)taosTRealloc(pHelper->idxH.pIdxArray, (tlen == 0) ? 1024 : tlen * 2);
if (pHelper->idxH.pIdxArray == NULL) {
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
return -1;
}
}
ptr = tsdbDecodeSCompIdx(ptr, &(pHelper->idxH.pIdxArray[pHelper->idxH.numOfIdx - 1]));
if (ptr == NULL) {
tsdbError("vgId:%d file %s SCompIdx part is corrupted. len %u", REPO_ID(pHelper->pRepo), pFile->fname,
pFile->info.len);
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
ASSERT(pHelper->idxH.numOfIdx == 1 || pHelper->idxH.pIdxArray[pHelper->idxH.numOfIdx - 1].tid >
pHelper->idxH.pIdxArray[pHelper->idxH.numOfIdx - 2].tid);
ASSERT(POINTER_DISTANCE(ptr, pHelper->pBuffer) <= (int)(pFile->info.len - sizeof(TSCKSUM)));
}
} }
} }
helperSetState(pHelper, TSDB_HELPER_IDX_LOAD); helperSetState(pHelper, TSDB_HELPER_IDX_LOAD);
...@@ -515,36 +536,49 @@ int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) { ...@@ -515,36 +536,49 @@ int tsdbLoadCompIdx(SRWHelper *pHelper, void *target) {
return 0; return 0;
} }
int tsdbLoadCompInfoImpl(SFile *pFile, SCompIdx *pIdx, SCompInfo **ppCompInfo) {
const char *prefixMsg = "failed to load SCompInfo/SCompBlock part";
if (lseek(pFile->fd, pIdx->offset, SEEK_SET) < 0) {
tsdbError("%s: seek to file %s offset %u failed since %s", prefixMsg, pFile->fname, pIdx->offset, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
*ppCompInfo = taosTRealloc((void *)(*ppCompInfo), pIdx->len);
if (*ppCompInfo == NULL) {
terrno = TSDB_CODE_TDB_OUT_OF_MEMORY;
return -1;
}
if (taosTRead(pFile->fd, (void *)(*ppCompInfo), pIdx->len) < (int)pIdx->len) {
tsdbError("%s: read file %s offset %u len %u failed since %s", prefixMsg, pFile->fname, pIdx->offset, pIdx->len,
strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
if (!taosCheckChecksumWhole((uint8_t *)(*ppCompInfo), pIdx->len)) {
tsdbError("%s: file %s corrupted, offset %u len %u", prefixMsg, pFile->fname, pIdx->offset, pIdx->len);
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
return 0;
}
int tsdbLoadCompInfo(SRWHelper *pHelper, void *target) { int tsdbLoadCompInfo(SRWHelper *pHelper, void *target) {
ASSERT(helperHasState(pHelper, TSDB_HELPER_TABLE_SET)); ASSERT(helperHasState(pHelper, TSDB_HELPER_TABLE_SET));
SCompIdx *pIdx = &(pHelper->curCompIdx); SCompIdx *pIdx = &(pHelper->curCompIdx);
int fd = helperHeadF(pHelper)->fd; SFile *pFile = helperHeadF(pHelper);
if (!helperHasState(pHelper, TSDB_HELPER_INFO_LOAD)) { if (!helperHasState(pHelper, TSDB_HELPER_INFO_LOAD)) {
if (pIdx->offset > 0) { if (pIdx->offset > 0) {
ASSERT(pIdx->uid == pHelper->tableInfo.uid); ASSERT(pIdx->uid == pHelper->tableInfo.uid);
if (lseek(fd, pIdx->offset, SEEK_SET) < 0) {
tsdbError("vgId:%d failed to lseek file %s since %s", REPO_ID(pHelper->pRepo), helperHeadF(pHelper)->fname,
strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
pHelper->pCompInfo = taosTRealloc((void *)pHelper->pCompInfo, pIdx->len); if (tsdbLoadCompInfoImpl(pFile, pIdx, &(pHelper->pCompInfo)) < 0) return -1;
if (taosTRead(fd, (void *)(pHelper->pCompInfo), pIdx->len) < (int)pIdx->len) {
tsdbError("vgId:%d failed to read %d bytes from file %s since %s", REPO_ID(pHelper->pRepo), pIdx->len,
helperHeadF(pHelper)->fname, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
if (!taosCheckChecksumWhole((uint8_t *)pHelper->pCompInfo, pIdx->len)) {
tsdbError("vgId:%d file %s SCompInfo part is corrupted, tid %d uid %" PRIu64, REPO_ID(pHelper->pRepo),
helperHeadF(pHelper)->fname, pHelper->tableInfo.tid, pHelper->tableInfo.uid);
terrno = TSDB_CODE_TDB_FILE_CORRUPTED;
return -1;
}
ASSERT(pIdx->uid == pHelper->pCompInfo->uid && pIdx->tid == pHelper->pCompInfo->tid); ASSERT(pIdx->uid == pHelper->pCompInfo->uid && pIdx->tid == pHelper->pCompInfo->tid);
} }
......
...@@ -734,6 +734,11 @@ static int32_t doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* p ...@@ -734,6 +734,11 @@ static int32_t doLoadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* p
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
static int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end);
static void moveDataToFront(STsdbQueryHandle* pQueryHandle, int32_t numOfRows, int32_t numOfCols);
static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle);
static void copyAllRemainRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos);
static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlock, STableCheckInfo* pCheckInfo){ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBlock* pBlock, STableCheckInfo* pCheckInfo){
SQueryFilePos* cur = &pQueryHandle->cur; SQueryFilePos* cur = &pQueryHandle->cur;
SDataBlockInfo binfo = GET_FILE_DATA_BLOCK_INFO(pCheckInfo, pBlock); SDataBlockInfo binfo = GET_FILE_DATA_BLOCK_INFO(pCheckInfo, pBlock);
...@@ -742,11 +747,11 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc ...@@ -742,11 +747,11 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc
/*bool hasData = */ initTableMemIterator(pQueryHandle, pCheckInfo); /*bool hasData = */ initTableMemIterator(pQueryHandle, pCheckInfo);
SDataRow row = getSDataRowInTableMem(pCheckInfo, pQueryHandle->order); SDataRow row = getSDataRowInTableMem(pCheckInfo, pQueryHandle->order);
assert(cur->pos >= 0 && cur->pos <= binfo.rows);
TSKEY key = (row != NULL)? dataRowKey(row):TSKEY_INITIAL_VAL; TSKEY key = (row != NULL)? dataRowKey(row):TSKEY_INITIAL_VAL;
tsdbDebug("%p key in mem:%"PRId64", %p", pQueryHandle, key, pQueryHandle->qinfo); tsdbDebug("%p key in mem:%"PRId64", %p", pQueryHandle, key, pQueryHandle->qinfo);
cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(binfo.rows-1);
if ((ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key <= binfo.window.ekey)) || if ((ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key <= binfo.window.ekey)) ||
(!ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key >= binfo.window.skey))) { (!ASCENDING_TRAVERSE(pQueryHandle->order) && (key != TSKEY_INITIAL_VAL && key >= binfo.window.skey))) {
...@@ -785,14 +790,32 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc ...@@ -785,14 +790,32 @@ static int32_t handleDataMergeIfNeeded(STsdbQueryHandle* pQueryHandle, SCompBloc
* Here the buffer is not enough, so only part of file block can be loaded into memory buffer * Here the buffer is not enough, so only part of file block can be loaded into memory buffer
*/ */
assert(pQueryHandle->outputCapacity >= binfo.rows); assert(pQueryHandle->outputCapacity >= binfo.rows);
pQueryHandle->realNumOfRows = binfo.rows;
cur->rows = binfo.rows; if ((cur->pos == 0 && ASCENDING_TRAVERSE(pQueryHandle->order)) ||
cur->win = binfo.window; (cur->pos == (binfo.rows - 1) && (!ASCENDING_TRAVERSE(pQueryHandle->order)))) {
cur->mixBlock = false; pQueryHandle->realNumOfRows = binfo.rows;
cur->blockCompleted = true;
cur->lastKey = binfo.window.ekey + (ASCENDING_TRAVERSE(pQueryHandle->order)? 1:-1); cur->rows = binfo.rows;
pCheckInfo->lastKey = cur->lastKey; cur->win = binfo.window;
cur->mixBlock = false;
cur->blockCompleted = true;
if (ASCENDING_TRAVERSE(pQueryHandle->order)) {
cur->lastKey = binfo.window.ekey + 1;
cur->pos = binfo.rows;
} else {
cur->lastKey = binfo.window.skey - 1;
cur->pos = -1;
}
} else { // partially copy to dest buffer
int32_t endPos = ASCENDING_TRAVERSE(pQueryHandle->order)? (binfo.rows - 1): 0;
copyAllRemainRowsFromFileBlock(pQueryHandle, pCheckInfo, &binfo, endPos);
cur->mixBlock = true;
}
assert(cur->blockCompleted);
tsdbDebug("create data block from remain file block, brange:%"PRId64"-%"PRId64", rows:%d, lastKey:%"PRId64", %p",
cur->win.skey, cur->win.ekey, cur->rows, cur->lastKey, pQueryHandle);
} }
return code; return code;
...@@ -823,6 +846,7 @@ static int32_t loadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBl ...@@ -823,6 +846,7 @@ static int32_t loadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBl
assert(pCheckInfo->lastKey <= pBlock->keyLast); assert(pCheckInfo->lastKey <= pBlock->keyLast);
doMergeTwoLevelData(pQueryHandle, pCheckInfo, pBlock); doMergeTwoLevelData(pQueryHandle, pCheckInfo, pBlock);
} else { // the whole block is loaded in to buffer } else { // the whole block is loaded in to buffer
cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(pBlock->numOfRows - 1);
code = handleDataMergeIfNeeded(pQueryHandle, pBlock, pCheckInfo); code = handleDataMergeIfNeeded(pQueryHandle, pBlock, pCheckInfo);
} }
} else { //desc order, query ended in current block } else { //desc order, query ended in current block
...@@ -842,6 +866,7 @@ static int32_t loadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBl ...@@ -842,6 +866,7 @@ static int32_t loadFileDataBlock(STsdbQueryHandle* pQueryHandle, SCompBlock* pBl
assert(pCheckInfo->lastKey >= pBlock->keyFirst); assert(pCheckInfo->lastKey >= pBlock->keyFirst);
doMergeTwoLevelData(pQueryHandle, pCheckInfo, pBlock); doMergeTwoLevelData(pQueryHandle, pCheckInfo, pBlock);
} else { } else {
cur->pos = ASCENDING_TRAVERSE(pQueryHandle->order)? 0:(pBlock->numOfRows-1);
code = handleDataMergeIfNeeded(pQueryHandle, pBlock, pCheckInfo); code = handleDataMergeIfNeeded(pQueryHandle, pBlock, pCheckInfo);
} }
} }
...@@ -912,7 +937,7 @@ static int doBinarySearchKey(char* pValue, int num, TSKEY key, int order) { ...@@ -912,7 +937,7 @@ static int doBinarySearchKey(char* pValue, int num, TSKEY key, int order) {
return midPos; return midPos;
} }
static int32_t copyDataFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end) { int32_t doCopyRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, int32_t capacity, int32_t numOfRows, int32_t start, int32_t end) {
char* pData = NULL; char* pData = NULL;
int32_t step = ASCENDING_TRAVERSE(pQueryHandle->order)? 1 : -1; int32_t step = ASCENDING_TRAVERSE(pQueryHandle->order)? 1 : -1;
...@@ -1137,6 +1162,47 @@ static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle) { ...@@ -1137,6 +1162,47 @@ static void doCheckGeneratedBlockRange(STsdbQueryHandle* pQueryHandle) {
} }
} }
static void copyAllRemainRowsFromFileBlock(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SDataBlockInfo* pBlockInfo, int32_t endPos) {
SQueryFilePos* cur = &pQueryHandle->cur;
SDataCols* pCols = pQueryHandle->rhelper.pDataCols[0];
TSKEY* tsArray = pCols->cols[0].pData;
int32_t step = ASCENDING_TRAVERSE(pQueryHandle->order)? 1:-1;
int32_t numOfCols = (int32_t)(QH_GET_NUM_OF_COLS(pQueryHandle));
int32_t pos = cur->pos;
int32_t start = cur->pos;
int32_t end = endPos;
if (!ASCENDING_TRAVERSE(pQueryHandle->order)) {
assert(start >= end);
SWAP(start, end, int32_t);
}
assert(pQueryHandle->outputCapacity >= (end - start + 1));
int32_t numOfRows = doCopyRowsFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, 0, start, end);
// the time window should always be ascending order: skey <= ekey
cur->win = (STimeWindow) {.skey = tsArray[start], .ekey = tsArray[end]};
cur->mixBlock = (numOfRows != pBlockInfo->rows);
cur->lastKey = tsArray[endPos] + step;
cur->blockCompleted = true;
// if the buffer is not full in case of descending order query, move the data in the front of the buffer
moveDataToFront(pQueryHandle, numOfRows, numOfCols);
// The value of pos may be -1 or pBlockInfo->rows, and it is invalid in both cases.
pos = endPos + step;
updateInfoAfterMerge(pQueryHandle, pCheckInfo, numOfRows, pos);
doCheckGeneratedBlockRange(pQueryHandle);
tsdbDebug("%p uid:%" PRIu64",tid:%d data block created, mixblock:%d, brange:%"PRIu64"-%"PRIu64" rows:%d, %p",
pQueryHandle, pCheckInfo->tableId.uid, pCheckInfo->tableId.tid, cur->mixBlock, cur->win.skey,
cur->win.ekey, cur->rows, pQueryHandle->qinfo);
}
// only return the qualified data to client in terms of query time window, data rows in the same block but do not // only return the qualified data to client in terms of query time window, data rows in the same block but do not
// be included in the query time window will be discarded // be included in the query time window will be discarded
static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SCompBlock* pBlock) { static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* pCheckInfo, SCompBlock* pBlock) {
...@@ -1179,37 +1245,13 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* ...@@ -1179,37 +1245,13 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
// compared with the data from in-memory buffer, to generate the correct timestamp array list // compared with the data from in-memory buffer, to generate the correct timestamp array list
int32_t numOfRows = 0; int32_t numOfRows = 0;
int32_t pos = cur->pos; int32_t pos = cur->pos;
cur->win = TSWINDOW_INITIALIZER; cur->win = TSWINDOW_INITIALIZER;
// no data in buffer, load data from file directly // no data in buffer, load data from file directly
if (pCheckInfo->iiter == NULL && pCheckInfo->iter == NULL) { if (pCheckInfo->iiter == NULL && pCheckInfo->iter == NULL) {
int32_t start = cur->pos; copyAllRemainRowsFromFileBlock(pQueryHandle, pCheckInfo, &blockInfo, endPos);
int32_t end = endPos;
if (!ASCENDING_TRAVERSE(pQueryHandle->order)) {
SWAP(start, end, int32_t);
}
numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, start, end);
// the time window should always be right order: skey <= ekey
cur->win = (STimeWindow) {.skey = tsArray[start], .ekey = tsArray[end]};
cur->lastKey = tsArray[endPos];
pos += (end - start + 1) * step;
cur->blockCompleted =
(((pos >= endPos || cur->lastKey > pQueryHandle->window.ekey) && ASCENDING_TRAVERSE(pQueryHandle->order)) ||
((pos <= endPos || cur->lastKey < pQueryHandle->window.ekey) && !ASCENDING_TRAVERSE(pQueryHandle->order)));
// if the buffer is not full in case of descending order query, move the data in the front of the buffer
moveDataToFront(pQueryHandle, numOfRows, numOfCols);
updateInfoAfterMerge(pQueryHandle, pCheckInfo, numOfRows, pos);
doCheckGeneratedBlockRange(pQueryHandle);
tsdbDebug("%p uid:%" PRIu64",tid:%d data block created, mixblock:%d, brange:%"PRIu64"-%"PRIu64" rows:%d, %p",
pQueryHandle, pCheckInfo->tableId.uid, pCheckInfo->tableId.tid, cur->mixBlock, cur->win.skey,
cur->win.ekey, cur->rows, pQueryHandle->qinfo);
return; return;
} else if (pCheckInfo->iter != NULL || pCheckInfo->iiter != NULL) { } else if (pCheckInfo->iter != NULL || pCheckInfo->iiter != NULL) {
SSkipListNode* node = NULL; SSkipListNode* node = NULL;
...@@ -1261,7 +1303,7 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* ...@@ -1261,7 +1303,7 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
int32_t qstart = 0, qend = 0; int32_t qstart = 0, qend = 0;
getQualifiedRowsPos(pQueryHandle, pos, end, numOfRows, &qstart, &qend); getQualifiedRowsPos(pQueryHandle, pos, end, numOfRows, &qstart, &qend);
numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, qstart, qend); numOfRows = doCopyRowsFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, qstart, qend);
pos += (qend - qstart + 1) * step; pos += (qend - qstart + 1) * step;
cur->win.ekey = ASCENDING_TRAVERSE(pQueryHandle->order)? tsArray[qend]:tsArray[qstart]; cur->win.ekey = ASCENDING_TRAVERSE(pQueryHandle->order)? tsArray[qend]:tsArray[qstart];
...@@ -1285,7 +1327,7 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo* ...@@ -1285,7 +1327,7 @@ static void doMergeTwoLevelData(STsdbQueryHandle* pQueryHandle, STableCheckInfo*
int32_t start = -1, end = -1; int32_t start = -1, end = -1;
getQualifiedRowsPos(pQueryHandle, pos, endPos, numOfRows, &start, &end); getQualifiedRowsPos(pQueryHandle, pos, endPos, numOfRows, &start, &end);
numOfRows = copyDataFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, start, end); numOfRows = doCopyRowsFromFileBlock(pQueryHandle, pQueryHandle->outputCapacity, numOfRows, start, end);
pos += (end - start + 1) * step; pos += (end - start + 1) * step;
cur->win.ekey = ASCENDING_TRAVERSE(pQueryHandle->order)? tsArray[end]:tsArray[start]; cur->win.ekey = ASCENDING_TRAVERSE(pQueryHandle->order)? tsArray[end]:tsArray[start];
...@@ -1658,7 +1700,7 @@ static int32_t getDataBlocksInFiles(STsdbQueryHandle* pQueryHandle, bool* exists ...@@ -1658,7 +1700,7 @@ static int32_t getDataBlocksInFiles(STsdbQueryHandle* pQueryHandle, bool* exists
return loadFileDataBlock(pQueryHandle, pNext->compBlock, pNext->pTableCheckInfo, exists); return loadFileDataBlock(pQueryHandle, pNext->compBlock, pNext->pTableCheckInfo, exists);
} }
} else { } else {
tsdbDebug("%p continue in current data block, index:%d, %p", pQueryHandle, cur->slot, pQueryHandle->qinfo); tsdbDebug("%p continue in current data block, index:%d, pos:%d, %p", pQueryHandle, cur->slot, cur->pos, pQueryHandle->qinfo);
int32_t code = handleDataMergeIfNeeded(pQueryHandle, pBlockInfo->compBlock, pCheckInfo); int32_t code = handleDataMergeIfNeeded(pQueryHandle, pBlockInfo->compBlock, pCheckInfo);
*exists = pQueryHandle->realNumOfRows > 0; *exists = pQueryHandle->realNumOfRows > 0;
...@@ -1689,12 +1731,13 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) { ...@@ -1689,12 +1731,13 @@ static void changeQueryHandleForInterpQuery(TsdbQueryHandleT pHandle) {
assert(pQueryHandle->window.skey == pQueryHandle->window.ekey); assert(pQueryHandle->window.skey == pQueryHandle->window.ekey);
// starts from the buffer in case of descending timestamp order check data blocks // starts from the buffer in case of descending timestamp order check data blocks
// todo consider the query time window, current last_row does not apply the query time window
size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo); size_t numOfTables = taosArrayGetSize(pQueryHandle->pTableCheckInfo);
int32_t i = 0; int32_t i = 0;
while(i < numOfTables) { while(i < numOfTables) {
STableCheckInfo* pCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i); STableCheckInfo* pCheckInfo = taosArrayGet(pQueryHandle->pTableCheckInfo, i);
// the first qualified table for interpolation query
if (pQueryHandle->window.skey <= pCheckInfo->pTableObj->lastKey && if (pQueryHandle->window.skey <= pCheckInfo->pTableObj->lastKey &&
pCheckInfo->pTableObj->lastKey != TSKEY_INITIAL_VAL) { pCheckInfo->pTableObj->lastKey != TSKEY_INITIAL_VAL) {
break; break;
...@@ -2156,7 +2199,7 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) { ...@@ -2156,7 +2199,7 @@ SArray* tsdbRetrieveDataBlock(TsdbQueryHandleT* pQueryHandle, SArray* pIdList) {
} }
// todo refactor // todo refactor
int32_t numOfRows = copyDataFromFileBlock(pHandle, pHandle->outputCapacity, 0, 0, pBlock->numOfRows - 1); int32_t numOfRows = doCopyRowsFromFileBlock(pHandle, pHandle->outputCapacity, 0, 0, pBlock->numOfRows - 1);
// if the buffer is not full in case of descending order query, move the data in the front of the buffer // if the buffer is not full in case of descending order query, move the data in the front of the buffer
if (!ASCENDING_TRAVERSE(pHandle->order) && numOfRows < pHandle->outputCapacity) { if (!ASCENDING_TRAVERSE(pHandle->order) && numOfRows < pHandle->outputCapacity) {
......
...@@ -11,21 +11,4 @@ ...@@ -11,21 +11,4 @@
* *
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
\ No newline at end of file
#define _DEFAULT_SOURCE
#include "os.h"
#include "tulog.h"
void taosRemoveDir(char *rootDir) {
uError("%s not implemented yet", __FUNCTION__);
}
int taosMkDir(const char *path, mode_t mode) {
uError("%s not implemented yet", __FUNCTION__);
return 0;
}
void taosMvDir(char* destDir, char *srcDir) {
uError("%s not implemented yet", __FUNCTION__);
}
/*
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
*
* This program is free software: you can use, redistribute, and/or modify
* it under the terms of the GNU Affero General Public License, version 3
* or later ("AGPL"), as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "tsdbMain.h"
#ifndef _TSDB_PLUGINS
int tsdbScanFGroup(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0; }
STsdbScanHandle* tsdbNewScanHandle() { return NULL; }
void tsdbSetScanLogStream(STsdbScanHandle* pScanHandle, FILE* fLogStream) {}
int tsdbSetAndOpenScanFile(STsdbScanHandle* pScanHandle, char* rootDir, int fid) { return 0; }
int tsdbScanSCompIdx(STsdbScanHandle* pScanHandle) { return 0; }
int tsdbScanSCompBlock(STsdbScanHandle* pScanHandle, int idx) { return 0; }
int tsdbCloseScanFile(STsdbScanHandle* pScanHandle) { return 0; }
void tsdbFreeScanHandle(STsdbScanHandle* pScanHandle) {}
#endif
\ No newline at end of file
...@@ -3,9 +3,10 @@ PROJECT(TDengine) ...@@ -3,9 +3,10 @@ PROJECT(TDengine)
AUX_SOURCE_DIRECTORY(src SRC) AUX_SOURCE_DIRECTORY(src SRC)
ADD_LIBRARY(tutil ${SRC}) ADD_LIBRARY(tutil ${SRC})
TARGET_LINK_LIBRARIES(tutil pthread osdetail lz4)
IF (TD_LINUX) IF (TD_LINUX)
TARGET_LINK_LIBRARIES(tutil pthread osdetail m rt lz4) TARGET_LINK_LIBRARIES(tutil m rt)
ADD_SUBDIRECTORY(tests) ADD_SUBDIRECTORY(tests)
FIND_PATH(ICONV_INCLUDE_EXIST iconv.h /usr/include/ /usr/local/include/) FIND_PATH(ICONV_INCLUDE_EXIST iconv.h /usr/include/ /usr/local/include/)
...@@ -24,7 +25,7 @@ IF (TD_LINUX) ...@@ -24,7 +25,7 @@ IF (TD_LINUX)
ENDIF () ENDIF ()
ELSEIF (TD_WINDOWS) ELSEIF (TD_WINDOWS)
TARGET_LINK_LIBRARIES(tutil iconv regex pthread osdetail winmm IPHLPAPI ws2_32 lz4 wepoll) TARGET_LINK_LIBRARIES(tutil iconv regex winmm IPHLPAPI ws2_32 wepoll)
ELSEIF(TD_DARWIN) ELSEIF(TD_DARWIN)
TARGET_LINK_LIBRARIES(tutil iconv pthread osdetail lz4) TARGET_LINK_LIBRARIES(tutil iconv)
ENDIF() ENDIF()
...@@ -110,7 +110,17 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da ...@@ -110,7 +110,17 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da
*/ */
void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen); void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen);
void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void(*fp)(void*)); /**
* apply the udf before return the result
* @param pHashObj
* @param key
* @param keyLen
* @param fp
* @param d
* @param dsize
* @return
*/
void* taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize);
/** /**
* remove item with the specified key * remove item with the specified key
......
...@@ -42,7 +42,7 @@ typedef struct SCacheDataNode { ...@@ -42,7 +42,7 @@ typedef struct SCacheDataNode {
uint64_t signature; uint64_t signature;
struct STrashElem *pTNodeHeader; // point to trash node head struct STrashElem *pTNodeHeader; // point to trash node head
uint16_t keySize: 15; // max key size: 32kb uint16_t keySize: 15; // max key size: 32kb
bool inTrashCan: 1;// denote if it is in trash or not bool inTrashcan: 1;// denote if it is in trash or not
uint32_t size; // allocated size for current SCacheDataNode uint32_t size; // allocated size for current SCacheDataNode
T_REF_DECLARE() T_REF_DECLARE()
char *key; char *key;
......
...@@ -255,10 +255,10 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da ...@@ -255,10 +255,10 @@ int32_t taosHashPut(SHashObj *pHashObj, const void *key, size_t keyLen, void *da
} }
void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) { void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) {
return taosHashGetCB(pHashObj, key, keyLen, NULL); return taosHashGetCB(pHashObj, key, keyLen, NULL, NULL, 0);
} }
void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *)) { void* taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*fp)(void *), void* d, size_t dsize) {
if (pHashObj->size <= 0 || keyLen == 0 || key == NULL) { if (pHashObj->size <= 0 || keyLen == 0 || key == NULL) {
return NULL; return NULL;
} }
...@@ -273,7 +273,6 @@ void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*f ...@@ -273,7 +273,6 @@ void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*f
// no data, return directly // no data, return directly
if (atomic_load_32(&pe->num) == 0) { if (atomic_load_32(&pe->num) == 0) {
__rd_unlock(&pHashObj->lock, pHashObj->type); __rd_unlock(&pHashObj->lock, pHashObj->type);
return NULL; return NULL;
} }
...@@ -297,7 +296,11 @@ void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*f ...@@ -297,7 +296,11 @@ void *taosHashGetCB(SHashObj *pHashObj, const void *key, size_t keyLen, void (*f
fp(pNode->data); fp(pNode->data);
} }
data = pNode->data; if (d != NULL) {
memcpy(d, pNode->data, dsize);
} else {
data = pNode->data;
}
} }
if (pHashObj->type == HASH_ENTRY_LOCK) { if (pHashObj->type == HASH_ENTRY_LOCK) {
......
...@@ -90,7 +90,6 @@ static void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force); ...@@ -90,7 +90,6 @@ static void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force);
static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNode *pNode) { static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNode *pNode) {
if (pNode->signature != (uint64_t)pNode) { if (pNode->signature != (uint64_t)pNode) {
uError("key:%s, %p data is invalid, or has been released", pNode->key, pNode); uError("key:%s, %p data is invalid, or has been released", pNode->key, pNode);
assert(0);
return; return;
} }
...@@ -110,7 +109,7 @@ static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNo ...@@ -110,7 +109,7 @@ static FORCE_INLINE void taosCacheReleaseNode(SCacheObj *pCacheObj, SCacheDataNo
static FORCE_INLINE void doRemoveElemInTrashcan(SCacheObj* pCacheObj, STrashElem *pElem) { static FORCE_INLINE void doRemoveElemInTrashcan(SCacheObj* pCacheObj, STrashElem *pElem) {
if (pElem->pData->signature != (uint64_t) pElem->pData) { if (pElem->pData->signature != (uint64_t) pElem->pData) {
uError("key:sig:0x%" PRIx64 " %p data has been released, ignore", pElem->pData->signature, pElem->pData); uWarn("key:sig:0x%" PRIx64 " %p data has been released, ignore", pElem->pData->signature, pElem->pData);
return; return;
} }
...@@ -224,7 +223,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v ...@@ -224,7 +223,7 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v
taosTFree(p); taosTFree(p);
} else { } else {
taosAddToTrash(pCacheObj, p); taosAddToTrash(pCacheObj, p);
uDebug("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode1->data, p); uDebug("cache:%s, key:%p, %p exist in cache, updated old:%p", pCacheObj->name, key, pNode1->data, p->data);
} }
} }
...@@ -265,17 +264,14 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen ...@@ -265,17 +264,14 @@ void *taosCacheAcquireByKey(SCacheObj *pCacheObj, const void *key, size_t keyLen
return NULL; return NULL;
} }
SCacheDataNode **ptNode = (SCacheDataNode **)taosHashGetCB(pCacheObj->pHashTable, key, keyLen, incRefFn); SCacheDataNode* ptNode = NULL;
if (ptNode != NULL) { taosHashGetCB(pCacheObj->pHashTable, key, keyLen, incRefFn, &ptNode, sizeof(void*));
assert ((*ptNode) != NULL && (int64_t) ((*ptNode)->data) != 0x40);
}
void* pData = (ptNode != NULL)? (*ptNode)->data:NULL; void* pData = (ptNode != NULL)? ptNode->data:NULL;
assert((int64_t)pData != 0x40);
if (pData != NULL) { if (pData != NULL) {
atomic_add_fetch_32(&pCacheObj->statistics.hitCount, 1); atomic_add_fetch_32(&pCacheObj->statistics.hitCount, 1);
uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(*ptNode)); uDebug("cache:%s, key:%p, %p is retrieved from cache, refcnt:%d", pCacheObj->name, key, pData, T_REF_VAL_GET(ptNode));
} else { } else {
atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1); atomic_add_fetch_32(&pCacheObj->statistics.missCount, 1);
uDebug("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key); uDebug("cache:%s, key:%p, not in cache, retrieved failed", pCacheObj->name, key);
...@@ -292,7 +288,7 @@ void *taosCacheAcquireByData(SCacheObj *pCacheObj, void *data) { ...@@ -292,7 +288,7 @@ void *taosCacheAcquireByData(SCacheObj *pCacheObj, void *data) {
SCacheDataNode *ptNode = (SCacheDataNode *)((char *)data - offset); SCacheDataNode *ptNode = (SCacheDataNode *)((char *)data - offset);
if (ptNode->signature != (uint64_t)ptNode) { if (ptNode->signature != (uint64_t)ptNode) {
uError("key: %p the data from cache is invalid", ptNode); uError("cache:%s, key: %p the data from cache is invalid", pCacheObj->name, ptNode);
return NULL; return NULL;
} }
...@@ -311,7 +307,7 @@ void *taosCacheTransfer(SCacheObj *pCacheObj, void **data) { ...@@ -311,7 +307,7 @@ void *taosCacheTransfer(SCacheObj *pCacheObj, void **data) {
SCacheDataNode *ptNode = (SCacheDataNode *)((char *)(*data) - offset); SCacheDataNode *ptNode = (SCacheDataNode *)((char *)(*data) - offset);
if (ptNode->signature != (uint64_t)ptNode) { if (ptNode->signature != (uint64_t)ptNode) {
uError("key: %p the data from cache is invalid", ptNode); uError("cache:%s, key: %p the data from cache is invalid", pCacheObj->name, ptNode);
return NULL; return NULL;
} }
...@@ -334,16 +330,16 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { ...@@ -334,16 +330,16 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
SCacheDataNode *pNode = (SCacheDataNode *)((char *)(*data) - offset); SCacheDataNode *pNode = (SCacheDataNode *)((char *)(*data) - offset);
if (pNode->signature != (uint64_t)pNode) { if (pNode->signature != (uint64_t)pNode) {
uError("%p, release invalid cache data", pNode); uError("cache:%s, %p, release invalid cache data", pCacheObj->name, pNode);
return; return;
} }
*data = NULL; *data = NULL;
// note: extend lifespan before dec ref count // note: extend lifespan before dec ref count
bool inTrashCan = pNode->inTrashCan; bool inTrashcan = pNode->inTrashcan;
if (pCacheObj->extendLifespan && (!inTrashCan) && (!_remove)) { if (pCacheObj->extendLifespan && (!inTrashcan) && (!_remove)) {
atomic_store_64(&pNode->expireTime, pNode->lifespan + taosGetTimestampMs()); atomic_store_64(&pNode->expireTime, pNode->lifespan + taosGetTimestampMs());
uDebug("cache:%s data:%p extend expire time: %"PRId64, pCacheObj->name, pNode->data, pNode->expireTime); uDebug("cache:%s data:%p extend expire time: %"PRId64, pCacheObj->name, pNode->data, pNode->expireTime);
} }
...@@ -354,7 +350,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { ...@@ -354,7 +350,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
char* d = pNode->data; char* d = pNode->data;
int32_t ref = T_REF_VAL_GET(pNode); int32_t ref = T_REF_VAL_GET(pNode);
uDebug("cache:%s, key:%p, %p is released, refcnt:%d, intrash:%d", pCacheObj->name, key, d, ref - 1, inTrashCan); uDebug("cache:%s, key:%p, %p is released, refcnt:%d, in trashcan:%d", pCacheObj->name, key, d, ref - 1, inTrashcan);
/* /*
* If it is not referenced by other users, remove it immediately. Otherwise move this node to trashcan wait for all users * If it is not referenced by other users, remove it immediately. Otherwise move this node to trashcan wait for all users
...@@ -363,17 +359,25 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { ...@@ -363,17 +359,25 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
* NOTE: previous ref is 0, and current ref is still 0, remove it. If previous is not 0, there is another thread * NOTE: previous ref is 0, and current ref is still 0, remove it. If previous is not 0, there is another thread
* that tries to do the same thing. * that tries to do the same thing.
*/ */
if (inTrashCan) { if (inTrashcan) {
ref = T_REF_DEC(pNode); ref = T_REF_VAL_GET(pNode);
if (ref == 0) { if (ref == 1) {
// If it is the last ref, remove it from trashcan linked-list first, and then destroy it.Otherwise, it may be
// destroyed by refresh worker if decrease ref count before removing it from linked-list.
assert(pNode->pTNodeHeader->pData == pNode); assert(pNode->pTNodeHeader->pData == pNode);
__cache_wr_lock(pCacheObj); __cache_wr_lock(pCacheObj);
doRemoveElemInTrashcan(pCacheObj, pNode->pTNodeHeader); doRemoveElemInTrashcan(pCacheObj, pNode->pTNodeHeader);
__cache_unlock(pCacheObj); __cache_unlock(pCacheObj);
ref = T_REF_DEC(pNode);
assert(ref == 0);
doDestroyTrashcanElem(pCacheObj, pNode->pTNodeHeader); doDestroyTrashcanElem(pCacheObj, pNode->pTNodeHeader);
} else {
ref = T_REF_DEC(pNode);
assert(ref >= 0);
} }
} else { } else {
// NOTE: remove it from hash in the first place, otherwise, the pNode may have been released by other thread // NOTE: remove it from hash in the first place, otherwise, the pNode may have been released by other thread
...@@ -413,7 +417,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { ...@@ -413,7 +417,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
} }
} }
} else { } else {
uDebug("cache:%s, key:%p, %p has been removed from hash table by other thread already, refcnt:%d", uDebug("cache:%s, key:%p, %p has been removed from hash table by others already, refcnt:%d",
pCacheObj->name, pNode->key, pNode->data, ref); pCacheObj->name, pNode->key, pNode->data, ref);
} }
} }
...@@ -424,7 +428,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) { ...@@ -424,7 +428,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
char* p = pNode->data; char* p = pNode->data;
int32_t ref = T_REF_DEC(pNode); int32_t ref = T_REF_DEC(pNode);
uDebug("cache:%s, key:%p, %p released, refcnt:%d, data in trancan:%d", pCacheObj->name, key, p, ref, inTrashCan); uDebug("cache:%s, key:%p, %p released, refcnt:%d, data in trashcan:%d", pCacheObj->name, key, p, ref, inTrashcan);
} }
} }
...@@ -495,7 +499,7 @@ SCacheDataNode *taosCreateCacheNode(const char *key, size_t keyLen, const char * ...@@ -495,7 +499,7 @@ SCacheDataNode *taosCreateCacheNode(const char *key, size_t keyLen, const char *
} }
void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) { void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) {
if (pNode->inTrashCan) { /* node is already in trash */ if (pNode->inTrashcan) { /* node is already in trash */
assert(pNode->pTNodeHeader != NULL && pNode->pTNodeHeader->pData == pNode); assert(pNode->pTNodeHeader != NULL && pNode->pTNodeHeader->pData == pNode);
return; return;
} }
...@@ -503,7 +507,7 @@ void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) { ...@@ -503,7 +507,7 @@ void taosAddToTrash(SCacheObj *pCacheObj, SCacheDataNode *pNode) {
STrashElem *pElem = calloc(1, sizeof(STrashElem)); STrashElem *pElem = calloc(1, sizeof(STrashElem));
pElem->pData = pNode; pElem->pData = pNode;
pElem->prev = NULL; pElem->prev = NULL;
pNode->inTrashCan = true; pNode->inTrashcan = true;
pNode->pTNodeHeader = pElem; pNode->pTNodeHeader = pElem;
__cache_wr_lock(pCacheObj); __cache_wr_lock(pCacheObj);
...@@ -525,7 +529,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { ...@@ -525,7 +529,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) {
if (pCacheObj->numOfElemsInTrash == 0) { if (pCacheObj->numOfElemsInTrash == 0) {
if (pCacheObj->pTrash != NULL) { if (pCacheObj->pTrash != NULL) {
uError("key:inconsistency data in cache, numOfElem in trash:%d", pCacheObj->numOfElemsInTrash); uError("cache:%s, key:inconsistency data in cache, numOfElem in trashcan:%d", pCacheObj->name, pCacheObj->numOfElemsInTrash);
} }
pCacheObj->pTrash = NULL; pCacheObj->pTrash = NULL;
...@@ -542,7 +546,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) { ...@@ -542,7 +546,7 @@ void taosTrashCanEmpty(SCacheObj *pCacheObj, bool force) {
} }
if (force || (T_REF_VAL_GET(pElem->pData) == 0)) { if (force || (T_REF_VAL_GET(pElem->pData) == 0)) {
uDebug("key:%p, %p removed from trash. numOfElem in trash:%d", pElem->pData->key, pElem->pData->data, uDebug("cache:%s, key:%p, %p removed from trashcan. numOfElem in trashcan:%d", pCacheObj->name, pElem->pData->key, pElem->pData->data,
pCacheObj->numOfElemsInTrash - 1); pCacheObj->numOfElemsInTrash - 1);
STrashElem *p = pElem; STrashElem *p = pElem;
......
...@@ -270,7 +270,7 @@ void taosReadGlobalLogCfg() { ...@@ -270,7 +270,7 @@ void taosReadGlobalLogCfg() {
} }
wordfree(&full_path); wordfree(&full_path);
taosReadLogOption("tsLogDir", tsLogDir); taosReadLogOption("logDir", tsLogDir);
sprintf(fileName, "%s/taos.cfg", configDir); sprintf(fileName, "%s/taos.cfg", configDir);
fp = fopen(fileName, "r"); fp = fopen(fileName, "r");
...@@ -288,9 +288,9 @@ void taosReadGlobalLogCfg() { ...@@ -288,9 +288,9 @@ void taosReadGlobalLogCfg() {
option = value = NULL; option = value = NULL;
olen = vlen = 0; olen = vlen = 0;
taosGetline(&line, &len, fp); taosGetline(&line, &len, fp);
line[len - 1] = 0; line[len - 1] = 0;
paGetToken(line, &option, &olen); paGetToken(line, &option, &olen);
if (olen == 0) continue; if (olen == 0) continue;
option[olen] = 0; option[olen] = 0;
......
...@@ -62,6 +62,7 @@ typedef struct { ...@@ -62,6 +62,7 @@ typedef struct {
pthread_mutex_t logMutex; pthread_mutex_t logMutex;
} SLogObj; } SLogObj;
int32_t tsLogKeepDays = 0;
int32_t tsAsyncLog = 1; int32_t tsAsyncLog = 1;
float tsTotalLogDirGB = 0; float tsTotalLogDirGB = 0;
float tsAvailLogDirGB = 0; float tsAvailLogDirGB = 0;
...@@ -78,6 +79,7 @@ static int32_t taosPushLogBuffer(SLogBuff *tLogBuff, char *msg, int32_t msgLen ...@@ -78,6 +79,7 @@ static int32_t taosPushLogBuffer(SLogBuff *tLogBuff, char *msg, int32_t msgLen
static SLogBuff *taosLogBuffNew(int32_t bufSize); static SLogBuff *taosLogBuffNew(int32_t bufSize);
static void taosCloseLogByFd(int32_t oldFd); static void taosCloseLogByFd(int32_t oldFd);
static int32_t taosOpenLogFile(char *fn, int32_t maxLines, int32_t maxFileNum); static int32_t taosOpenLogFile(char *fn, int32_t maxLines, int32_t maxFileNum);
extern void taosPrintGlobalCfg();
static int32_t taosStartLog() { static int32_t taosStartLog() {
pthread_attr_t threadAttr; pthread_attr_t threadAttr;
...@@ -136,11 +138,24 @@ static void taosUnLockFile(int32_t fd) { ...@@ -136,11 +138,24 @@ static void taosUnLockFile(int32_t fd) {
} }
} }
static void taosKeepOldLog(char *oldName) {
if (tsLogKeepDays <= 0) return;
int64_t fileSec = taosGetTimestampSec();
char fileName[LOG_FILE_NAME_LEN + 20];
snprintf(fileName, LOG_FILE_NAME_LEN + 20, "%s.%" PRId64, tsLogObj.logName, fileSec);
taosRename(oldName, fileName);
taosRemoveOldLogFiles(tsLogDir, tsLogKeepDays);
}
static void *taosThreadToOpenNewFile(void *param) { static void *taosThreadToOpenNewFile(void *param) {
char name[LOG_FILE_NAME_LEN + 20]; char keepName[LOG_FILE_NAME_LEN + 20];
sprintf(keepName, "%s.%d", tsLogObj.logName, tsLogObj.flag);
tsLogObj.flag ^= 1; tsLogObj.flag ^= 1;
tsLogObj.lines = 0; tsLogObj.lines = 0;
char name[LOG_FILE_NAME_LEN + 20];
sprintf(name, "%s.%d", tsLogObj.logName, tsLogObj.flag); sprintf(name, "%s.%d", tsLogObj.logName, tsLogObj.flag);
umask(0); umask(0);
...@@ -150,6 +165,7 @@ static void *taosThreadToOpenNewFile(void *param) { ...@@ -150,6 +165,7 @@ static void *taosThreadToOpenNewFile(void *param) {
uError("open new log file fail! fd:%d reason:%s", fd, strerror(errno)); uError("open new log file fail! fd:%d reason:%s", fd, strerror(errno));
return NULL; return NULL;
} }
taosLockFile(fd); taosLockFile(fd);
(void)lseek(fd, 0, SEEK_SET); (void)lseek(fd, 0, SEEK_SET);
...@@ -157,9 +173,13 @@ static void *taosThreadToOpenNewFile(void *param) { ...@@ -157,9 +173,13 @@ static void *taosThreadToOpenNewFile(void *param) {
tsLogObj.logHandle->fd = fd; tsLogObj.logHandle->fd = fd;
tsLogObj.lines = 0; tsLogObj.lines = 0;
tsLogObj.openInProgress = 0; tsLogObj.openInProgress = 0;
uInfo("new log file is opened!!!");
taosCloseLogByFd(oldFd); taosCloseLogByFd(oldFd);
uInfo(" new log file:%d is opened", tsLogObj.flag);
uInfo("==================================");
taosPrintGlobalCfg();
taosKeepOldLog(keepName);
return NULL; return NULL;
} }
...@@ -264,20 +284,23 @@ static int32_t taosOpenLogFile(char *fn, int32_t maxLines, int32_t maxFileNum) { ...@@ -264,20 +284,23 @@ static int32_t taosOpenLogFile(char *fn, int32_t maxLines, int32_t maxFileNum) {
strcat(name, ".0"); strcat(name, ".0");
} }
if (strlen(fn) < LOG_FILE_NAME_LEN + 50 - 2) {
strcpy(name, fn);
strcat(name, ".1");
}
bool log0Exist = stat(name, &logstat0) >= 0;
bool log1Exist = stat(name, &logstat1) >= 0;
// if none of the log files exist, open 0, if both exists, open the old one // if none of the log files exist, open 0, if both exists, open the old one
if (stat(name, &logstat0) < 0) { if (!log0Exist && !log1Exist) {
tsLogObj.flag = 0;
} else if (!log1Exist) {
tsLogObj.flag = 0; tsLogObj.flag = 0;
} else if (!log0Exist) {
tsLogObj.flag = 1;
} else { } else {
if (strlen(fn) < LOG_FILE_NAME_LEN + 50 - 2) { tsLogObj.flag = (logstat0.st_mtime > logstat1.st_mtime) ? 0 : 1;
strcpy(name, fn);
strcat(name, ".1");
}
if (stat(name, &logstat1) < 0) {
tsLogObj.flag = 1;
} else {
tsLogObj.flag = (logstat0.st_mtime > logstat1.st_mtime) ? 0 : 1;
}
} }
char fileName[LOG_FILE_NAME_LEN + 50] = "\0"; char fileName[LOG_FILE_NAME_LEN + 50] = "\0";
......
...@@ -253,7 +253,7 @@ void taosNotePrint(taosNoteInfo * pNote, const char * const format, ...) ...@@ -253,7 +253,7 @@ void taosNotePrint(taosNoteInfo * pNote, const char * const format, ...)
ptm->tm_min, ptm->tm_sec, (int)timeSecs.tv_usec, taosGetPthreadId()); ptm->tm_min, ptm->tm_sec, (int)timeSecs.tv_usec, taosGetPthreadId());
#else #else
len = sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d %lx ", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, len = sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d %lx ", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min,
ptm->tm_sec, (int)timeSecs.tv_usec, pthread_self()); ptm->tm_sec, (int)timeSecs.tv_usec, (unsigned long int)pthread_self());
#endif #endif
va_start(argpointer, format); va_start(argpointer, format);
len += vsnprintf(buffer + len, MAX_NOTE_LINE_SIZE - len, format, argpointer); len += vsnprintf(buffer + len, MAX_NOTE_LINE_SIZE - len, format, argpointer);
......
...@@ -47,6 +47,15 @@ static void vnodeNotifyRole(void *ahandle, int8_t role); ...@@ -47,6 +47,15 @@ static void vnodeNotifyRole(void *ahandle, int8_t role);
static void vnodeCtrlFlow(void *handle, int32_t mseconds); static void vnodeCtrlFlow(void *handle, int32_t mseconds);
static int vnodeNotifyFileSynced(void *ahandle, uint64_t fversion); static int vnodeNotifyFileSynced(void *ahandle, uint64_t fversion);
#ifndef _SYNC
tsync_h syncStart(const SSyncInfo *info) { return NULL; }
int32_t syncForwardToPeer(tsync_h shandle, void *pHead, void *mhandle, int qtype) { return 0; }
void syncStop(tsync_h shandle) {}
int32_t syncReconfig(tsync_h shandle, const SSyncCfg * cfg) { return 0; }
int syncGetNodesRole(tsync_h shandle, SNodesRole * cfg) { return 0; }
void syncConfirmForward(tsync_h shandle, uint64_t version, int32_t code) {}
#endif
int32_t vnodeInitResources() { int32_t vnodeInitResources() {
vnodeInitWriteFp(); vnodeInitWriteFp();
vnodeInitReadFp(); vnodeInitReadFp();
...@@ -289,12 +298,16 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) { ...@@ -289,12 +298,16 @@ int32_t vnodeOpen(int32_t vnode, char *rootDir) {
syncInfo.notifyFileSynced = vnodeNotifyFileSynced; syncInfo.notifyFileSynced = vnodeNotifyFileSynced;
pVnode->sync = syncStart(&syncInfo); pVnode->sync = syncStart(&syncInfo);
#ifndef _SYNC
pVnode->role = TAOS_SYNC_ROLE_MASTER;
#else
if (pVnode->sync == NULL) { if (pVnode->sync == NULL) {
vError("vgId:%d, failed to open sync module, replica:%d reason:%s", pVnode->vgId, pVnode->syncCfg.replica, vError("vgId:%d, failed to open sync module, replica:%d reason:%s", pVnode->vgId, pVnode->syncCfg.replica,
tstrerror(terrno)); tstrerror(terrno));
vnodeCleanUp(pVnode); vnodeCleanUp(pVnode);
return terrno; return terrno;
} }
#endif
pVnode->qMgmt = qOpenQueryMgmt(pVnode->vgId); pVnode->qMgmt = qOpenQueryMgmt(pVnode->vgId);
if (pVnode->qMgmt == NULL) { if (pVnode->qMgmt == NULL) {
...@@ -369,7 +382,13 @@ void vnodeRelease(void *pVnodeRaw) { ...@@ -369,7 +382,13 @@ void vnodeRelease(void *pVnodeRaw) {
char newDir[TSDB_FILENAME_LEN] = {0}; char newDir[TSDB_FILENAME_LEN] = {0};
sprintf(rootDir, "%s/vnode%d", tsVnodeDir, vgId); sprintf(rootDir, "%s/vnode%d", tsVnodeDir, vgId);
sprintf(newDir, "%s/vnode%d", tsVnodeBakDir, vgId); sprintf(newDir, "%s/vnode%d", tsVnodeBakDir, vgId);
taosRename(rootDir, newDir);
if (0 == tsEnableVnodeBak) {
vInfo("vgId:%d, vnode backup not enabled", pVnode->vgId);
} else {
taosRename(rootDir, newDir);
}
taosRemoveDir(rootDir); taosRemoveDir(rootDir);
dnodeSendStatusMsgToMnode(); dnodeSendStatusMsgToMnode();
} }
...@@ -658,9 +677,13 @@ static int32_t vnodeSaveCfg(SMDCreateVnodeMsg *pVnodeCfg) { ...@@ -658,9 +677,13 @@ static int32_t vnodeSaveCfg(SMDCreateVnodeMsg *pVnodeCfg) {
len += snprintf(content + len, maxLen - len, " \"quorum\": %d,\n", pVnodeCfg->cfg.quorum); len += snprintf(content + len, maxLen - len, " \"quorum\": %d,\n", pVnodeCfg->cfg.quorum);
len += snprintf(content + len, maxLen - len, " \"nodeInfos\": [{\n"); len += snprintf(content + len, maxLen - len, " \"nodeInfos\": [{\n");
vInfo("vgId:%d, save vnode cfg, replica:%d", pVnodeCfg->cfg.vgId, pVnodeCfg->cfg.replications);
for (int32_t i = 0; i < pVnodeCfg->cfg.replications; i++) { for (int32_t i = 0; i < pVnodeCfg->cfg.replications; i++) {
len += snprintf(content + len, maxLen - len, " \"nodeId\": %d,\n", pVnodeCfg->nodes[i].nodeId); len += snprintf(content + len, maxLen - len, " \"nodeId\": %d,\n", pVnodeCfg->nodes[i].nodeId);
len += snprintf(content + len, maxLen - len, " \"nodeEp\": \"%s\"\n", pVnodeCfg->nodes[i].nodeEp); len += snprintf(content + len, maxLen - len, " \"nodeEp\": \"%s\"\n", pVnodeCfg->nodes[i].nodeEp);
vInfo("vgId:%d, save vnode cfg, nodeId:%d nodeEp:%s", pVnodeCfg->cfg.vgId, pVnodeCfg->nodes[i].nodeId,
pVnodeCfg->nodes[i].nodeEp);
if (i < pVnodeCfg->cfg.replications - 1) { if (i < pVnodeCfg->cfg.replications - 1) {
len += snprintf(content + len, maxLen - len, " },{\n"); len += snprintf(content + len, maxLen - len, " },{\n");
......
...@@ -7,6 +7,5 @@ AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC) ...@@ -7,6 +7,5 @@ AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)
IF (TD_LINUX) IF (TD_LINUX)
ADD_LIBRARY(twal ${SRC}) ADD_LIBRARY(twal ${SRC})
TARGET_LINK_LIBRARIES(twal tutil common) TARGET_LINK_LIBRARIES(twal tutil common)
ADD_SUBDIRECTORY(test) ADD_SUBDIRECTORY(test)
ENDIF () ENDIF ()
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<dependency> <dependency>
<groupId>com.taosdata.jdbc</groupId> <groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId> <artifactId>taos-jdbcdriver</artifactId>
<version>2.0.2</version> <version>2.0.4</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<dependency> <dependency>
<groupId>com.taosdata.jdbc</groupId> <groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId> <artifactId>taos-jdbcdriver</artifactId>
<version>2.0.2</version> <version>2.0.4</version>
</dependency> </dependency>
<dependency> <dependency>
...@@ -76,6 +76,24 @@ ...@@ -76,6 +76,24 @@
</dependencies> </dependencies>
<build> <build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
......
package com.taosdata.jdbc.springbootdemo.controller;
import com.taosdata.jdbc.springbootdemo.domain.Rainfall;
import com.taosdata.jdbc.springbootdemo.service.RainStationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/rainstation")
public class RainStationController {
@Autowired
private RainStationService service;
@GetMapping("/init")
public boolean init() {
service.init();
service.createTable();
return true;
}
@PostMapping("/insert")
public int insert(@RequestBody Rainfall rainfall){
return service.insert(rainfall);
}
}
...@@ -16,43 +16,47 @@ public class WeatherController { ...@@ -16,43 +16,47 @@ public class WeatherController {
/** /**
* create database and table * create database and table
*
* @return * @return
*/ */
@GetMapping("/init") @GetMapping("/init")
public boolean init(){ public boolean init() {
return weatherService.init(); return weatherService.init();
} }
/** /**
* Pagination Query * Pagination Query
*
* @param limit * @param limit
* @param offset * @param offset
* @return * @return
*/ */
@GetMapping("/{limit}/{offset}") @GetMapping("/{limit}/{offset}")
public List<Weather> queryWeather(@PathVariable Long limit, @PathVariable Long offset){ public List<Weather> queryWeather(@PathVariable Long limit, @PathVariable Long offset) {
return weatherService.query(limit, offset); return weatherService.query(limit, offset);
} }
/** /**
* upload single weather info * upload single weather info
*
* @param temperature * @param temperature
* @param humidity * @param humidity
* @return * @return
*/ */
@PostMapping("/{temperature}/{humidity}") @PostMapping("/{temperature}/{humidity}")
public int saveWeather(@PathVariable int temperature, @PathVariable float humidity){ public int saveWeather(@PathVariable int temperature, @PathVariable float humidity) {
return weatherService.save(temperature, humidity); return weatherService.save(temperature, humidity);
} }
/** /**
* upload multi weather info * upload multi weather info
*
* @param weatherList * @param weatherList
* @return * @return
*/ */
@PostMapping("/batch") @PostMapping("/batch")
public int batchSaveWeather(@RequestBody List<Weather> weatherList){ public int batchSaveWeather(@RequestBody List<Weather> weatherList) {
return weatherService.save(weatherList); return weatherService.save(weatherList);
} }
......
package com.taosdata.jdbc.springbootdemo.dao;
import java.util.Map;
public interface DatabaseMapper {
int createDatabase(String dbname);
int dropDatabase(String dbname);
int creatDatabaseWithParameters(Map<String,String> map);
int useDatabase(String dbname);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.taosdata.jdbc.springbootdemo.dao.DatabaseMapper">
<update id="createDatabase" parameterType="java.lang.String">
create database if not exists ${dbname}
</update>
<update id="dropDatabase" parameterType="java.lang.String">
DROP database if exists ${dbname}
</update>
<update id="creatDatabaseWithParameters" parameterType="map">
CREATE database if not EXISTS ${dbname}
<if test="keep != null">
KEEP ${keep}
</if>
<if test="days != null">
DAYS ${days}
</if>
<if test="replica != null">
REPLICA ${replica}
</if>
<if test="cache != null">
cache ${cache}
</if>
<if test="blocks != null">
blocks ${blocks}
</if>
<if test="minrows != null">
minrows ${minrows}
</if>
<if test="maxrows != null">
maxrows ${maxrows}
</if>
</update>
<update id="useDatabase" parameterType="java.lang.String">
use ${dbname}
</update>
</mapper>
\ No newline at end of file
package com.taosdata.jdbc.springbootdemo.dao;
import java.util.Map;
public interface RainfallMapper {
int save(Map<String, Object> map);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.taosdata.jdbc.springbootdemo.dao.RainfallMapper">
<insert id="save" parameterType="map">
INSERT INTO ${table} using ${dbname}.${stable} tags(#{values.station_code}, #{values.station_name}) (ts, name, code, rainfall) values (#{values.ts}, #{values.name}, #{values.code}, #{values.rainfall})
</insert>
</mapper>
\ No newline at end of file
package com.taosdata.jdbc.springbootdemo.dao;
import com.taosdata.jdbc.springbootdemo.domain.TableMetadata;
public interface TableMapper {
boolean createSTable(TableMetadata tableMetadata);
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.taosdata.jdbc.springbootdemo.dao.TableMapper">
<update id="createSTable" parameterType="com.taosdata.jdbc.springbootdemo.domain.TableMetadata">
create table if not exists ${dbname}.${tablename}
<foreach collection="fields" item="field" index="index" open="(" close=")" separator=",">
${field.name} ${field.type}
</foreach>
TAGS
<foreach collection="tags" item="tag" index="index" open="(" close=")" separator=",">
${tag.name} ${tag.type}
</foreach>
</update>
<update id="dropTable" parameterType="java.lang.String">
drop ${tablename}
</update>
</mapper>
\ No newline at end of file
package com.taosdata.jdbc.springbootdemo.domain;
public class FieldMetadata {
private String name;
private String type;
public FieldMetadata(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package com.taosdata.jdbc.springbootdemo.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.sql.Timestamp;
public class Rainfall {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS",timezone = "GMT+8")
private Timestamp ts;
private String name;
private String code;
private float rainfall;
private String station_code;
private String station_name;
public Timestamp getTs() {
return ts;
}
public void setTs(Timestamp ts) {
this.ts = ts;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public float getRainfall() {
return rainfall;
}
public void setRainfall(float rainfall) {
this.rainfall = rainfall;
}
public String getStation_code() {
return station_code;
}
public void setStation_code(String station_code) {
this.station_code = station_code;
}
public String getStation_name() {
return station_name;
}
public void setStation_name(String station_name) {
this.station_name = station_name;
}
}
package com.taosdata.jdbc.springbootdemo.domain;
import java.util.List;
public class TableMetadata {
private String dbname;
private String tablename;
private List<FieldMetadata> fields;
private List<TagMetadata> tags;
public String getDbname() {
return dbname;
}
public void setDbname(String dbname) {
this.dbname = dbname;
}
public String getTablename() {
return tablename;
}
public void setTablename(String tablename) {
this.tablename = tablename;
}
public List<FieldMetadata> getFields() {
return fields;
}
public void setFields(List<FieldMetadata> fields) {
this.fields = fields;
}
public List<TagMetadata> getTags() {
return tags;
}
public void setTags(List<TagMetadata> tags) {
this.tags = tags;
}
}
package com.taosdata.jdbc.springbootdemo.domain;
public class TagMetadata {
private String name;
private String type;
public TagMetadata(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package com.taosdata.jdbc.springbootdemo.domain; package com.taosdata.jdbc.springbootdemo.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.sql.Timestamp; import java.sql.Timestamp;
public class Weather { public class Weather {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS",timezone = "GMT+8")
private Timestamp ts; private Timestamp ts;
private int temperature; private int temperature;
......
package com.taosdata.jdbc.springbootdemo.service;
import com.taosdata.jdbc.springbootdemo.dao.DatabaseMapper;
import com.taosdata.jdbc.springbootdemo.dao.RainfallMapper;
import com.taosdata.jdbc.springbootdemo.dao.TableMapper;
import com.taosdata.jdbc.springbootdemo.domain.FieldMetadata;
import com.taosdata.jdbc.springbootdemo.domain.Rainfall;
import com.taosdata.jdbc.springbootdemo.domain.TableMetadata;
import com.taosdata.jdbc.springbootdemo.domain.TagMetadata;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class RainStationService {
@Autowired
private DatabaseMapper databaseMapper;
@Autowired
private TableMapper tableMapper;
@Autowired
private RainfallMapper rainfallMapper;
public boolean init() {
databaseMapper.dropDatabase("rainstation");
Map<String, String> map = new HashMap<>();
map.put("dbname", "rainstation");
map.put("keep", "36500");
map.put("days", "30");
map.put("blocks", "4");
databaseMapper.creatDatabaseWithParameters(map);
databaseMapper.useDatabase("rainstation");
return true;
}
public boolean createTable() {
TableMetadata tableMetadata = new TableMetadata();
tableMetadata.setDbname("rainstation");
tableMetadata.setTablename("monitoring");
List<FieldMetadata> fields = new ArrayList<>();
fields.add(new FieldMetadata("ts", "timestamp"));
fields.add(new FieldMetadata("name", "NCHAR(10)"));
fields.add(new FieldMetadata("code", " BINARY(8)"));
fields.add(new FieldMetadata("rainfall", "float"));
tableMetadata.setFields(fields);
List<TagMetadata> tags = new ArrayList<>();
tags.add(new TagMetadata("station_code", "BINARY(8)"));
tags.add(new TagMetadata("station_name", "NCHAR(10)"));
tableMetadata.setTags(tags);
tableMapper.createSTable(tableMetadata);
return true;
}
public int insert(Rainfall rainfall) {
Map<String, Object> map = new HashMap<>();
map.put("dbname", "rainstation");
map.put("table", "S_53646");
map.put("stable", "monitoring");
map.put("values", rainfall);
return rainfallMapper.save(map);
}
}
\ No newline at end of file
...@@ -14,10 +14,8 @@ public class WeatherService { ...@@ -14,10 +14,8 @@ public class WeatherService {
private WeatherMapper weatherMapper; private WeatherMapper weatherMapper;
public boolean init() { public boolean init() {
weatherMapper.createDB(); weatherMapper.createDB();
weatherMapper.createTable(); weatherMapper.createTable();
return true; return true;
} }
......
# datasource config # datasource config
spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver
spring.datasource.url=jdbc:TAOS://127.0.0.1:6030/log spring.datasource.url=jdbc:TAOS://localhost:6030/log
spring.datasource.username=root spring.datasource.username=root
spring.datasource.password=taosdata spring.datasource.password=taosdata
......
...@@ -26,7 +26,7 @@ var c1 = conn.cursor(); ...@@ -26,7 +26,7 @@ var c1 = conn.cursor();
// c1.execute(query) will execute the query // c1.execute(query) will execute the query
// Let's create a database named db // Let's create a database named db
try { try {
c1.execute('create database db;'); c1.execute('create database if not exists db;');
} }
catch(err) { catch(err) {
conn.close(); conn.close();
......
...@@ -22,8 +22,9 @@ var c1 = conn.cursor(); ...@@ -22,8 +22,9 @@ var c1 = conn.cursor();
// c1.query(query) will return a TaosQuery object, of which then we can execute. The execute function then returns a promise // c1.query(query) will return a TaosQuery object, of which then we can execute. The execute function then returns a promise
// Let's create a database named db // Let's create a database named db
try { try {
var query = c1.query('create database db;'); c1.execute('create database if not exists db;');
query.execute(); //var query = c1.query('create database if not exists db;');
//query.execute();
} }
catch(err) { catch(err) {
conn.close(); conn.close();
...@@ -71,6 +72,28 @@ catch (err) { ...@@ -71,6 +72,28 @@ catch (err) {
throw err; throw err;
} }
Date.prototype.Format = function(fmt){
var o = {
'M+': this.getMonth() + 1,
'd+': this.getDate(),
'H+': this.getHours(),
'm+': this.getMinutes(),
's+': this.getSeconds(),
'S+': this.getMilliseconds()
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(String(o[k]).length)));
}
}
return fmt;
}
// Let's try to insert some random generated data to test with // Let's try to insert some random generated data to test with
// We will use the bind function of the TaosQuery object to easily bind values to question marks in the query // We will use the bind function of the TaosQuery object to easily bind values to question marks in the query
// For Timestamps, a normal Datetime object or TaosTimestamp or milliseconds can be passed in through the bind function // For Timestamps, a normal Datetime object or TaosTimestamp or milliseconds can be passed in through the bind function
...@@ -79,17 +102,21 @@ let interval = 1000; ...@@ -79,17 +102,21 @@ let interval = 1000;
try { try {
for (let i = 0; i < 1000; i++) { for (let i = 0; i < 1000; i++) {
stime.setMilliseconds(stime.getMilliseconds() + interval); stime.setMilliseconds(stime.getMilliseconds() + interval);
//console.log(stime.Format('yyyy-MM-dd HH:mm:ss.SSS'));
let insertData = [stime, let insertData = [stime,
parseInt(Math.random()*100), parseInt(Math.random()*100),
parseInt(Math.random()*300), parseInt(Math.random()*300),
parseFloat(Math.random()*10 + 30), parseFloat(Math.random()*10 + 30),
"\"random note!\""]; "Note"];
//c1.execute('insert into db.weather values(' + insertData.join(',') + ' );'); //c1.execute('insert into db.weather values(' + insertData.join(',') + ' );');
var query = c1.query('insert into db.weather values(?, ?, ?, ?, ?);').bind(insertData);
query.execute(); //var query = c1.query('insert into db.weather values(?, ?, ?, ?, ?);').bind(insertData);
//query.execute();
c1.execute('insert into db.weather values(\"'+stime.Format('yyyy-MM-dd HH:mm:ss.SSS')+'\",'+parseInt(Math.random() * 100)+','+parseInt(Math.random() * 300)+','+parseFloat(Math.random()*10 + 30)+',"Note");');
} }
} }catch (err) {
catch (err) {
conn.close(); conn.close();
throw err; throw err;
} }
...@@ -98,7 +125,8 @@ catch (err) { ...@@ -98,7 +125,8 @@ catch (err) {
var retrievedData; var retrievedData;
try { try {
c1.query('select * from db.weather limit 5 offset 100;', true).then(function(result){ c1.query('select * from db.weather limit 5 offset 100;', true).then(function(result){
result.pretty(); //result.pretty();
console.log('=========>'+JSON.stringify(result));
// Neat! // Neat!
}); });
......
...@@ -74,21 +74,36 @@ function runTest { ...@@ -74,21 +74,36 @@ function runTest {
runGeneralCaseOneByOne jenkins/basic.txt runGeneralCaseOneByOne jenkins/basic.txt
totalSuccess=`grep 'success' $TDENGINE_COVERAGE_REPORT | wc -l` sed -i "1i\SIM cases test result" $TDENGINE_COVERAGE_REPORT
totalSuccess=`grep 'success' $TDENGINE_COVERAGE_REPORT | wc -l`
if [ "$totalSuccess" -gt "0" ]; then if [ "$totalSuccess" -gt "0" ]; then
echo -e "\n${GREEN} ### Total $totalSuccess coverage test case(s) succeed! ### ${NC}" | tee -a $TDENGINE_COVERAGE_REPORT sed -i -e "2i\ ### Total $totalSuccess SIM test case(s) succeed! ###" $TDENGINE_COVERAGE_REPORT
fi fi
totalFailed=`grep 'failed\|fault' $TDENGINE_COVERAGE_REPORT | wc -l` totalFailed=`grep 'failed\|fault' $TDENGINE_COVERAGE_REPORT | wc -l`
if [ "$totalFailed" -ne "0" ]; then if [ "$totalFailed" -ne "0" ]; then
echo -e "${RED} ### Total $totalFailed coverage test case(s) failed! ### ${NC}\n" | tee -a $TDENGINE_COVERAGE_REPORT sed -i '3i\### Total $totalFailed SIM test case(s) failed! ###' $TDENGINE_COVERAGE_REPORT
# exit $totalPyFailed else
sed -i '3i\\n' $TDENGINE_COVERAGE_REPORT
fi fi
cd $TDENGINE_DIR/tests cd $TDENGINE_DIR/tests
rm -rf ../sim rm -rf ../sim
./test-all.sh full python | tee -a $TDENGINE_COVERAGE_REPORT ./test-all.sh full python | tee -a $TDENGINE_COVERAGE_REPORT
sed -i "4i\Python cases test result" $TDENGINE_COVERAGE_REPORT
totalPySuccess=`grep 'python case(s) succeed!' $TDENGINE_COVERAGE_REPORT | awk '{print $4}'`
if [ "$totalPySuccess" -gt "0" ]; then
sed -i -e "5i\ ### Total $totalPySuccess Python test case(s) succeed! ###" $TDENGINE_COVERAGE_REPORT
fi
totalPyFailed=`grep 'python case(s) failed!' $TDENGINE_COVERAGE_REPORT | awk '{print $4}'`
if [ -z $totalPyFailed ]; then
sed -i '6i\\n' $TDENGINE_COVERAGE_REPORT
else
sed -i '6i\### Total $totalPyFailed Python test case(s) failed! ###' $TDENGINE_COVERAGE_REPORT
fi
# Test Connector # Test Connector
stopTaosd stopTaosd
......
#!/bin/bash #!/bin/bash
WORK_DIR=/mnt/root WORK_DIR=/mnt/root
TDENGINE_DIR=/root/TDengine
walLevel=`grep "^walLevel" /etc/taos/taos.cfg | awk '{print $2}'` walLevel=`grep "^walLevel" /etc/taos/taos.cfg | awk '{print $2}'`
if [[ "$walLevel" -eq "2" ]]; then if [[ "$walLevel" -eq "2" ]]; then
...@@ -71,9 +72,17 @@ function runCreateTableThenInsert { ...@@ -71,9 +72,17 @@ function runCreateTableThenInsert {
restartTaosd restartTaosd
/usr/bin/time -f "Total: %e" -o totaltime.out bash -c "yes | taosdemo 2>&1 | tee -a taosdemo-$walPostfix-$today.log" /usr/bin/time -f "Total: %e" -o totaltime.out bash -c "yes | taosdemo 2>&1 | tee -a taosdemo-$walPostfix-$today.log"
demoTableAndInsert=`grep "Total:" totaltime.out|awk '{print $2}'` demoTableAndInsert=`grep "Total:" totaltime.out|awk '{print $2}'`
demoRPS=`grep "records\/second" taosdemo-$walPostfix-$today.log | tail -n1 | awk '{print $13}'` demoRPS=`grep "records\/second" taosdemo-$walPostfix-$today.log | tail -n1 | awk '{print $13}'`
} }
function queryPerformance {
echoInfo "Restart Taosd"
restartTaosd
cd $TDENGINE_DIR/tests/pytest
python3 query/queryPerformance.py
}
function generateTaosdemoPlot { function generateTaosdemoPlot {
echo "${today} $walPostfix, demoCreateTableOnly: ${demoCreateTableOnly}, demoDeleteTableOnly: ${demoDeleteTableOnly}, demoTableAndInsert: ${demoTableAndInsert}" | tee -a taosdemo-$today.log echo "${today} $walPostfix, demoCreateTableOnly: ${demoCreateTableOnly}, demoDeleteTableOnly: ${demoDeleteTableOnly}, demoTableAndInsert: ${demoTableAndInsert}" | tee -a taosdemo-$today.log
...@@ -101,13 +110,16 @@ today=`date +"%Y%m%d"` ...@@ -101,13 +110,16 @@ today=`date +"%Y%m%d"`
cd $WORK_DIR cd $WORK_DIR
echoInfo "Test Create Table Only " echoInfo "Test Create Table Only "
runCreateTableOnly runCreateTableOnly
echoInfo "Test Create Table then Insert data" echoInfo "Test Delete Table Only"
runDeleteTableOnly runDeleteTableOnly
echoInfo "Test Create Table then Insert data" echoInfo "Test Create Table then Insert data"
runCreateTableThenInsert runCreateTableThenInsert
echoInfo "Query Performance for 10 Billion Records"
queryPerformance
echoInfo "Generate plot for taosdemo" echoInfo "Generate plot for taosdemo"
generateTaosdemoPlot generateTaosdemoPlot
tar czf $WORK_DIR/taos-log-taosdemo-$today.tar.gz $logDir/* tar czf $WORK_DIR/taos-log-taosdemo-$today.tar.gz $logDir/*
echoInfo "End of TaosDemo Test" | tee -a $WORK_DIR/cron.log echoInfo "End of TaosDemo Test" | tee -a $WORK_DIR/cron.log
...@@ -49,4 +49,4 @@ export PYTHONPATH=$(pwd)/../../src/connector/python/linux/python3 ...@@ -49,4 +49,4 @@ export PYTHONPATH=$(pwd)/../../src/connector/python/linux/python3
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIB_DIR export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIB_DIR
# Now we are all let, and let's see if we can find a crash. Note we pass all params # Now we are all let, and let's see if we can find a crash. Note we pass all params
python3 ./crash_gen.py $@ python3.8 ./crash_gen.py $@
###################################################################
# 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()
tdSql.execute('create table xcxlog (ts timestamp, user_id int, path BINARY(40),scene int) tags(appid bigint, adzone_id int,ip bigint,session_id bigint)')
tdSql.error("insert into d1000004(user_id,path,scene,ts) using xcxlog tags(1000004,145,97160) values (97160,'pagex/goods/taoke',1086,now)")
tdSql.execute("insert into d1000004_145(user_id,path,scene,ts) using xcxlog(appid,adzone_id,session_id,ip) tags(1000004,145,97160,1717171445) values (97160,'pagex/goods/taoke',1086,now)")
tdSql.query("show tables")
tdSql.checkRows(1)
tdSql.checkData(0, 0, 'd1000004_145')
tdSql.query("select * from xcxlog")
tdSql.checkRows(1)
tdSql.checkData(0, 4, 1000004)
tdSql.checkData(0, 5, 145)
tdSql.checkData(0, 6, 1717171445)
tdSql.checkData(0, 7, 97160)
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())
###################################################################
# 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
class TDTestCase:
def init(self, conn, logSql):
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor(), logSql)
self.ts = 1537146000000
def run(self):
tdSql.prepare()
tdSql.execute(
"create table stb(ts timestamp,i int) tags (p_id nchar(20));")
tdSql.execute(
"insert into tb using stb tags('11231') values (%d, %d) (%d, %d) (%d, %d) (%d, %d)"
% (self.ts, 12, self.ts + 1, 15, self.ts + 2, 15, self.ts + 3, 12))
tdSql.query(''' select last(ts) p_time,i from stb where p_id='11231' and ts>=%d and ts <=%d
group by i order by time desc limit 100 ''' % (self.ts, self.ts + 4))
tdSql.checkRows(2)
tdSql.checkData(0, 0, "2018-09-17 09:00:00.003000")
tdSql.checkData(1, 0, "2018-09-17 09:00:00.002000")
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
tdCases.addLinux(__file__, TDTestCase())
###################################################################
# 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 os
import taos
import time
class taosdemoQueryPerformace:
def initConnection(self):
self.host = "127.0.0.1"
self.user = "root"
self.password = "taosdata"
self.config = "/etc/taos"
self.conn = taos.connect(
self.host,
self.user,
self.password,
self.config)
def query(self):
cursor = self.conn.cursor()
cursor.execute("use test")
totalTime = 0
for i in range(100):
startTime = time.time()
cursor.execute("select count(*) from test.meters")
totalTime += time.time() - startTime
print("query time for: select count(*) from test.meters %f seconds" % (totalTime / 100))
totalTime = 0
for i in range(100):
startTime = time.time()
cursor.execute("select avg(f1), max(f2), min(f3) from test.meters")
totalTime += time.time() - startTime
print("query time for: select avg(f1), max(f2), min(f3) from test.meters %f seconds" % (totalTime / 100))
totalTime = 0
for i in range(100):
startTime = time.time()
cursor.execute("select count(*) from test.meters where loc='beijing'")
totalTime += time.time() - startTime
print("query time for: select count(*) from test.meters where loc='beijing' %f seconds" % (totalTime / 100))
totalTime = 0
for i in range(100):
startTime = time.time()
cursor.execute("select avg(f1), max(f2), min(f3) from test.meters where areaid=10")
totalTime += time.time() - startTime
print("query time for: select avg(f1), max(f2), min(f3) from test.meters where areaid=10 %f seconds" % (totalTime / 100))
totalTime = 0
for i in range(100):
startTime = time.time()
cursor.execute("select avg(f1), max(f2), min(f3) from test.t10 interval(10s)")
totalTime += time.time() - startTime
print("query time for: select avg(f1), max(f2), min(f3) from test.t10 interval(10s) %f seconds" % (totalTime / 100))
totalTime = 0
for i in range(100):
startTime = time.time()
cursor.execute("select last_row(*) from meters")
totalTime += time.time() - startTime
print("query time for: select last_row(*) from meters %f seconds" % (totalTime / 100))
if __name__ == '__main__':
perftest = taosdemoQueryPerformace()
perftest.initConnection()
perftest.query()
\ No newline at end of file
...@@ -122,8 +122,8 @@ class TDSql: ...@@ -122,8 +122,8 @@ class TDSql:
return self.cursor.istype(col, dataType) return self.cursor.istype(col, dataType)
def checkData(self, row, col, data): def checkData(self, row, col, data):
self.checkRowCol(row, col) self.checkRowCol(row, col)
if self.queryResult[row][col] != data: if str(self.queryResult[row][col]) != str(data):
if isinstance(data, float) and abs(self.queryResult[row][col] - data) <= 0.000001: if isinstance(data, float) and abs(self.queryResult[row][col] - data) <= 0.000001:
tdLog.info("sql:%s, row:%d col:%d data:%f == expect:%f" % tdLog.info("sql:%s, row:%d col:%d data:%f == expect:%f" %
(self.sql, row, col, self.queryResult[row][col], data)) (self.sql, row, col, self.queryResult[row][col], data))
......
...@@ -52,6 +52,12 @@ if $data00 != $rowNum then ...@@ -52,6 +52,12 @@ if $data00 != $rowNum then
return -1 return -1
endi endi
sql select count(1) from $tb
print ===> select count(1) from $tb => $data00
if $data00 != $rowNum then
return -1
endi
sql select count(tbcol) from $tb sql select count(tbcol) from $tb
print ===> $data00 print ===> $data00
if $data00 != $rowNum then if $data00 != $rowNum then
...@@ -102,13 +108,20 @@ if $data00 != $totalNum then ...@@ -102,13 +108,20 @@ if $data00 != $totalNum then
return -1 return -1
endi endi
print =============== step8
sql select count(1) from $mt
print ===> $data00
if $data00 != $totalNum then
return -1
endi
sql select count(tbcol) from $mt sql select count(tbcol) from $mt
print ===> $data00 print ===> $data00
if $data00 != $totalNum then if $data00 != $totalNum then
return -1 return -1
endi endi
print =============== step8 print =============== step10
sql select count(tbcol) as c from $mt where ts < now + 4m sql select count(tbcol) as c from $mt where ts < now + 4m
print ===> $data00 print ===> $data00
if $data00 != 50 then if $data00 != 50 then
...@@ -171,4 +184,4 @@ if $rows != 0 then ...@@ -171,4 +184,4 @@ if $rows != 0 then
return -1 return -1
endi endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 2
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 1
system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 4
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 100000
system sh/cfg.sh -n dnode1 -c http -v 1
system sh/cfg.sh -n dnode1 -c mqtt -v 1
system sh/exec.sh -n dnode1 -s start
sleep 3000
sql connect
sql create database mqttdb;
sql create table mqttdb.devices(ts timestamp, value double) tags(name binary(32), model binary(32), serial binary(16), param binary(16), unit binary(16));
sleep 1000
system sh/exec.sh -n dnode1 -s stop -x SIGINT
...@@ -7,11 +7,10 @@ system sh/exec.sh -n dnode1 -s start ...@@ -7,11 +7,10 @@ system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
print ============================ dnode1 start
print ============= create database
sql create database db cache 2 blocks 4 days 10 keep 20 minRows 300 maxRows 400 ctime 120 precision 'ms' comp 2 wal 1 replica 1 sql create database db cache 2 blocks 4 days 10 keep 20 minRows 300 maxRows 400 ctime 120 precision 'ms' comp 2 wal 1 replica 1
sql show databases sql show databases
print $data00 $data01 $data02 $data03 $data04 $data05 $data06 $data07 $data08 $data09
if $data00 != db then if $data00 != db then
return -1 return -1
endi endi
...@@ -37,27 +36,240 @@ if $data09 != 4 then ...@@ -37,27 +36,240 @@ if $data09 != 4 then
return -1 return -1
endi endi
print =============== step2 print ============== step name
system sh/exec.sh -n dnode1 -s stop -x SIGINT sql_error alter database db name d1
return sql_error alter database db name d2
sql_error alter database db cache 256
sql_error alter database db blocks 1 print ============== step ntables
sql_error alter database db days 10 sql_error alter database db ntables -1
sql_error alter database db keep 10 sql_error alter database db ntables 0
sql_error alter database db minRows 350 sql_error alter database db ntables 1
sql_error alter database db minRows 550 sql_error alter database db ntables 10
sql_error alter database db ctime 5000
sql_error alter database db precision "us" print ============== step vgroups
sql_error alter database db comp 3 sql_error alter database db vgroups -1
sql_error alter database db wal 1 sql_error alter database db vgroups 0
sql_error alter database db vgroups 1
sql_error alter database db vgroups 10
print ============== step replica
sql_error alter database db replica 2 sql_error alter database db replica 2
sql_error alter database db replica 3
sql_error alter database db replica 0
sql alter database db replica 1
sql show databases
print replica $data4_db
if $data4_db != 1 then
return -1
endi
print ============== step3 print ============== step quorum
sql alter database db comp 1 sql show databases
sql alter database db blocks 40 print quorum $data5_db
if $data5_db != 1 then
return -1
endi
sql alter database db quorum 1
sql show databases
print quorum $data5_db
if $data5_db != 1 then
return -1
endi
sql alter database db quorum 2
sql show databases
print quorum $data5_db
if $data5_db != 2 then
return -1
endi
sql alter database db quorum 3
sql show databases
print quorum $data5_db
if $data5_db != 3 then
return -1
endi
sql alter database db quorum 3
sql alter database db quorum 2
sql alter database db quorum 1
sql_error alter database db quorum 0
sql_error alter database db quorum 4
sql_error alter database db quorum 5
sql_error alter database db quorum -1
print ============== step days
sql_error alter database db days 0
sql_error alter database db days 1
sql_error alter database db days 2
sql_error alter database db days 10
sql_error alter database db days 50
sql_error alter database db days 100
print ============== step keep
sql show databases
print keep $data7_db
if $data7_db != 20,20,20 then
return -1
endi
sql alter database db keep 10
sql show databases
print keep $data7_db
if $data7_db != 20,20,10 then
return -1
endi
sql alter database db keep 20
sql show databases
print keep $data7_db
if $data7_db != 20,20,20 then
return -1
endi
sql alter database db keep 30
sql show databases
print keep $data7_db
if $data7_db != 20,20,30 then
return -1
endi
sql alter database db keep 40
sql alter database db keep 30 sql alter database db keep 30
sql alter database db keep 20
sql alter database db keep 10
sql_error alter database db keep 9
sql_error alter database db keep 1
sql alter database db keep 0
sql alter database db keep -1
sql_error alter database db keep 365001
print ============== step cache
sql_error alter database db cache 60
sql_error alter database db cache 50
sql_error alter database db cache 20
sql_error alter database db cache 3
sql_error alter database db cache 129
sql_error alter database db cache 300
sql_error alter database db cache 0
sql_error alter database db cache -1
print ============== step blocks
sql show databases
print blocks $data9_db
if $data9_db != 4 then
return -1
endi
sql alter database db blocks 10
sql show databases
print blocks $data9_db
if $data9_db != 10 then
return -1
endi
sql alter database db blocks 20
sql show databases
print blocks $data9_db
if $data9_db != 20 then
return -1
endi
sql alter database db blocks 30
sql show databases
print blocks $data9_db
if $data9_db != 30 then
return -1
endi
sql alter database db blocks 40
sql alter database db blocks 30
sql alter database db blocks 20
sql alter database db blocks 10
sql_error alter database db blocks 2
sql_error alter database db blocks 1
sql alter database db blocks 0
sql_error alter database db blocks -1
sql_error alter database db blocks 10001
print ============== step minrows
sql_error alter database db minrows 1
sql_error alter database db minrows 100
sql_error alter database db minrows 1000
print ============== step maxrows
sql_error alter database db maxrows 1
sql_error alter database db maxrows 100
sql_error alter database db maxrows 1000
print ============== step wallevel
sql show databases
print wallevel $data12_db
if $data12_db != 1 then
return -1
endi
sql alter database db wal 1
sql show databases
print wal $data12_db
if $data12_db != 1 then
return -1
endi
sql_error alter database db wal 2
sql_error alter database db wal 0
sql_error alter database db wal 3
sql_error alter database db wal 4
sql_error alter database db wal -1
sql_error alter database db wal 1000
print ============== step fsync
sql_error alter database db fsync 2
sql_error alter database db fsync 3
sql_error alter database db fsync 4
sql_error alter database db fsync -1
sql_error alter database db fsync 1000
print ============== step comp
sql show databases
print comp $data14_db
if $data14_db != 2 then
return -1
endi
sql alter database db comp 1
sql show databases
print comp $data14_db
if $data14_db != 1 then
return -1
endi
sql alter database db comp 2
sql show databases
print comp $data14_db
if $data14_db != 2 then
return -1
endi
sql alter database db comp 0
sql show databases
print comp $data14_db
if $data14_db != 0 then
return -1
endi
sql_error alter database db comp 3
sql_error alter database db comp 4
sql_error alter database db comp 5
sql_error alter database db comp -1
print ============== step precision
sql_error alter database db prec 'us'
print ============== step status
sql_error alter database db status 'delete'
#system sh/exec.sh -n dnode1 -s stop -x SIGINT system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file \ No newline at end of file
...@@ -50,7 +50,7 @@ $tbPrefix = t ...@@ -50,7 +50,7 @@ $tbPrefix = t
$i = 0 $i = 0
while $i < 10 while $i < 10
$db = db . $i $db = db . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table st (ts timestamp, i int) tags(j int); sql create table st (ts timestamp, i int) tags(j int);
......
...@@ -8,7 +8,7 @@ sql connect ...@@ -8,7 +8,7 @@ sql connect
print ======== step1 print ======== step1
sql create database db maxTables 4; sql create database db;
sql use db sql use db
$tbPrefix = t $tbPrefix = t
......
...@@ -15,7 +15,7 @@ sql connect ...@@ -15,7 +15,7 @@ sql connect
sql create dnode $hostname2 sql create dnode $hostname2
sleep 2000 sleep 2000
sql create database db maxTables 4 sql create database db
sql use db sql use db
print ========== step1 print ========== step1
......
...@@ -19,7 +19,7 @@ $stb = stb ...@@ -19,7 +19,7 @@ $stb = stb
sql drop database $db -x step1 sql drop database $db -x step1
step1: step1:
sql create database $db maxtables 10 ctime 30 sql create database $db ctime 30
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int) tags(t1 int) sql create table $stb (ts timestamp, c1 int) tags(t1 int)
......
system sh/stop_dnodes.sh system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 system sh/deploy.sh -n dnode1 -i 1
system sh/cfg.sh -n dnode1 -c walLevel -v 1 system sh/cfg.sh -n dnode1 -c walLevel -v 1
system sh/cfg.sh -n dnode1 -c maxTablesPerVnode -v 1
system sh/cfg.sh -n dnode1 -c ctime -v 30 system sh/cfg.sh -n dnode1 -c ctime -v 30
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
...@@ -21,7 +22,7 @@ $stb = $stbPrefix . $i ...@@ -21,7 +22,7 @@ $stb = $stbPrefix . $i
sql drop database $db -x step1 sql drop database $db -x step1
step1: step1:
sql create database $db maxrows 200 cache 2 maxTables 4 sql create database $db maxrows 200 cache 2
print ====== create tables print ====== create tables
sql use $db sql use $db
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxTablesperVnode -v 100
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -23,7 +24,7 @@ $stb = $stbPrefix . $i ...@@ -23,7 +24,7 @@ $stb = $stbPrefix . $i
sql drop database $db -x step1 sql drop database $db -x step1
step1: step1:
sql create database $db maxrows 255 maxtables 100 ctime 3600 sql create database $db maxrows 255 ctime 3600
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int)
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxTablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -22,7 +23,7 @@ $stb = $stbPrefix . $i ...@@ -22,7 +23,7 @@ $stb = $stbPrefix . $i
sql drop database $db -x step1 sql drop database $db -x step1
step1: step1:
sql create database $db maxrows 400 cache 1 maxTables 4 sql create database $db maxrows 400 cache 1
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int)
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 1000 sleep 1000
sql connect sql connect
...@@ -28,7 +29,7 @@ $tstart = 100000 ...@@ -28,7 +29,7 @@ $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exits $db -x step1
step1: step1:
sql create database if not exists $db maxTables 4 keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12))
......
...@@ -4,6 +4,8 @@ system sh/deploy.sh -n dnode1 -i 1 ...@@ -4,6 +4,8 @@ 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c debugFlag -v 135 system sh/cfg.sh -n dnode1 -c debugFlag -v 135
system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135 system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 1000 sleep 1000
sql connect sql connect
...@@ -24,7 +26,7 @@ $tstart = 100000 ...@@ -24,7 +26,7 @@ $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exits $db -x step1
step1: step1:
sql create database if not exists $db maxTables 4 keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12))
......
...@@ -2,6 +2,8 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,8 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sql connect sql connect
sleep 1000 sleep 1000
...@@ -22,7 +24,7 @@ $tstart = 100000 ...@@ -22,7 +24,7 @@ $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exits $db -x step1
step1: step1:
sql create database if not exists $db maxTables 4 keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12))
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -21,7 +22,7 @@ $stb = $stbPrefix . $i ...@@ -21,7 +22,7 @@ $stb = $stbPrefix . $i
sql drop database $db -x step1 sql drop database $db -x step1
step1: step1:
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int)
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
...@@ -22,7 +23,7 @@ sql drop database if exists $db ...@@ -22,7 +23,7 @@ sql drop database if exists $db
$paramRows = 200 $paramRows = 200
$rowNum = $paramRows * 4 $rowNum = $paramRows * 4
$rowNum = $rowNum / 5 $rowNum = $rowNum / 5
sql create database $db maxrows $paramRows maxTables 4 sql create database $db maxrows $paramRows
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int)
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -22,7 +23,7 @@ $tstart = 100000 ...@@ -22,7 +23,7 @@ $tstart = 100000
sql drop database if exits $db -x step1 sql drop database if exits $db -x step1
step1: step1:
sql create database if not exists $db maxTables 4 keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12))
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 200
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -23,7 +24,7 @@ $stb = $stbPrefix . $i ...@@ -23,7 +24,7 @@ $stb = $stbPrefix . $i
sql drop database $db -x step1 sql drop database $db -x step1
step1: step1:
sql create database $db cache 16 maxtables 200 sql create database $db cache 16
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int)
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 1000 sleep 1000
sql connect sql connect
...@@ -23,7 +24,7 @@ $tstart = 100000 ...@@ -23,7 +24,7 @@ $tstart = 100000
sql drop database if exists $db -x step1 sql drop database if exists $db -x step1
step1: step1:
sql create database if not exists $db maxTables 4 keep 36500 sql create database if not exists $db keep 36500
sql use $db sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12)) sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int, t2 binary(12))
......
...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,7 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -15,7 +16,7 @@ $db = $dbPrefix ...@@ -15,7 +16,7 @@ $db = $dbPrefix
$stb = $stbPrefix $stb = $stbPrefix
sql drop database if exists $db sql drop database if exists $db
sql create database $db maxrows 200 maxTables 4 sql create database $db maxrows 200
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 bool, c6 binary(10), c7 nchar(10)) tags(t1 int)
......
...@@ -21,7 +21,7 @@ $db = $dbPrefix . $i ...@@ -21,7 +21,7 @@ $db = $dbPrefix . $i
$stb = $stbPrefix . $i $stb = $stbPrefix . $i
sql drop database if exists $db sql drop database if exists $db
sql create database $db maxrows 200 cache 16 maxTables 4 sql create database $db maxrows 200 cache 16
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 binary(15), t2 int, t3 bigint, t4 nchar(10), t5 double, t6 bool) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 binary(15), t2 int, t3 bigint, t4 nchar(10), t5 double, t6 bool)
......
...@@ -2,6 +2,8 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,8 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -20,7 +22,7 @@ $db = $dbPrefix . $i ...@@ -20,7 +22,7 @@ $db = $dbPrefix . $i
$stb = $stbPrefix . $i $stb = $stbPrefix . $i
sql drop database if exists $db sql drop database if exists $db
sql create database $db maxrows 200 maxTables 4 sql create database $db maxrows 200
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 timestamp, c2 int) tags(t1 binary(20)) sql create table $stb (ts timestamp, c1 timestamp, c2 int) tags(t1 binary(20))
......
...@@ -2,6 +2,8 @@ system sh/stop_dnodes.sh ...@@ -2,6 +2,8 @@ system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 200
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
...@@ -23,7 +25,7 @@ $stb = $stbPrefix . $i ...@@ -23,7 +25,7 @@ $stb = $stbPrefix . $i
sql drop database $db -x step1 sql drop database $db -x step1
step1: step1:
sql create database $db cache 16 maxtables 200 sql create database $db cache 16
print ====== create tables print ====== create tables
sql use $db sql use $db
sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int) sql create table $stb (ts timestamp, c1 int, c2 bigint, c3 float, c4 double, c5 smallint, c6 tinyint, c7 bool, c8 binary(10), c9 nchar(10)) tags(t1 int)
...@@ -137,4 +139,23 @@ if $rows != 3 then ...@@ -137,4 +139,23 @@ if $rows != 3 then
return -1 return -1
endi endi
print =========>td-1308
sql create database db;
sql use db;
sql create table stb (ts timestamp, c1 int, c2 binary(10)) tags(t1 binary(10));
sql create table tb1 using stb tags('a1');
sql insert into tb1 values('2020-09-03 15:30:48.812', 0, 'tb1');
sql select count(*) from stb where ts > '2020-09-03 15:30:44' interval(4s);
if $rows != 1 then
return -1
endi
sql create table tb4 using stb tags('a4');
sql select count(*) from stb where ts > '2020-09-03 15:30:44' interval(4s);
if $rows != 1 then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
...@@ -4,6 +4,8 @@ system sh/deploy.sh -n dnode1 -i 1 ...@@ -4,6 +4,8 @@ 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 walLevel -v 0
system sh/cfg.sh -n dnode1 -c debugFlag -v 135 system sh/cfg.sh -n dnode1 -c debugFlag -v 135
system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135 system sh/cfg.sh -n dnode1 -c rpcDebugFlag -v 135
system sh/cfg.sh -n dnode1 -c maxtablespervnode -v 4
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 1000 sleep 1000
sql connect sql connect
...@@ -27,7 +29,7 @@ $mt1 = $mtPrefix . $j ...@@ -27,7 +29,7 @@ $mt1 = $mtPrefix . $j
sql drop database if exits $db -x step1 sql drop database if exits $db -x step1
step1: step1:
sql create database if not exists $db maxtables 4 sql create database if not exists $db
sql use $db sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int) sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int)
......
...@@ -21,7 +21,7 @@ $mt = $mtPrefix . $i ...@@ -21,7 +21,7 @@ $mt = $mtPrefix . $i
sql drop database if exits $db -x step1 sql drop database if exits $db -x step1
step1: step1:
sql create database if not exists $db maxTables 4 sql create database if not exists $db
sql use $db sql use $db
sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int) sql create table $mt (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool, c8 binary(10), c9 nchar(9)) TAGS(t1 int)
......
...@@ -23,7 +23,7 @@ $i = 0 ...@@ -23,7 +23,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -54,7 +54,7 @@ $i = 0 ...@@ -54,7 +54,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -22,7 +22,7 @@ $i = 0 ...@@ -22,7 +22,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -17,7 +17,7 @@ $db = $dbPrefix . $i ...@@ -17,7 +17,7 @@ $db = $dbPrefix . $i
$tb = $tbPrefix . $i $tb = $tbPrefix . $i
print =================== step 0 print =================== step 0
sql create database $db maxtables 129 sql create database $db
sql use $db sql use $db
sql show vgroups sql show vgroups
if $rows != 0 then if $rows != 0 then
......
...@@ -15,7 +15,7 @@ $db = $dbPrefix . $i ...@@ -15,7 +15,7 @@ $db = $dbPrefix . $i
$tb = $tbPrefix . $i $tb = $tbPrefix . $i
print =================== step 1 print =================== step 1
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql show vgroups sql show vgroups
if $rows != 0 then if $rows != 0 then
......
...@@ -253,6 +253,7 @@ cd ../../../debug; make ...@@ -253,6 +253,7 @@ cd ../../../debug; make
./test.sh -f unique/cluster/balance2.sim ./test.sh -f unique/cluster/balance2.sim
./test.sh -f unique/cluster/balance3.sim ./test.sh -f unique/cluster/balance3.sim
./test.sh -f unique/cluster/cache.sim ./test.sh -f unique/cluster/cache.sim
./test.sh -f unique/cluster/vgroup100.sim
./test.sh -f unique/column/replica3.sim ./test.sh -f unique/column/replica3.sim
...@@ -293,6 +294,7 @@ cd ../../../debug; make ...@@ -293,6 +294,7 @@ cd ../../../debug; make
./test.sh -f unique/stable/replica3_dnode6.sim ./test.sh -f unique/stable/replica3_dnode6.sim
./test.sh -f unique/stable/replica3_vnode3.sim ./test.sh -f unique/stable/replica3_vnode3.sim
./test.sh -f unique/mnode/mgmt20.sim
./test.sh -f unique/mnode/mgmt21.sim ./test.sh -f unique/mnode/mgmt21.sim
./test.sh -f unique/mnode/mgmt22.sim ./test.sh -f unique/mnode/mgmt22.sim
./test.sh -f unique/mnode/mgmt23.sim ./test.sh -f unique/mnode/mgmt23.sim
......
...@@ -119,7 +119,7 @@ echo "tsdbDebugFlag 135" >> $TAOS_CFG ...@@ -119,7 +119,7 @@ echo "tsdbDebugFlag 135" >> $TAOS_CFG
echo "cDebugFlag 135" >> $TAOS_CFG echo "cDebugFlag 135" >> $TAOS_CFG
echo "jnidebugFlag 135" >> $TAOS_CFG echo "jnidebugFlag 135" >> $TAOS_CFG
echo "odbcdebugFlag 135" >> $TAOS_CFG echo "odbcdebugFlag 135" >> $TAOS_CFG
echo "httpDebugFlag 143" >> $TAOS_CFG echo "httpDebugFlag 135" >> $TAOS_CFG
echo "monitorDebugFlag 135" >> $TAOS_CFG echo "monitorDebugFlag 135" >> $TAOS_CFG
echo "mqttDebugFlag 135" >> $TAOS_CFG echo "mqttDebugFlag 135" >> $TAOS_CFG
echo "qdebugFlag 135" >> $TAOS_CFG echo "qdebugFlag 135" >> $TAOS_CFG
......
...@@ -14,10 +14,10 @@ print $data00 $data01 $data02 $data03 $data04 $data05 $data06 ...@@ -14,10 +14,10 @@ print $data00 $data01 $data02 $data03 $data04 $data05 $data06
if $data00 != root then if $data00 != root then
return -1 return -1
endi endi
if $data02 != 3/10 then if $data02 != 3/128 then
return -1 return -1
endi endi
if $data03 != 0/64 then if $data03 != 0/128 then
return -1 return -1
endi endi
if $data04 != 0/2147483647 then if $data04 != 0/2147483647 then
......
...@@ -61,7 +61,7 @@ $totalTableNum = 10 ...@@ -61,7 +61,7 @@ $totalTableNum = 10
$sleepTimer = 3000 $sleepTimer = 3000
$db = db $db = db
sql create database $db replica 2 maxTables $totalTableNum sql create database $db replica 2
sql use $db sql use $db
# create table , insert data # create table , insert data
......
...@@ -61,7 +61,7 @@ $totalTableNum = 4 ...@@ -61,7 +61,7 @@ $totalTableNum = 4
$sleepTimer = 3000 $sleepTimer = 3000
$db = db $db = db
sql create database $db cache 1 replica 2 maxTables $totalTableNum sql create database $db cache 1 replica 2
sql use $db sql use $db
# create table , insert data # create table , insert data
......
...@@ -61,8 +61,8 @@ $totalTableNum = 20 ...@@ -61,8 +61,8 @@ $totalTableNum = 20
$sleepTimer = 3000 $sleepTimer = 3000
$db = db $db = db
print create database $db replica 3 maxTables $totalTableNum print create database $db replica 3
sql create database $db replica 3 maxTables $totalTableNum sql create database $db replica 3
sql use $db sql use $db
# create table , insert data # create table , insert data
......
...@@ -62,8 +62,8 @@ $sleepTimer = 3000 ...@@ -62,8 +62,8 @@ $sleepTimer = 3000
$maxTables = $totalTableNum * 2 $maxTables = $totalTableNum * 2
$db = db $db = db
print create database $db replica 3 maxTables $maxTables print create database $db replica 3
sql create database $db replica 3 maxTables $maxTables sql create database $db replica 3
sql use $db sql use $db
# create table , insert data # create table , insert data
......
...@@ -18,7 +18,7 @@ print ========== prepare data ...@@ -18,7 +18,7 @@ print ========== prepare data
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
sql create database db blocks 3 cache 1 maxTables $maxTables sql create database db blocks 3 cache 1
sql use db sql use db
print ========== step1 print ========== step1
......
...@@ -16,7 +16,7 @@ print ========== prepare data ...@@ -16,7 +16,7 @@ print ========== prepare data
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
sql create database db blocks 3 cache 1 maxTables $maxTables sql create database db blocks 3 cache 1
sql use db sql use db
print ========== step1 print ========== step1
......
...@@ -40,7 +40,7 @@ print ========= start dnode1 ...@@ -40,7 +40,7 @@ print ========= start dnode1
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sql connect sql connect
sql create database c_b1_d1 maxTables 4 sql create database c_b1_d1
sql use c_b1_d1 sql use c_b1_d1
sql create table c_b1_t1 (t timestamp, i int) sql create table c_b1_t1 (t timestamp, i int)
...@@ -50,7 +50,7 @@ sql insert into c_b1_t1 values(1520000022013, 13) ...@@ -50,7 +50,7 @@ sql insert into c_b1_t1 values(1520000022013, 13)
sql insert into c_b1_t1 values(1520000023012, 12) sql insert into c_b1_t1 values(1520000023012, 12)
sql insert into c_b1_t1 values(1520000024011, 11) sql insert into c_b1_t1 values(1520000024011, 11)
sql create database c_b1_d2 maxTables 4 sql create database c_b1_d2
sql use c_b1_d2 sql use c_b1_d2
sql create table c_b1_t2 (t timestamp, i int) sql create table c_b1_t2 (t timestamp, i int)
sql insert into c_b1_t2 values(1520000020025, 25) sql insert into c_b1_t2 values(1520000020025, 25)
...@@ -107,7 +107,7 @@ print dnode2 ==> $dnode2Role ...@@ -107,7 +107,7 @@ print dnode2 ==> $dnode2Role
print ============================== step3 print ============================== step3
print ========= add db3 print ========= add db3
sql create database c_b1_d3 maxTables 4 sql create database c_b1_d3
sql use c_b1_d3 sql use c_b1_d3
sql create table c_b1_t3 (t timestamp, i int) sql create table c_b1_t3 (t timestamp, i int)
sql insert into c_b1_t3 values(1520000020035, 35) sql insert into c_b1_t3 values(1520000020035, 35)
...@@ -280,7 +280,7 @@ if $dnode4Role != slave then ...@@ -280,7 +280,7 @@ if $dnode4Role != slave then
endi endi
print ============================== step10 print ============================== step10
sql create database c_b1_d4 maxTables 4 sql create database c_b1_d4
sql use c_b1_d4 sql use c_b1_d4
sql create table c_b1_t4 (t timestamp, i int) sql create table c_b1_t4 (t timestamp, i int)
sql insert into c_b1_t4 values(1520000020045, 45) sql insert into c_b1_t4 values(1520000020045, 45)
...@@ -318,7 +318,7 @@ sql use c_b1_d2 ...@@ -318,7 +318,7 @@ sql use c_b1_d2
sql insert into c_b1_t2 values(1520000025026, 26) sql insert into c_b1_t2 values(1520000025026, 26)
print ============================== step12 print ============================== step12
sql create database c_b1_d5 maxTables 4 sql create database c_b1_d5
sql use c_b1_d5 sql use c_b1_d5
sql_error create table c_b1_t5 (t timestamp, i int) -x error3 sql_error create table c_b1_t5 (t timestamp, i int) -x error3
...@@ -343,7 +343,7 @@ sql insert into c_b1_t5 values(1520000022053, 53) ...@@ -343,7 +343,7 @@ sql insert into c_b1_t5 values(1520000022053, 53)
sql insert into c_b1_t5 values(1520000023052, 52) sql insert into c_b1_t5 values(1520000023052, 52)
sql insert into c_b1_t5 values(1520000024051, 51) sql insert into c_b1_t5 values(1520000024051, 51)
sql create database c_b1_d6 maxTables 4 sql create database c_b1_d6
sql use c_b1_d6 sql use c_b1_d6
sql create table c_b1_t6 (t timestamp, i int) sql create table c_b1_t6 (t timestamp, i int)
sql insert into c_b1_t6 values(1520000020065, 65) sql insert into c_b1_t6 values(1520000020065, 65)
...@@ -375,7 +375,7 @@ sql create dnode $hostname6 ...@@ -375,7 +375,7 @@ sql create dnode $hostname6
system sh/exec.sh -n dnode6 -s start system sh/exec.sh -n dnode6 -s start
sleep 15000 sleep 15000
sql create database c_b1_d7 maxTables 4 sql create database c_b1_d7
sql use c_b1_d7 sql use c_b1_d7
sql create table c_b1_t7 (t timestamp, i int) sql create table c_b1_t7 (t timestamp, i int)
sql insert into c_b1_t7 values(1520000020075, 75) sql insert into c_b1_t7 values(1520000020075, 75)
...@@ -384,7 +384,7 @@ sql insert into c_b1_t7 values(1520000022073, 73) ...@@ -384,7 +384,7 @@ sql insert into c_b1_t7 values(1520000022073, 73)
sql insert into c_b1_t7 values(1520000023072, 72) sql insert into c_b1_t7 values(1520000023072, 72)
sql insert into c_b1_t7 values(1520000024071, 71) sql insert into c_b1_t7 values(1520000024071, 71)
sql create database c_b1_d8 maxTables 4 sql create database c_b1_d8
sql use c_b1_d8 sql use c_b1_d8
sql create table c_b1_t8 (t timestamp, i int) sql create table c_b1_t8 (t timestamp, i int)
sql insert into c_b1_t8 values(1520000020085, 85) sql insert into c_b1_t8 values(1520000020085, 85)
......
...@@ -47,7 +47,7 @@ system sh/exec.sh -n dnode2 -s start ...@@ -47,7 +47,7 @@ system sh/exec.sh -n dnode2 -s start
system sh/exec.sh -n dnode3 -s start system sh/exec.sh -n dnode3 -s start
sleep 4001 sleep 4001
sql create database c_b2_d1 replica 2 maxTables 4 sql create database c_b2_d1 replica 2
sql use c_b2_d1 sql use c_b2_d1
sql create table c_b2_t1 (t timestamp, i int) sql create table c_b2_t1 (t timestamp, i int)
sql insert into c_b2_t1 values(1520000020015, 15) sql insert into c_b2_t1 values(1520000020015, 15)
...@@ -56,7 +56,7 @@ sql insert into c_b2_t1 values(1520000022013, 13) ...@@ -56,7 +56,7 @@ sql insert into c_b2_t1 values(1520000022013, 13)
sql insert into c_b2_t1 values(1520000023012, 12) sql insert into c_b2_t1 values(1520000023012, 12)
sql insert into c_b2_t1 values(1520000024011, 11) sql insert into c_b2_t1 values(1520000024011, 11)
sql create database c_b2_d2 replica 2 maxTables 4 sql create database c_b2_d2 replica 2
sql use c_b2_d2 sql use c_b2_d2
sql create table c_b2_t2 (t timestamp, i int) sql create table c_b2_t2 (t timestamp, i int)
sql insert into c_b2_t2 values(1520000020025, 25) sql insert into c_b2_t2 values(1520000020025, 25)
...@@ -65,7 +65,7 @@ sql insert into c_b2_t2 values(1520000022023, 23) ...@@ -65,7 +65,7 @@ sql insert into c_b2_t2 values(1520000022023, 23)
sql insert into c_b2_t2 values(1520000023022, 22) sql insert into c_b2_t2 values(1520000023022, 22)
sql insert into c_b2_t2 values(1520000024021, 21) sql insert into c_b2_t2 values(1520000024021, 21)
sql create database c_b2_d3 replica 2 maxTables 4 sql create database c_b2_d3 replica 2
sql use c_b2_d3 sql use c_b2_d3
sql create table c_b2_t3 (t timestamp, i int) sql create table c_b2_t3 (t timestamp, i int)
sql insert into c_b2_t3 values(1520000020035, 35) sql insert into c_b2_t3 values(1520000020035, 35)
......
...@@ -57,7 +57,7 @@ sleep 3000 ...@@ -57,7 +57,7 @@ sleep 3000
print ============== step2: create db1 with replica 3 print ============== step2: create db1 with replica 3
$db = db1 $db = db1
print create database $db replica 3 print create database $db replica 3
#sql create database $db replica 3 maxTables $totalTableNum #sql create database $db replica 3
sql create database $db replica 3 sql create database $db replica 3
sql use $db sql use $db
......
...@@ -57,7 +57,7 @@ sleep 3000 ...@@ -57,7 +57,7 @@ sleep 3000
print ============== step2: create db1 with replica 3 print ============== step2: create db1 with replica 3
$db = db1 $db = db1
print create database $db replica 3 print create database $db replica 3
#sql create database $db replica 3 maxTables $totalTableNum #sql create database $db replica 3
sql create database $db replica 3 sql create database $db replica 3
sql use $db sql use $db
......
...@@ -58,7 +58,7 @@ print ============== step2: create db1 with replica 3 ...@@ -58,7 +58,7 @@ print ============== step2: create db1 with replica 3
$replica = 3 $replica = 3
$db = db1 $db = db1
print create database $db replica $replica print create database $db replica $replica
#sql create database $db replica 3 maxTables $totalTableNum #sql create database $db replica 3
sql create database $db replica $replica sql create database $db replica $replica
sql use $db sql use $db
......
...@@ -58,7 +58,7 @@ print ============== step2: create db1 with replica 3 ...@@ -58,7 +58,7 @@ print ============== step2: create db1 with replica 3
$replica = 3 $replica = 3
$db = db1 $db = db1
print create database $db replica $replica print create database $db replica $replica
#sql create database $db replica 3 maxTables $totalTableNum #sql create database $db replica 3
sql create database $db replica $replica sql create database $db replica $replica
sql use $db sql use $db
......
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode2 -i 2
system sh/deploy.sh -n dnode3 -i 3
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 3
system sh/cfg.sh -n dnode2 -c numOfMnodes -v 3
system sh/cfg.sh -n dnode3 -c numOfMnodes -v 3
system sh/cfg.sh -n dnode1 -c maxTables -v 4
system sh/cfg.sh -n dnode2 -c maxTables -v 4
system sh/cfg.sh -n dnode3 -c maxTables -v 4
system sh/cfg.sh -n dnode1 -c mnodeEqualVnodeNum -v 0
system sh/cfg.sh -n dnode2 -c mnodeEqualVnodeNum -v 0
system sh/cfg.sh -n dnode3 -c mnodeEqualVnodeNum -v 0
print ============================== step1
system sh/exec.sh -n dnode1 -s start
sleep 2000
sql connect
print ============================== step2
print ========= start dnode2
sql create dnode $hostname2
system sh/exec.sh -n dnode2 -s start
sql create dnode $hostname3
system sh/exec.sh -n dnode3 -s start
sleep 5000
sql show mnodes
$dnode1Role = $data2_1
$dnode2Role = $data2_2
$dnode3Role = $data2_3
print $dnode1Role
print $dnode2Role
print $dnode3Role
print ============================== step3
$count = 2
while $count < 102
$db = d . $count
$tb = $db . .t
sql create database $db replica 3 cache 1 blocks 3
sql create table $tb (ts timestamp, i int)
sql insert into $tb values(now, 1)
$count = $count + 1
print insert into $tb values(now, 1) ==> finished
endw
print ============================== step4
$count = 2
while $count < 102
$db = d . $count
$tb = $db . .t
sql select * from $tb
if $rows != 1 then
print select * from $tb
return -1
endi
$count = $count + 1
print select * from $tb ==> rows: $rows
endw
print ============================== step5
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT
system sh/exec.sh -n dnode3 -s stop -x SIGINT
sleep 5000
print ============================== step6
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode2 -s start
system sh/exec.sh -n dnode3 -s start
sleep 3000
print ============================== step7
$x = 0
show7:
$x = $x + 1
sleep 2000
if $x == 50 then
return -1
endi
sql show mnodes -x show7
$dnode1Role = $data2_1
$dnode2Role = $data2_2
$dnode3Role = $data2_3
if $dnode1Role != master then
goto show7
endi
if $dnode2Role != slave then
goto show7
endi
if $dnode2Role != slave then
goto show7
endi
print ============================== step8
$x = 0
show8:
$x = $x + 1
sleep 2000
if $x == 20 then
return -1
endi
$count = 2
while $count < 102
$db = d . $count
$tb = $db . .t
sql select * from $tb
if $rows != 1 then
print select * from $tb
goto show8
endi
$count = $count + 1
print select * from $tb ==> rows: $rows
endw
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT
system sh/exec.sh -n dnode3 -s stop -x SIGINT
\ No newline at end of file
...@@ -56,7 +56,7 @@ if $data2_3 != slave then ...@@ -56,7 +56,7 @@ if $data2_3 != slave then
endi endi
print ========== step2 print ========== step2
sql create database d1 maxTables 4 sql create database d1
sql create table d1.t1 (ts timestamp, i int) sql create table d1.t1 (ts timestamp, i int)
sql create table d1.t2 (ts timestamp, i int) sql create table d1.t2 (ts timestamp, i int)
sql create table d1.t3 (ts timestamp, i int) sql create table d1.t3 (ts timestamp, i int)
......
...@@ -30,7 +30,7 @@ system sh/exec.sh -n dnode1 -s start ...@@ -30,7 +30,7 @@ system sh/exec.sh -n dnode1 -s start
sql connect sql connect
sleep 3000 sleep 3000
sql create database d1 maxTables 4 sql create database d1
sql create table d1.t1 (t timestamp, i int) sql create table d1.t1 (t timestamp, i int)
sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+1s, 15)
sql insert into d1.t1 values(now+2s, 14) sql insert into d1.t1 values(now+2s, 14)
...@@ -68,7 +68,7 @@ if $data2_2 != 1 then ...@@ -68,7 +68,7 @@ if $data2_2 != 1 then
endi endi
print ========== step3 print ========== step3
sql create database d2 maxTables 4 sql create database d2
sql create table d2.t2 (t timestamp, i int) sql create table d2.t2 (t timestamp, i int)
sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+1s, 25)
sql insert into d2.t2 values(now+2s, 24) sql insert into d2.t2 values(now+2s, 24)
...@@ -139,7 +139,7 @@ if $data2_3 != 2 then ...@@ -139,7 +139,7 @@ if $data2_3 != 2 then
endi endi
print ========== step6 print ========== step6
sql create database d3 maxTables 4 sql create database d3
sql create table d3.t3 (t timestamp, i int) sql create table d3.t3 (t timestamp, i int)
sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+1s, 35)
sql insert into d3.t3 values(now+2s, 34) sql insert into d3.t3 values(now+2s, 34)
...@@ -193,7 +193,7 @@ if $data2_4 != 1 then ...@@ -193,7 +193,7 @@ if $data2_4 != 1 then
endi endi
print ========== step8 print ========== step8
sql create database d4 maxTables 4 sql create database d4
sql create table d4.t4 (t timestamp, i int) sql create table d4.t4 (t timestamp, i int)
sql insert into d4.t4 values(now+1s, 45) sql insert into d4.t4 values(now+1s, 45)
sql insert into d4.t4 values(now+2s, 44) sql insert into d4.t4 values(now+2s, 44)
......
...@@ -28,7 +28,7 @@ system sh/exec.sh -n dnode2 -s start ...@@ -28,7 +28,7 @@ system sh/exec.sh -n dnode2 -s start
system sh/exec.sh -n dnode3 -s start system sh/exec.sh -n dnode3 -s start
sleep 3000 sleep 3000
sql create database d1 replica 2 maxTables 4 sql create database d1 replica 2
sql create table d1.t1 (t timestamp, i int) sql create table d1.t1 (t timestamp, i int)
sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+1s, 15)
sql insert into d1.t1 values(now+2s, 14) sql insert into d1.t1 values(now+2s, 14)
...@@ -36,7 +36,7 @@ sql insert into d1.t1 values(now+3s, 13) ...@@ -36,7 +36,7 @@ sql insert into d1.t1 values(now+3s, 13)
sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+4s, 12)
sql insert into d1.t1 values(now+5s, 11) sql insert into d1.t1 values(now+5s, 11)
sql create database d2 replica 2 maxTables 4 sql create database d2 replica 2
sql create table d2.t2 (t timestamp, i int) sql create table d2.t2 (t timestamp, i int)
sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+1s, 25)
sql insert into d2.t2 values(now+2s, 24) sql insert into d2.t2 values(now+2s, 24)
...@@ -117,7 +117,7 @@ if $data2_4 != 2 then ...@@ -117,7 +117,7 @@ if $data2_4 != 2 then
endi endi
print ========== step4 print ========== step4
sql create database d3 replica 2 maxTables 4 sql create database d3 replica 2
sql create table d3.t3 (t timestamp, i int) sql create table d3.t3 (t timestamp, i int)
sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+1s, 35)
sql insert into d3.t3 values(now+2s, 34) sql insert into d3.t3 values(now+2s, 34)
......
...@@ -33,7 +33,7 @@ system sh/exec.sh -n dnode3 -s start ...@@ -33,7 +33,7 @@ system sh/exec.sh -n dnode3 -s start
system sh/exec.sh -n dnode4 -s start system sh/exec.sh -n dnode4 -s start
sleep 3000 sleep 3000
sql create database d1 replica 3 maxTables 4 sql create database d1 replica 3
sql create table d1.t1 (t timestamp, i int) sql create table d1.t1 (t timestamp, i int)
sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+1s, 15)
sql insert into d1.t1 values(now+2s, 14) sql insert into d1.t1 values(now+2s, 14)
...@@ -41,7 +41,7 @@ sql insert into d1.t1 values(now+3s, 13) ...@@ -41,7 +41,7 @@ sql insert into d1.t1 values(now+3s, 13)
sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+4s, 12)
sql insert into d1.t1 values(now+5s, 11) sql insert into d1.t1 values(now+5s, 11)
sql create database d2 replica 3 maxTables 4 sql create database d2 replica 3
sql create table d2.t2 (t timestamp, i int) sql create table d2.t2 (t timestamp, i int)
sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+1s, 25)
sql insert into d2.t2 values(now+2s, 24) sql insert into d2.t2 values(now+2s, 24)
...@@ -136,7 +136,7 @@ if $data2_5 != 2 then ...@@ -136,7 +136,7 @@ if $data2_5 != 2 then
endi endi
print ========== step4 print ========== step4
sql create database d3 replica 3 maxTables 4 sql create database d3 replica 3
sql create table d3.t3 (t timestamp, i int) sql create table d3.t3 (t timestamp, i int)
sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+1s, 35)
sql insert into d3.t3 values(now+2s, 34) sql insert into d3.t3 values(now+2s, 34)
......
...@@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start ...@@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start
sql connect sql connect
sleep 3000 sleep 3000
sql create database d1 maxTables 4 sql create database d1
sql create table d1.t1 (t timestamp, i int) sql create table d1.t1 (t timestamp, i int)
sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+1s, 15)
sql insert into d1.t1 values(now+2s, 14) sql insert into d1.t1 values(now+2s, 14)
...@@ -28,7 +28,7 @@ sql insert into d1.t1 values(now+3s, 13) ...@@ -28,7 +28,7 @@ sql insert into d1.t1 values(now+3s, 13)
sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+4s, 12)
sql insert into d1.t1 values(now+5s, 11) sql insert into d1.t1 values(now+5s, 11)
sql create database d2 maxTables 4 sql create database d2
sql create table d2.t2 (t timestamp, i int) sql create table d2.t2 (t timestamp, i int)
sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+1s, 25)
sql insert into d2.t2 values(now+2s, 24) sql insert into d2.t2 values(now+2s, 24)
...@@ -65,7 +65,7 @@ if $data2_2 != 2 then ...@@ -65,7 +65,7 @@ if $data2_2 != 2 then
endi endi
print ========== step3 print ========== step3
sql create database d3 replica 2 maxTables 4 sql create database d3 replica 2
sql create table d3.t3 (t timestamp, i int) sql create table d3.t3 (t timestamp, i int)
sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+1s, 35)
sql insert into d3.t3 values(now+2s, 34) sql insert into d3.t3 values(now+2s, 34)
......
...@@ -27,7 +27,7 @@ sql create dnode $hostname2 ...@@ -27,7 +27,7 @@ sql create dnode $hostname2
system sh/exec.sh -n dnode2 -s start system sh/exec.sh -n dnode2 -s start
sleep 3000 sleep 3000
sql create database d1 replica 2 maxTables 4 sql create database d1 replica 2
sql create table d1.t1(ts timestamp, i int) sql create table d1.t1(ts timestamp, i int)
sql insert into d1.t1 values(1588262400001, 1) sql insert into d1.t1 values(1588262400001, 1)
......
...@@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start ...@@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
sql create database d1 maxTables 4 sql create database d1
sql create table d1.t1 (t timestamp, i int) sql create table d1.t1 (t timestamp, i int)
sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+1s, 15)
sql insert into d1.t1 values(now+2s, 14) sql insert into d1.t1 values(now+2s, 14)
...@@ -28,7 +28,7 @@ sql insert into d1.t1 values(now+3s, 13) ...@@ -28,7 +28,7 @@ sql insert into d1.t1 values(now+3s, 13)
sql insert into d1.t1 values(now+4s, 12) sql insert into d1.t1 values(now+4s, 12)
sql insert into d1.t1 values(now+5s, 11) sql insert into d1.t1 values(now+5s, 11)
sql create database d2 maxTables 4 sql create database d2
sql create table d2.t2 (t timestamp, i int) sql create table d2.t2 (t timestamp, i int)
sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+1s, 25)
sql insert into d2.t2 values(now+2s, 24) sql insert into d2.t2 values(now+2s, 24)
...@@ -47,7 +47,7 @@ sql create dnode $hostname2 ...@@ -47,7 +47,7 @@ sql create dnode $hostname2
system sh/exec.sh -n dnode2 -s start system sh/exec.sh -n dnode2 -s start
sleep 9000 sleep 9000
sql create database d3 replica 2 maxTables 4 sql create database d3 replica 2
sql create table d3.t3 (t timestamp, i int) sql create table d3.t3 (t timestamp, i int)
sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+1s, 35)
sql insert into d3.t3 values(now+2s, 34) sql insert into d3.t3 values(now+2s, 34)
......
...@@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start ...@@ -20,7 +20,7 @@ system sh/exec.sh -n dnode1 -s start
sleep 3000 sleep 3000
sql connect sql connect
sql create database d1 maxTables 4 sql create database d1
sql create table d1.t1 (t timestamp, i int) sql create table d1.t1 (t timestamp, i int)
sql insert into d1.t1 values(1588262400001, 15) sql insert into d1.t1 values(1588262400001, 15)
sql insert into d1.t1 values(1588262400002, 14) sql insert into d1.t1 values(1588262400002, 14)
...@@ -28,7 +28,7 @@ sql insert into d1.t1 values(1588262400003, 13) ...@@ -28,7 +28,7 @@ sql insert into d1.t1 values(1588262400003, 13)
sql insert into d1.t1 values(1588262400004, 12) sql insert into d1.t1 values(1588262400004, 12)
sql insert into d1.t1 values(1588262400005, 11) sql insert into d1.t1 values(1588262400005, 11)
sql create database d2 maxTables 4 sql create database d2
sql create table d2.t2 (t timestamp, i int) sql create table d2.t2 (t timestamp, i int)
sql insert into d2.t2 values(1588262400001, 25) sql insert into d2.t2 values(1588262400001, 25)
sql insert into d2.t2 values(1588262400002, 24) sql insert into d2.t2 values(1588262400002, 24)
...@@ -47,7 +47,7 @@ sql create dnode $hostname2 ...@@ -47,7 +47,7 @@ sql create dnode $hostname2
system sh/exec.sh -n dnode2 -s start system sh/exec.sh -n dnode2 -s start
sleep 9000 sleep 9000
sql create database d3 replica 2 maxTables 4 sql create database d3 replica 2
sql create table d3.t3 (t timestamp, i int) sql create table d3.t3 (t timestamp, i int)
sql insert into d3.t3 values(1588262400001, 35) sql insert into d3.t3 values(1588262400001, 35)
sql insert into d3.t3 values(1588262400002, 34) sql insert into d3.t3 values(1588262400002, 34)
......
...@@ -19,7 +19,7 @@ print ========== step1 ...@@ -19,7 +19,7 @@ print ========== step1
system sh/exec.sh -n dnode1 -s start system sh/exec.sh -n dnode1 -s start
sql connect sql connect
sql create database d1 maxTables 4 sql create database d1
sql create table d1.t1 (t timestamp, i int) sql create table d1.t1 (t timestamp, i int)
sql insert into d1.t1 values(now+1s, 15) sql insert into d1.t1 values(now+1s, 15)
sql insert into d1.t1 values(now+2s, 14) sql insert into d1.t1 values(now+2s, 14)
...@@ -55,7 +55,7 @@ if $data2_2 != 1 then ...@@ -55,7 +55,7 @@ if $data2_2 != 1 then
endi endi
print ========== step3 print ========== step3
sql create database d2 maxTables 4 sql create database d2
sql create table d2.t2 (t timestamp, i int) sql create table d2.t2 (t timestamp, i int)
sql insert into d2.t2 values(now+1s, 25) sql insert into d2.t2 values(now+1s, 25)
...@@ -123,7 +123,7 @@ if $data2_3 != 2 then ...@@ -123,7 +123,7 @@ if $data2_3 != 2 then
endi endi
print ========== step6 print ========== step6
sql create database d3 maxTables 4 sql create database d3
sql create table d3.t3 (t timestamp, i int) sql create table d3.t3 (t timestamp, i int)
sql insert into d3.t3 values(now+1s, 35) sql insert into d3.t3 values(now+1s, 35)
sql insert into d3.t3 values(now+2s, 34) sql insert into d3.t3 values(now+2s, 34)
......
system sh/stop_dnodes.sh
system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode2 -i 2
system sh/cfg.sh -n dnode1 -c numOfMnodes -v 2
system sh/cfg.sh -n dnode2 -c numOfMnodes -v 2
system sh/cfg.sh -n dnode1 -c monitor -v 1
system sh/cfg.sh -n dnode2 -c monitor -v 1
print ============== step1
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode2 -s start
sleep 3000
sql connect
print ============== step2
sql create dnode $hostname2
$x = 0
show2:
$x = $x + 1
sleep 2000
if $x == 10 then
return -1
endi
sql show mnodes
print dnode1 ==> $data2_1
print dnode2 ==> $data2_2
if $data2_1 != master then
goto show2
endi
if $data2_2 != slave then
goto show2
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT
print ============== step3
system sh/exec.sh -n dnode2 -s start
sleep 10000
system sh/exec.sh -n dnode1 -s start
sql connect
print =============== step4
sql select * from log.dn1
$d1_first = $rows
sql select * from log.dn2
$d2_first = $rows
sleep 3000
sql select * from log.dn1
$d1_second = $rows
sql select * from log.dn2
$d2_second = $rows
print dnode1 $d1_first $d1_second
print dnode2 $d2_first $d2_second
if $d1_first >= $d1_second then
return -1
endi
if $d2_first >= $d2_second then
return -1
endi
system sh/exec.sh -n dnode1 -s stop -x SIGINT
system sh/exec.sh -n dnode2 -s stop -x SIGINT
\ No newline at end of file
...@@ -29,7 +29,7 @@ $db = $dbPrefix ...@@ -29,7 +29,7 @@ $db = $dbPrefix
$mt = $mtPrefix $mt = $mtPrefix
$st = $stPrefix . $i $st = $stPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)
......
...@@ -38,7 +38,7 @@ $i = 0 ...@@ -38,7 +38,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -43,7 +43,7 @@ $i = 0 ...@@ -43,7 +43,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -47,7 +47,7 @@ $i = 0 ...@@ -47,7 +47,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -54,7 +54,7 @@ $i = 0 ...@@ -54,7 +54,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db replica 2 maxTables 4 sql create database $db replica 2
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -37,7 +37,7 @@ $i = 0 ...@@ -37,7 +37,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db replica 2 maxTables 4 sql create database $db replica 2
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -78,7 +78,7 @@ $i = 0 ...@@ -78,7 +78,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db replica 3 maxTables 4 sql create database $db replica 3
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -54,7 +54,7 @@ $i = 0 ...@@ -54,7 +54,7 @@ $i = 0
$db = $dbPrefix . $i $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
sql create database $db replica 3 maxTables 4 sql create database $db replica 3
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int) TAGS(tgcol int)
......
...@@ -32,7 +32,7 @@ sql connect ...@@ -32,7 +32,7 @@ sql connect
print ============== step1 print ============== step1
$db = $dbPrefix $db = $dbPrefix
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
$i = 0 $i = 0
......
...@@ -34,7 +34,7 @@ $db = $dbPrefix ...@@ -34,7 +34,7 @@ $db = $dbPrefix
$mt = $mtPrefix $mt = $mtPrefix
$st = $stPrefix . $i $st = $stPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)
......
...@@ -65,7 +65,7 @@ $db = $dbPrefix . $i ...@@ -65,7 +65,7 @@ $db = $dbPrefix . $i
$mt = $mtPrefix . $i $mt = $mtPrefix . $i
$st = $stPrefix . $i $st = $stPrefix . $i
sql create database $db maxTables 4 sql create database $db
sql use $db sql use $db
sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int) sql create table $mt (ts timestamp, tbcol int, tbcol2 float) TAGS(tgcol int)
......
...@@ -26,7 +26,7 @@ sleep 3000 ...@@ -26,7 +26,7 @@ sleep 3000
print =================== step 1 print =================== step 1
sql create database $db replica 3 maxtables 100 sql create database $db replica 3
sql use $db sql use $db
sql create table st (ts timestamp, speed int) tags (t1 int) sql create table st (ts timestamp, speed int) tags (t1 int)
sleep 3001 sleep 3001
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册