未验证 提交 0e03ebf8 编写于 作者: H Haojun Liao 提交者: GitHub

Merge pull request #7641 from taosdata/fix/query

[td-6395]<enhance>: use the keyword "EVERY" instead of "INTERVAL" in …
...@@ -1078,12 +1078,13 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS ...@@ -1078,12 +1078,13 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS
const char* msg1 = "sliding cannot be used without interval"; const char* msg1 = "sliding cannot be used without interval";
const char* msg2 = "interval cannot be less than 1 us"; const char* msg2 = "interval cannot be less than 1 us";
const char* msg3 = "interval value is too small"; const char* msg3 = "interval value is too small";
const char* msg4 = "only point interpolation query requires keyword EVERY";
SSqlCmd* pCmd = &pSql->cmd; SSqlCmd* pCmd = &pSql->cmd;
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0); STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta); STableComInfo tinfo = tscGetTableInfo(pTableMetaInfo->pTableMeta);
if (!TPARSER_HAS_TOKEN(pSqlNode->interval.interval)) { if (!TPARSER_HAS_TOKEN(pSqlNode->interval.interval)) {
if (TPARSER_HAS_TOKEN(pSqlNode->sliding)) { if (TPARSER_HAS_TOKEN(pSqlNode->sliding)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1);
...@@ -1109,7 +1110,6 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS ...@@ -1109,7 +1110,6 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS
} }
if (pQueryInfo->interval.intervalUnit != 'n' && pQueryInfo->interval.intervalUnit != 'y') { if (pQueryInfo->interval.intervalUnit != 'n' && pQueryInfo->interval.intervalUnit != 'y') {
// interval cannot be less than 10 milliseconds // interval cannot be less than 10 milliseconds
if (convertTimePrecision(pQueryInfo->interval.interval, tinfo.precision, TSDB_TIME_PRECISION_MICRO) < tsMinIntervalTime) { if (convertTimePrecision(pQueryInfo->interval.interval, tinfo.precision, TSDB_TIME_PRECISION_MICRO) < tsMinIntervalTime) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
...@@ -1124,6 +1124,11 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS ...@@ -1124,6 +1124,11 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS
return TSDB_CODE_TSC_INVALID_OPERATION; return TSDB_CODE_TSC_INVALID_OPERATION;
} }
bool interpQuery = tscIsPointInterpQuery(pQueryInfo);
if ((pSqlNode->interval.token == TK_EVERY && (!interpQuery)) || (pSqlNode->interval.token == TK_INTERVAL && interpQuery)) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4);
}
// The following part is used to check for the invalid query expression. // The following part is used to check for the invalid query expression.
return checkInvalidExprForTimeWindow(pCmd, pQueryInfo); return checkInvalidExprForTimeWindow(pCmd, pQueryInfo);
} }
......
...@@ -92,124 +92,125 @@ ...@@ -92,124 +92,125 @@
#define TK_ACCOUNT 74 #define TK_ACCOUNT 74
#define TK_USE 75 #define TK_USE 75
#define TK_DESCRIBE 76 #define TK_DESCRIBE 76
#define TK_ALTER 77 #define TK_DESC 77
#define TK_PASS 78 #define TK_ALTER 78
#define TK_PRIVILEGE 79 #define TK_PASS 79
#define TK_LOCAL 80 #define TK_PRIVILEGE 80
#define TK_COMPACT 81 #define TK_LOCAL 81
#define TK_LP 82 #define TK_COMPACT 82
#define TK_RP 83 #define TK_LP 83
#define TK_IF 84 #define TK_RP 84
#define TK_EXISTS 85 #define TK_IF 85
#define TK_AS 86 #define TK_EXISTS 86
#define TK_OUTPUTTYPE 87 #define TK_AS 87
#define TK_AGGREGATE 88 #define TK_OUTPUTTYPE 88
#define TK_BUFSIZE 89 #define TK_AGGREGATE 89
#define TK_PPS 90 #define TK_BUFSIZE 90
#define TK_TSERIES 91 #define TK_PPS 91
#define TK_DBS 92 #define TK_TSERIES 92
#define TK_STORAGE 93 #define TK_DBS 93
#define TK_QTIME 94 #define TK_STORAGE 94
#define TK_CONNS 95 #define TK_QTIME 95
#define TK_STATE 96 #define TK_CONNS 96
#define TK_COMMA 97 #define TK_STATE 97
#define TK_KEEP 98 #define TK_COMMA 98
#define TK_CACHE 99 #define TK_KEEP 99
#define TK_REPLICA 100 #define TK_CACHE 100
#define TK_QUORUM 101 #define TK_REPLICA 101
#define TK_DAYS 102 #define TK_QUORUM 102
#define TK_MINROWS 103 #define TK_DAYS 103
#define TK_MAXROWS 104 #define TK_MINROWS 104
#define TK_BLOCKS 105 #define TK_MAXROWS 105
#define TK_CTIME 106 #define TK_BLOCKS 106
#define TK_WAL 107 #define TK_CTIME 107
#define TK_FSYNC 108 #define TK_WAL 108
#define TK_COMP 109 #define TK_FSYNC 109
#define TK_PRECISION 110 #define TK_COMP 110
#define TK_UPDATE 111 #define TK_PRECISION 111
#define TK_CACHELAST 112 #define TK_UPDATE 112
#define TK_PARTITIONS 113 #define TK_CACHELAST 113
#define TK_UNSIGNED 114 #define TK_PARTITIONS 114
#define TK_TAGS 115 #define TK_UNSIGNED 115
#define TK_USING 116 #define TK_TAGS 116
#define TK_NULL 117 #define TK_USING 117
#define TK_NOW 118 #define TK_NULL 118
#define TK_SELECT 119 #define TK_NOW 119
#define TK_UNION 120 #define TK_SELECT 120
#define TK_ALL 121 #define TK_UNION 121
#define TK_DISTINCT 122 #define TK_ALL 122
#define TK_FROM 123 #define TK_DISTINCT 123
#define TK_VARIABLE 124 #define TK_FROM 124
#define TK_INTERVAL 125 #define TK_VARIABLE 125
#define TK_SESSION 126 #define TK_INTERVAL 126
#define TK_STATE_WINDOW 127 #define TK_EVERY 127
#define TK_FILL 128 #define TK_SESSION 128
#define TK_SLIDING 129 #define TK_STATE_WINDOW 129
#define TK_ORDER 130 #define TK_FILL 130
#define TK_BY 131 #define TK_SLIDING 131
#define TK_ASC 132 #define TK_ORDER 132
#define TK_DESC 133 #define TK_BY 133
#define TK_GROUP 134 #define TK_ASC 134
#define TK_HAVING 135 #define TK_GROUP 135
#define TK_LIMIT 136 #define TK_HAVING 136
#define TK_OFFSET 137 #define TK_LIMIT 137
#define TK_SLIMIT 138 #define TK_OFFSET 138
#define TK_SOFFSET 139 #define TK_SLIMIT 139
#define TK_WHERE 140 #define TK_SOFFSET 140
#define TK_RESET 141 #define TK_WHERE 141
#define TK_QUERY 142 #define TK_RESET 142
#define TK_SYNCDB 143 #define TK_QUERY 143
#define TK_ADD 144 #define TK_SYNCDB 144
#define TK_COLUMN 145 #define TK_ADD 145
#define TK_MODIFY 146 #define TK_COLUMN 146
#define TK_TAG 147 #define TK_MODIFY 147
#define TK_CHANGE 148 #define TK_TAG 148
#define TK_SET 149 #define TK_CHANGE 149
#define TK_KILL 150 #define TK_SET 150
#define TK_CONNECTION 151 #define TK_KILL 151
#define TK_STREAM 152 #define TK_CONNECTION 152
#define TK_COLON 153 #define TK_STREAM 153
#define TK_ABORT 154 #define TK_COLON 154
#define TK_AFTER 155 #define TK_ABORT 155
#define TK_ATTACH 156 #define TK_AFTER 156
#define TK_BEFORE 157 #define TK_ATTACH 157
#define TK_BEGIN 158 #define TK_BEFORE 158
#define TK_CASCADE 159 #define TK_BEGIN 159
#define TK_CLUSTER 160 #define TK_CASCADE 160
#define TK_CONFLICT 161 #define TK_CLUSTER 161
#define TK_COPY 162 #define TK_CONFLICT 162
#define TK_DEFERRED 163 #define TK_COPY 163
#define TK_DELIMITERS 164 #define TK_DEFERRED 164
#define TK_DETACH 165 #define TK_DELIMITERS 165
#define TK_EACH 166 #define TK_DETACH 166
#define TK_END 167 #define TK_EACH 167
#define TK_EXPLAIN 168 #define TK_END 168
#define TK_FAIL 169 #define TK_EXPLAIN 169
#define TK_FOR 170 #define TK_FAIL 170
#define TK_IGNORE 171 #define TK_FOR 171
#define TK_IMMEDIATE 172 #define TK_IGNORE 172
#define TK_INITIALLY 173 #define TK_IMMEDIATE 173
#define TK_INSTEAD 174 #define TK_INITIALLY 174
#define TK_MATCH 175 #define TK_INSTEAD 175
#define TK_KEY 176 #define TK_MATCH 176
#define TK_OF 177 #define TK_KEY 177
#define TK_RAISE 178 #define TK_OF 178
#define TK_REPLACE 179 #define TK_RAISE 179
#define TK_RESTRICT 180 #define TK_REPLACE 180
#define TK_ROW 181 #define TK_RESTRICT 181
#define TK_STATEMENT 182 #define TK_ROW 182
#define TK_TRIGGER 183 #define TK_STATEMENT 183
#define TK_VIEW 184 #define TK_TRIGGER 184
#define TK_SEMI 185 #define TK_VIEW 185
#define TK_NONE 186 #define TK_SEMI 186
#define TK_PREV 187 #define TK_NONE 187
#define TK_LINEAR 188 #define TK_PREV 188
#define TK_IMPORT 189 #define TK_LINEAR 189
#define TK_TBNAME 190 #define TK_IMPORT 190
#define TK_JOIN 191 #define TK_TBNAME 191
#define TK_INSERT 192 #define TK_JOIN 192
#define TK_INTO 193 #define TK_INSERT 193
#define TK_VALUES 194 #define TK_INTO 194
#define TK_VALUES 195
#define TK_SPACE 300 #define TK_SPACE 300
......
...@@ -80,6 +80,7 @@ typedef struct tVariantListItem { ...@@ -80,6 +80,7 @@ typedef struct tVariantListItem {
} tVariantListItem; } tVariantListItem;
typedef struct SIntervalVal { typedef struct SIntervalVal {
int32_t token;
SStrToken interval; SStrToken interval;
SStrToken offset; SStrToken offset;
} SIntervalVal; } SIntervalVal;
......
...@@ -94,15 +94,15 @@ cpxName(A) ::= DOT ids(Y). {A = Y; A.n += 1; } ...@@ -94,15 +94,15 @@ cpxName(A) ::= DOT ids(Y). {A = Y; A.n += 1; }
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). { cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y). {
X.n += Y.n; X.n += Y.n;
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X); setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X);
} }
cmd ::= SHOW CREATE STABLE ids(X) cpxName(Y). { cmd ::= SHOW CREATE STABLE ids(X) cpxName(Y). {
X.n += Y.n; X.n += Y.n;
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_STABLE, 1, &X); setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_STABLE, 1, &X);
} }
cmd ::= SHOW CREATE DATABASE ids(X). { cmd ::= SHOW CREATE DATABASE ids(X). {
setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &X); setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &X);
} }
cmd ::= SHOW dbPrefix(X) TABLES. { cmd ::= SHOW dbPrefix(X) TABLES. {
setShowOptions(pInfo, TSDB_MGMT_TABLE_TABLE, &X, 0); setShowOptions(pInfo, TSDB_MGMT_TABLE_TABLE, &X, 0);
...@@ -163,6 +163,11 @@ cmd ::= DESCRIBE ids(X) cpxName(Y). { ...@@ -163,6 +163,11 @@ cmd ::= DESCRIBE ids(X) cpxName(Y). {
setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X); setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
} }
cmd ::= DESC ids(X) cpxName(Y). {
X.n += Y.n;
setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
}
/////////////////////////////////THE ALTER STATEMENT//////////////////////////////////////// /////////////////////////////////THE ALTER STATEMENT////////////////////////////////////////
cmd ::= ALTER USER ids(X) PASS ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PASSWD, &X, &Y, NULL); } cmd ::= ALTER USER ids(X) PASS ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PASSWD, &X, &Y, NULL); }
cmd ::= ALTER USER ids(X) PRIVILEGE ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &X, NULL, &Y);} cmd ::= ALTER USER ids(X) PRIVILEGE ids(Y). { setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &X, NULL, &Y);}
...@@ -274,7 +279,7 @@ wal(Y) ::= WAL INTEGER(X). { Y = X; } ...@@ -274,7 +279,7 @@ wal(Y) ::= WAL INTEGER(X). { Y = X; }
fsync(Y) ::= FSYNC INTEGER(X). { Y = X; } fsync(Y) ::= FSYNC INTEGER(X). { Y = X; }
comp(Y) ::= COMP INTEGER(X). { Y = X; } comp(Y) ::= COMP INTEGER(X). { Y = X; }
prec(Y) ::= PRECISION STRING(X). { Y = X; } prec(Y) ::= PRECISION STRING(X). { Y = X; }
update(Y) ::= UPDATE INTEGER(X). { Y = X; } update(Y) ::= UPDATE INTEGER(X). { Y = X; }
cachelast(Y) ::= CACHELAST INTEGER(X). { Y = X; } cachelast(Y) ::= CACHELAST INTEGER(X). { Y = X; }
partitions(Y) ::= PARTITIONS INTEGER(X). { Y = X; } partitions(Y) ::= PARTITIONS INTEGER(X). { Y = X; }
...@@ -323,7 +328,7 @@ alter_topic_optr(Y) ::= alter_db_optr(Z). { Y = Z; Y.dbTyp ...@@ -323,7 +328,7 @@ alter_topic_optr(Y) ::= alter_db_optr(Z). { Y = Z; Y.dbTyp
alter_topic_optr(Y) ::= alter_topic_optr(Z) partitions(X). { Y = Z; Y.partitions = strtol(X.z, NULL, 10); } alter_topic_optr(Y) ::= alter_topic_optr(Z) partitions(X). { Y = Z; Y.partitions = strtol(X.z, NULL, 10); }
%type typename {TAOS_FIELD} %type typename {TAOS_FIELD}
typename(A) ::= ids(X). { typename(A) ::= ids(X). {
X.type = 0; X.type = 0;
tSetColumnType (&A, &X); tSetColumnType (&A, &X);
} }
...@@ -479,7 +484,7 @@ tagitem(A) ::= PLUS(X) FLOAT(Y). { ...@@ -479,7 +484,7 @@ tagitem(A) ::= PLUS(X) FLOAT(Y). {
//////////////////////// The SELECT statement ///////////////////////////////// //////////////////////// The SELECT statement /////////////////////////////////
%type select {SSqlNode*} %type select {SSqlNode*}
%destructor select {destroySqlNode($$);} %destructor select {destroySqlNode($$);}
select(A) ::= SELECT(T) selcollist(W) from(X) where_opt(Y) interval_opt(K) sliding_opt(S) session_option(H) windowstate_option(D) fill_opt(F)groupby_opt(P) having_opt(N) orderby_opt(Z) slimit_opt(G) limit_opt(L). { select(A) ::= SELECT(T) selcollist(W) from(X) where_opt(Y) interval_option(K) sliding_opt(S) session_option(H) windowstate_option(D) fill_opt(F)groupby_opt(P) having_opt(N) orderby_opt(Z) slimit_opt(G) limit_opt(L). {
A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &D, &S, F, &L, &G, N); A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &D, &S, F, &L, &G, N);
} }
...@@ -569,10 +574,14 @@ tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z) ids(F). { ...@@ -569,10 +574,14 @@ tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z) ids(F). {
%type tmvar {SStrToken} %type tmvar {SStrToken}
tmvar(A) ::= VARIABLE(X). {A = X;} tmvar(A) ::= VARIABLE(X). {A = X;}
%type interval_opt {SIntervalVal} %type interval_option {SIntervalVal}
interval_opt(N) ::= INTERVAL LP tmvar(E) RP. {N.interval = E; N.offset.n = 0;} interval_option(N) ::= intervalKey(A) LP tmvar(E) RP. {N.interval = E; N.offset.n = 0; N.token = A;}
interval_opt(N) ::= INTERVAL LP tmvar(E) COMMA tmvar(X) RP. {N.interval = E; N.offset = X;} interval_option(N) ::= intervalKey(A) LP tmvar(E) COMMA tmvar(X) RP. {N.interval = E; N.offset = X; N.token = A;}
interval_opt(N) ::= . {memset(&N, 0, sizeof(N));} interval_option(N) ::= . {memset(&N, 0, sizeof(N));}
%type intervalKey {int32_t}
intervalKey(A) ::= INTERVAL. {A = TK_INTERVAL;}
intervalKey(A) ::= EVERY. {A = TK_EVERY; }
%type session_option {SSessionWindowVal} %type session_option {SSessionWindowVal}
session_option(X) ::= . {X.col.n = 0; X.gap.n = 0;} session_option(X) ::= . {X.col.n = 0; X.gap.n = 0;}
...@@ -581,6 +590,7 @@ session_option(X) ::= SESSION LP ids(V) cpxName(Z) COMMA tmvar(Y) RP. { ...@@ -581,6 +590,7 @@ session_option(X) ::= SESSION LP ids(V) cpxName(Z) COMMA tmvar(Y) RP. {
X.col = V; X.col = V;
X.gap = Y; X.gap = Y;
} }
%type windowstate_option {SWindowStateVal} %type windowstate_option {SWindowStateVal}
windowstate_option(X) ::= . { X.col.n = 0; X.col.z = NULL;} windowstate_option(X) ::= . { X.col.n = 0; X.col.z = NULL;}
windowstate_option(X) ::= STATE_WINDOW LP ids(V) RP. { X.col = V; } windowstate_option(X) ::= STATE_WINDOW LP ids(V) RP. { X.col = V; }
......
此差异已折叠。
...@@ -140,6 +140,7 @@ static SKeyword keywordTable[] = { ...@@ -140,6 +140,7 @@ static SKeyword keywordTable[] = {
{"FROM", TK_FROM}, {"FROM", TK_FROM},
{"VARIABLE", TK_VARIABLE}, {"VARIABLE", TK_VARIABLE},
{"INTERVAL", TK_INTERVAL}, {"INTERVAL", TK_INTERVAL},
{"EVERY", TK_EVERY},
{"SESSION", TK_SESSION}, {"SESSION", TK_SESSION},
{"STATE_WINDOW", TK_STATE_WINDOW}, {"STATE_WINDOW", TK_STATE_WINDOW},
{"FILL", TK_FILL}, {"FILL", TK_FILL},
......
...@@ -57,15 +57,15 @@ class TDTestCase: ...@@ -57,15 +57,15 @@ class TDTestCase:
tdSql.checkRows(0) tdSql.checkRows(0)
tdSql.query("select interp(pav) from ap1 where ts = '2021-07-25 02:19:54' FILL (LINEAR)") tdSql.query("select interp(pav) from ap1 where ts = '2021-07-25 02:19:54' FILL (LINEAR)")
tdSql.checkRows(0) tdSql.checkRows(0)
tdSql.query("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' INTERVAL(1000a) FILL (LINEAR)") tdSql.query("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' every(1000a) FILL (LINEAR)")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' INTERVAL(1000a) FILL (NEXT)") tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' every(1000a) FILL (NEXT)")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkData(0,1,2.90799) tdSql.checkData(0,1,2.90799)
tdSql.query("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' INTERVAL(1000a) FILL (PREV)") tdSql.query("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' every(1000a) FILL (PREV)")
tdSql.checkRows(7) tdSql.checkRows(7)
tdSql.checkData(1,1,1.47885) tdSql.checkData(1,1,1.47885)
tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' INTERVAL(1000a) FILL (LINEAR)") tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' every(1000a) FILL (LINEAR)")
tdSql.checkRows(7) tdSql.checkRows(7)
# check desc order # check desc order
...@@ -74,13 +74,13 @@ class TDTestCase: ...@@ -74,13 +74,13 @@ class TDTestCase:
tdSql.checkRows(0) tdSql.checkRows(0)
tdSql.query("select interp(pav) from ap1 where ts = '2021-07-25 02:19:54' FILL (LINEAR) order by ts desc") tdSql.query("select interp(pav) from ap1 where ts = '2021-07-25 02:19:54' FILL (LINEAR) order by ts desc")
tdSql.checkRows(0) tdSql.checkRows(0)
tdSql.query("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' INTERVAL(1000a) FILL (LINEAR) order by ts desc") tdSql.query("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' every(1000a) FILL (LINEAR) order by ts desc")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' INTERVAL(1000a) FILL (NEXT) order by ts desc") tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts<'2021-07-25 02:20:00' every(1000a) FILL (NEXT) order by ts desc")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkData(0,1,4.60900) tdSql.checkData(0,1,4.60900)
tdSql.error("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' INTERVAL(1000a) FILL (PREV) order by ts desc") tdSql.error("select interp(pav) from ap1 where ts> '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' every(1000a) FILL (PREV) order by ts desc")
tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' INTERVAL(1000a) FILL (LINEAR) order by ts desc") tdSql.query("select interp(pav) from ap1 where ts>= '2021-07-25 02:19:54' and ts <= '2021-07-25 02:20:00' every(1000a) FILL (LINEAR) order by ts desc")
tdSql.checkRows(7) tdSql.checkRows(7)
# check exception # check exception
...@@ -88,7 +88,7 @@ class TDTestCase: ...@@ -88,7 +88,7 @@ class TDTestCase:
tdSql.error("select interp(*) from ap1 FILL(NEXT)") tdSql.error("select interp(*) from ap1 FILL(NEXT)")
tdSql.error("select interp(*) from ap1 ts >= '2021-07-25 02:19:54' FILL(NEXT)") tdSql.error("select interp(*) from ap1 ts >= '2021-07-25 02:19:54' FILL(NEXT)")
tdSql.error("select interp(*) from ap1 ts <= '2021-07-25 02:19:54' FILL(NEXT)") tdSql.error("select interp(*) from ap1 ts <= '2021-07-25 02:19:54' FILL(NEXT)")
tdSql.error("select interp(*) from ap1 where ts >'2021-07-25 02:19:59.938' and ts < now interval(1s) fill(next)") tdSql.error("select interp(*) from ap1 where ts >'2021-07-25 02:19:59.938' and ts < now every(1s) fill(next)")
def stop(self): def stop(self):
tdSql.close() tdSql.close()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册