Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c7c6bcee
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c7c6bcee
编写于
10月 29, 2021
作者:
haoranc
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' of github.com:taosdata/TDengine into dev/chr
上级
dace639d
003d509d
变更
39
隐藏空白更改
内联
并排
Showing
39 changed file
with
1096 addition
and
248 deletion
+1096
-248
CMakeLists.txt
CMakeLists.txt
+1
-0
cmake/define.inc
cmake/define.inc
+4
-0
documentation20/cn/08.connector/01.java/docs.md
documentation20/cn/08.connector/01.java/docs.md
+0
-1
packaging/tools/post.sh
packaging/tools/post.sh
+0
-3
src/client/src/dataxJniConnection.c
src/client/src/dataxJniConnection.c
+1
-30
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+10
-12
src/common/inc/tdataformat.h
src/common/inc/tdataformat.h
+1
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
+25
-25
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
+1
-2
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
+25
-35
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
+1
-2
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
.../test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
+1
-2
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/WasNullTest.java
.../jdbc/src/test/java/com/taosdata/jdbc/rs/WasNullTest.java
+95
-0
src/dnode/CMakeLists.txt
src/dnode/CMakeLists.txt
+4
-0
src/dnode/src/dnodeMain.c
src/dnode/src/dnodeMain.c
+2
-0
src/inc/taosdef.h
src/inc/taosdef.h
+1
-1
src/mnode/src/mnodeDb.c
src/mnode/src/mnodeDb.c
+4
-1
src/mnode/src/mnodeFunc.c
src/mnode/src/mnodeFunc.c
+2
-0
src/mnode/src/mnodeMain.c
src/mnode/src/mnodeMain.c
+1
-1
src/mnode/src/mnodeWrite.c
src/mnode/src/mnodeWrite.c
+3
-1
src/os/src/darwin/dwSysInfo.c
src/os/src/darwin/dwSysInfo.c
+2
-0
src/os/src/detail/osSysinfo.c
src/os/src/detail/osSysinfo.c
+2
-0
src/os/src/detail/osTime.c
src/os/src/detail/osTime.c
+14
-3
src/os/src/windows/wSysinfo.c
src/os/src/windows/wSysinfo.c
+11
-0
src/query/inc/qSqlparser.h
src/query/inc/qSqlparser.h
+1
-1
src/query/inc/sql.y
src/query/inc/sql.y
+18
-19
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+22
-9
src/query/src/qFilter.c
src/query/src/qFilter.c
+29
-3
src/query/src/qSqlParser.c
src/query/src/qSqlParser.c
+2
-1
src/query/src/sql.c
src/query/src/sql.c
+744
-81
src/tsdb/src/tsdbMemTable.c
src/tsdb/src/tsdbMemTable.c
+1
-1
src/util/src/tcompare.c
src/util/src/tcompare.c
+7
-1
src/vnode/src/vnodeRead.c
src/vnode/src/vnodeRead.c
+6
-0
tests/pytest/dbmgmt/nanoSecondCheck.py
tests/pytest/dbmgmt/nanoSecondCheck.py
+2
-1
tests/pytest/functions/function_derivative.py
tests/pytest/functions/function_derivative.py
+3
-0
tests/pytest/query/queryRegex.py
tests/pytest/query/queryRegex.py
+32
-7
tests/script/general/compute/csum.sim
tests/script/general/compute/csum.sim
+12
-0
tests/script/general/parser/alter.sim
tests/script/general/parser/alter.sim
+3
-2
tests/script/general/parser/alter__for_community_version.sim
tests/script/general/parser/alter__for_community_version.sim
+3
-2
未找到文件。
CMakeLists.txt
浏览文件 @
c7c6bcee
...
...
@@ -18,6 +18,7 @@ ENDIF ()
SET
(
TD_ACCOUNT FALSE
)
SET
(
TD_ADMIN FALSE
)
SET
(
TD_GRANT FALSE
)
SET
(
TD_USB_DONGLE FALSE
)
SET
(
TD_MQTT FALSE
)
SET
(
TD_TSDB_PLUGINS FALSE
)
SET
(
TD_STORAGE FALSE
)
...
...
cmake/define.inc
浏览文件 @
c7c6bcee
...
...
@@ -13,6 +13,10 @@ IF (TD_GRANT)
ADD_DEFINITIONS
(
-
D_GRANT
)
ENDIF
()
IF
(
TD_USB_DONGLE
)
ADD_DEFINITIONS
(
-
D_USB_DONGLE
)
ENDIF
()
IF
(
TD_MQTT
)
ADD_DEFINITIONS
(
-
D_MQTT
)
ENDIF
()
...
...
documentation20/cn/08.connector/01.java/docs.md
浏览文件 @
c7c6bcee
...
...
@@ -334,7 +334,6 @@ JDBC连接器可能报错的错误码包括3种:JDBC driver本身的报错(
从 2.1.2.0 版本开始,TDengine 的
**JDBC-JNI**
实现大幅改进了参数绑定方式对数据写入(INSERT)场景的支持。采用这种方式写入数据时,能避免 SQL 语法解析的资源消耗,从而在很多情况下显著提升写入性能。(注意:
**JDBC-RESTful**
实现并不提供参数绑定这种使用方式。)
```
java
Statement
stmt
=
conn
.
createStatement
();
Random
r
=
new
Random
();
// INSERT 语句中,VALUES 部分允许指定具体的数据列;如果采取自动建表,则 TAGS 部分需要设定全部 TAGS 列的参数值:
...
...
packaging/tools/post.sh
浏览文件 @
c7c6bcee
...
...
@@ -280,9 +280,6 @@ function install_blm3_config() {
${
csudo
}
chmod
644
${
cfg_install_dir
}
/blm.toml
fi
# restore the backup standard input, and turn off 6
exec
0<&6 6<&-
[
-f
${
cfg_dir
}
/blm.toml
]
&&
${
csudo
}
mv
${
cfg_dir
}
/blm.toml
${
cfg_dir
}
/blm.toml.org
...
...
src/client/src/dataxJniConnection.c
浏览文件 @
c7c6bcee
...
...
@@ -6,35 +6,6 @@
#include "com_alibaba_datax_plugin_writer_JniConnection.h"
#include "jniCommon.h"
jclass
g_arrayListClass
;
jmethodID
g_arrayListConstructFp
;
jmethodID
g_arrayListAddFp
;
jclass
g_metadataClass
;
jmethodID
g_metadataConstructFp
;
jfieldID
g_metadataColtypeField
;
jfieldID
g_metadataColnameField
;
jfieldID
g_metadataColsizeField
;
jfieldID
g_metadataColindexField
;
jclass
g_rowdataClass
;
jmethodID
g_rowdataConstructor
;
jmethodID
g_rowdataClearFp
;
jmethodID
g_rowdataSetBooleanFp
;
jmethodID
g_rowdataSetByteFp
;
jmethodID
g_rowdataSetShortFp
;
jmethodID
g_rowdataSetIntFp
;
jmethodID
g_rowdataSetLongFp
;
jmethodID
g_rowdataSetFloatFp
;
jmethodID
g_rowdataSetDoubleFp
;
jmethodID
g_rowdataSetStringFp
;
jmethodID
g_rowdataSetTimestampFp
;
jmethodID
g_rowdataSetByteArrayFp
;
jmethodID
g_blockdataSetByteArrayFp
;
jmethodID
g_blockdataSetNumOfRowsFp
;
jmethodID
g_blockdataSetNumOfColsFp
;
JNIEXPORT
void
JNICALL
Java_com_alibaba_datax_plugin_writer_JniConnection_initImp
(
JNIEnv
*
env
,
jobject
jobj
,
jstring
jconfigDir
)
{
if
(
jconfigDir
!=
NULL
)
{
...
...
@@ -229,4 +200,4 @@ JNIEXPORT jlong JNICALL Java_com_alibaba_datax_plugin_writer_JniConnection_inser
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
json
,
payload
);
return
(
jlong
)
result
;
}
\ No newline at end of file
}
src/client/src/tscSQLParser.c
浏览文件 @
c7c6bcee
...
...
@@ -4523,10 +4523,8 @@ static int32_t validateLikeExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_t
// check for match expression
static
int32_t
validateMatchExpr
(
tSqlExpr
*
pExpr
,
STableMeta
*
pTableMeta
,
int32_t
index
,
char
*
msgBuf
)
{
const
char
*
msg1
=
"regular expression string should be less than %d characters"
;
const
char
*
msg2
=
"illegal column type for match/nmatch"
;
const
char
*
msg3
=
"invalid regular expression"
;
tSqlExpr
*
pLeft
=
pExpr
->
pLeft
;
tSqlExpr
*
pRight
=
pExpr
->
pRight
;
if
(
pExpr
->
tokenId
==
TK_MATCH
||
pExpr
->
tokenId
==
TK_NMATCH
)
{
...
...
@@ -4536,11 +4534,6 @@ static int32_t validateMatchExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_
return
invalidOperationMsg
(
msgBuf
,
tmp
);
}
SSchema
*
pSchema
=
tscGetTableSchema
(
pTableMeta
);
if
((
!
isTablenameToken
(
&
pLeft
->
columnName
))
&&
(
pSchema
[
index
].
type
!=
TSDB_DATA_TYPE_BINARY
))
{
return
invalidOperationMsg
(
msgBuf
,
msg2
);
}
if
(
!
(
pRight
->
type
==
SQL_NODE_VALUE
&&
pRight
->
value
.
nType
==
TSDB_DATA_TYPE_BINARY
))
{
return
invalidOperationMsg
(
msgBuf
,
msg3
);
}
...
...
@@ -6799,16 +6792,21 @@ static int32_t setKeepOption(SSqlCmd* pCmd, SCreateDbMsg* pMsg, SCreateDbInfo* p
tVariantListItem
*
p1
=
(
s
>
1
)
?
taosArrayGet
(
pKeep
,
1
)
:
p0
;
tVariantListItem
*
p2
=
(
s
>
2
)
?
taosArrayGet
(
pKeep
,
2
)
:
p1
;
if
((
int32_t
)
p0
->
pVar
.
i64
<=
0
||
(
int32_t
)
p1
->
pVar
.
i64
<=
0
||
(
int32_t
)
p2
->
pVar
.
i64
<=
0
)
{
int32_t
daysToKeep0
=
(
int32_t
)
p0
->
pVar
.
i64
;
int32_t
daysToKeep1
=
(
int32_t
)(
int32_t
)
p1
->
pVar
.
i64
;
int32_t
daysToKeep2
=
(
int32_t
)
p2
->
pVar
.
i64
;
if
(
daysToKeep0
<=
0
||
daysToKeep1
<=
0
||
daysToKeep2
<=
0
||
daysToKeep0
>
TSDB_MAX_KEEP
||
daysToKeep1
>
TSDB_MAX_KEEP
||
daysToKeep2
>
TSDB_MAX_KEEP
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
if
(
!
(((
int32_t
)
p0
->
pVar
.
i64
<=
(
int32_t
)
p1
->
pVar
.
i64
)
&&
((
int32_t
)
p1
->
pVar
.
i64
<=
(
int32_t
)
p2
->
pVar
.
i64
)))
{
if
(
!
((
daysToKeep0
<=
daysToKeep1
)
&&
(
daysToKeep1
<=
daysToKeep2
)))
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
pMsg
->
daysToKeep0
=
htonl
(
(
int32_t
)
p0
->
pVar
.
i64
);
pMsg
->
daysToKeep1
=
htonl
(
(
int32_t
)
p1
->
pVar
.
i64
);
pMsg
->
daysToKeep2
=
htonl
(
(
int32_t
)
p2
->
pVar
.
i64
);
pMsg
->
daysToKeep0
=
htonl
(
daysToKeep0
);
pMsg
->
daysToKeep1
=
htonl
(
daysToKeep1
);
pMsg
->
daysToKeep2
=
htonl
(
daysToKeep2
);
}
...
...
src/common/inc/tdataformat.h
浏览文件 @
c7c6bcee
...
...
@@ -139,7 +139,7 @@ typedef uint64_t TKEY;
#define tdGetTKEY(key) (((TKEY)ABS(key)) | (TKEY_NEGATIVE_FLAG & (TKEY)(key)))
#define tdGetKey(tkey) (((TSKEY)((tkey)&TKEY_VALUE_FILTER)) * (TKEY_IS_NEGATIVE(tkey) ? -1 : 1))
#define MIN_TS_KEY ((TSKEY)0x
8
000000000000001)
#define MIN_TS_KEY ((TSKEY)0x
c
000000000000001)
#define MAX_TS_KEY ((TSKEY)0x3fffffffffffffff)
#define TD_TO_TKEY(key) tdGetTKEY(((key) < MIN_TS_KEY) ? MIN_TS_KEY : (((key) > MAX_TS_KEY) ? MAX_TS_KEY : key))
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
浏览文件 @
c7c6bcee
...
...
@@ -19,6 +19,7 @@ import com.google.common.primitives.Longs;
import
com.google.common.primitives.Shorts
;
import
java.math.BigDecimal
;
import
java.nio.charset.StandardCharsets
;
import
java.sql.*
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
...
...
@@ -256,7 +257,11 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
public
byte
[]
getBytes
(
int
columnIndex
)
throws
SQLException
{
checkAvailability
(
columnIndex
,
this
.
columnMetaDataList
.
size
());
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getString
(
columnIndex
).
getBytes
();
Object
value
=
this
.
rowData
.
getObject
(
columnIndex
);
this
.
lastWasNull
=
value
==
null
;
if
(
value
==
null
)
return
null
;
...
...
@@ -331,25 +336,26 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
return
new
BigDecimal
(
this
.
blockData
.
getLong
(
columnIndex
-
1
));
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
BigDecimal
res
=
null
;
if
(!
lastWasNull
)
{
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
switch
(
nativeType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
res
=
new
BigDecimal
(
Long
.
parseLong
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
res
=
BigDecimal
.
valueOf
(
Double
.
parseDouble
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
new
BigDecimal
(((
Timestamp
)
this
.
rowData
.
getObject
(
columnIndex
)).
getTime
());
default
:
res
=
new
BigDecimal
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
());
}
if
(
lastWasNull
)
return
null
;
BigDecimal
res
;
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
switch
(
nativeType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
res
=
new
BigDecimal
(
Long
.
parseLong
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
res
=
BigDecimal
.
valueOf
(
Double
.
parseDouble
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
()));
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
new
BigDecimal
(((
Timestamp
)
this
.
rowData
.
getObject
(
columnIndex
)).
getTime
());
default
:
res
=
new
BigDecimal
(
this
.
rowData
.
getObject
(
columnIndex
).
toString
());
}
return
res
;
}
...
...
@@ -465,12 +471,6 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
public
boolean
isClosed
()
throws
SQLException
{
return
isClosed
;
// if (isClosed)
// return true;
// if (jniConnector != null) {
// isClosed = jniConnector.isResultsetClosed();
// }
// return isClosed;
}
public
String
getNString
(
int
columnIndex
)
throws
SQLException
{
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
浏览文件 @
c7c6bcee
...
...
@@ -84,8 +84,7 @@ public class TSDBStatement extends AbstractStatement {
long
pSql
=
this
.
connection
.
getConnector
().
executeQuery
(
sql
);
// if pSql is create/insert/update/delete/alter SQL
if
(
this
.
connection
.
getConnector
().
isUpdateQuery
(
pSql
))
{
int
rows
=
this
.
connection
.
getConnector
().
getAffectedRows
(
pSql
);
this
.
affectedRows
=
rows
==
0
?
-
1
:
this
.
connection
.
getConnector
().
getAffectedRows
(
pSql
);
this
.
affectedRows
=
this
.
connection
.
getConnector
().
getAffectedRows
(
pSql
);
this
.
connection
.
getConnector
().
freeResultSet
(
pSql
);
return
false
;
}
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
浏览文件 @
c7c6bcee
...
...
@@ -255,11 +255,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
true
;
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
null
;
}
wasNull
=
false
;
if
(
value
instanceof
byte
[])
return
new
String
((
byte
[])
value
);
return
value
.
toString
();
...
...
@@ -270,11 +268,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
true
;
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
false
;
}
wasNull
=
false
;
if
(
value
instanceof
Boolean
)
return
(
boolean
)
value
;
return
Boolean
.
parseBoolean
(
value
.
toString
());
...
...
@@ -285,11 +281,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
true
;
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
0
;
}
wasNull
=
false
;
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
if
(
valueAsLong
==
Byte
.
MIN_VALUE
)
return
0
;
...
...
@@ -309,11 +303,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
true
;
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
0
;
}
wasNull
=
false
;
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
if
(
valueAsLong
==
Short
.
MIN_VALUE
)
return
0
;
...
...
@@ -327,11 +319,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
true
;
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
0
;
}
wasNull
=
false
;
long
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
if
(
valueAsLong
==
Integer
.
MIN_VALUE
)
return
0
;
...
...
@@ -345,15 +335,11 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
true
;
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
0
;
}
wasNull
=
false
;
if
(
value
instanceof
Timestamp
)
{
if
(
value
instanceof
Timestamp
)
return
((
Timestamp
)
value
).
getTime
();
}
long
valueAsLong
=
0
;
try
{
valueAsLong
=
Long
.
parseLong
(
value
.
toString
());
...
...
@@ -370,11 +356,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
if
(
value
==
null
)
{
wasNull
=
true
;
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
0
;
}
wasNull
=
false
;
if
(
value
instanceof
Float
)
return
(
float
)
value
;
if
(
value
instanceof
Double
)
...
...
@@ -387,11 +371,10 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
{
wasNull
=
true
;
return
0
;
}
wasNull
=
false
;
if
(
value
instanceof
Double
||
value
instanceof
Float
)
return
(
double
)
value
;
return
Double
.
parseDouble
(
value
.
toString
());
...
...
@@ -402,6 +385,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
null
;
if
(
value
instanceof
byte
[])
...
...
@@ -428,6 +412,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
null
;
if
(
value
instanceof
Timestamp
)
...
...
@@ -440,6 +425,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
null
;
if
(
value
instanceof
Timestamp
)
...
...
@@ -457,6 +443,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
null
;
if
(
value
instanceof
Timestamp
)
...
...
@@ -473,6 +460,7 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
ret
=
Utils
.
parseTimestamp
(
value
.
toString
());
}
catch
(
Exception
e
)
{
ret
=
null
;
wasNull
=
true
;
}
return
ret
;
}
...
...
@@ -488,7 +476,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
public
Object
getObject
(
int
columnIndex
)
throws
SQLException
{
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
return
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
return
value
;
}
@Override
...
...
@@ -507,9 +497,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
checkAvailability
(
columnIndex
,
resultSet
.
get
(
pos
).
size
());
Object
value
=
resultSet
.
get
(
pos
).
get
(
columnIndex
-
1
);
wasNull
=
value
==
null
;
if
(
value
==
null
)
return
null
;
if
(
value
instanceof
Long
||
value
instanceof
Integer
||
value
instanceof
Short
||
value
instanceof
Byte
)
return
new
BigDecimal
(
Long
.
parseLong
(
value
.
toString
()));
if
(
value
instanceof
Double
||
value
instanceof
Float
)
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
浏览文件 @
c7c6bcee
...
...
@@ -140,8 +140,7 @@ public class RestfulStatement extends AbstractStatement {
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
JSONArray
data
=
jsonObject
.
getJSONArray
(
"data"
);
if
(
data
!=
null
)
{
int
rows
=
data
.
getJSONArray
(
0
).
getInteger
(
0
);
return
rows
==
0
?
-
1
:
data
.
getJSONArray
(
0
).
getInteger
(
0
);
return
data
.
getJSONArray
(
0
).
getInteger
(
0
);
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
浏览文件 @
c7c6bcee
...
...
@@ -660,7 +660,6 @@ public class RestfulResultSetTest {
@BeforeClass
public
static
void
beforeClass
()
{
try
{
Class
.
forName
(
"com.taosdata.jdbc.rs.RestfulDriver"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/restful_test?user=root&password=taosdata"
);
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"create database if not exists restful_test"
);
...
...
@@ -670,7 +669,7 @@ public class RestfulResultSetTest {
stmt
.
execute
(
"insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, 'abc', 10, 10, true, '涛思数据')"
);
rs
=
stmt
.
executeQuery
(
"select * from restful_test.weather"
);
rs
.
next
();
}
catch
(
ClassNotFoundException
|
SQLException
e
)
{
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/WasNullTest.java
0 → 100644
浏览文件 @
c7c6bcee
package
com.taosdata.jdbc.rs
;
import
org.junit.*
;
import
java.sql.*
;
public
class
WasNullTest
{
// private static final String host = "127.0.0.1";
private
static
final
String
host
=
"master"
;
private
Connection
conn
;
@Test
public
void
testGetTimestamp
()
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
execute
(
"drop table if exists weather"
);
stmt
.
execute
(
"create table if not exists weather(f1 timestamp, f2 timestamp, f3 int)"
);
stmt
.
execute
(
"insert into restful_test.weather values('2021-01-01 00:00:00.000', NULL, 100)"
);
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from restful_test.weather"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
while
(
rs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
if
(
i
==
2
)
{
Object
value
=
rs
.
getTimestamp
(
i
);
boolean
wasNull
=
rs
.
wasNull
();
Assert
.
assertNull
(
value
);
Assert
.
assertTrue
(
wasNull
);
}
else
{
Object
value
=
rs
.
getObject
(
i
);
boolean
wasNull
=
rs
.
wasNull
();
Assert
.
assertNotNull
(
value
);
Assert
.
assertFalse
(
wasNull
);
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@Test
public
void
testGetObject
()
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
execute
(
"drop table if exists weather"
);
stmt
.
execute
(
"create table if not exists weather(f1 timestamp, f2 int, f3 bigint, f4 float, f5 double, f6 binary(64), f7 smallint, f8 tinyint, f9 bool, f10 nchar(64))"
);
stmt
.
execute
(
"insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, NULL, 10, 10, true, '涛思数据')"
);
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from restful_test.weather"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
while
(
rs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
Object
value
=
rs
.
getObject
(
i
);
boolean
wasNull
=
rs
.
wasNull
();
if
(
i
==
6
)
{
Assert
.
assertNull
(
value
);
Assert
.
assertTrue
(
wasNull
);
}
else
{
Assert
.
assertNotNull
(
value
);
Assert
.
assertFalse
(
wasNull
);
}
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@Before
public
void
before
()
{
try
{
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS-RS://"
+
host
+
":6041/restful_test?user=root&password=taosdata"
);
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"drop database if exists restful_test"
);
stmt
.
execute
(
"create database if not exists restful_test"
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@After
public
void
after
()
{
try
{
Statement
statement
=
conn
.
createStatement
();
statement
.
execute
(
"drop database if exists restful_test"
);
if
(
conn
!=
null
)
conn
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
src/dnode/CMakeLists.txt
浏览文件 @
c7c6bcee
...
...
@@ -39,6 +39,10 @@ IF (TD_GRANT)
TARGET_LINK_LIBRARIES
(
taosd grant
)
ENDIF
()
IF
(
TD_USB_DONGLE
)
TARGET_LINK_LIBRARIES
(
taosd usb_dongle
)
ENDIF
()
IF
(
TD_MQTT
)
TARGET_LINK_LIBRARIES
(
taosd mqtt
)
ENDIF
()
...
...
src/dnode/src/dnodeMain.c
浏览文件 @
c7c6bcee
...
...
@@ -23,6 +23,7 @@
#include "twal.h"
#include "tfs.h"
#include "tsync.h"
#include "tgrant.h"
#include "dnodeStep.h"
#include "dnodePeer.h"
#include "dnodeModule.h"
...
...
@@ -88,6 +89,7 @@ static SStep tsDnodeSteps[] = {
{
"dnode-statustmr"
,
dnodeInitStatusTimer
,
dnodeCleanupStatusTimer
},
{
"dnode-telemetry"
,
dnodeInitTelemetry
,
dnodeCleanupTelemetry
},
{
"dnode-script"
,
scriptEnvPoolInit
,
scriptEnvPoolCleanup
},
{
"dnode-grant"
,
grantInit
,
grantCleanUp
},
};
static
SStep
tsDnodeCompactSteps
[]
=
{
...
...
src/inc/taosdef.h
浏览文件 @
c7c6bcee
...
...
@@ -295,7 +295,7 @@ do { \
#define TSDB_DEFAULT_DAYS_PER_FILE 10
#define TSDB_MIN_KEEP 1 // data in db to be reserved.
#define TSDB_MAX_KEEP 36500
0
// data in db to be reserved.
#define TSDB_MAX_KEEP 36500 // data in db to be reserved.
#define TSDB_DEFAULT_KEEP 3650 // ten years
#define TSDB_DEFAULT_MIN_ROW_FBLOCK 100
...
...
src/mnode/src/mnodeDb.c
浏览文件 @
c7c6bcee
...
...
@@ -927,9 +927,12 @@ static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg) {
pCreate
->
maxRowsPerFileBlock
=
htonl
(
pCreate
->
maxRowsPerFileBlock
);
int32_t
code
;
#ifdef GRANT_CHECK_WRITE
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
code
=
TSDB_CODE_GRANT_EXPIRED
;
}
else
if
(
!
pMsg
->
pUser
->
writeAuth
)
{
}
// else
#endif
if
(
!
pMsg
->
pUser
->
writeAuth
)
{
code
=
TSDB_CODE_MND_NO_RIGHTS
;
}
else
{
code
=
mnodeCreateDb
(
pMsg
->
pUser
->
pAcct
,
pCreate
,
pMsg
);
...
...
src/mnode/src/mnodeFunc.c
浏览文件 @
c7c6bcee
...
...
@@ -191,9 +191,11 @@ static int32_t mnodeUpdateFunc(SFuncObj *pFunc, void *pMsg) {
}
*/
int32_t
mnodeCreateFunc
(
SAcctObj
*
pAcct
,
char
*
name
,
int32_t
codeLen
,
char
*
codeScript
,
char
*
path
,
uint8_t
outputType
,
int16_t
outputLen
,
int32_t
funcType
,
int32_t
bufSize
,
SMnodeMsg
*
pMsg
)
{
#ifdef GRANT_CHECK_WRITE
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
return
TSDB_CODE_GRANT_EXPIRED
;
}
#endif
if
(
!
pMsg
->
pUser
->
writeAuth
)
{
return
TSDB_CODE_MND_NO_RIGHTS
;
...
...
src/mnode/src/mnodeMain.c
浏览文件 @
c7c6bcee
...
...
@@ -55,7 +55,7 @@ static SStep tsMnodeSteps[] = {
{
"mnodes"
,
mnodeInitMnodes
,
mnodeCleanupMnodes
},
{
"sdb"
,
sdbInit
,
sdbCleanUp
},
{
"balance"
,
bnInit
,
bnCleanUp
},
{
"grant"
,
grantInit
,
grantCleanUp
},
//
{"grant", grantInit, grantCleanUp},
{
"show"
,
mnodeInitShow
,
mnodeCleanUpShow
}
};
...
...
src/mnode/src/mnodeWrite.c
浏览文件 @
c7c6bcee
...
...
@@ -65,14 +65,16 @@ int32_t mnodeProcessWrite(SMnodeMsg *pMsg) {
return
TSDB_CODE_MND_MSG_NOT_PROCESSED
;
}
#ifdef GRANT_CHECK_WRITE
int32_t
code
=
grantCheck
(
TSDB_GRANT_TIME
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
mError
(
"msg:%p, app:%p type:%s not processed, reason:%s"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
tstrerror
(
code
));
return
code
;
}
#endif
code
=
mnodeInitMsg
(
pMsg
);
int32_t
code
=
mnodeInitMsg
(
pMsg
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
mError
(
"msg:%p, app:%p type:%s not processed, reason:%s"
,
pMsg
,
pMsg
->
rpcMsg
.
ahandle
,
taosMsg
[
pMsg
->
rpcMsg
.
msgType
],
tstrerror
(
code
));
...
...
src/os/src/darwin/dwSysInfo.c
浏览文件 @
c7c6bcee
...
...
@@ -65,6 +65,8 @@ static void taosGetSystemTimezone() {
struct
tm
tm1
;
localtime_r
(
&
tx1
,
&
tm1
);
tsDaylight
=
daylight
;
/*
* format example:
*
...
...
src/os/src/detail/osSysinfo.c
浏览文件 @
c7c6bcee
...
...
@@ -213,6 +213,8 @@ static void taosGetSystemTimezone() {
int32_t
tz
=
(
-
timezone
*
MILLISECOND_PER_SECOND
)
/
MILLISECOND_PER_HOUR
;
tz
+=
daylight
;
tsDaylight
=
daylight
;
/*
* format example:
*
...
...
src/os/src/detail/osTime.c
浏览文件 @
c7c6bcee
...
...
@@ -380,15 +380,20 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
assert
(
toPrecision
==
TSDB_TIME_PRECISION_MILLI
||
toPrecision
==
TSDB_TIME_PRECISION_MICRO
||
toPrecision
==
TSDB_TIME_PRECISION_NANO
);
double
tempResult
=
time
;
switch
(
fromPrecision
)
{
case
TSDB_TIME_PRECISION_MILLI
:
{
switch
(
toPrecision
)
{
case
TSDB_TIME_PRECISION_MILLI
:
return
time
;
case
TSDB_TIME_PRECISION_MICRO
:
return
time
*
1000
;
tempResult
*=
1000
;
time
*=
1000
;
goto
end_
;
case
TSDB_TIME_PRECISION_NANO
:
return
time
*
1000000
;
tempResult
*=
1000000
;
time
*=
1000000
;
goto
end_
;
}
}
// end from milli
case
TSDB_TIME_PRECISION_MICRO
:
{
...
...
@@ -398,7 +403,9 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
case
TSDB_TIME_PRECISION_MICRO
:
return
time
;
case
TSDB_TIME_PRECISION_NANO
:
return
time
*
1000
;
tempResult
*=
1000
;
time
*=
1000
;
goto
end_
;
}
}
//end from micro
case
TSDB_TIME_PRECISION_NANO
:
{
...
...
@@ -416,6 +423,10 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
return
time
;
// only to pass windows compilation
}
}
//end switch fromPrecision
end_:
if
(
tempResult
>
(
double
)
INT64_MAX
)
return
INT64_MAX
;
if
(
tempResult
<
(
double
)
INT64_MIN
)
return
INT64_MIN
+
1
;
// INT64_MIN means NULL
return
time
;
}
static
int32_t
getDuration
(
int64_t
val
,
char
unit
,
int64_t
*
result
,
int32_t
timePrecision
)
{
...
...
src/os/src/windows/wSysinfo.c
浏览文件 @
c7c6bcee
...
...
@@ -91,6 +91,17 @@ static void taosGetSystemTimezone() {
strcpy
(
tsTimezone
,
tz
);
}
cfg_timezone
->
cfgStatus
=
TAOS_CFG_CSTATUS_DEFAULT
;
#ifdef _MSC_VER
#if _MSC_VER >= 1900
int64_t
timezone
=
_timezone
;
int32_t
daylight
=
_daylight
;
char
**
tzname
=
_tzname
;
#endif
#endif
tsDaylight
=
daylight
;
uInfo
(
"timezone not configured, use default"
);
}
}
...
...
src/query/inc/qSqlparser.h
浏览文件 @
c7c6bcee
...
...
@@ -281,7 +281,7 @@ void *destroyRelationInfo(SRelationInfo* pFromInfo);
SRelationInfo
*
addSubqueryElem
(
SRelationInfo
*
pRelationInfo
,
SArray
*
pSub
,
SStrToken
*
pAlias
);
// sql expr leaf node
tSqlExpr
*
tSqlExprCreateIdValue
(
SStrToken
*
pToken
,
int32_t
optrType
);
tSqlExpr
*
tSqlExprCreateIdValue
(
SS
qlInfo
*
pInfo
,
SS
trToken
*
pToken
,
int32_t
optrType
);
tSqlExpr
*
tSqlExprCreateFunction
(
SArray
*
pParam
,
SStrToken
*
pFuncToken
,
SStrToken
*
endToken
,
int32_t
optType
);
SArray
*
tStrTokenAppend
(
SArray
*
pList
,
SStrToken
*
pToken
);
...
...
src/query/inc/sql.y
浏览文件 @
c7c6bcee
...
...
@@ -90,7 +90,6 @@ dbPrefix(A) ::= ids(X) DOT. {A = X; }
%type cpxName {SStrToken}
cpxName(A) ::= . {A.n = 0; }
cpxName(A) ::= DOT ids(Y). {A = Y; A.n += 1; }
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). {
X.n += Y.n;
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X);
...
...
@@ -520,7 +519,7 @@ selcollist(A) ::= sclp(P) distinct(Z) expr(X) as(Y). {
}
selcollist(A) ::= sclp(P) STAR. {
tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL);
tSqlExpr *pNode = tSqlExprCreateIdValue(
pInfo,
NULL, TK_ALL);
A = tSqlExprListAppend(P, pNode, 0, 0);
}
...
...
@@ -701,23 +700,23 @@ where_opt(A) ::= WHERE expr(X). {A = X;}
expr(A) ::= LP(X) expr(Y) RP(Z). {A = Y; A->exprToken.z = X.z; A->exprToken.n = (Z.z - X.z + 1);}
expr(A) ::= ID(X). { A = tSqlExprCreateIdValue(&X, TK_ID);}
expr(A) ::= ID(X) DOT ID(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(&X, TK_ID);}
expr(A) ::= ID(X) DOT STAR(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(&X, TK_ALL);}
expr(A) ::= INTEGER(X). { A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
expr(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
expr(A) ::= PLUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(&X, TK_INTEGER);}
expr(A) ::= FLOAT(X). { A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(&X, TK_FLOAT);}
expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(&X, TK_STRING);}
expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(&X, TK_NOW); }
expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
expr(A) ::= PLUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
expr(A) ::= MINUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(&X, TK_VARIABLE);}
expr(A) ::= BOOL(X). { A = tSqlExprCreateIdValue(&X, TK_BOOL);}
expr(A) ::= NULL(X). { A = tSqlExprCreateIdValue(&X, TK_NULL);}
expr(A) ::= ID(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_ID);}
expr(A) ::= ID(X) DOT ID(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(
pInfo,
&X, TK_ID);}
expr(A) ::= ID(X) DOT STAR(Y). { X.n += (1+Y.n); A = tSqlExprCreateIdValue(
pInfo,
&X, TK_ALL);}
expr(A) ::= INTEGER(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_INTEGER);}
expr(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_INTEGER);}
expr(A) ::= PLUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_INTEGER);}
expr(A) ::= FLOAT(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_FLOAT);}
expr(A) ::= MINUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_FLOAT);}
expr(A) ::= PLUS(X) FLOAT(Y). { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_FLOAT);}
expr(A) ::= STRING(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_STRING);}
expr(A) ::= NOW(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_NOW); }
expr(A) ::= VARIABLE(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_VARIABLE);}
expr(A) ::= PLUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_VARIABLE);}
expr(A) ::= MINUS(X) VARIABLE(Y). { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(
pInfo,
&X, TK_VARIABLE);}
expr(A) ::= BOOL(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_BOOL);}
expr(A) ::= NULL(X). { A = tSqlExprCreateIdValue(
pInfo,
&X, TK_NULL);}
// ordinary functions: min(x), max(x), top(k, 20)
expr(A) ::= ID(X) LP exprlist(Y) RP(E). { tStrTokenAppend(pInfo->funcs, &X); A = tSqlExprCreateFunction(Y, &X, &E, X.type); }
...
...
src/query/src/qAggMain.c
浏览文件 @
c7c6bcee
...
...
@@ -20,7 +20,6 @@
#include "tdigest.h"
#include "ttype.h"
#include "tsdb.h"
#include "tglobal.h"
#include "qAggMain.h"
#include "qFill.h"
...
...
@@ -172,7 +171,11 @@ typedef struct SDerivInfo {
}
SDerivInfo
;
typedef
struct
{
double
cumSum
;
union
{
double
d64CumSum
;
int64_t
i64CumSum
;
uint64_t
u64CumSum
;
};
}
SCumSumInfo
;
typedef
struct
{
...
...
@@ -4709,7 +4712,7 @@ static bool csum_function_setup(SQLFunctionCtx *pCtx, SResultRowCellInfo* pResIn
}
SCumSumInfo
*
pCumSumInfo
=
GET_ROWCELL_INTERBUF
(
pResInfo
);
pCumSumInfo
->
c
umSum
=
0
;
pCumSumInfo
->
i64C
umSum
=
0
;
return
true
;
}
...
...
@@ -4733,20 +4736,30 @@ static void csum_function(SQLFunctionCtx *pCtx) {
continue
;
}
double
v
=
0
;
GET_TYPED_DATA
(
v
,
double
,
pCtx
->
inputType
,
pData
);
pCumSumInfo
->
cumSum
+=
v
;
if
(
IS_SIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
int64_t
v
=
0
;
GET_TYPED_DATA
(
v
,
int64_t
,
pCtx
->
inputType
,
pData
);
pCumSumInfo
->
i64CumSum
+=
v
;
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
uint64_t
v
=
0
;
GET_TYPED_DATA
(
v
,
uint64_t
,
pCtx
->
inputType
,
pData
);
pCumSumInfo
->
u64CumSum
+=
v
;
}
else
if
(
IS_FLOAT_TYPE
(
pCtx
->
inputType
))
{
double
v
=
0
;
GET_TYPED_DATA
(
v
,
double
,
pCtx
->
inputType
,
pData
);
pCumSumInfo
->
d64CumSum
+=
v
;
}
*
pTimestamp
=
(
tsList
!=
NULL
)
?
tsList
[
i
]
:
0
;
if
(
IS_SIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
int64_t
*
retVal
=
(
int64_t
*
)
pCtx
->
pOutput
;
*
retVal
=
(
int64_t
)(
pCumSumInfo
->
c
umSum
);
*
retVal
=
(
int64_t
)(
pCumSumInfo
->
i64C
umSum
);
}
else
if
(
IS_UNSIGNED_NUMERIC_TYPE
(
pCtx
->
inputType
))
{
uint64_t
*
retVal
=
(
uint64_t
*
)
pCtx
->
pOutput
;
*
retVal
=
(
uint64_t
)(
pCumSumInfo
->
c
umSum
);
*
retVal
=
(
uint64_t
)(
pCumSumInfo
->
u64C
umSum
);
}
else
if
(
IS_FLOAT_TYPE
(
pCtx
->
inputType
))
{
double
*
retVal
=
(
double
*
)
pCtx
->
pOutput
;
SET_DOUBLE_VAL
(
retVal
,
pCumSumInfo
->
c
umSum
);
SET_DOUBLE_VAL
(
retVal
,
pCumSumInfo
->
d64C
umSum
);
}
++
notNullElems
;
...
...
src/query/src/qFilter.c
浏览文件 @
c7c6bcee
...
...
@@ -1841,6 +1841,15 @@ int32_t filterInitValFieldData(SFilterInfo *info) {
qError
(
"dump value to type[%d] failed"
,
type
);
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
// match/nmatch for nchar type need convert from ucs4 to mbs
if
(
type
==
TSDB_DATA_TYPE_NCHAR
&&
(
unit
->
compare
.
optr
==
TSDB_RELATION_MATCH
||
unit
->
compare
.
optr
==
TSDB_RELATION_NMATCH
)){
char
newValData
[
TSDB_REGEX_STRING_DEFAULT_LEN
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
]
=
{
0
};
int32_t
len
=
taosUcs4ToMbs
(
varDataVal
(
fi
->
data
),
varDataLen
(
fi
->
data
),
varDataVal
(
newValData
));
varDataSetLen
(
newValData
,
len
);
varDataCopy
(
fi
->
data
,
newValData
);
}
}
return
TSDB_CODE_SUCCESS
;
...
...
@@ -2960,9 +2969,18 @@ bool filterExecuteImplMisc(void *pinfo, int32_t numOfRows, int8_t** p, SDataStat
all
=
false
;
continue
;
}
// match/nmatch for nchar type need convert from ucs4 to mbs
if
(
info
->
cunits
[
uidx
].
dataType
==
TSDB_DATA_TYPE_NCHAR
&&
(
info
->
cunits
[
uidx
].
optr
==
TSDB_RELATION_MATCH
||
info
->
cunits
[
uidx
].
optr
==
TSDB_RELATION_NMATCH
)){
char
*
newColData
=
calloc
(
info
->
cunits
[
uidx
].
dataSize
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
,
1
);
int
len
=
taosUcs4ToMbs
(
varDataVal
(
colData
),
varDataLen
(
colData
),
varDataVal
(
newColData
));
varDataSetLen
(
newColData
,
len
);
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
info
->
cunits
[
uidx
].
func
],
info
->
cunits
[
uidx
].
optr
,
newColData
,
info
->
cunits
[
uidx
].
valData
);
tfree
(
newColData
);
}
else
{
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
info
->
cunits
[
uidx
].
func
],
info
->
cunits
[
uidx
].
optr
,
colData
,
info
->
cunits
[
uidx
].
valData
);
}
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
info
->
cunits
[
uidx
].
func
],
info
->
cunits
[
uidx
].
optr
,
colData
,
info
->
cunits
[
uidx
].
valData
);
if
((
*
p
)[
i
]
==
0
)
{
all
=
false
;
}
...
...
@@ -3009,7 +3027,15 @@ bool filterExecuteImpl(void *pinfo, int32_t numOfRows, int8_t** p, SDataStatis *
}
else
if
(
cunit
->
rfunc
>=
0
)
{
(
*
p
)[
i
]
=
(
*
gRangeCompare
[
cunit
->
rfunc
])(
colData
,
colData
,
cunit
->
valData
,
cunit
->
valData2
,
gDataCompare
[
cunit
->
func
]);
}
else
{
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
cunit
->
func
],
cunit
->
optr
,
colData
,
cunit
->
valData
);
if
(
cunit
->
dataType
==
TSDB_DATA_TYPE_NCHAR
&&
(
cunit
->
optr
==
TSDB_RELATION_MATCH
||
cunit
->
optr
==
TSDB_RELATION_NMATCH
)){
char
*
newColData
=
calloc
(
cunit
->
dataSize
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
,
1
);
int
len
=
taosUcs4ToMbs
(
varDataVal
(
colData
),
varDataLen
(
colData
),
varDataVal
(
newColData
));
varDataSetLen
(
newColData
,
len
);
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
cunit
->
func
],
cunit
->
optr
,
newColData
,
cunit
->
valData
);
tfree
(
newColData
);
}
else
{
(
*
p
)[
i
]
=
filterDoCompare
(
gDataCompare
[
cunit
->
func
],
cunit
->
optr
,
colData
,
cunit
->
valData
);
}
}
//FILTER_UNIT_SET_R(info, uidx, p[i]);
...
...
src/query/src/qSqlParser.c
浏览文件 @
c7c6bcee
...
...
@@ -134,7 +134,7 @@ SArray *tStrTokenAppend(SArray *pList, SStrToken *pToken) {
return
pList
;
}
tSqlExpr
*
tSqlExprCreateIdValue
(
SStrToken
*
pToken
,
int32_t
optrType
)
{
tSqlExpr
*
tSqlExprCreateIdValue
(
SS
qlInfo
*
pInfo
,
SS
trToken
*
pToken
,
int32_t
optrType
)
{
tSqlExpr
*
pSqlExpr
=
calloc
(
1
,
sizeof
(
tSqlExpr
));
if
(
pToken
!=
NULL
)
{
...
...
@@ -169,6 +169,7 @@ tSqlExpr *tSqlExprCreateIdValue(SStrToken *pToken, int32_t optrType) {
char
unit
=
0
;
int32_t
ret
=
parseAbsoluteDuration
(
pToken
->
z
,
pToken
->
n
,
&
pSqlExpr
->
value
.
i64
,
&
unit
,
TSDB_TIME_PRECISION_NANO
);
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
snprintf
(
pInfo
->
msg
,
tListLen
(
pInfo
->
msg
),
"%s"
,
pToken
->
z
);
terrno
=
TSDB_CODE_TSC_SQL_SYNTAX_ERROR
;
}
}
...
...
src/query/src/sql.c
浏览文件 @
c7c6bcee
/* This file is automatically generated by Lemon from input grammar
** source file "sql.y". */
/*
** 2000-05-29
**
...
...
@@ -22,9 +24,8 @@
** The following is the concatenation of all %include directives from the
** input grammar file:
*/
#include <stdio.h>
#include <assert.h>
/************ Begin %include sections from the grammar ************************/
#line 23 "sql.y"
#include <stdio.h>
#include <stdlib.h>
...
...
@@ -37,12 +38,209 @@
#include "ttokendef.h"
#include "tutil.h"
#include "tvariant.h"
#line 42 "sql.c"
/**************** End of %include directives **********************************/
/* These constants specify the various numeric values for terminal symbols
** in a format understandable to "makeheaders". This section is blank unless
** "lemon" is run with the "-m" command-line option.
***************** Begin makeheaders token definitions *************************/
/**************** End makeheaders token definitions ***************************/
/* These constants specify the various numeric values for terminal symbols.
***************** Begin token definitions *************************************/
#ifndef TK_ID
#define TK_ID 1
#define TK_BOOL 2
#define TK_TINYINT 3
#define TK_SMALLINT 4
#define TK_INTEGER 5
#define TK_BIGINT 6
#define TK_FLOAT 7
#define TK_DOUBLE 8
#define TK_STRING 9
#define TK_TIMESTAMP 10
#define TK_BINARY 11
#define TK_NCHAR 12
#define TK_OR 13
#define TK_AND 14
#define TK_NOT 15
#define TK_EQ 16
#define TK_NE 17
#define TK_ISNULL 18
#define TK_NOTNULL 19
#define TK_IS 20
#define TK_LIKE 21
#define TK_MATCH 22
#define TK_NMATCH 23
#define TK_GLOB 24
#define TK_BETWEEN 25
#define TK_IN 26
#define TK_GT 27
#define TK_GE 28
#define TK_LT 29
#define TK_LE 30
#define TK_BITAND 31
#define TK_BITOR 32
#define TK_LSHIFT 33
#define TK_RSHIFT 34
#define TK_PLUS 35
#define TK_MINUS 36
#define TK_DIVIDE 37
#define TK_TIMES 38
#define TK_STAR 39
#define TK_SLASH 40
#define TK_REM 41
#define TK_CONCAT 42
#define TK_UMINUS 43
#define TK_UPLUS 44
#define TK_BITNOT 45
#define TK_SHOW 46
#define TK_DATABASES 47
#define TK_TOPICS 48
#define TK_FUNCTIONS 49
#define TK_MNODES 50
#define TK_DNODES 51
#define TK_ACCOUNTS 52
#define TK_USERS 53
#define TK_MODULES 54
#define TK_QUERIES 55
#define TK_CONNECTIONS 56
#define TK_STREAMS 57
#define TK_VARIABLES 58
#define TK_SCORES 59
#define TK_GRANTS 60
#define TK_VNODES 61
#define TK_DOT 62
#define TK_CREATE 63
#define TK_TABLE 64
#define TK_STABLE 65
#define TK_DATABASE 66
#define TK_TABLES 67
#define TK_STABLES 68
#define TK_VGROUPS 69
#define TK_DROP 70
#define TK_TOPIC 71
#define TK_FUNCTION 72
#define TK_DNODE 73
#define TK_USER 74
#define TK_ACCOUNT 75
#define TK_USE 76
#define TK_DESCRIBE 77
#define TK_DESC 78
#define TK_ALTER 79
#define TK_PASS 80
#define TK_PRIVILEGE 81
#define TK_LOCAL 82
#define TK_COMPACT 83
#define TK_LP 84
#define TK_RP 85
#define TK_IF 86
#define TK_EXISTS 87
#define TK_AS 88
#define TK_OUTPUTTYPE 89
#define TK_AGGREGATE 90
#define TK_BUFSIZE 91
#define TK_PPS 92
#define TK_TSERIES 93
#define TK_DBS 94
#define TK_STORAGE 95
#define TK_QTIME 96
#define TK_CONNS 97
#define TK_STATE 98
#define TK_COMMA 99
#define TK_KEEP 100
#define TK_CACHE 101
#define TK_REPLICA 102
#define TK_QUORUM 103
#define TK_DAYS 104
#define TK_MINROWS 105
#define TK_MAXROWS 106
#define TK_BLOCKS 107
#define TK_CTIME 108
#define TK_WAL 109
#define TK_FSYNC 110
#define TK_COMP 111
#define TK_PRECISION 112
#define TK_UPDATE 113
#define TK_CACHELAST 114
#define TK_PARTITIONS 115
#define TK_UNSIGNED 116
#define TK_TAGS 117
#define TK_USING 118
#define TK_NULL 119
#define TK_NOW 120
#define TK_SELECT 121
#define TK_UNION 122
#define TK_ALL 123
#define TK_DISTINCT 124
#define TK_FROM 125
#define TK_VARIABLE 126
#define TK_INTERVAL 127
#define TK_EVERY 128
#define TK_SESSION 129
#define TK_STATE_WINDOW 130
#define TK_FILL 131
#define TK_SLIDING 132
#define TK_ORDER 133
#define TK_BY 134
#define TK_ASC 135
#define TK_GROUP 136
#define TK_HAVING 137
#define TK_LIMIT 138
#define TK_OFFSET 139
#define TK_SLIMIT 140
#define TK_SOFFSET 141
#define TK_WHERE 142
#define TK_RESET 143
#define TK_QUERY 144
#define TK_SYNCDB 145
#define TK_ADD 146
#define TK_COLUMN 147
#define TK_MODIFY 148
#define TK_TAG 149
#define TK_CHANGE 150
#define TK_SET 151
#define TK_KILL 152
#define TK_CONNECTION 153
#define TK_STREAM 154
#define TK_COLON 155
#define TK_ABORT 156
#define TK_AFTER 157
#define TK_ATTACH 158
#define TK_BEFORE 159
#define TK_BEGIN 160
#define TK_CASCADE 161
#define TK_CLUSTER 162
#define TK_CONFLICT 163
#define TK_COPY 164
#define TK_DEFERRED 165
#define TK_DELIMITERS 166
#define TK_DETACH 167
#define TK_EACH 168
#define TK_END 169
#define TK_EXPLAIN 170
#define TK_FAIL 171
#define TK_FOR 172
#define TK_IGNORE 173
#define TK_IMMEDIATE 174
#define TK_INITIALLY 175
#define TK_INSTEAD 176
#define TK_KEY 177
#define TK_OF 178
#define TK_RAISE 179
#define TK_REPLACE 180
#define TK_RESTRICT 181
#define TK_ROW 182
#define TK_STATEMENT 183
#define TK_TRIGGER 184
#define TK_VIEW 185
#define TK_IPTOKEN 186
#define TK_SEMI 187
#define TK_NONE 188
#define TK_PREV 189
#define TK_LINEAR 190
#define TK_IMPORT 191
#define TK_TBNAME 192
#define TK_JOIN 193
#define TK_INSERT 194
#define TK_INTO 195
#define TK_VALUES 196
#endif
/**************** End token definitions ***************************************/
/* The next sections is a series of control #defines.
** various aspects of the generated parser.
...
...
@@ -771,6 +969,7 @@ typedef struct yyParser yyParser;
#ifndef NDEBUG
#include <stdio.h>
#include <assert.h>
static
FILE
*
yyTraceFILE
=
0
;
static
char
*
yyTracePrompt
=
0
;
#endif
/* NDEBUG */
...
...
@@ -1513,7 +1712,9 @@ static void yy_destructor(
case
250
:
/* selcollist */
case
264
:
/* sclp */
{
#line 762 "sql.y"
tSqlExprListDestroy
((
yypminor
->
yy421
));
#line 1717 "sql.c"
}
break
;
case
221
:
/* intitemlist */
...
...
@@ -1527,24 +1728,32 @@ tSqlExprListDestroy((yypminor->yy421));
case
272
:
/* sortlist */
case
276
:
/* grouplist */
{
#line 256 "sql.y"
taosArrayDestroy
((
yypminor
->
yy421
));
#line 1733 "sql.c"
}
break
;
case
242
:
/* create_table_list */
{
#line 364 "sql.y"
destroyCreateTableSql
((
yypminor
->
yy438
));
#line 1740 "sql.c"
}
break
;
case
247
:
/* select */
{
#line 484 "sql.y"
destroySqlNode
((
yypminor
->
yy56
));
#line 1747 "sql.c"
}
break
;
case
251
:
/* from */
case
268
:
/* tablelist */
case
269
:
/* sub */
{
#line 539 "sql.y"
destroyRelationInfo
((
yypminor
->
yy8
));
#line 1756 "sql.c"
}
break
;
case
252
:
/* where_opt */
...
...
@@ -1552,17 +1761,23 @@ destroyRelationInfo((yypminor->yy8));
case
266
:
/* expr */
case
277
:
/* expritem */
{
#line 691 "sql.y"
tSqlExprDestroy
((
yypminor
->
yy439
));
#line 1766 "sql.c"
}
break
;
case
263
:
/* union */
{
#line 492 "sql.y"
destroyAllSqlNode
((
yypminor
->
yy421
));
#line 1773 "sql.c"
}
break
;
case
273
:
/* sortitem */
{
#line 624 "sql.y"
tVariantDestroy
(
&
(
yypminor
->
yy430
));
#line 1780 "sql.c"
}
break
;
/********* End destructor definitions *****************************************/
...
...
@@ -1729,7 +1944,7 @@ static YYACTIONTYPE yy_find_shift_action(
#endif
/* YYWILDCARD */
return
yy_default
[
stateno
];
}
else
{
assert
(
i
>=
0
&&
i
<
sizeof
(
yy_action
)
/
sizeof
(
yy_action
[
0
]
)
);
assert
(
i
>=
0
&&
i
<
(
int
)(
sizeof
(
yy_action
)
/
sizeof
(
yy_action
[
0
])
)
);
return
yy_action
[
i
];
}
}
while
(
1
);
...
...
@@ -2473,54 +2688,6 @@ static YYACTIONTYPE yy_reduce(
(
void
)
yyLookahead
;
(
void
)
yyLookaheadToken
;
yymsp
=
yypParser
->
yytos
;
#ifndef NDEBUG
if
(
yyTraceFILE
&&
yyruleno
<
(
int
)(
sizeof
(
yyRuleName
)
/
sizeof
(
yyRuleName
[
0
]))
){
yysize
=
yyRuleInfoNRhs
[
yyruleno
];
if
(
yysize
){
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s]%s, pop back to state %d.
\n
"
,
yyTracePrompt
,
yyruleno
,
yyRuleName
[
yyruleno
],
yyruleno
<
YYNRULE_WITH_ACTION
?
""
:
" without external action"
,
yymsp
[
yysize
].
stateno
);
}
else
{
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s]%s.
\n
"
,
yyTracePrompt
,
yyruleno
,
yyRuleName
[
yyruleno
],
yyruleno
<
YYNRULE_WITH_ACTION
?
""
:
" without external action"
);
}
}
#endif
/* NDEBUG */
/* Check that the stack is large enough to grow by a single entry
** if the RHS of the rule is empty. This ensures that there is room
** enough on the stack to push the LHS value */
if
(
yyRuleInfoNRhs
[
yyruleno
]
==
0
){
#ifdef YYTRACKMAXSTACKDEPTH
if
(
(
int
)(
yypParser
->
yytos
-
yypParser
->
yystack
)
>
yypParser
->
yyhwm
){
yypParser
->
yyhwm
++
;
assert
(
yypParser
->
yyhwm
==
(
int
)(
yypParser
->
yytos
-
yypParser
->
yystack
));
}
#endif
#if YYSTACKDEPTH>0
if
(
yypParser
->
yytos
>=
yypParser
->
yystackEnd
){
yyStackOverflow
(
yypParser
);
/* The call to yyStackOverflow() above pops the stack until it is
** empty, causing the main parser loop to exit. So the return value
** is never used and does not matter. */
return
0
;
}
#else
if
(
yypParser
->
yytos
>=&
yypParser
->
yystack
[
yypParser
->
yystksz
-
1
]
){
if
(
yyGrowStack
(
yypParser
)
){
yyStackOverflow
(
yypParser
);
/* The call to yyStackOverflow() above pops the stack until it is
** empty, causing the main parser loop to exit. So the return value
** is never used and does not matter. */
return
0
;
}
yymsp
=
yypParser
->
yytos
;
}
#endif
}
switch
(
yyruleno
){
/* Beginning here are the reduction cases. A typical example
...
...
@@ -2537,227 +2704,347 @@ static YYACTIONTYPE yy_reduce(
case
139
:
/* cmd ::= CREATE TABLE create_table_args */
yytestcase
(
yyruleno
==
139
);
case
140
:
/* cmd ::= CREATE TABLE create_stable_args */
yytestcase
(
yyruleno
==
140
);
case
141
:
/* cmd ::= CREATE STABLE create_stable_args */
yytestcase
(
yyruleno
==
141
);
#line 63 "sql.y"
{}
#line 2709 "sql.c"
break
;
case
1
:
/* cmd ::= SHOW DATABASES */
#line 66 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_DB
,
0
,
0
);}
#line 2714 "sql.c"
break
;
case
2
:
/* cmd ::= SHOW TOPICS */
#line 67 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_TP
,
0
,
0
);}
#line 2719 "sql.c"
break
;
case
3
:
/* cmd ::= SHOW FUNCTIONS */
#line 68 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_FUNCTION
,
0
,
0
);}
#line 2724 "sql.c"
break
;
case
4
:
/* cmd ::= SHOW MNODES */
#line 69 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_MNODE
,
0
,
0
);}
#line 2729 "sql.c"
break
;
case
5
:
/* cmd ::= SHOW DNODES */
#line 70 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_DNODE
,
0
,
0
);}
#line 2734 "sql.c"
break
;
case
6
:
/* cmd ::= SHOW ACCOUNTS */
#line 71 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_ACCT
,
0
,
0
);}
#line 2739 "sql.c"
break
;
case
7
:
/* cmd ::= SHOW USERS */
#line 72 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_USER
,
0
,
0
);}
#line 2744 "sql.c"
break
;
case
8
:
/* cmd ::= SHOW MODULES */
#line 74 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_MODULE
,
0
,
0
);
}
#line 2749 "sql.c"
break
;
case
9
:
/* cmd ::= SHOW QUERIES */
#line 75 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_QUERIES
,
0
,
0
);
}
#line 2754 "sql.c"
break
;
case
10
:
/* cmd ::= SHOW CONNECTIONS */
#line 76 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_CONNS
,
0
,
0
);}
#line 2759 "sql.c"
break
;
case
11
:
/* cmd ::= SHOW STREAMS */
#line 77 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_STREAMS
,
0
,
0
);
}
#line 2764 "sql.c"
break
;
case
12
:
/* cmd ::= SHOW VARIABLES */
#line 78 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_VARIABLES
,
0
,
0
);
}
#line 2769 "sql.c"
break
;
case
13
:
/* cmd ::= SHOW SCORES */
#line 79 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_SCORES
,
0
,
0
);
}
#line 2774 "sql.c"
break
;
case
14
:
/* cmd ::= SHOW GRANTS */
#line 80 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_GRANTS
,
0
,
0
);
}
#line 2779 "sql.c"
break
;
case
15
:
/* cmd ::= SHOW VNODES */
#line 82 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_VNODES
,
0
,
0
);
}
#line 2784 "sql.c"
break
;
case
16
:
/* cmd ::= SHOW VNODES ids */
#line 83 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_VNODES
,
&
yymsp
[
0
].
minor
.
yy0
,
0
);
}
#line 2789 "sql.c"
break
;
case
17
:
/* dbPrefix ::= */
#line 87 "sql.y"
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
yymsp
[
1
].
minor
.
yy0
.
type
=
0
;}
#line 2794 "sql.c"
break
;
case
18
:
/* dbPrefix ::= ids DOT */
#line 88 "sql.y"
{
yylhsminor
.
yy0
=
yymsp
[
-
1
].
minor
.
yy0
;
}
#line 2799 "sql.c"
yymsp
[
-
1
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
19
:
/* cpxName ::= */
#line 91 "sql.y"
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
#line 2805 "sql.c"
break
;
case
20
:
/* cpxName ::= DOT ids */
#line 92 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
1
;
}
#line 2810 "sql.c"
break
;
case
21
:
/* cmd ::= SHOW CREATE TABLE ids cpxName */
#line 93 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
setDCLSqlElems
(
pInfo
,
TSDB_SQL_SHOW_CREATE_TABLE
,
1
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
#line 2818 "sql.c"
break
;
case
22
:
/* cmd ::= SHOW CREATE STABLE ids cpxName */
#line 97 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
setDCLSqlElems
(
pInfo
,
TSDB_SQL_SHOW_CREATE_STABLE
,
1
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
#line 2826 "sql.c"
break
;
case
23
:
/* cmd ::= SHOW CREATE DATABASE ids */
#line 102 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_SHOW_CREATE_DATABASE
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2833 "sql.c"
break
;
case
24
:
/* cmd ::= SHOW dbPrefix TABLES */
#line 106 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_TABLE
,
&
yymsp
[
-
1
].
minor
.
yy0
,
0
);
}
#line 2840 "sql.c"
break
;
case
25
:
/* cmd ::= SHOW dbPrefix TABLES LIKE ids */
#line 110 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_TABLE
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2847 "sql.c"
break
;
case
26
:
/* cmd ::= SHOW dbPrefix STABLES */
#line 114 "sql.y"
{
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_METRIC
,
&
yymsp
[
-
1
].
minor
.
yy0
,
0
);
}
#line 2854 "sql.c"
break
;
case
27
:
/* cmd ::= SHOW dbPrefix STABLES LIKE ids */
#line 118 "sql.y"
{
SStrToken
token
;
tSetDbName
(
&
token
,
&
yymsp
[
-
3
].
minor
.
yy0
);
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_METRIC
,
&
token
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2863 "sql.c"
break
;
case
28
:
/* cmd ::= SHOW dbPrefix VGROUPS */
#line 124 "sql.y"
{
SStrToken
token
;
tSetDbName
(
&
token
,
&
yymsp
[
-
1
].
minor
.
yy0
);
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_VGROUP
,
&
token
,
0
);
}
#line 2872 "sql.c"
break
;
case
29
:
/* cmd ::= SHOW dbPrefix VGROUPS ids */
#line 130 "sql.y"
{
SStrToken
token
;
tSetDbName
(
&
token
,
&
yymsp
[
-
2
].
minor
.
yy0
);
setShowOptions
(
pInfo
,
TSDB_MGMT_TABLE_VGROUP
,
&
token
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2881 "sql.c"
break
;
case
30
:
/* cmd ::= DROP TABLE ifexists ids cpxName */
#line 137 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
setDropDbTableInfo
(
pInfo
,
TSDB_SQL_DROP_TABLE
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
,
-
1
);
}
#line 2889 "sql.c"
break
;
case
31
:
/* cmd ::= DROP STABLE ifexists ids cpxName */
#line 143 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
setDropDbTableInfo
(
pInfo
,
TSDB_SQL_DROP_TABLE
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
-
2
].
minor
.
yy0
,
-
1
,
TSDB_SUPER_TABLE
);
}
#line 2897 "sql.c"
break
;
case
32
:
/* cmd ::= DROP DATABASE ifexists ids */
#line 148 "sql.y"
{
setDropDbTableInfo
(
pInfo
,
TSDB_SQL_DROP_DB
,
&
yymsp
[
0
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
TSDB_DB_TYPE_DEFAULT
,
-
1
);
}
#line 2902 "sql.c"
break
;
case
33
:
/* cmd ::= DROP TOPIC ifexists ids */
#line 149 "sql.y"
{
setDropDbTableInfo
(
pInfo
,
TSDB_SQL_DROP_DB
,
&
yymsp
[
0
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
TSDB_DB_TYPE_TOPIC
,
-
1
);
}
#line 2907 "sql.c"
break
;
case
34
:
/* cmd ::= DROP FUNCTION ids */
#line 150 "sql.y"
{
setDropFuncInfo
(
pInfo
,
TSDB_SQL_DROP_FUNCTION
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2912 "sql.c"
break
;
case
35
:
/* cmd ::= DROP DNODE ids */
#line 152 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_DROP_DNODE
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2917 "sql.c"
break
;
case
36
:
/* cmd ::= DROP USER ids */
#line 153 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_DROP_USER
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2922 "sql.c"
break
;
case
37
:
/* cmd ::= DROP ACCOUNT ids */
#line 154 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_DROP_ACCT
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2927 "sql.c"
break
;
case
38
:
/* cmd ::= USE ids */
#line 157 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_USE_DB
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 2932 "sql.c"
break
;
case
39
:
/* cmd ::= DESCRIBE ids cpxName */
case
40
:
/* cmd ::= DESC ids cpxName */
yytestcase
(
yyruleno
==
40
);
#line 160 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
setDCLSqlElems
(
pInfo
,
TSDB_SQL_DESCRIBE_TABLE
,
1
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
#line 2941 "sql.c"
break
;
case
41
:
/* cmd ::= ALTER USER ids PASS ids */
#line 170 "sql.y"
{
setAlterUserSql
(
pInfo
,
TSDB_ALTER_USER_PASSWD
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
NULL
);
}
#line 2946 "sql.c"
break
;
case
42
:
/* cmd ::= ALTER USER ids PRIVILEGE ids */
#line 171 "sql.y"
{
setAlterUserSql
(
pInfo
,
TSDB_ALTER_USER_PRIVILEGES
,
&
yymsp
[
-
2
].
minor
.
yy0
,
NULL
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 2951 "sql.c"
break
;
case
43
:
/* cmd ::= ALTER DNODE ids ids */
#line 172 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_CFG_DNODE
,
2
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2956 "sql.c"
break
;
case
44
:
/* cmd ::= ALTER DNODE ids ids ids */
#line 173 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_CFG_DNODE
,
3
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2961 "sql.c"
break
;
case
45
:
/* cmd ::= ALTER LOCAL ids */
#line 174 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_CFG_LOCAL
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2966 "sql.c"
break
;
case
46
:
/* cmd ::= ALTER LOCAL ids ids */
#line 175 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_CFG_LOCAL
,
2
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 2971 "sql.c"
break
;
case
47
:
/* cmd ::= ALTER DATABASE ids alter_db_optr */
case
48
:
/* cmd ::= ALTER TOPIC ids alter_topic_optr */
yytestcase
(
yyruleno
==
48
);
#line 176 "sql.y"
{
SStrToken
t
=
{
0
};
setCreateDbInfo
(
pInfo
,
TSDB_SQL_ALTER_DB
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy90
,
&
t
);}
#line 2977 "sql.c"
break
;
case
49
:
/* cmd ::= ALTER ACCOUNT ids acct_optr */
#line 179 "sql.y"
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_ALTER_ACCT
,
&
yymsp
[
-
1
].
minor
.
yy0
,
NULL
,
&
yymsp
[
0
].
minor
.
yy171
);}
#line 2982 "sql.c"
break
;
case
50
:
/* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
#line 180 "sql.y"
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_ALTER_ACCT
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy171
);}
#line 2987 "sql.c"
break
;
case
51
:
/* cmd ::= COMPACT VNODES IN LP exprlist RP */
#line 184 "sql.y"
{
setCompactVnodeSql
(
pInfo
,
TSDB_SQL_COMPACT_VNODE
,
yymsp
[
-
1
].
minor
.
yy421
);}
#line 2992 "sql.c"
break
;
case
52
:
/* ids ::= ID */
case
53
:
/* ids ::= STRING */
yytestcase
(
yyruleno
==
53
);
#line 190 "sql.y"
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 2998 "sql.c"
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
54
:
/* ifexists ::= IF EXISTS */
#line 194 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
=
1
;}
#line 3004 "sql.c"
break
;
case
55
:
/* ifexists ::= */
case
57
:
/* ifnotexists ::= */
yytestcase
(
yyruleno
==
57
);
case
181
:
/* distinct ::= */
yytestcase
(
yyruleno
==
181
);
#line 195 "sql.y"
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;}
#line 3011 "sql.c"
break
;
case
56
:
/* ifnotexists ::= IF NOT EXISTS */
#line 198 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy0
.
n
=
1
;}
#line 3016 "sql.c"
break
;
case
58
:
/* cmd ::= CREATE DNODE ids */
#line 203 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_CREATE_DNODE
,
1
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 3021 "sql.c"
break
;
case
59
:
/* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
#line 205 "sql.y"
{
setCreateAcctSql
(
pInfo
,
TSDB_SQL_CREATE_ACCT
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy171
);}
#line 3026 "sql.c"
break
;
case
60
:
/* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
case
61
:
/* cmd ::= CREATE TOPIC ifnotexists ids topic_optr */
yytestcase
(
yyruleno
==
61
);
#line 206 "sql.y"
{
setCreateDbInfo
(
pInfo
,
TSDB_SQL_CREATE_DB
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy90
,
&
yymsp
[
-
2
].
minor
.
yy0
);}
#line 3032 "sql.c"
break
;
case
62
:
/* cmd ::= CREATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
#line 208 "sql.y"
{
setCreateFuncInfo
(
pInfo
,
TSDB_SQL_CREATE_FUNCTION
,
&
yymsp
[
-
5
].
minor
.
yy0
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy183
,
&
yymsp
[
0
].
minor
.
yy0
,
1
);}
#line 3037 "sql.c"
break
;
case
63
:
/* cmd ::= CREATE AGGREGATE FUNCTION ids AS ids OUTPUTTYPE typename bufsize */
#line 209 "sql.y"
{
setCreateFuncInfo
(
pInfo
,
TSDB_SQL_CREATE_FUNCTION
,
&
yymsp
[
-
5
].
minor
.
yy0
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
1
].
minor
.
yy183
,
&
yymsp
[
0
].
minor
.
yy0
,
2
);}
#line 3042 "sql.c"
break
;
case
64
:
/* cmd ::= CREATE USER ids PASS ids */
#line 210 "sql.y"
{
setCreateUserSql
(
pInfo
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 3047 "sql.c"
break
;
case
65
:
/* bufsize ::= */
case
67
:
/* pps ::= */
yytestcase
(
yyruleno
==
67
);
...
...
@@ -2769,7 +3056,9 @@ static YYACTIONTYPE yy_reduce(
case
79
:
/* users ::= */
yytestcase
(
yyruleno
==
79
);
case
81
:
/* conns ::= */
yytestcase
(
yyruleno
==
81
);
case
83
:
/* state ::= */
yytestcase
(
yyruleno
==
83
);
#line 212 "sql.y"
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
#line 3061 "sql.c"
break
;
case
66
:
/* bufsize ::= BUFSIZE INTEGER */
case
68
:
/* pps ::= PPS INTEGER */
yytestcase
(
yyruleno
==
68
);
...
...
@@ -2781,9 +3070,12 @@ static YYACTIONTYPE yy_reduce(
case
80
:
/* users ::= USERS INTEGER */
yytestcase
(
yyruleno
==
80
);
case
82
:
/* conns ::= CONNS INTEGER */
yytestcase
(
yyruleno
==
82
);
case
84
:
/* state ::= STATE ids */
yytestcase
(
yyruleno
==
84
);
#line 213 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 3075 "sql.c"
break
;
case
85
:
/* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
#line 243 "sql.y"
{
yylhsminor
.
yy171
.
maxUsers
=
(
yymsp
[
-
2
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
2
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy171
.
maxDbs
=
(
yymsp
[
-
3
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
3
].
minor
.
yy0
.
z
)
:-
1
;
...
...
@@ -2795,16 +3087,21 @@ static YYACTIONTYPE yy_reduce(
yylhsminor
.
yy171
.
maxConnections
=
(
yymsp
[
-
1
].
minor
.
yy0
.
n
>
0
)
?
atoi
(
yymsp
[
-
1
].
minor
.
yy0
.
z
)
:-
1
;
yylhsminor
.
yy171
.
stat
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 3090 "sql.c"
yymsp
[
-
8
].
minor
.
yy171
=
yylhsminor
.
yy171
;
break
;
case
86
:
/* intitemlist ::= intitemlist COMMA intitem */
case
155
:
/* tagitemlist ::= tagitemlist COMMA tagitem */
yytestcase
(
yyruleno
==
155
);
#line 259 "sql.y"
{
yylhsminor
.
yy421
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy430
,
-
1
);
}
#line 3097 "sql.c"
yymsp
[
-
2
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
87
:
/* intitemlist ::= intitem */
case
156
:
/* tagitemlist ::= tagitem */
yytestcase
(
yyruleno
==
156
);
#line 260 "sql.y"
{
yylhsminor
.
yy421
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy430
,
-
1
);
}
#line 3104 "sql.c"
yymsp
[
0
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
88
:
/* intitem ::= INTEGER */
...
...
@@ -2812,11 +3109,15 @@ static YYACTIONTYPE yy_reduce(
case
158
:
/* tagitem ::= FLOAT */
yytestcase
(
yyruleno
==
158
);
case
159
:
/* tagitem ::= STRING */
yytestcase
(
yyruleno
==
159
);
case
160
:
/* tagitem ::= BOOL */
yytestcase
(
yyruleno
==
160
);
#line 262 "sql.y"
{
toTSDBType
(
yymsp
[
0
].
minor
.
yy0
.
type
);
tVariantCreate
(
&
yylhsminor
.
yy430
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 3114 "sql.c"
yymsp
[
0
].
minor
.
yy430
=
yylhsminor
.
yy430
;
break
;
case
89
:
/* keep ::= KEEP intitemlist */
#line 266 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy421
=
yymsp
[
0
].
minor
.
yy421
;
}
#line 3120 "sql.c"
break
;
case
90
:
/* cache ::= CACHE INTEGER */
case
91
:
/* replica ::= REPLICA INTEGER */
yytestcase
(
yyruleno
==
91
);
...
...
@@ -2833,99 +3134,142 @@ static YYACTIONTYPE yy_reduce(
case
102
:
/* update ::= UPDATE INTEGER */
yytestcase
(
yyruleno
==
102
);
case
103
:
/* cachelast ::= CACHELAST INTEGER */
yytestcase
(
yyruleno
==
103
);
case
104
:
/* partitions ::= PARTITIONS INTEGER */
yytestcase
(
yyruleno
==
104
);
#line 268 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 3139 "sql.c"
break
;
case
105
:
/* db_optr ::= */
#line 285 "sql.y"
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy90
);
yymsp
[
1
].
minor
.
yy90
.
dbType
=
TSDB_DB_TYPE_DEFAULT
;}
#line 3144 "sql.c"
break
;
case
106
:
/* db_optr ::= db_optr cache */
#line 287 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
cacheBlockSize
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3149 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
107
:
/* db_optr ::= db_optr replica */
case
124
:
/* alter_db_optr ::= alter_db_optr replica */
yytestcase
(
yyruleno
==
124
);
#line 288 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
replica
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3156 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
108
:
/* db_optr ::= db_optr quorum */
case
125
:
/* alter_db_optr ::= alter_db_optr quorum */
yytestcase
(
yyruleno
==
125
);
#line 289 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
quorum
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3163 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
109
:
/* db_optr ::= db_optr days */
#line 290 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
daysPerFile
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3169 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
110
:
/* db_optr ::= db_optr minrows */
#line 291 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
minRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
#line 3175 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
111
:
/* db_optr ::= db_optr maxrows */
#line 292 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
maxRowsPerBlock
=
strtod
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
);
}
#line 3181 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
112
:
/* db_optr ::= db_optr blocks */
case
127
:
/* alter_db_optr ::= alter_db_optr blocks */
yytestcase
(
yyruleno
==
127
);
#line 293 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
numOfBlocks
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3188 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
113
:
/* db_optr ::= db_optr ctime */
#line 294 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
commitTime
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3194 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
114
:
/* db_optr ::= db_optr wal */
#line 295 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
walLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3200 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
115
:
/* db_optr ::= db_optr fsync */
#line 296 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
fsyncPeriod
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3206 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
116
:
/* db_optr ::= db_optr comp */
case
128
:
/* alter_db_optr ::= alter_db_optr comp */
yytestcase
(
yyruleno
==
128
);
#line 297 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
compressionLevel
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3213 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
117
:
/* db_optr ::= db_optr prec */
#line 298 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
precision
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 3219 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
118
:
/* db_optr ::= db_optr keep */
case
126
:
/* alter_db_optr ::= alter_db_optr keep */
yytestcase
(
yyruleno
==
126
);
#line 299 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
keep
=
yymsp
[
0
].
minor
.
yy421
;
}
#line 3226 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
119
:
/* db_optr ::= db_optr update */
case
129
:
/* alter_db_optr ::= alter_db_optr update */
yytestcase
(
yyruleno
==
129
);
#line 300 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
update
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3233 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
120
:
/* db_optr ::= db_optr cachelast */
case
130
:
/* alter_db_optr ::= alter_db_optr cachelast */
yytestcase
(
yyruleno
==
130
);
#line 301 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
cachelast
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3240 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
121
:
/* topic_optr ::= db_optr */
case
131
:
/* alter_topic_optr ::= alter_db_optr */
yytestcase
(
yyruleno
==
131
);
#line 305 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
0
].
minor
.
yy90
;
yylhsminor
.
yy90
.
dbType
=
TSDB_DB_TYPE_TOPIC
;
}
#line 3247 "sql.c"
yymsp
[
0
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
122
:
/* topic_optr ::= topic_optr partitions */
case
132
:
/* alter_topic_optr ::= alter_topic_optr partitions */
yytestcase
(
yyruleno
==
132
);
#line 306 "sql.y"
{
yylhsminor
.
yy90
=
yymsp
[
-
1
].
minor
.
yy90
;
yylhsminor
.
yy90
.
partitions
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3254 "sql.c"
yymsp
[
-
1
].
minor
.
yy90
=
yylhsminor
.
yy90
;
break
;
case
123
:
/* alter_db_optr ::= */
#line 309 "sql.y"
{
setDefaultCreateDbOption
(
&
yymsp
[
1
].
minor
.
yy90
);
yymsp
[
1
].
minor
.
yy90
.
dbType
=
TSDB_DB_TYPE_DEFAULT
;}
#line 3260 "sql.c"
break
;
case
133
:
/* typename ::= ids */
#line 329 "sql.y"
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
tSetColumnType
(
&
yylhsminor
.
yy183
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 3268 "sql.c"
yymsp
[
0
].
minor
.
yy183
=
yylhsminor
.
yy183
;
break
;
case
134
:
/* typename ::= ids LP signed RP */
#line 335 "sql.y"
{
if
(
yymsp
[
-
1
].
minor
.
yy325
<=
0
)
{
yymsp
[
-
3
].
minor
.
yy0
.
type
=
0
;
...
...
@@ -2935,30 +3279,42 @@ static YYACTIONTYPE yy_reduce(
tSetColumnType
(
&
yylhsminor
.
yy183
,
&
yymsp
[
-
3
].
minor
.
yy0
);
}
}
#line 3282 "sql.c"
yymsp
[
-
3
].
minor
.
yy183
=
yylhsminor
.
yy183
;
break
;
case
135
:
/* typename ::= ids UNSIGNED */
#line 346 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
type
=
0
;
yymsp
[
-
1
].
minor
.
yy0
.
n
=
((
yymsp
[
0
].
minor
.
yy0
.
z
+
yymsp
[
0
].
minor
.
yy0
.
n
)
-
yymsp
[
-
1
].
minor
.
yy0
.
z
);
tSetColumnType
(
&
yylhsminor
.
yy183
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
#line 3292 "sql.c"
yymsp
[
-
1
].
minor
.
yy183
=
yylhsminor
.
yy183
;
break
;
case
136
:
/* signed ::= INTEGER */
#line 353 "sql.y"
{
yylhsminor
.
yy325
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3298 "sql.c"
yymsp
[
0
].
minor
.
yy325
=
yylhsminor
.
yy325
;
break
;
case
137
:
/* signed ::= PLUS INTEGER */
#line 354 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy325
=
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);
}
#line 3304 "sql.c"
break
;
case
138
:
/* signed ::= MINUS INTEGER */
#line 355 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy325
=
-
strtol
(
yymsp
[
0
].
minor
.
yy0
.
z
,
NULL
,
10
);}
#line 3309 "sql.c"
break
;
case
142
:
/* cmd ::= CREATE TABLE create_table_list */
#line 361 "sql.y"
{
pInfo
->
type
=
TSDB_SQL_CREATE_TABLE
;
pInfo
->
pCreateTableInfo
=
yymsp
[
0
].
minor
.
yy438
;}
#line 3314 "sql.c"
break
;
case
143
:
/* create_table_list ::= create_from_stable */
#line 365 "sql.y"
{
SCreateTableSql
*
pCreateTable
=
calloc
(
1
,
sizeof
(
SCreateTableSql
));
pCreateTable
->
childTableInfo
=
taosArrayInit
(
4
,
sizeof
(
SCreatedTableInfo
));
...
...
@@ -2967,16 +3323,20 @@ static YYACTIONTYPE yy_reduce(
pCreateTable
->
type
=
TSQL_CREATE_TABLE_FROM_STABLE
;
yylhsminor
.
yy438
=
pCreateTable
;
}
#line 3326 "sql.c"
yymsp
[
0
].
minor
.
yy438
=
yylhsminor
.
yy438
;
break
;
case
144
:
/* create_table_list ::= create_table_list create_from_stable */
#line 374 "sql.y"
{
taosArrayPush
(
yymsp
[
-
1
].
minor
.
yy438
->
childTableInfo
,
&
yymsp
[
0
].
minor
.
yy152
);
yylhsminor
.
yy438
=
yymsp
[
-
1
].
minor
.
yy438
;
}
#line 3335 "sql.c"
yymsp
[
-
1
].
minor
.
yy438
=
yylhsminor
.
yy438
;
break
;
case
145
:
/* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
#line 380 "sql.y"
{
yylhsminor
.
yy438
=
tSetCreateTableInfo
(
yymsp
[
-
1
].
minor
.
yy421
,
NULL
,
NULL
,
TSQL_CREATE_TABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy438
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
...
...
@@ -2984,9 +3344,11 @@ static YYACTIONTYPE yy_reduce(
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
4
].
minor
.
yy0
,
&
yymsp
[
-
5
].
minor
.
yy0
);
}
#line 3347 "sql.c"
yymsp
[
-
5
].
minor
.
yy438
=
yylhsminor
.
yy438
;
break
;
case
146
:
/* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
#line 390 "sql.y"
{
yylhsminor
.
yy438
=
tSetCreateTableInfo
(
yymsp
[
-
5
].
minor
.
yy421
,
yymsp
[
-
1
].
minor
.
yy421
,
NULL
,
TSQL_CREATE_STABLE
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy438
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
...
...
@@ -2994,33 +3356,43 @@ static YYACTIONTYPE yy_reduce(
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
}
#line 3359 "sql.c"
yymsp
[
-
9
].
minor
.
yy438
=
yylhsminor
.
yy438
;
break
;
case
147
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
#line 401 "sql.y"
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yylhsminor
.
yy152
=
createNewChildTableInfo
(
&
yymsp
[
-
5
].
minor
.
yy0
,
NULL
,
yymsp
[
-
1
].
minor
.
yy421
,
&
yymsp
[
-
8
].
minor
.
yy0
,
&
yymsp
[
-
9
].
minor
.
yy0
);
}
#line 3369 "sql.c"
yymsp
[
-
9
].
minor
.
yy152
=
yylhsminor
.
yy152
;
break
;
case
148
:
/* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */
#line 407 "sql.y"
{
yymsp
[
-
8
].
minor
.
yy0
.
n
+=
yymsp
[
-
7
].
minor
.
yy0
.
n
;
yymsp
[
-
11
].
minor
.
yy0
.
n
+=
yymsp
[
-
10
].
minor
.
yy0
.
n
;
yylhsminor
.
yy152
=
createNewChildTableInfo
(
&
yymsp
[
-
8
].
minor
.
yy0
,
yymsp
[
-
5
].
minor
.
yy421
,
yymsp
[
-
1
].
minor
.
yy421
,
&
yymsp
[
-
11
].
minor
.
yy0
,
&
yymsp
[
-
12
].
minor
.
yy0
);
}
#line 3379 "sql.c"
yymsp
[
-
12
].
minor
.
yy152
=
yylhsminor
.
yy152
;
break
;
case
149
:
/* tagNamelist ::= tagNamelist COMMA ids */
#line 415 "sql.y"
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy0
);
yylhsminor
.
yy421
=
yymsp
[
-
2
].
minor
.
yy421
;
}
#line 3385 "sql.c"
yymsp
[
-
2
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
150
:
/* tagNamelist ::= ids */
#line 416 "sql.y"
{
yylhsminor
.
yy421
=
taosArrayInit
(
4
,
sizeof
(
SStrToken
));
taosArrayPush
(
yylhsminor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 3391 "sql.c"
yymsp
[
0
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
151
:
/* create_table_args ::= ifnotexists ids cpxName AS select */
#line 420 "sql.y"
{
yylhsminor
.
yy438
=
tSetCreateTableInfo
(
NULL
,
NULL
,
yymsp
[
0
].
minor
.
yy56
,
TSQL_CREATE_STREAM
);
setSqlInfo
(
pInfo
,
yylhsminor
.
yy438
,
NULL
,
TSDB_SQL_CREATE_TABLE
);
...
...
@@ -3028,186 +3400,266 @@ static YYACTIONTYPE yy_reduce(
yymsp
[
-
3
].
minor
.
yy0
.
n
+=
yymsp
[
-
2
].
minor
.
yy0
.
n
;
setCreatedTableName
(
pInfo
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
-
4
].
minor
.
yy0
);
}
#line 3403 "sql.c"
yymsp
[
-
4
].
minor
.
yy438
=
yylhsminor
.
yy438
;
break
;
case
152
:
/* columnlist ::= columnlist COMMA column */
#line 431 "sql.y"
{
taosArrayPush
(
yymsp
[
-
2
].
minor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy183
);
yylhsminor
.
yy421
=
yymsp
[
-
2
].
minor
.
yy421
;
}
#line 3409 "sql.c"
yymsp
[
-
2
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
153
:
/* columnlist ::= column */
#line 432 "sql.y"
{
yylhsminor
.
yy421
=
taosArrayInit
(
4
,
sizeof
(
TAOS_FIELD
));
taosArrayPush
(
yylhsminor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy183
);}
#line 3415 "sql.c"
yymsp
[
0
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
154
:
/* column ::= ids typename */
#line 436 "sql.y"
{
tSetColumnInfo
(
&
yylhsminor
.
yy183
,
&
yymsp
[
-
1
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy183
);
}
#line 3423 "sql.c"
yymsp
[
-
1
].
minor
.
yy183
=
yylhsminor
.
yy183
;
break
;
case
161
:
/* tagitem ::= NULL */
#line 451 "sql.y"
{
yymsp
[
0
].
minor
.
yy0
.
type
=
0
;
tVariantCreate
(
&
yylhsminor
.
yy430
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 3429 "sql.c"
yymsp
[
0
].
minor
.
yy430
=
yylhsminor
.
yy430
;
break
;
case
162
:
/* tagitem ::= NOW */
#line 452 "sql.y"
{
yymsp
[
0
].
minor
.
yy0
.
type
=
TSDB_DATA_TYPE_TIMESTAMP
;
tVariantCreate
(
&
yylhsminor
.
yy430
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 3435 "sql.c"
yymsp
[
0
].
minor
.
yy430
=
yylhsminor
.
yy430
;
break
;
case
163
:
/* tagitem ::= MINUS INTEGER */
case
164
:
/* tagitem ::= MINUS FLOAT */
yytestcase
(
yyruleno
==
164
);
case
165
:
/* tagitem ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
165
);
case
166
:
/* tagitem ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
166
);
#line 454 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
yymsp
[
0
].
minor
.
yy0
.
type
;
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
tVariantCreate
(
&
yylhsminor
.
yy430
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
#line 3449 "sql.c"
yymsp
[
-
1
].
minor
.
yy430
=
yylhsminor
.
yy430
;
break
;
case
167
:
/* select ::= SELECT selcollist from where_opt interval_option sliding_opt session_option windowstate_option fill_opt groupby_opt having_opt orderby_opt slimit_opt limit_opt */
#line 485 "sql.y"
{
yylhsminor
.
yy56
=
tSetQuerySqlNode
(
&
yymsp
[
-
13
].
minor
.
yy0
,
yymsp
[
-
12
].
minor
.
yy421
,
yymsp
[
-
11
].
minor
.
yy8
,
yymsp
[
-
10
].
minor
.
yy439
,
yymsp
[
-
4
].
minor
.
yy421
,
yymsp
[
-
2
].
minor
.
yy421
,
&
yymsp
[
-
9
].
minor
.
yy400
,
&
yymsp
[
-
7
].
minor
.
yy147
,
&
yymsp
[
-
6
].
minor
.
yy40
,
&
yymsp
[
-
8
].
minor
.
yy0
,
yymsp
[
-
5
].
minor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy166
,
&
yymsp
[
-
1
].
minor
.
yy166
,
yymsp
[
-
3
].
minor
.
yy439
);
}
#line 3457 "sql.c"
yymsp
[
-
13
].
minor
.
yy56
=
yylhsminor
.
yy56
;
break
;
case
168
:
/* select ::= LP select RP */
#line 489 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy56
=
yymsp
[
-
1
].
minor
.
yy56
;}
#line 3463 "sql.c"
break
;
case
169
:
/* union ::= select */
#line 493 "sql.y"
{
yylhsminor
.
yy421
=
setSubclause
(
NULL
,
yymsp
[
0
].
minor
.
yy56
);
}
#line 3468 "sql.c"
yymsp
[
0
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
170
:
/* union ::= union UNION ALL select */
#line 494 "sql.y"
{
yylhsminor
.
yy421
=
appendSelectClause
(
yymsp
[
-
3
].
minor
.
yy421
,
yymsp
[
0
].
minor
.
yy56
);
}
#line 3474 "sql.c"
yymsp
[
-
3
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
171
:
/* cmd ::= union */
#line 496 "sql.y"
{
setSqlInfo
(
pInfo
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_SQL_SELECT
);
}
#line 3480 "sql.c"
break
;
case
172
:
/* select ::= SELECT selcollist */
#line 503 "sql.y"
{
yylhsminor
.
yy56
=
tSetQuerySqlNode
(
&
yymsp
[
-
1
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
);
}
#line 3487 "sql.c"
yymsp
[
-
1
].
minor
.
yy56
=
yylhsminor
.
yy56
;
break
;
case
173
:
/* sclp ::= selcollist COMMA */
#line 515 "sql.y"
{
yylhsminor
.
yy421
=
yymsp
[
-
1
].
minor
.
yy421
;}
#line 3493 "sql.c"
yymsp
[
-
1
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
174
:
/* sclp ::= */
case
206
:
/* orderby_opt ::= */
yytestcase
(
yyruleno
==
206
);
#line 516 "sql.y"
{
yymsp
[
1
].
minor
.
yy421
=
0
;}
#line 3500 "sql.c"
break
;
case
175
:
/* selcollist ::= sclp distinct expr as */
#line 517 "sql.y"
{
yylhsminor
.
yy421
=
tSqlExprListAppend
(
yymsp
[
-
3
].
minor
.
yy421
,
yymsp
[
-
1
].
minor
.
yy439
,
yymsp
[
-
2
].
minor
.
yy0
.
n
?
&
yymsp
[
-
2
].
minor
.
yy0
:
0
,
yymsp
[
0
].
minor
.
yy0
.
n
?&
yymsp
[
0
].
minor
.
yy0
:
0
);
}
#line 3507 "sql.c"
yymsp
[
-
3
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
176
:
/* selcollist ::= sclp STAR */
#line 521 "sql.y"
{
tSqlExpr
*
pNode
=
tSqlExprCreateIdValue
(
NULL
,
TK_ALL
);
tSqlExpr
*
pNode
=
tSqlExprCreateIdValue
(
pInfo
,
NULL
,
TK_ALL
);
yylhsminor
.
yy421
=
tSqlExprListAppend
(
yymsp
[
-
1
].
minor
.
yy421
,
pNode
,
0
,
0
);
}
#line 3516 "sql.c"
yymsp
[
-
1
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
177
:
/* as ::= AS ids */
#line 529 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 3522 "sql.c"
break
;
case
178
:
/* as ::= ids */
#line 530 "sql.y"
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 3527 "sql.c"
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
179
:
/* as ::= */
#line 531 "sql.y"
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
}
#line 3533 "sql.c"
break
;
case
180
:
/* distinct ::= DISTINCT */
#line 534 "sql.y"
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;
}
#line 3538 "sql.c"
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
182
:
/* from ::= FROM tablelist */
case
183
:
/* from ::= FROM sub */
yytestcase
(
yyruleno
==
183
);
#line 540 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy8
=
yymsp
[
0
].
minor
.
yy8
;}
#line 3545 "sql.c"
break
;
case
184
:
/* sub ::= LP union RP */
#line 545 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy8
=
addSubqueryElem
(
NULL
,
yymsp
[
-
1
].
minor
.
yy421
,
NULL
);}
#line 3550 "sql.c"
break
;
case
185
:
/* sub ::= LP union RP ids */
#line 546 "sql.y"
{
yymsp
[
-
3
].
minor
.
yy8
=
addSubqueryElem
(
NULL
,
yymsp
[
-
2
].
minor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 3555 "sql.c"
break
;
case
186
:
/* sub ::= sub COMMA LP union RP ids */
#line 547 "sql.y"
{
yylhsminor
.
yy8
=
addSubqueryElem
(
yymsp
[
-
5
].
minor
.
yy8
,
yymsp
[
-
2
].
minor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 3560 "sql.c"
yymsp
[
-
5
].
minor
.
yy8
=
yylhsminor
.
yy8
;
break
;
case
187
:
/* tablelist ::= ids cpxName */
#line 551 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy8
=
setTableNameList
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
NULL
);
}
#line 3569 "sql.c"
yymsp
[
-
1
].
minor
.
yy8
=
yylhsminor
.
yy8
;
break
;
case
188
:
/* tablelist ::= ids cpxName ids */
#line 556 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy8
=
setTableNameList
(
NULL
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 3578 "sql.c"
yymsp
[
-
2
].
minor
.
yy8
=
yylhsminor
.
yy8
;
break
;
case
189
:
/* tablelist ::= tablelist COMMA ids cpxName */
#line 561 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yylhsminor
.
yy8
=
setTableNameList
(
yymsp
[
-
3
].
minor
.
yy8
,
&
yymsp
[
-
1
].
minor
.
yy0
,
NULL
);
}
#line 3587 "sql.c"
yymsp
[
-
3
].
minor
.
yy8
=
yylhsminor
.
yy8
;
break
;
case
190
:
/* tablelist ::= tablelist COMMA ids cpxName ids */
#line 566 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
yymsp
[
-
1
].
minor
.
yy0
.
n
;
yylhsminor
.
yy8
=
setTableNameList
(
yymsp
[
-
4
].
minor
.
yy8
,
&
yymsp
[
-
2
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
);
}
#line 3596 "sql.c"
yymsp
[
-
4
].
minor
.
yy8
=
yylhsminor
.
yy8
;
break
;
case
191
:
/* tmvar ::= VARIABLE */
#line 573 "sql.y"
{
yylhsminor
.
yy0
=
yymsp
[
0
].
minor
.
yy0
;}
#line 3602 "sql.c"
yymsp
[
0
].
minor
.
yy0
=
yylhsminor
.
yy0
;
break
;
case
192
:
/* interval_option ::= intervalKey LP tmvar RP */
#line 576 "sql.y"
{
yylhsminor
.
yy400
.
interval
=
yymsp
[
-
1
].
minor
.
yy0
;
yylhsminor
.
yy400
.
offset
.
n
=
0
;
yylhsminor
.
yy400
.
token
=
yymsp
[
-
3
].
minor
.
yy104
;}
#line 3608 "sql.c"
yymsp
[
-
3
].
minor
.
yy400
=
yylhsminor
.
yy400
;
break
;
case
193
:
/* interval_option ::= intervalKey LP tmvar COMMA tmvar RP */
#line 577 "sql.y"
{
yylhsminor
.
yy400
.
interval
=
yymsp
[
-
3
].
minor
.
yy0
;
yylhsminor
.
yy400
.
offset
=
yymsp
[
-
1
].
minor
.
yy0
;
yylhsminor
.
yy400
.
token
=
yymsp
[
-
5
].
minor
.
yy104
;}
#line 3614 "sql.c"
yymsp
[
-
5
].
minor
.
yy400
=
yylhsminor
.
yy400
;
break
;
case
194
:
/* interval_option ::= */
#line 578 "sql.y"
{
memset
(
&
yymsp
[
1
].
minor
.
yy400
,
0
,
sizeof
(
yymsp
[
1
].
minor
.
yy400
));}
#line 3620 "sql.c"
break
;
case
195
:
/* intervalKey ::= INTERVAL */
#line 581 "sql.y"
{
yymsp
[
0
].
minor
.
yy104
=
TK_INTERVAL
;}
#line 3625 "sql.c"
break
;
case
196
:
/* intervalKey ::= EVERY */
#line 582 "sql.y"
{
yymsp
[
0
].
minor
.
yy104
=
TK_EVERY
;
}
#line 3630 "sql.c"
break
;
case
197
:
/* session_option ::= */
#line 585 "sql.y"
{
yymsp
[
1
].
minor
.
yy147
.
col
.
n
=
0
;
yymsp
[
1
].
minor
.
yy147
.
gap
.
n
=
0
;}
#line 3635 "sql.c"
break
;
case
198
:
/* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */
#line 586 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
yymsp
[
-
6
].
minor
.
yy147
.
col
=
yymsp
[
-
4
].
minor
.
yy0
;
yymsp
[
-
6
].
minor
.
yy147
.
gap
=
yymsp
[
-
1
].
minor
.
yy0
;
}
#line 3644 "sql.c"
break
;
case
199
:
/* windowstate_option ::= */
#line 593 "sql.y"
{
yymsp
[
1
].
minor
.
yy40
.
col
.
n
=
0
;
yymsp
[
1
].
minor
.
yy40
.
col
.
z
=
NULL
;}
#line 3649 "sql.c"
break
;
case
200
:
/* windowstate_option ::= STATE_WINDOW LP ids RP */
#line 594 "sql.y"
{
yymsp
[
-
3
].
minor
.
yy40
.
col
=
yymsp
[
-
1
].
minor
.
yy0
;
}
#line 3654 "sql.c"
break
;
case
201
:
/* fill_opt ::= */
#line 598 "sql.y"
{
yymsp
[
1
].
minor
.
yy421
=
0
;
}
#line 3659 "sql.c"
break
;
case
202
:
/* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
#line 599 "sql.y"
{
tVariant
A
=
{
0
};
toTSDBType
(
yymsp
[
-
3
].
minor
.
yy0
.
type
);
...
...
@@ -3216,272 +3668,402 @@ static YYACTIONTYPE yy_reduce(
tVariantListInsert
(
yymsp
[
-
1
].
minor
.
yy421
,
&
A
,
-
1
,
0
);
yymsp
[
-
5
].
minor
.
yy421
=
yymsp
[
-
1
].
minor
.
yy421
;
}
#line 3671 "sql.c"
break
;
case
203
:
/* fill_opt ::= FILL LP ID RP */
#line 608 "sql.y"
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
3
].
minor
.
yy421
=
tVariantListAppendToken
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy0
,
-
1
);
}
#line 3679 "sql.c"
break
;
case
204
:
/* sliding_opt ::= SLIDING LP tmvar RP */
#line 614 "sql.y"
{
yymsp
[
-
3
].
minor
.
yy0
=
yymsp
[
-
1
].
minor
.
yy0
;
}
#line 3684 "sql.c"
break
;
case
205
:
/* sliding_opt ::= */
#line 615 "sql.y"
{
yymsp
[
1
].
minor
.
yy0
.
n
=
0
;
yymsp
[
1
].
minor
.
yy0
.
z
=
NULL
;
yymsp
[
1
].
minor
.
yy0
.
type
=
0
;
}
#line 3689 "sql.c"
break
;
case
207
:
/* orderby_opt ::= ORDER BY sortlist */
#line 627 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy421
=
yymsp
[
0
].
minor
.
yy421
;}
#line 3694 "sql.c"
break
;
case
208
:
/* sortlist ::= sortlist COMMA item sortorder */
#line 629 "sql.y"
{
yylhsminor
.
yy421
=
tVariantListAppend
(
yymsp
[
-
3
].
minor
.
yy421
,
&
yymsp
[
-
1
].
minor
.
yy430
,
yymsp
[
0
].
minor
.
yy96
);
}
#line 3701 "sql.c"
yymsp
[
-
3
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
209
:
/* sortlist ::= item sortorder */
#line 633 "sql.y"
{
yylhsminor
.
yy421
=
tVariantListAppend
(
NULL
,
&
yymsp
[
-
1
].
minor
.
yy430
,
yymsp
[
0
].
minor
.
yy96
);
}
#line 3709 "sql.c"
yymsp
[
-
1
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
210
:
/* item ::= ids cpxName */
#line 638 "sql.y"
{
toTSDBType
(
yymsp
[
-
1
].
minor
.
yy0
.
type
);
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
tVariantCreate
(
&
yylhsminor
.
yy430
,
&
yymsp
[
-
1
].
minor
.
yy0
);
}
#line 3720 "sql.c"
yymsp
[
-
1
].
minor
.
yy430
=
yylhsminor
.
yy430
;
break
;
case
211
:
/* sortorder ::= ASC */
#line 646 "sql.y"
{
yymsp
[
0
].
minor
.
yy96
=
TSDB_ORDER_ASC
;
}
#line 3726 "sql.c"
break
;
case
212
:
/* sortorder ::= DESC */
#line 647 "sql.y"
{
yymsp
[
0
].
minor
.
yy96
=
TSDB_ORDER_DESC
;}
#line 3731 "sql.c"
break
;
case
213
:
/* sortorder ::= */
#line 648 "sql.y"
{
yymsp
[
1
].
minor
.
yy96
=
TSDB_ORDER_ASC
;
}
#line 3736 "sql.c"
break
;
case
214
:
/* groupby_opt ::= */
#line 656 "sql.y"
{
yymsp
[
1
].
minor
.
yy421
=
0
;}
#line 3741 "sql.c"
break
;
case
215
:
/* groupby_opt ::= GROUP BY grouplist */
#line 657 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy421
=
yymsp
[
0
].
minor
.
yy421
;}
#line 3746 "sql.c"
break
;
case
216
:
/* grouplist ::= grouplist COMMA item */
#line 659 "sql.y"
{
yylhsminor
.
yy421
=
tVariantListAppend
(
yymsp
[
-
2
].
minor
.
yy421
,
&
yymsp
[
0
].
minor
.
yy430
,
-
1
);
}
#line 3753 "sql.c"
yymsp
[
-
2
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
217
:
/* grouplist ::= item */
#line 663 "sql.y"
{
yylhsminor
.
yy421
=
tVariantListAppend
(
NULL
,
&
yymsp
[
0
].
minor
.
yy430
,
-
1
);
}
#line 3761 "sql.c"
yymsp
[
0
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
218
:
/* having_opt ::= */
case
228
:
/* where_opt ::= */
yytestcase
(
yyruleno
==
228
);
case
272
:
/* expritem ::= */
yytestcase
(
yyruleno
==
272
);
#line 670 "sql.y"
{
yymsp
[
1
].
minor
.
yy439
=
0
;}
#line 3769 "sql.c"
break
;
case
219
:
/* having_opt ::= HAVING expr */
case
229
:
/* where_opt ::= WHERE expr */
yytestcase
(
yyruleno
==
229
);
#line 671 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy439
=
yymsp
[
0
].
minor
.
yy439
;}
#line 3775 "sql.c"
break
;
case
220
:
/* limit_opt ::= */
case
224
:
/* slimit_opt ::= */
yytestcase
(
yyruleno
==
224
);
#line 675 "sql.y"
{
yymsp
[
1
].
minor
.
yy166
.
limit
=
-
1
;
yymsp
[
1
].
minor
.
yy166
.
offset
=
0
;}
#line 3781 "sql.c"
break
;
case
221
:
/* limit_opt ::= LIMIT signed */
case
225
:
/* slimit_opt ::= SLIMIT signed */
yytestcase
(
yyruleno
==
225
);
#line 676 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy166
.
limit
=
yymsp
[
0
].
minor
.
yy325
;
yymsp
[
-
1
].
minor
.
yy166
.
offset
=
0
;}
#line 3787 "sql.c"
break
;
case
222
:
/* limit_opt ::= LIMIT signed OFFSET signed */
#line 678 "sql.y"
{
yymsp
[
-
3
].
minor
.
yy166
.
limit
=
yymsp
[
-
2
].
minor
.
yy325
;
yymsp
[
-
3
].
minor
.
yy166
.
offset
=
yymsp
[
0
].
minor
.
yy325
;}
#line 3792 "sql.c"
break
;
case
223
:
/* limit_opt ::= LIMIT signed COMMA signed */
#line 680 "sql.y"
{
yymsp
[
-
3
].
minor
.
yy166
.
limit
=
yymsp
[
0
].
minor
.
yy325
;
yymsp
[
-
3
].
minor
.
yy166
.
offset
=
yymsp
[
-
2
].
minor
.
yy325
;}
#line 3797 "sql.c"
break
;
case
226
:
/* slimit_opt ::= SLIMIT signed SOFFSET signed */
#line 686 "sql.y"
{
yymsp
[
-
3
].
minor
.
yy166
.
limit
=
yymsp
[
-
2
].
minor
.
yy325
;
yymsp
[
-
3
].
minor
.
yy166
.
offset
=
yymsp
[
0
].
minor
.
yy325
;}
#line 3802 "sql.c"
break
;
case
227
:
/* slimit_opt ::= SLIMIT signed COMMA signed */
#line 688 "sql.y"
{
yymsp
[
-
3
].
minor
.
yy166
.
limit
=
yymsp
[
0
].
minor
.
yy325
;
yymsp
[
-
3
].
minor
.
yy166
.
offset
=
yymsp
[
-
2
].
minor
.
yy325
;}
#line 3807 "sql.c"
break
;
case
230
:
/* expr ::= LP expr RP */
#line 701 "sql.y"
{
yylhsminor
.
yy439
=
yymsp
[
-
1
].
minor
.
yy439
;
yylhsminor
.
yy439
->
exprToken
.
z
=
yymsp
[
-
2
].
minor
.
yy0
.
z
;
yylhsminor
.
yy439
->
exprToken
.
n
=
(
yymsp
[
0
].
minor
.
yy0
.
z
-
yymsp
[
-
2
].
minor
.
yy0
.
z
+
1
);}
#line 3812 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
231
:
/* expr ::= ID */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_ID
);}
#line 703 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_ID
);}
#line 3818 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
232
:
/* expr ::= ID DOT ID */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ID
);}
#line 704 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ID
);}
#line 3824 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
233
:
/* expr ::= ID DOT STAR */
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ALL
);}
#line 705 "sql.y"
{
yymsp
[
-
2
].
minor
.
yy0
.
n
+=
(
1
+
yymsp
[
0
].
minor
.
yy0
.
n
);
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
-
2
].
minor
.
yy0
,
TK_ALL
);}
#line 3830 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
234
:
/* expr ::= INTEGER */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_INTEGER
);}
#line 707 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_INTEGER
);}
#line 3836 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
235
:
/* expr ::= MINUS INTEGER */
case
236
:
/* expr ::= PLUS INTEGER */
yytestcase
(
yyruleno
==
236
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_INTEGER
;
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_INTEGER
);}
#line 708 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_INTEGER
;
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_INTEGER
);}
#line 3843 "sql.c"
yymsp
[
-
1
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
237
:
/* expr ::= FLOAT */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_FLOAT
);}
#line 710 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_FLOAT
);}
#line 3849 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
238
:
/* expr ::= MINUS FLOAT */
case
239
:
/* expr ::= PLUS FLOAT */
yytestcase
(
yyruleno
==
239
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_FLOAT
;
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_FLOAT
);}
#line 711 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_FLOAT
;
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_FLOAT
);}
#line 3856 "sql.c"
yymsp
[
-
1
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
240
:
/* expr ::= STRING */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_STRING
);}
#line 713 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_STRING
);}
#line 3862 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
241
:
/* expr ::= NOW */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_NOW
);
}
#line 714 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_NOW
);
}
#line 3868 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
242
:
/* expr ::= VARIABLE */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_VARIABLE
);}
#line 715 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_VARIABLE
);}
#line 3874 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
243
:
/* expr ::= PLUS VARIABLE */
case
244
:
/* expr ::= MINUS VARIABLE */
yytestcase
(
yyruleno
==
244
);
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_VARIABLE
;
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_VARIABLE
);}
#line 716 "sql.y"
{
yymsp
[
-
1
].
minor
.
yy0
.
n
+=
yymsp
[
0
].
minor
.
yy0
.
n
;
yymsp
[
-
1
].
minor
.
yy0
.
type
=
TK_VARIABLE
;
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
-
1
].
minor
.
yy0
,
TK_VARIABLE
);}
#line 3881 "sql.c"
yymsp
[
-
1
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
245
:
/* expr ::= BOOL */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_BOOL
);}
#line 718 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_BOOL
);}
#line 3887 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
246
:
/* expr ::= NULL */
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
&
yymsp
[
0
].
minor
.
yy0
,
TK_NULL
);}
#line 719 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreateIdValue
(
pInfo
,
&
yymsp
[
0
].
minor
.
yy0
,
TK_NULL
);}
#line 3893 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
247
:
/* expr ::= ID LP exprlist RP */
#line 722 "sql.y"
{
tStrTokenAppend
(
pInfo
->
funcs
,
&
yymsp
[
-
3
].
minor
.
yy0
);
yylhsminor
.
yy439
=
tSqlExprCreateFunction
(
yymsp
[
-
1
].
minor
.
yy421
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
#line 3899 "sql.c"
yymsp
[
-
3
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
248
:
/* expr ::= ID LP STAR RP */
#line 725 "sql.y"
{
tStrTokenAppend
(
pInfo
->
funcs
,
&
yymsp
[
-
3
].
minor
.
yy0
);
yylhsminor
.
yy439
=
tSqlExprCreateFunction
(
NULL
,
&
yymsp
[
-
3
].
minor
.
yy0
,
&
yymsp
[
0
].
minor
.
yy0
,
yymsp
[
-
3
].
minor
.
yy0
.
type
);
}
#line 3905 "sql.c"
yymsp
[
-
3
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
249
:
/* expr ::= expr IS NULL */
#line 728 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
NULL
,
TK_ISNULL
);}
#line 3911 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
250
:
/* expr ::= expr IS NOT NULL */
#line 729 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
3
].
minor
.
yy439
,
NULL
,
TK_NOTNULL
);}
#line 3917 "sql.c"
yymsp
[
-
3
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
251
:
/* expr ::= expr LT expr */
#line 732 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_LT
);}
#line 3923 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
252
:
/* expr ::= expr GT expr */
#line 733 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_GT
);}
#line 3929 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
253
:
/* expr ::= expr LE expr */
#line 734 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_LE
);}
#line 3935 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
254
:
/* expr ::= expr GE expr */
#line 735 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_GE
);}
#line 3941 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
255
:
/* expr ::= expr NE expr */
#line 736 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_NE
);}
#line 3947 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
256
:
/* expr ::= expr EQ expr */
#line 737 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_EQ
);}
#line 3953 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
257
:
/* expr ::= expr BETWEEN expr AND expr */
#line 739 "sql.y"
{
tSqlExpr
*
X2
=
tSqlExprClone
(
yymsp
[
-
4
].
minor
.
yy439
);
yylhsminor
.
yy439
=
tSqlExprCreate
(
tSqlExprCreate
(
yymsp
[
-
4
].
minor
.
yy439
,
yymsp
[
-
2
].
minor
.
yy439
,
TK_GE
),
tSqlExprCreate
(
X2
,
yymsp
[
0
].
minor
.
yy439
,
TK_LE
),
TK_AND
);}
#line 3959 "sql.c"
yymsp
[
-
4
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
258
:
/* expr ::= expr AND expr */
#line 741 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_AND
);}
#line 3965 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
259
:
/* expr ::= expr OR expr */
#line 742 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_OR
);
}
#line 3971 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
260
:
/* expr ::= expr PLUS expr */
#line 745 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_PLUS
);
}
#line 3977 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
261
:
/* expr ::= expr MINUS expr */
#line 746 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_MINUS
);
}
#line 3983 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
262
:
/* expr ::= expr STAR expr */
#line 747 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_STAR
);
}
#line 3989 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
263
:
/* expr ::= expr SLASH expr */
#line 748 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_DIVIDE
);}
#line 3995 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
264
:
/* expr ::= expr REM expr */
#line 749 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_REM
);
}
#line 4001 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
265
:
/* expr ::= expr LIKE expr */
#line 752 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_LIKE
);
}
#line 4007 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
266
:
/* expr ::= expr MATCH expr */
#line 755 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_MATCH
);
}
#line 4013 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
267
:
/* expr ::= expr NMATCH expr */
#line 756 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
2
].
minor
.
yy439
,
yymsp
[
0
].
minor
.
yy439
,
TK_NMATCH
);
}
#line 4019 "sql.c"
yymsp
[
-
2
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
268
:
/* expr ::= expr IN LP exprlist RP */
#line 759 "sql.y"
{
yylhsminor
.
yy439
=
tSqlExprCreate
(
yymsp
[
-
4
].
minor
.
yy439
,
(
tSqlExpr
*
)
yymsp
[
-
1
].
minor
.
yy421
,
TK_IN
);
}
#line 4025 "sql.c"
yymsp
[
-
4
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
269
:
/* exprlist ::= exprlist COMMA expritem */
#line 767 "sql.y"
{
yylhsminor
.
yy421
=
tSqlExprListAppend
(
yymsp
[
-
2
].
minor
.
yy421
,
yymsp
[
0
].
minor
.
yy439
,
0
,
0
);}
#line 4031 "sql.c"
yymsp
[
-
2
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
270
:
/* exprlist ::= expritem */
#line 768 "sql.y"
{
yylhsminor
.
yy421
=
tSqlExprListAppend
(
0
,
yymsp
[
0
].
minor
.
yy439
,
0
,
0
);}
#line 4037 "sql.c"
yymsp
[
0
].
minor
.
yy421
=
yylhsminor
.
yy421
;
break
;
case
271
:
/* expritem ::= expr */
#line 769 "sql.y"
{
yylhsminor
.
yy439
=
yymsp
[
0
].
minor
.
yy439
;}
#line 4043 "sql.c"
yymsp
[
0
].
minor
.
yy439
=
yylhsminor
.
yy439
;
break
;
case
273
:
/* cmd ::= RESET QUERY CACHE */
#line 773 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_RESET_CACHE
,
0
);}
#line 4049 "sql.c"
break
;
case
274
:
/* cmd ::= SYNCDB ids REPLICA */
#line 776 "sql.y"
{
setDCLSqlElems
(
pInfo
,
TSDB_SQL_SYNC_DB_REPLICA
,
1
,
&
yymsp
[
-
1
].
minor
.
yy0
);}
#line 4054 "sql.c"
break
;
case
275
:
/* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
#line 779 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4063 "sql.c"
break
;
case
276
:
/* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
#line 785 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3491,22 +4073,28 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
NULL
,
K
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4076 "sql.c"
break
;
case
277
:
/* cmd ::= ALTER TABLE ids cpxName MODIFY COLUMN columnlist */
#line 795 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_CHANGE_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4085 "sql.c"
break
;
case
278
:
/* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
#line 802 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4094 "sql.c"
break
;
case
279
:
/* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
#line 807 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3516,8 +4104,10 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_DROP_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4107 "sql.c"
break
;
case
280
:
/* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
#line 817 "sql.y"
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
...
@@ -3530,8 +4120,10 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
5
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4123 "sql.c"
break
;
case
281
:
/* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
#line 830 "sql.y"
{
yymsp
[
-
6
].
minor
.
yy0
.
n
+=
yymsp
[
-
5
].
minor
.
yy0
.
n
;
...
...
@@ -3542,22 +4134,28 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
6
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4137 "sql.c"
break
;
case
282
:
/* cmd ::= ALTER TABLE ids cpxName MODIFY TAG columnlist */
#line 841 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN
,
-
1
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4146 "sql.c"
break
;
case
283
:
/* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
#line 848 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_ADD_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4155 "sql.c"
break
;
case
284
:
/* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
#line 854 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3567,22 +4165,28 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
NULL
,
K
,
TSDB_ALTER_TABLE_DROP_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4168 "sql.c"
break
;
case
285
:
/* cmd ::= ALTER STABLE ids cpxName MODIFY COLUMN columnlist */
#line 864 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_CHANGE_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4177 "sql.c"
break
;
case
286
:
/* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
#line 871 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_ADD_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4186 "sql.c"
break
;
case
287
:
/* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
#line 876 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
...
...
@@ -3592,8 +4196,10 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_DROP_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4199 "sql.c"
break
;
case
288
:
/* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
#line 886 "sql.y"
{
yymsp
[
-
5
].
minor
.
yy0
.
n
+=
yymsp
[
-
4
].
minor
.
yy0
.
n
;
...
...
@@ -3606,8 +4212,10 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
5
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4215 "sql.c"
break
;
case
289
:
/* cmd ::= ALTER STABLE ids cpxName SET TAG ids EQ tagitem */
#line 899 "sql.y"
{
yymsp
[
-
6
].
minor
.
yy0
.
n
+=
yymsp
[
-
5
].
minor
.
yy0
.
n
;
...
...
@@ -3618,22 +4226,31 @@ static YYACTIONTYPE yy_reduce(
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
6
].
minor
.
yy0
,
NULL
,
A
,
TSDB_ALTER_TABLE_UPDATE_TAG_VAL
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4229 "sql.c"
break
;
case
290
:
/* cmd ::= ALTER STABLE ids cpxName MODIFY TAG columnlist */
#line 910 "sql.y"
{
yymsp
[
-
4
].
minor
.
yy0
.
n
+=
yymsp
[
-
3
].
minor
.
yy0
.
n
;
SAlterTableInfo
*
pAlterTable
=
tSetAlterTableInfo
(
&
yymsp
[
-
4
].
minor
.
yy0
,
yymsp
[
0
].
minor
.
yy421
,
NULL
,
TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN
,
TSDB_SUPER_TABLE
);
setSqlInfo
(
pInfo
,
pAlterTable
,
NULL
,
TSDB_SQL_ALTER_TABLE
);
}
#line 4238 "sql.c"
break
;
case
291
:
/* cmd ::= KILL CONNECTION INTEGER */
#line 917 "sql.y"
{
setKillSql
(
pInfo
,
TSDB_SQL_KILL_CONNECTION
,
&
yymsp
[
0
].
minor
.
yy0
);}
#line 4243 "sql.c"
break
;
case
292
:
/* cmd ::= KILL STREAM INTEGER COLON INTEGER */
#line 918 "sql.y"
{
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
);}
#line 4248 "sql.c"
break
;
case
293
:
/* cmd ::= KILL QUERY INTEGER COLON INTEGER */
#line 919 "sql.y"
{
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
);}
#line 4253 "sql.c"
break
;
default:
break
;
...
...
@@ -3695,6 +4312,7 @@ static void yy_syntax_error(
ParseCTX_FETCH
#define TOKEN yyminor
/************ Begin %syntax_error code ****************************************/
#line 37 "sql.y"
pInfo
->
valid
=
false
;
int32_t
outputBufLen
=
tListLen
(
pInfo
->
msg
);
...
...
@@ -3717,6 +4335,7 @@ static void yy_syntax_error(
}
assert
(
len
<=
outputBufLen
);
#line 4338 "sql.c"
/************ End %syntax_error code ******************************************/
ParseARG_STORE
/* Suppress warning about unused %extra_argument variable */
ParseCTX_STORE
...
...
@@ -3742,7 +4361,8 @@ static void yy_accept(
/* Here code is inserted which will be executed whenever the
** parser accepts */
/*********** Begin %parse_accept code *****************************************/
#line 61 "sql.y"
#line 4365 "sql.c"
/*********** End %parse_accept code *******************************************/
ParseARG_STORE
/* Suppress warning about unused %extra_argument variable */
ParseCTX_STORE
...
...
@@ -3803,12 +4423,56 @@ void Parse(
}
#endif
do
{
while
(
1
){
/* Exit by "break" */
assert
(
yypParser
->
yytos
>=
yypParser
->
yystack
);
assert
(
yyact
==
yypParser
->
yytos
->
stateno
);
yyact
=
yy_find_shift_action
((
YYCODETYPE
)
yymajor
,
yyact
);
if
(
yyact
>=
YY_MIN_REDUCE
){
yyact
=
yy_reduce
(
yypParser
,
yyact
-
YY_MIN_REDUCE
,
yymajor
,
yyminor
ParseCTX_PARAM
);
unsigned
int
yyruleno
=
yyact
-
YY_MIN_REDUCE
;
/* Reduce by this rule */
assert
(
yyruleno
<
(
int
)(
sizeof
(
yyRuleName
)
/
sizeof
(
yyRuleName
[
0
]))
);
#ifndef NDEBUG
if
(
yyTraceFILE
){
int
yysize
=
yyRuleInfoNRhs
[
yyruleno
];
if
(
yysize
){
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s]%s, pop back to state %d.
\n
"
,
yyTracePrompt
,
yyruleno
,
yyRuleName
[
yyruleno
],
yyruleno
<
YYNRULE_WITH_ACTION
?
""
:
" without external action"
,
yypParser
->
yytos
[
yysize
].
stateno
);
}
else
{
fprintf
(
yyTraceFILE
,
"%sReduce %d [%s]%s.
\n
"
,
yyTracePrompt
,
yyruleno
,
yyRuleName
[
yyruleno
],
yyruleno
<
YYNRULE_WITH_ACTION
?
""
:
" without external action"
);
}
}
#endif
/* NDEBUG */
/* Check that the stack is large enough to grow by a single entry
** if the RHS of the rule is empty. This ensures that there is room
** enough on the stack to push the LHS value */
if
(
yyRuleInfoNRhs
[
yyruleno
]
==
0
){
#ifdef YYTRACKMAXSTACKDEPTH
if
(
(
int
)(
yypParser
->
yytos
-
yypParser
->
yystack
)
>
yypParser
->
yyhwm
){
yypParser
->
yyhwm
++
;
assert
(
yypParser
->
yyhwm
==
(
int
)(
yypParser
->
yytos
-
yypParser
->
yystack
));
}
#endif
#if YYSTACKDEPTH>0
if
(
yypParser
->
yytos
>=
yypParser
->
yystackEnd
){
yyStackOverflow
(
yypParser
);
break
;
}
#else
if
(
yypParser
->
yytos
>=&
yypParser
->
yystack
[
yypParser
->
yystksz
-
1
]
){
if
(
yyGrowStack
(
yypParser
)
){
yyStackOverflow
(
yypParser
);
break
;
}
}
#endif
}
yyact
=
yy_reduce
(
yypParser
,
yyruleno
,
yymajor
,
yyminor
ParseCTX_PARAM
);
}
else
if
(
yyact
<=
YY_MAX_SHIFTREDUCE
){
yy_shift
(
yypParser
,
yyact
,(
YYCODETYPE
)
yymajor
,
yyminor
);
#ifndef YYNOERRORRECOVERY
...
...
@@ -3864,14 +4528,13 @@ void Parse(
yy_destructor
(
yypParser
,
(
YYCODETYPE
)
yymajor
,
&
yyminorunion
);
yymajor
=
YYNOCODE
;
}
else
{
while
(
yypParser
->
yytos
>=
yypParser
->
yystack
&&
(
yyact
=
yy_find_reduce_action
(
yypParser
->
yytos
->
stateno
,
YYERRORSYMBOL
))
>
YY_MAX_SHIFTREDUCE
){
while
(
yypParser
->
yytos
>
yypParser
->
yystack
){
yyact
=
yy_find_reduce_action
(
yypParser
->
yytos
->
stateno
,
YYERRORSYMBOL
);
if
(
yyact
<=
YY_MAX_SHIFTREDUCE
)
break
;
yy_pop_parser_stack
(
yypParser
);
}
if
(
yypParser
->
yytos
<
yypParser
->
yystack
||
yymajor
==
0
){
if
(
yypParser
->
yytos
<
=
yypParser
->
yystack
||
yymajor
==
0
){
yy_destructor
(
yypParser
,(
YYCODETYPE
)
yymajor
,
&
yyminorunion
);
yy_parse_failed
(
yypParser
);
#ifndef YYNOERRORRECOVERY
...
...
@@ -3921,7 +4584,7 @@ void Parse(
break
;
#endif
}
}
while
(
yypParser
->
yytos
>
yypParser
->
yystack
);
}
#ifndef NDEBUG
if
(
yyTraceFILE
){
yyStackEntry
*
i
;
...
...
src/tsdb/src/tsdbMemTable.c
浏览文件 @
c7c6bcee
...
...
@@ -647,7 +647,7 @@ static int tsdbScanAndConvertSubmitMsg(STsdbRepo *pRepo, SSubmitMsg *pMsg) {
TSKEY
now
=
taosGetTimestamp
(
pRepo
->
config
.
precision
);
TSKEY
minKey
=
now
-
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
keep
;
TSKEY
maxKey
=
now
+
tsTickPerDay
[
pRepo
->
config
.
precision
]
*
pRepo
->
config
.
daysPerFile
;
terrno
=
TSDB_CODE_SUCCESS
;
pMsg
->
length
=
htonl
(
pMsg
->
length
);
pMsg
->
numOfBlocks
=
htonl
(
pMsg
->
numOfBlocks
);
...
...
src/util/src/tcompare.c
浏览文件 @
c7c6bcee
...
...
@@ -417,14 +417,20 @@ int32_t compareFindItemInSet(const void *pLeft, const void* pRight) {
int32_t
compareWStrPatternComp
(
const
void
*
pLeft
,
const
void
*
pRight
)
{
SPatternCompareInfo
pInfo
=
{
'%'
,
'_'
};
size_t
size
=
varDataLen
(
pLeft
)
/
TSDB_NCHAR_SIZE
;
assert
(
varDataLen
(
pRight
)
<=
TSDB_MAX_FIELD_LEN
*
TSDB_NCHAR_SIZE
);
wchar_t
*
pattern
=
calloc
(
varDataLen
(
pRight
)
+
1
,
sizeof
(
wchar_t
));
wchar_t
*
str
=
calloc
(
size
+
1
,
sizeof
(
wchar_t
));
memcpy
(
pattern
,
varDataVal
(
pRight
),
varDataLen
(
pRight
));
memcpy
(
str
,
varDataVal
(
pLeft
),
size
*
sizeof
(
wchar_t
));
int32_t
ret
=
WCSPatternMatch
(
pattern
,
str
,
size
,
&
pInfo
);
int32_t
ret
=
WCSPatternMatch
(
pattern
,
varDataVal
(
pLeft
),
varDataLen
(
pLeft
)
/
TSDB_NCHAR_SIZE
,
&
pInfo
);
free
(
pattern
);
free
(
str
);
return
(
ret
==
TSDB_PATTERN_MATCH
)
?
0
:
1
;
}
...
...
src/vnode/src/vnodeRead.c
浏览文件 @
c7c6bcee
...
...
@@ -20,6 +20,7 @@
#include "tglobal.h"
#include "query.h"
#include "vnodeStatus.h"
#include "tgrant.h"
int32_t
vNumOfExistedQHandle
;
// current initialized and existed query handle in current dnode
...
...
@@ -55,6 +56,11 @@ int32_t vnodeProcessRead(void *vparam, SVReadMsg *pRead) {
}
static
int32_t
vnodeCheckRead
(
SVnodeObj
*
pVnode
)
{
if
(
grantCheck
(
TSDB_GRANT_TIME
)
!=
TSDB_CODE_SUCCESS
)
{
vDebug
(
"vgId:%d, grant expired, refCount:%d pVnode:%p"
,
pVnode
->
vgId
,
pVnode
->
refCount
,
pVnode
);
return
TSDB_CODE_GRANT_EXPIRED
;
}
if
(
!
vnodeInReadyStatus
(
pVnode
))
{
vDebug
(
"vgId:%d, vnode status is %s, refCount:%d pVnode:%p"
,
pVnode
->
vgId
,
vnodeStatus
[
pVnode
->
status
],
pVnode
->
refCount
,
pVnode
);
...
...
tests/pytest/dbmgmt/nanoSecondCheck.py
浏览文件 @
c7c6bcee
...
...
@@ -31,6 +31,7 @@ class TDTestCase:
tdSql
.
prepare
()
tdSql
.
execute
(
'reset query cache'
)
tdSql
.
execute
(
'drop database if exists db'
)
tdSql
.
error
(
'create database db keep 365000'
);
tdSql
.
execute
(
'create database db precision "ns";'
)
tdSql
.
query
(
'show databases;'
)
tdSql
.
checkData
(
0
,
16
,
'ns'
)
...
...
@@ -216,4 +217,4 @@ class TDTestCase:
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tests/pytest/functions/function_derivative.py
浏览文件 @
c7c6bcee
...
...
@@ -147,6 +147,9 @@ class TDTestCase:
tdSql
.
error
(
"select derivative(col, 10s, 1) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, 999ms, 1) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, 10s, 2) from stb group by id"
)
tdSql
.
error
(
"select derivative(col, -106752999999999922222d, 0) from stb group by tbname"
);
#overflow error
tdSql
.
error
(
"select derivative(col, 10y, 0) from stb group by tbname"
)
#TD-10399, DB error: syntax error near '10y, 0) from stb group by tbname;'
tdSql
.
error
(
"select derivative(col, -106752d, 0) from stb group by tbname"
)
#TD-10398 overflow tips
def
run
(
self
):
tdSql
.
prepare
()
...
...
tests/pytest/query/queryRegex.py
浏览文件 @
c7c6bcee
...
...
@@ -29,18 +29,18 @@ class TDTestCase:
print
(
"==============step1"
)
##2021-09-17 For jira: https://jira.taosdata.com:18080/browse/TD-6585
tdSql
.
execute
(
"create stable if not exists stb_test(ts timestamp,c0 binary(32),c1 int
) tags(t0 binary(32
))"
"create stable if not exists stb_test(ts timestamp,c0 binary(32),c1 int
,c2 nchar(50)) tags(t0 binary(32),t1 nchar(50
))"
)
tdSql
.
execute
(
'create table if not exists stb_1 using stb_test tags("abcdefgasdfg12346")'
'create table if not exists stb_1 using stb_test tags("abcdefgasdfg12346"
,"涛思数据"
)'
)
tdLog
.
info
(
'insert into stb_1 values("2021-09-13 10:00:00.001","abcefdasdqwerxasdazx12345",15'
)
tdLog
.
info
(
'insert into stb_1 values("2021-09-13 10:00:00.001","abcefdasdqwerxasdazx12345",15
,"引擎一组"
'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.002","abcefdasdqwerxasdazx12345",15)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.003","aaaaafffwwqqxzz",16)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.004","fffwwqqxzz",17)'
)
tdSql
.
execute
(
'insert into stb_1 values("2020-10-13 10:00:00.001","abcd
\\
\efgh",100)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.002","abcefdasdqwerxasdazx12345",15
,"引擎一组一号"
)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.003","aaaaafffwwqqxzz",16
,"引擎一组二号"
)'
)
tdSql
.
execute
(
'insert into stb_1 values("2021-09-13 10:00:00.004","fffwwqqxzz",17
,"涛涛思思"
)'
)
tdSql
.
execute
(
'insert into stb_1 values("2020-10-13 10:00:00.001","abcd
\\
\efgh",100
,"思涛思"
)'
)
tdSql
.
query
(
'select * from stb_test where tbname match "asd"'
)
tdSql
.
checkRows
(
0
)
...
...
@@ -98,6 +98,31 @@ class TDTestCase:
tdSql
.
query
(
"select * from stb_1 where c0 nmatch '
\\\\
'"
)
tdSql
.
checkRows
(
3
)
#2021-10-20 for https://jira.taosdata.com:18080/browse/TD-10708
tdSql
.
query
(
'select * from stb_1 where c2 match "^涛"'
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "^涛"'
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
'select * from stb_1 where c2 match "号$"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "号$"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 match "涛+思"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "涛+思"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 match "涛*思"'
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
'select * from stb_1 where c2 nmatch "涛*思"'
)
tdSql
.
checkRows
(
2
)
...
...
tests/script/general/compute/csum.sim
浏览文件 @
c7c6bcee
...
...
@@ -88,6 +88,18 @@ sql select csum(tbcol) as b from $tb where ts <= $ms interval(1m) -x step6
return -1
step6:
print =============== csum result overflow follow sum behavior
sql create table overflow(ts timestamp, c1 bigint)
sql insert into overflow values(now-1s, NULL)(now, 9223372036854775807)(now+1s, 9223372036854775807)
sql select csum(c1) from overflow
print $data00 , $data01, $data10, $data11
if $data01 != 9223372036854775807 then
return -1
endi
if $data11 != -2 then
return -1
endi
print =============== clear
sql drop database $db
sql show databases
...
...
tests/script/general/parser/alter.sim
浏览文件 @
c7c6bcee
...
...
@@ -86,12 +86,13 @@ endi
if $data07 != 11,12,13 then
return -1
endi
sql alter database $db keep 365000,365000,365000
sql_error alter database $db keep 365000,365000,365000
sql alter database $db keep 36500,36500,36500
sql show databases
if $rows != 1 then
return -1
endi
if $data07 != 36500
0,365000,3650
00 then
if $data07 != 36500
,36500,365
00 then
return -1
endi
...
...
tests/script/general/parser/alter__for_community_version.sim
浏览文件 @
c7c6bcee
...
...
@@ -79,15 +79,16 @@ endi
if $data07 != 13 then
return -1
endi
sql alter database $db keep 36500
0
sql alter database $db keep 36500
sql show databases
if $rows != 1 then
return -1
endi
if $data07 != 36500
0
then
if $data07 != 36500 then
return -1
endi
sql_error alter database $db keep 365000
##### alter table test, simeplest case
sql create table tb (ts timestamp, c1 int, c2 int, c3 int)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录