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

Merge pull request #18958 from taosdata/feat/TS-2158

feat(query): add _isfilled pseudocolumn to indicate data is origin 
...@@ -876,7 +876,8 @@ INTERP(expr) ...@@ -876,7 +876,8 @@ INTERP(expr)
- The number of rows in the result set of `INTERP` is determined by the parameter `EVERY`. Starting from timestamp1, one interpolation is performed for every time interval specified `EVERY` parameter. The parameter `EVERY` must be an integer, with no quotes, with a time unit of: b(nanosecond), u(microsecond), a(millisecond)), s(second), m(minute), h(hour), d(day), or w(week). For example, `EVERY(500a)` will interpolate every 500 milliseconds. - The number of rows in the result set of `INTERP` is determined by the parameter `EVERY`. Starting from timestamp1, one interpolation is performed for every time interval specified `EVERY` parameter. The parameter `EVERY` must be an integer, with no quotes, with a time unit of: b(nanosecond), u(microsecond), a(millisecond)), s(second), m(minute), h(hour), d(day), or w(week). For example, `EVERY(500a)` will interpolate every 500 milliseconds.
- Interpolation is performed based on `FILL` parameter. - Interpolation is performed based on `FILL` parameter.
- `INTERP` can only be used to interpolate in single timeline. So it must be used with `partition by tbname` when it's used on a STable. - `INTERP` can only be used to interpolate in single timeline. So it must be used with `partition by tbname` when it's used on a STable.
- Pseudo column `_irowts` can be used along with `INTERP` to return the timestamps associated with interpolation points(support after version 3.0.1.4). - Pseudocolumn `_irowts` can be used along with `INTERP` to return the timestamps associated with interpolation points(support after version 3.0.1.4).
- Pseudocolumn `_isfilled` can be used along with `INTERP` to indicate whether the results are original records or data points generated by interpolation algorithm(support after version 3.0.2.1).
### LAST ### LAST
......
...@@ -880,6 +880,7 @@ INTERP(expr) ...@@ -880,6 +880,7 @@ INTERP(expr)
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。 - INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。
- INTERP 只能在一个时间序列内进行插值,因此当作用于超级表时必须跟 partition by tbname 一起使用。 - INTERP 只能在一个时间序列内进行插值,因此当作用于超级表时必须跟 partition by tbname 一起使用。
- INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(3.0.1.4版本以后支持)。 - INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(3.0.1.4版本以后支持)。
- INTERP 可以与伪列 _isfilled 一起使用,显示返回结果是否为原始记录或插值算法产生的数据(3.0.2.1版本以后支持)。
### LAST ### LAST
......
...@@ -16,329 +16,330 @@ ...@@ -16,329 +16,330 @@
#ifndef _TD_COMMON_TOKEN_H_ #ifndef _TD_COMMON_TOKEN_H_
#define _TD_COMMON_TOKEN_H_ #define _TD_COMMON_TOKEN_H_
#define TK_OR 1 #define TK_OR 1
#define TK_AND 2 #define TK_AND 2
#define TK_UNION 3 #define TK_UNION 3
#define TK_ALL 4 #define TK_ALL 4
#define TK_MINUS 5 #define TK_MINUS 5
#define TK_EXCEPT 6 #define TK_EXCEPT 6
#define TK_INTERSECT 7 #define TK_INTERSECT 7
#define TK_NK_BITAND 8 #define TK_NK_BITAND 8
#define TK_NK_BITOR 9 #define TK_NK_BITOR 9
#define TK_NK_LSHIFT 10 #define TK_NK_LSHIFT 10
#define TK_NK_RSHIFT 11 #define TK_NK_RSHIFT 11
#define TK_NK_PLUS 12 #define TK_NK_PLUS 12
#define TK_NK_MINUS 13 #define TK_NK_MINUS 13
#define TK_NK_STAR 14 #define TK_NK_STAR 14
#define TK_NK_SLASH 15 #define TK_NK_SLASH 15
#define TK_NK_REM 16 #define TK_NK_REM 16
#define TK_NK_CONCAT 17 #define TK_NK_CONCAT 17
#define TK_CREATE 18 #define TK_CREATE 18
#define TK_ACCOUNT 19 #define TK_ACCOUNT 19
#define TK_NK_ID 20 #define TK_NK_ID 20
#define TK_PASS 21 #define TK_PASS 21
#define TK_NK_STRING 22 #define TK_NK_STRING 22
#define TK_ALTER 23 #define TK_ALTER 23
#define TK_PPS 24 #define TK_PPS 24
#define TK_TSERIES 25 #define TK_TSERIES 25
#define TK_STORAGE 26 #define TK_STORAGE 26
#define TK_STREAMS 27 #define TK_STREAMS 27
#define TK_QTIME 28 #define TK_QTIME 28
#define TK_DBS 29 #define TK_DBS 29
#define TK_USERS 30 #define TK_USERS 30
#define TK_CONNS 31 #define TK_CONNS 31
#define TK_STATE 32 #define TK_STATE 32
#define TK_USER 33 #define TK_USER 33
#define TK_ENABLE 34 #define TK_ENABLE 34
#define TK_NK_INTEGER 35 #define TK_NK_INTEGER 35
#define TK_SYSINFO 36 #define TK_SYSINFO 36
#define TK_DROP 37 #define TK_DROP 37
#define TK_GRANT 38 #define TK_GRANT 38
#define TK_ON 39 #define TK_ON 39
#define TK_TO 40 #define TK_TO 40
#define TK_REVOKE 41 #define TK_REVOKE 41
#define TK_FROM 42 #define TK_FROM 42
#define TK_SUBSCRIBE 43 #define TK_SUBSCRIBE 43
#define TK_NK_COMMA 44 #define TK_NK_COMMA 44
#define TK_READ 45 #define TK_READ 45
#define TK_WRITE 46 #define TK_WRITE 46
#define TK_NK_DOT 47 #define TK_NK_DOT 47
#define TK_DNODE 48 #define TK_DNODE 48
#define TK_PORT 49 #define TK_PORT 49
#define TK_DNODES 50 #define TK_DNODES 50
#define TK_NK_IPTOKEN 51 #define TK_NK_IPTOKEN 51
#define TK_FORCE 52 #define TK_FORCE 52
#define TK_LOCAL 53 #define TK_LOCAL 53
#define TK_QNODE 54 #define TK_QNODE 54
#define TK_BNODE 55 #define TK_BNODE 55
#define TK_SNODE 56 #define TK_SNODE 56
#define TK_MNODE 57 #define TK_MNODE 57
#define TK_DATABASE 58 #define TK_DATABASE 58
#define TK_USE 59 #define TK_USE 59
#define TK_FLUSH 60 #define TK_FLUSH 60
#define TK_TRIM 61 #define TK_TRIM 61
#define TK_IF 62 #define TK_IF 62
#define TK_NOT 63 #define TK_NOT 63
#define TK_EXISTS 64 #define TK_EXISTS 64
#define TK_BUFFER 65 #define TK_BUFFER 65
#define TK_CACHEMODEL 66 #define TK_CACHEMODEL 66
#define TK_CACHESIZE 67 #define TK_CACHESIZE 67
#define TK_COMP 68 #define TK_COMP 68
#define TK_DURATION 69 #define TK_DURATION 69
#define TK_NK_VARIABLE 70 #define TK_NK_VARIABLE 70
#define TK_MAXROWS 71 #define TK_MAXROWS 71
#define TK_MINROWS 72 #define TK_MINROWS 72
#define TK_KEEP 73 #define TK_KEEP 73
#define TK_PAGES 74 #define TK_PAGES 74
#define TK_PAGESIZE 75 #define TK_PAGESIZE 75
#define TK_TSDB_PAGESIZE 76 #define TK_TSDB_PAGESIZE 76
#define TK_PRECISION 77 #define TK_PRECISION 77
#define TK_REPLICA 78 #define TK_REPLICA 78
#define TK_VGROUPS 79 #define TK_VGROUPS 79
#define TK_SINGLE_STABLE 80 #define TK_SINGLE_STABLE 80
#define TK_RETENTIONS 81 #define TK_RETENTIONS 81
#define TK_SCHEMALESS 82 #define TK_SCHEMALESS 82
#define TK_WAL_LEVEL 83 #define TK_WAL_LEVEL 83
#define TK_WAL_FSYNC_PERIOD 84 #define TK_WAL_FSYNC_PERIOD 84
#define TK_WAL_RETENTION_PERIOD 85 #define TK_WAL_RETENTION_PERIOD 85
#define TK_WAL_RETENTION_SIZE 86 #define TK_WAL_RETENTION_SIZE 86
#define TK_WAL_ROLL_PERIOD 87 #define TK_WAL_ROLL_PERIOD 87
#define TK_WAL_SEGMENT_SIZE 88 #define TK_WAL_SEGMENT_SIZE 88
#define TK_STT_TRIGGER 89 #define TK_STT_TRIGGER 89
#define TK_TABLE_PREFIX 90 #define TK_TABLE_PREFIX 90
#define TK_TABLE_SUFFIX 91 #define TK_TABLE_SUFFIX 91
#define TK_NK_COLON 92 #define TK_NK_COLON 92
#define TK_MAX_SPEED 93 #define TK_MAX_SPEED 93
#define TK_TABLE 94 #define TK_TABLE 94
#define TK_NK_LP 95 #define TK_NK_LP 95
#define TK_NK_RP 96 #define TK_NK_RP 96
#define TK_STABLE 97 #define TK_STABLE 97
#define TK_ADD 98 #define TK_ADD 98
#define TK_COLUMN 99 #define TK_COLUMN 99
#define TK_MODIFY 100 #define TK_MODIFY 100
#define TK_RENAME 101 #define TK_RENAME 101
#define TK_TAG 102 #define TK_TAG 102
#define TK_SET 103 #define TK_SET 103
#define TK_NK_EQ 104 #define TK_NK_EQ 104
#define TK_USING 105 #define TK_USING 105
#define TK_TAGS 106 #define TK_TAGS 106
#define TK_COMMENT 107 #define TK_COMMENT 107
#define TK_BOOL 108 #define TK_BOOL 108
#define TK_TINYINT 109 #define TK_TINYINT 109
#define TK_SMALLINT 110 #define TK_SMALLINT 110
#define TK_INT 111 #define TK_INT 111
#define TK_INTEGER 112 #define TK_INTEGER 112
#define TK_BIGINT 113 #define TK_BIGINT 113
#define TK_FLOAT 114 #define TK_FLOAT 114
#define TK_DOUBLE 115 #define TK_DOUBLE 115
#define TK_BINARY 116 #define TK_BINARY 116
#define TK_TIMESTAMP 117 #define TK_TIMESTAMP 117
#define TK_NCHAR 118 #define TK_NCHAR 118
#define TK_UNSIGNED 119 #define TK_UNSIGNED 119
#define TK_JSON 120 #define TK_JSON 120
#define TK_VARCHAR 121 #define TK_VARCHAR 121
#define TK_MEDIUMBLOB 122 #define TK_MEDIUMBLOB 122
#define TK_BLOB 123 #define TK_BLOB 123
#define TK_VARBINARY 124 #define TK_VARBINARY 124
#define TK_DECIMAL 125 #define TK_DECIMAL 125
#define TK_MAX_DELAY 126 #define TK_MAX_DELAY 126
#define TK_WATERMARK 127 #define TK_WATERMARK 127
#define TK_ROLLUP 128 #define TK_ROLLUP 128
#define TK_TTL 129 #define TK_TTL 129
#define TK_SMA 130 #define TK_SMA 130
#define TK_DELETE_MARK 131 #define TK_DELETE_MARK 131
#define TK_FIRST 132 #define TK_FIRST 132
#define TK_LAST 133 #define TK_LAST 133
#define TK_SHOW 134 #define TK_SHOW 134
#define TK_PRIVILEGES 135 #define TK_PRIVILEGES 135
#define TK_DATABASES 136 #define TK_DATABASES 136
#define TK_TABLES 137 #define TK_TABLES 137
#define TK_STABLES 138 #define TK_STABLES 138
#define TK_MNODES 139 #define TK_MNODES 139
#define TK_QNODES 140 #define TK_QNODES 140
#define TK_FUNCTIONS 141 #define TK_FUNCTIONS 141
#define TK_INDEXES 142 #define TK_INDEXES 142
#define TK_ACCOUNTS 143 #define TK_ACCOUNTS 143
#define TK_APPS 144 #define TK_APPS 144
#define TK_CONNECTIONS 145 #define TK_CONNECTIONS 145
#define TK_LICENCES 146 #define TK_LICENCES 146
#define TK_GRANTS 147 #define TK_GRANTS 147
#define TK_QUERIES 148 #define TK_QUERIES 148
#define TK_SCORES 149 #define TK_SCORES 149
#define TK_TOPICS 150 #define TK_TOPICS 150
#define TK_VARIABLES 151 #define TK_VARIABLES 151
#define TK_CLUSTER 152 #define TK_CLUSTER 152
#define TK_BNODES 153 #define TK_BNODES 153
#define TK_SNODES 154 #define TK_SNODES 154
#define TK_TRANSACTIONS 155 #define TK_TRANSACTIONS 155
#define TK_DISTRIBUTED 156 #define TK_DISTRIBUTED 156
#define TK_CONSUMERS 157 #define TK_CONSUMERS 157
#define TK_SUBSCRIPTIONS 158 #define TK_SUBSCRIPTIONS 158
#define TK_VNODES 159 #define TK_VNODES 159
#define TK_LIKE 160 #define TK_LIKE 160
#define TK_TBNAME 161 #define TK_TBNAME 161
#define TK_QTAGS 162 #define TK_QTAGS 162
#define TK_AS 163 #define TK_AS 163
#define TK_INDEX 164 #define TK_INDEX 164
#define TK_FUNCTION 165 #define TK_FUNCTION 165
#define TK_INTERVAL 166 #define TK_INTERVAL 166
#define TK_COUNT 167 #define TK_COUNT 167
#define TK_LAST_ROW 168 #define TK_LAST_ROW 168
#define TK_TOPIC 169 #define TK_TOPIC 169
#define TK_WITH 170 #define TK_WITH 170
#define TK_META 171 #define TK_META 171
#define TK_CONSUMER 172 #define TK_CONSUMER 172
#define TK_GROUP 173 #define TK_GROUP 173
#define TK_DESC 174 #define TK_DESC 174
#define TK_DESCRIBE 175 #define TK_DESCRIBE 175
#define TK_RESET 176 #define TK_RESET 176
#define TK_QUERY 177 #define TK_QUERY 177
#define TK_CACHE 178 #define TK_CACHE 178
#define TK_EXPLAIN 179 #define TK_EXPLAIN 179
#define TK_ANALYZE 180 #define TK_ANALYZE 180
#define TK_VERBOSE 181 #define TK_VERBOSE 181
#define TK_NK_BOOL 182 #define TK_NK_BOOL 182
#define TK_RATIO 183 #define TK_RATIO 183
#define TK_NK_FLOAT 184 #define TK_NK_FLOAT 184
#define TK_OUTPUTTYPE 185 #define TK_OUTPUTTYPE 185
#define TK_AGGREGATE 186 #define TK_AGGREGATE 186
#define TK_BUFSIZE 187 #define TK_BUFSIZE 187
#define TK_STREAM 188 #define TK_STREAM 188
#define TK_INTO 189 #define TK_INTO 189
#define TK_TRIGGER 190 #define TK_TRIGGER 190
#define TK_AT_ONCE 191 #define TK_AT_ONCE 191
#define TK_WINDOW_CLOSE 192 #define TK_WINDOW_CLOSE 192
#define TK_IGNORE 193 #define TK_IGNORE 193
#define TK_EXPIRED 194 #define TK_EXPIRED 194
#define TK_FILL_HISTORY 195 #define TK_FILL_HISTORY 195
#define TK_SUBTABLE 196 #define TK_SUBTABLE 196
#define TK_KILL 197 #define TK_KILL 197
#define TK_CONNECTION 198 #define TK_CONNECTION 198
#define TK_TRANSACTION 199 #define TK_TRANSACTION 199
#define TK_BALANCE 200 #define TK_BALANCE 200
#define TK_VGROUP 201 #define TK_VGROUP 201
#define TK_MERGE 202 #define TK_MERGE 202
#define TK_REDISTRIBUTE 203 #define TK_REDISTRIBUTE 203
#define TK_SPLIT 204 #define TK_SPLIT 204
#define TK_DELETE 205 #define TK_DELETE 205
#define TK_INSERT 206 #define TK_INSERT 206
#define TK_NULL 207 #define TK_NULL 207
#define TK_NK_QUESTION 208 #define TK_NK_QUESTION 208
#define TK_NK_ARROW 209 #define TK_NK_ARROW 209
#define TK_ROWTS 210 #define TK_ROWTS 210
#define TK_QSTART 211 #define TK_QSTART 211
#define TK_QEND 212 #define TK_QEND 212
#define TK_QDURATION 213 #define TK_QDURATION 213
#define TK_WSTART 214 #define TK_WSTART 214
#define TK_WEND 215 #define TK_WEND 215
#define TK_WDURATION 216 #define TK_WDURATION 216
#define TK_IROWTS 217 #define TK_IROWTS 217
#define TK_CAST 218 #define TK_ISFILLED 218
#define TK_NOW 219 #define TK_CAST 219
#define TK_TODAY 220 #define TK_NOW 220
#define TK_TIMEZONE 221 #define TK_TODAY 221
#define TK_CLIENT_VERSION 222 #define TK_TIMEZONE 222
#define TK_SERVER_VERSION 223 #define TK_CLIENT_VERSION 223
#define TK_SERVER_STATUS 224 #define TK_SERVER_VERSION 224
#define TK_CURRENT_USER 225 #define TK_SERVER_STATUS 225
#define TK_CASE 226 #define TK_CURRENT_USER 226
#define TK_END 227 #define TK_CASE 227
#define TK_WHEN 228 #define TK_END 228
#define TK_THEN 229 #define TK_WHEN 229
#define TK_ELSE 230 #define TK_THEN 230
#define TK_BETWEEN 231 #define TK_ELSE 231
#define TK_IS 232 #define TK_BETWEEN 232
#define TK_NK_LT 233 #define TK_IS 233
#define TK_NK_GT 234 #define TK_NK_LT 234
#define TK_NK_LE 235 #define TK_NK_GT 235
#define TK_NK_GE 236 #define TK_NK_LE 236
#define TK_NK_NE 237 #define TK_NK_GE 237
#define TK_MATCH 238 #define TK_NK_NE 238
#define TK_NMATCH 239 #define TK_MATCH 239
#define TK_CONTAINS 240 #define TK_NMATCH 240
#define TK_IN 241 #define TK_CONTAINS 241
#define TK_JOIN 242 #define TK_IN 242
#define TK_INNER 243 #define TK_JOIN 243
#define TK_SELECT 244 #define TK_INNER 244
#define TK_DISTINCT 245 #define TK_SELECT 245
#define TK_WHERE 246 #define TK_DISTINCT 246
#define TK_PARTITION 247 #define TK_WHERE 247
#define TK_BY 248 #define TK_PARTITION 248
#define TK_SESSION 249 #define TK_BY 249
#define TK_STATE_WINDOW 250 #define TK_SESSION 250
#define TK_EVENT_WINDOW 251 #define TK_STATE_WINDOW 251
#define TK_START 252 #define TK_EVENT_WINDOW 252
#define TK_SLIDING 253 #define TK_START 253
#define TK_FILL 254 #define TK_SLIDING 254
#define TK_VALUE 255 #define TK_FILL 255
#define TK_NONE 256 #define TK_VALUE 256
#define TK_PREV 257 #define TK_NONE 257
#define TK_LINEAR 258 #define TK_PREV 258
#define TK_NEXT 259 #define TK_LINEAR 259
#define TK_HAVING 260 #define TK_NEXT 260
#define TK_RANGE 261 #define TK_HAVING 261
#define TK_EVERY 262 #define TK_RANGE 262
#define TK_ORDER 263 #define TK_EVERY 263
#define TK_SLIMIT 264 #define TK_ORDER 264
#define TK_SOFFSET 265 #define TK_SLIMIT 265
#define TK_LIMIT 266 #define TK_SOFFSET 266
#define TK_OFFSET 267 #define TK_LIMIT 267
#define TK_ASC 268 #define TK_OFFSET 268
#define TK_NULLS 269 #define TK_ASC 269
#define TK_ABORT 270 #define TK_NULLS 270
#define TK_AFTER 271 #define TK_ABORT 271
#define TK_ATTACH 272 #define TK_AFTER 272
#define TK_BEFORE 273 #define TK_ATTACH 273
#define TK_BEGIN 274 #define TK_BEFORE 274
#define TK_BITAND 275 #define TK_BEGIN 275
#define TK_BITNOT 276 #define TK_BITAND 276
#define TK_BITOR 277 #define TK_BITNOT 277
#define TK_BLOCKS 278 #define TK_BITOR 278
#define TK_CHANGE 279 #define TK_BLOCKS 279
#define TK_COMMA 280 #define TK_CHANGE 280
#define TK_COMPACT 281 #define TK_COMMA 281
#define TK_CONCAT 282 #define TK_COMPACT 282
#define TK_CONFLICT 283 #define TK_CONCAT 283
#define TK_COPY 284 #define TK_CONFLICT 284
#define TK_DEFERRED 285 #define TK_COPY 285
#define TK_DELIMITERS 286 #define TK_DEFERRED 286
#define TK_DETACH 287 #define TK_DELIMITERS 287
#define TK_DIVIDE 288 #define TK_DETACH 288
#define TK_DOT 289 #define TK_DIVIDE 289
#define TK_EACH 290 #define TK_DOT 290
#define TK_FAIL 291 #define TK_EACH 291
#define TK_FILE 292 #define TK_FAIL 292
#define TK_FOR 293 #define TK_FILE 293
#define TK_GLOB 294 #define TK_FOR 294
#define TK_ID 295 #define TK_GLOB 295
#define TK_IMMEDIATE 296 #define TK_ID 296
#define TK_IMPORT 297 #define TK_IMMEDIATE 297
#define TK_INITIALLY 298 #define TK_IMPORT 298
#define TK_INSTEAD 299 #define TK_INITIALLY 299
#define TK_ISNULL 300 #define TK_INSTEAD 300
#define TK_KEY 301 #define TK_ISNULL 301
#define TK_MODULES 302 #define TK_KEY 302
#define TK_NK_BITNOT 303 #define TK_MODULES 303
#define TK_NK_SEMI 304 #define TK_NK_BITNOT 304
#define TK_NOTNULL 305 #define TK_NK_SEMI 305
#define TK_OF 306 #define TK_NOTNULL 306
#define TK_PLUS 307 #define TK_OF 307
#define TK_PRIVILEGE 308 #define TK_PLUS 308
#define TK_RAISE 309 #define TK_PRIVILEGE 309
#define TK_REPLACE 310 #define TK_RAISE 310
#define TK_RESTRICT 311 #define TK_REPLACE 311
#define TK_ROW 312 #define TK_RESTRICT 312
#define TK_SEMI 313 #define TK_ROW 313
#define TK_STAR 314 #define TK_SEMI 314
#define TK_STATEMENT 315 #define TK_STAR 315
#define TK_STRICT 316 #define TK_STATEMENT 316
#define TK_STRING 317 #define TK_STRICT 317
#define TK_TIMES 318 #define TK_STRING 318
#define TK_UPDATE 319 #define TK_TIMES 319
#define TK_VALUES 320 #define TK_UPDATE 320
#define TK_VARIABLE 321 #define TK_VALUES 321
#define TK_VIEW 322 #define TK_VARIABLE 322
#define TK_WAL 323 #define TK_VIEW 323
#define TK_WAL 324
#define TK_NK_SPACE 600 #define TK_NK_SPACE 600
#define TK_NK_COMMENT 601 #define TK_NK_COMMENT 601
......
...@@ -266,6 +266,7 @@ typedef struct { ...@@ -266,6 +266,7 @@ typedef struct {
#define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE) #define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE)
#define IS_INTEGER_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t))) #define IS_INTEGER_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)))
#define IS_TIMESTAMP_TYPE(_t) ((_t) == TSDB_DATA_TYPE_TIMESTAMP) #define IS_TIMESTAMP_TYPE(_t) ((_t) == TSDB_DATA_TYPE_TIMESTAMP)
#define IS_BOOLEAN_TYPE(_t) ((_t) == TSDB_DATA_TYPE_BOOL)
#define IS_NUMERIC_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)) || (IS_FLOAT_TYPE(_t))) #define IS_NUMERIC_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)) || (IS_FLOAT_TYPE(_t)))
#define IS_MATHABLE_TYPE(_t) \ #define IS_MATHABLE_TYPE(_t) \
......
...@@ -120,6 +120,7 @@ typedef enum EFunctionType { ...@@ -120,6 +120,7 @@ typedef enum EFunctionType {
FUNCTION_TYPE_WEND, FUNCTION_TYPE_WEND,
FUNCTION_TYPE_WDURATION, FUNCTION_TYPE_WDURATION,
FUNCTION_TYPE_IROWTS, FUNCTION_TYPE_IROWTS,
FUNCTION_TYPE_ISFILLED,
FUNCTION_TYPE_TAGS, FUNCTION_TYPE_TAGS,
// internal function // internal function
......
...@@ -163,6 +163,10 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp ...@@ -163,6 +163,10 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
if (IS_TIMESTAMP_TYPE(pExprInfo->base.resSchema.type)) { if (IS_TIMESTAMP_TYPE(pExprInfo->base.resSchema.type)) {
colDataAppend(pDst, rows, (char*)&pSliceInfo->current, false); colDataAppend(pDst, rows, (char*)&pSliceInfo->current, false);
continue; continue;
} else if (IS_BOOLEAN_TYPE(pExprInfo->base.resSchema.type)) {
bool isFilled = true;
colDataAppend(pDst, pResBlock->info.rows, (char*)&isFilled, false);
continue;
} }
int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId; int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId;
...@@ -274,6 +278,9 @@ static void addCurrentRowToResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp* ...@@ -274,6 +278,9 @@ static void addCurrentRowToResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp*
if (IS_TIMESTAMP_TYPE(pExprInfo->base.resSchema.type)) { if (IS_TIMESTAMP_TYPE(pExprInfo->base.resSchema.type)) {
colDataAppend(pDst, pResBlock->info.rows, (char*)&pSliceInfo->current, false); colDataAppend(pDst, pResBlock->info.rows, (char*)&pSliceInfo->current, false);
} else if (IS_BOOLEAN_TYPE(pExprInfo->base.resSchema.type)) {
bool isFilled = false;
colDataAppend(pDst, pResBlock->info.rows, (char*)&isFilled, false);
} else { } else {
int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId; int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId;
SColumnInfoData* pSrc = taosArrayGet(pSrcBlock->pDataBlock, srcSlot); SColumnInfoData* pSrc = taosArrayGet(pSrcBlock->pDataBlock, srcSlot);
......
...@@ -466,7 +466,7 @@ static int32_t translateStddevMerge(SFunctionNode* pFunc, char* pErrBuf, int32_t ...@@ -466,7 +466,7 @@ static int32_t translateStddevMerge(SFunctionNode* pFunc, char* pErrBuf, int32_t
static int32_t translateWduration(SFunctionNode* pFunc, char* pErrBuf, int32_t len) { static int32_t translateWduration(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
// pseudo column do not need to check parameters // pseudo column do not need to check parameters
pFunc->node.resType = (SDataType){.bytes = sizeof(int64_t), .type = TSDB_DATA_TYPE_BIGINT}; pFunc->node.resType = (SDataType){.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes, .type = TSDB_DATA_TYPE_BIGINT};
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
...@@ -480,14 +480,21 @@ static int32_t translateNowToday(SFunctionNode* pFunc, char* pErrBuf, int32_t le ...@@ -480,14 +480,21 @@ static int32_t translateNowToday(SFunctionNode* pFunc, char* pErrBuf, int32_t le
return code; return code;
} }
pFunc->node.resType = (SDataType){.bytes = sizeof(int64_t), .type = TSDB_DATA_TYPE_TIMESTAMP}; pFunc->node.resType = (SDataType){.bytes = tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes, .type = TSDB_DATA_TYPE_TIMESTAMP};
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
static int32_t translateTimePseudoColumn(SFunctionNode* pFunc, char* pErrBuf, int32_t len) { static int32_t translateTimePseudoColumn(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
// pseudo column do not need to check parameters // pseudo column do not need to check parameters
pFunc->node.resType = (SDataType){.bytes = sizeof(int64_t), .type = TSDB_DATA_TYPE_TIMESTAMP}; pFunc->node.resType = (SDataType){.bytes =tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes, .type = TSDB_DATA_TYPE_TIMESTAMP};
return TSDB_CODE_SUCCESS;
}
static int32_t translateIsFilledPseudoColumn(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
// pseudo column do not need to check parameters
pFunc->node.resType = (SDataType){.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes, .type = TSDB_DATA_TYPE_BOOL};
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
...@@ -3254,6 +3261,16 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = { ...@@ -3254,6 +3261,16 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
.sprocessFunc = NULL, .sprocessFunc = NULL,
.finalizeFunc = NULL .finalizeFunc = NULL
}, },
{
.name = "_isfilled",
.type = FUNCTION_TYPE_ISFILLED,
.classification = FUNC_MGT_PSEUDO_COLUMN_FUNC | FUNC_MGT_INTERP_PC_FUNC,
.translateFunc = translateIsFilledPseudoColumn,
.getEnvFunc = NULL,
.initFunc = NULL,
.sprocessFunc = NULL,
.finalizeFunc = NULL
},
{ {
.name = "_tags", .name = "_tags",
.type = FUNCTION_TYPE_TAGS, .type = FUNCTION_TYPE_TAGS,
......
...@@ -741,6 +741,7 @@ pseudo_column(A) ::= WSTART(B). ...@@ -741,6 +741,7 @@ pseudo_column(A) ::= WSTART(B).
pseudo_column(A) ::= WEND(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); } pseudo_column(A) ::= WEND(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
pseudo_column(A) ::= WDURATION(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); } pseudo_column(A) ::= WDURATION(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
pseudo_column(A) ::= IROWTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); } pseudo_column(A) ::= IROWTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
pseudo_column(A) ::= ISFILLED(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
pseudo_column(A) ::= QTAGS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); } pseudo_column(A) ::= QTAGS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); } function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
......
...@@ -260,6 +260,7 @@ static SKeyword keywordTable[] = { ...@@ -260,6 +260,7 @@ static SKeyword keywordTable[] = {
{"WRITE", TK_WRITE}, {"WRITE", TK_WRITE},
{"_C0", TK_ROWTS}, {"_C0", TK_ROWTS},
{"_IROWTS", TK_IROWTS}, {"_IROWTS", TK_IROWTS},
{"_ISFILLED", TK_ISFILLED},
{"_QDURATION", TK_QDURATION}, {"_QDURATION", TK_QDURATION},
{"_QEND", TK_QEND}, {"_QEND", TK_QEND},
{"_QSTART", TK_QSTART}, {"_QSTART", TK_QSTART},
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
...@@ -104,6 +104,8 @@ TEST_F(PlanBasicTest, interpFunc) { ...@@ -104,6 +104,8 @@ TEST_F(PlanBasicTest, interpFunc) {
run("SELECT _IROWTS, INTERP(c1) FROM t1 RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)"); run("SELECT _IROWTS, INTERP(c1) FROM t1 RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)");
run("SELECT _IROWTS, INTERP(c1), _ISFILLED FROM t1 RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)");
run("SELECT TBNAME, _IROWTS, INTERP(c1) FROM t1 PARTITION BY TBNAME " run("SELECT TBNAME, _IROWTS, INTERP(c1) FROM t1 PARTITION BY TBNAME "
"RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)"); "RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)");
} }
......
...@@ -362,12 +362,12 @@ class TDTestCase: ...@@ -362,12 +362,12 @@ class TDTestCase:
tdSql.query(f"select interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:16', '2020-02-01 00:00:19') every(1s) fill(linear)") tdSql.query(f"select interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:16', '2020-02-01 00:00:19') every(1s) fill(linear)")
tdSql.checkRows(0) tdSql.checkRows(0)
tdLog.printNoPrefix("==========step8:test _irowts with interp") tdLog.printNoPrefix("==========step8:test _irowts,_isfilled with interp")
# fill null # fill null
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(null)") tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(null)")
tdSql.checkRows(9) tdSql.checkRows(9)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000') tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500') tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
...@@ -379,9 +379,19 @@ class TDTestCase: ...@@ -379,9 +379,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500') tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000') tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(null)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, False)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, True)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(null)")
tdSql.checkRows(13) tdSql.checkRows(13)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:04.000') tdSql.checkData(0, 0, '2020-02-01 00:00:04.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:05.000') tdSql.checkData(1, 0, '2020-02-01 00:00:05.000')
...@@ -397,9 +407,23 @@ class TDTestCase: ...@@ -397,9 +407,23 @@ class TDTestCase:
tdSql.checkData(11, 0, '2020-02-01 00:00:15.000') tdSql.checkData(11, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(12, 0, '2020-02-01 00:00:16.000') tdSql.checkData(12, 0, '2020-02-01 00:00:16.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(null)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, False)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, False)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.checkData(9, 1, True)
tdSql.checkData(10, 1, True)
tdSql.checkData(11, 1, False)
tdSql.checkData(12, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(null)")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000') tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000') tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
...@@ -408,10 +432,16 @@ class TDTestCase: ...@@ -408,10 +432,16 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000') tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000') tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(0, 1, False)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, False)
# fill value # fill value
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(value, 1)") tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(value, 1)")
tdSql.checkRows(9) tdSql.checkRows(9)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000') tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500') tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
...@@ -423,9 +453,19 @@ class TDTestCase: ...@@ -423,9 +453,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500') tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000') tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(value, 1)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, False)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, True)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(value, 1)")
tdSql.checkRows(13) tdSql.checkRows(13)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:04.000') tdSql.checkData(0, 0, '2020-02-01 00:00:04.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:05.000') tdSql.checkData(1, 0, '2020-02-01 00:00:05.000')
...@@ -441,9 +481,23 @@ class TDTestCase: ...@@ -441,9 +481,23 @@ class TDTestCase:
tdSql.checkData(11, 0, '2020-02-01 00:00:15.000') tdSql.checkData(11, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(12, 0, '2020-02-01 00:00:16.000') tdSql.checkData(12, 0, '2020-02-01 00:00:16.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(value, 1)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, False)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, False)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.checkData(9, 1, True)
tdSql.checkData(10, 1, True)
tdSql.checkData(11, 1, False)
tdSql.checkData(12, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(value, 1)")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000') tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000') tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
...@@ -452,10 +506,17 @@ class TDTestCase: ...@@ -452,10 +506,17 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000') tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000') tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(0, 1, False)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, False)
# fill prev # fill prev
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(prev)") tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(prev)")
tdSql.checkRows(9) tdSql.checkRows(9)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000') tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500') tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
...@@ -467,9 +528,19 @@ class TDTestCase: ...@@ -467,9 +528,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500') tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000') tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(prev)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, False)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, True)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(prev)")
tdSql.checkRows(12) tdSql.checkRows(12)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000') tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:06.000') tdSql.checkData(1, 0, '2020-02-01 00:00:06.000')
...@@ -484,9 +555,22 @@ class TDTestCase: ...@@ -484,9 +555,22 @@ class TDTestCase:
tdSql.checkData(10, 0, '2020-02-01 00:00:15.000') tdSql.checkData(10, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(11, 0, '2020-02-01 00:00:16.000') tdSql.checkData(11, 0, '2020-02-01 00:00:16.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(prev)") tdSql.checkData(0, 1, False)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, False)
tdSql.checkData(6, 1, True)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.checkData(9, 1, True)
tdSql.checkData(10, 1, False)
tdSql.checkData(11, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(prev)")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000') tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000') tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
...@@ -495,10 +579,16 @@ class TDTestCase: ...@@ -495,10 +579,16 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000') tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000') tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(0, 1, False)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, False)
# fill next # fill next
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(next)") tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(next)")
tdSql.checkRows(9) tdSql.checkRows(9)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000') tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500') tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
...@@ -510,9 +600,19 @@ class TDTestCase: ...@@ -510,9 +600,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500') tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000') tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, False)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, True)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)")
tdSql.checkRows(12) tdSql.checkRows(12)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:04.000') tdSql.checkData(0, 0, '2020-02-01 00:00:04.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:05.000') tdSql.checkData(1, 0, '2020-02-01 00:00:05.000')
...@@ -527,9 +627,22 @@ class TDTestCase: ...@@ -527,9 +627,22 @@ class TDTestCase:
tdSql.checkData(10, 0, '2020-02-01 00:00:14.000') tdSql.checkData(10, 0, '2020-02-01 00:00:14.000')
tdSql.checkData(11, 0, '2020-02-01 00:00:15.000') tdSql.checkData(11, 0, '2020-02-01 00:00:15.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(next)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, False)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, False)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.checkData(9, 1, True)
tdSql.checkData(10, 1, True)
tdSql.checkData(11, 1, False)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(next)")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000') tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000') tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
...@@ -538,10 +651,17 @@ class TDTestCase: ...@@ -538,10 +651,17 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000') tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000') tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(0, 1, False)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, False)
# fill linear # fill linear
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(linear)") tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(linear)")
tdSql.checkRows(9) tdSql.checkRows(9)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000') tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500') tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
...@@ -553,9 +673,19 @@ class TDTestCase: ...@@ -553,9 +673,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500') tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000') tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)") tdSql.checkData(0, 1, True)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, False)
tdSql.checkData(5, 1, True)
tdSql.checkData(6, 1, True)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
tdSql.checkRows(11) tdSql.checkRows(11)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000') tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:06.000') tdSql.checkData(1, 0, '2020-02-01 00:00:06.000')
...@@ -569,9 +699,21 @@ class TDTestCase: ...@@ -569,9 +699,21 @@ class TDTestCase:
tdSql.checkData(9, 0, '2020-02-01 00:00:14.000') tdSql.checkData(9, 0, '2020-02-01 00:00:14.000')
tdSql.checkData(10, 0, '2020-02-01 00:00:15.000') tdSql.checkData(10, 0, '2020-02-01 00:00:15.000')
tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(linear)") tdSql.checkData(0, 1, False)
tdSql.checkData(1, 1, True)
tdSql.checkData(2, 1, True)
tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, False)
tdSql.checkData(6, 1, True)
tdSql.checkData(7, 1, True)
tdSql.checkData(8, 1, True)
tdSql.checkData(9, 1, True)
tdSql.checkData(10, 1, False)
tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(linear)")
tdSql.checkRows(6) tdSql.checkRows(6)
tdSql.checkCols(2) tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000') tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000') tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
...@@ -580,28 +722,47 @@ class TDTestCase: ...@@ -580,28 +722,47 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000') tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000') tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
# multiple _irowts tdSql.checkData(0, 1, False)
tdSql.query(f"select interp(c0),_irowts from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)") tdSql.checkData(1, 1, True)
tdSql.checkRows(11) tdSql.checkData(2, 1, True)
tdSql.checkCols(2) tdSql.checkData(3, 1, True)
tdSql.checkData(4, 1, True)
tdSql.checkData(5, 1, False)
tdSql.checkData(0, 1, '2020-02-01 00:00:05.000') # multiple _irowts,_isfilled
tdSql.checkData(1, 1, '2020-02-01 00:00:06.000') tdSql.query(f"select interp(c0),_irowts,_isfilled from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
tdSql.checkData(2, 1, '2020-02-01 00:00:07.000') tdSql.checkRows(11)
tdSql.checkData(3, 1, '2020-02-01 00:00:08.000') tdSql.checkCols(3)
tdSql.checkData(4, 1, '2020-02-01 00:00:09.000')
tdSql.checkData(5, 1, '2020-02-01 00:00:10.000') tdSql.checkData(0, 1, '2020-02-01 00:00:05.000')
tdSql.checkData(6, 1, '2020-02-01 00:00:11.000') tdSql.checkData(1, 1, '2020-02-01 00:00:06.000')
tdSql.checkData(7, 1, '2020-02-01 00:00:12.000') tdSql.checkData(2, 1, '2020-02-01 00:00:07.000')
tdSql.checkData(8, 1, '2020-02-01 00:00:13.000') tdSql.checkData(3, 1, '2020-02-01 00:00:08.000')
tdSql.checkData(9, 1, '2020-02-01 00:00:14.000') tdSql.checkData(4, 1, '2020-02-01 00:00:09.000')
tdSql.checkData(5, 1, '2020-02-01 00:00:10.000')
tdSql.checkData(6, 1, '2020-02-01 00:00:11.000')
tdSql.checkData(7, 1, '2020-02-01 00:00:12.000')
tdSql.checkData(8, 1, '2020-02-01 00:00:13.000')
tdSql.checkData(9, 1, '2020-02-01 00:00:14.000')
tdSql.checkData(10, 1, '2020-02-01 00:00:15.000') tdSql.checkData(10, 1, '2020-02-01 00:00:15.000')
tdSql.query(f"select _irowts, interp(c0), interp(c0), _irowts from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)") tdSql.checkData(0, 2, False)
tdSql.checkData(1, 2, True)
tdSql.checkData(2, 2, True)
tdSql.checkData(3, 2, True)
tdSql.checkData(4, 2, True)
tdSql.checkData(5, 2, False)
tdSql.checkData(6, 2, True)
tdSql.checkData(7, 2, True)
tdSql.checkData(8, 2, True)
tdSql.checkData(9, 2, True)
tdSql.checkData(10, 2, False)
tdSql.query(f"select _irowts, _isfilled, interp(c0), interp(c0), _isfilled, _irowts from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
tdSql.checkRows(11) tdSql.checkRows(11)
tdSql.checkCols(4) tdSql.checkCols(6)
cols = (0, 3) cols = (0, 5)
for i in cols: for i in cols:
tdSql.checkData(0, i, '2020-02-01 00:00:05.000') tdSql.checkData(0, i, '2020-02-01 00:00:05.000')
tdSql.checkData(1, i, '2020-02-01 00:00:06.000') tdSql.checkData(1, i, '2020-02-01 00:00:06.000')
...@@ -615,6 +776,20 @@ class TDTestCase: ...@@ -615,6 +776,20 @@ class TDTestCase:
tdSql.checkData(9, i, '2020-02-01 00:00:14.000') tdSql.checkData(9, i, '2020-02-01 00:00:14.000')
tdSql.checkData(10, i, '2020-02-01 00:00:15.000') tdSql.checkData(10, i, '2020-02-01 00:00:15.000')
cols = (1, 4)
for i in cols:
tdSql.checkData(0, i, False)
tdSql.checkData(1, i, True)
tdSql.checkData(2, i, True)
tdSql.checkData(3, i, True)
tdSql.checkData(4, i, True)
tdSql.checkData(5, i, False)
tdSql.checkData(6, i, True)
tdSql.checkData(7, i, True)
tdSql.checkData(8, i, True)
tdSql.checkData(9, i, True)
tdSql.checkData(10, i, False)
tdLog.printNoPrefix("==========step9:test intra block interpolation") tdLog.printNoPrefix("==========step9:test intra block interpolation")
tdSql.execute(f"drop database {dbname}"); tdSql.execute(f"drop database {dbname}");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册