• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

taosdata / TDengine / #4908

30 Dec 2025 10:52AM UTC coverage: 65.386% (-0.2%) from 65.541%
#4908

push

travis-ci

web-flow
enh: drop multi-stream (#33962)

60 of 106 new or added lines in 4 files covered. (56.6%)

1330 existing lines in 113 files now uncovered.

193461 of 295877 relevant lines covered (65.39%)

115765274.47 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

68.77
/source/libs/parser/inc/sql.y
1
//lemon parser file to generate sql parse by using finite-state-machine code used to parse sql
2
//usage: lemon sql.y
3

4
%token_prefix TK_
5
%token_type { SToken }
6
%default_type { SNode* }
7
%default_destructor { nodesDestroyNode($$); }
12,431,344✔
8

9
%extra_argument { SAstCreateContext* pCxt }
10

11
%include {
12
#include <stdio.h>
13
#include <stdlib.h>
14
#include <string.h>
15
#include <assert.h>
16
#include <stdbool.h>
17

18
#define ALLOW_FORBID_FUNC
19

20
#include "functionMgt.h"
21
#include "nodes.h"
22
#include "parToken.h"
23
#include "ttokendef.h"
24
#include "parAst.h"
25

26
#define YYSTACKDEPTH 0
27

28
#define JOINED_TABLE_MK(jt, st, A, B, E, F, G, H)                              \
29
  {                                                                            \
30
    A = createJoinTableNode(pCxt, jt, st, B, E, F);                            \
31
    A = addWindowOffsetClause(pCxt, A, G);                                     \
32
    A = addJLimitClause(pCxt, A, H);                                           \
33
  }
34

35
int32_t taosParseShortWeekday(const char* str);
36
}
37

38
%syntax_error {
39
  if (TSDB_CODE_SUCCESS == pCxt->errCode) {
7,103,554✔
40
    if(TOKEN.z) {
7,102,892✔
41
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, TOKEN.z);
6,904,605✔
42
    } else {
43
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INCOMPLETE_SQL);
198,287✔
44
    }
45
  } else if (TSDB_CODE_PAR_DB_NOT_SPECIFIED == pCxt->errCode && TK_NK_FLOAT == TOKEN.type) {
662✔
46
    pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, TOKEN.z);
×
47
  }
48
}
49

50
%left OR.
51
%left AND.
52
%left UNION ALL MINUS EXCEPT INTERSECT.
53
%left NK_BITAND NK_BITOR NK_LSHIFT NK_RSHIFT NK_PH.
54
%left NK_LT NK_GT NK_LE NK_GE NK_EQ NK_NE LIKE MATCH NMATCH REGEXP CONTAINS BETWEEN IS IN.
55
%left NK_PLUS NK_MINUS.
56
%left NK_STAR NK_SLASH NK_REM.
57
%left NK_CONCAT.
58

59
%right NOT.
60
%left NK_ARROW.
61

62
%right INNER LEFT RIGHT FULL OUTER SEMI ANTI ASOF WINDOW JOIN ON WINDOW_OFFSET JLIMIT.
63

64
/************************************************ create/alter account *****************************************/
65
cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options.                      { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
×
66
cmd ::= ALTER ACCOUNT NK_ID alter_account_options.                                { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
×
67

68
%type account_options                                                             { int32_t }
69
%destructor account_options                                                       { }
70
account_options ::= .                                                             { }
71
account_options ::= account_options PPS literal.                                  { }
72
account_options ::= account_options TSERIES literal.                              { }
73
account_options ::= account_options STORAGE literal.                              { }
74
account_options ::= account_options STREAMS literal.                              { }
75
account_options ::= account_options QTIME literal.                                { }
76
account_options ::= account_options DBS literal.                                  { }
77
account_options ::= account_options USERS literal.                                { }
78
account_options ::= account_options CONNS literal.                                { }
79
account_options ::= account_options STATE literal.                                { }
80

81
%type alter_account_options                                                       { int32_t }
82
%destructor alter_account_options                                                 { }
83
alter_account_options ::= alter_account_option.                                   { }
84
alter_account_options ::= alter_account_options alter_account_option.             { }
85

86
%type alter_account_option                                                        { int32_t }
87
%destructor alter_account_option                                                  { }
88
alter_account_option ::= PASS literal.                                            { }
89
alter_account_option ::= PPS literal.                                             { }
90
alter_account_option ::= TSERIES literal.                                         { }
91
alter_account_option ::= STORAGE literal.                                         { }
92
alter_account_option ::= STREAMS literal.                                         { }
93
alter_account_option ::= QTIME literal.                                           { }
94
alter_account_option ::= DBS literal.                                             { }
95
alter_account_option ::= USERS literal.                                           { }
96
alter_account_option ::= CONNS literal.                                           { }
97
alter_account_option ::= STATE literal.                                           { }
98

99

100
/************************************************ create/alter/drop user **********************************************/
101
%type option_value                                                                { SToken }
102
%destructor option_value                                                          { }
103
option_value(A) ::= DEFAULT(B).                                                   { A = B; }
2,147,483,647✔
104
option_value(A) ::= UNLIMITED(B).                                                 { A = B; }
105
option_value(A) ::= NK_INTEGER(B).                                                { A = B; }
106

107
%type user_enabled                                                                { int8_t }
108
%destructor user_enabled                                                          { }
109
user_enabled(A) ::= ACCOUNT LOCK.                                                 { A = 0; }
×
110
user_enabled(A) ::= ACCOUNT UNLOCK.                                               { A = 1; }
×
111
user_enabled(A) ::= ENABLE NK_INTEGER(B).                                         { A = taosStr2Int8(B.z, NULL, 10); }
2,348✔
112

113
%type user_option                                                                 { SUserOptions* }
114
user_option(A) ::= TOTPSEED NK_STRING(B).                                         { A = mergeUserOptions(pCxt, NULL, NULL); setUserOptionsTotpseed(pCxt, A, &B); }
14✔
115
user_option(A) ::= TOTPSEED NULL.                                                 { A = mergeUserOptions(pCxt, NULL, NULL); setUserOptionsTotpseed(pCxt, A, NULL); }
×
116
user_option(A) ::= user_enabled(B).                                               { A = mergeUserOptions(pCxt, NULL, NULL); A->enable = B; A->hasEnable = true; }
2,348✔
117
user_option(A) ::= SYSINFO NK_INTEGER(B).                                         { A = mergeUserOptions(pCxt, NULL, NULL); A->sysinfo = taosStr2Int8(B.z, NULL, 10); A->hasSysinfo = true; }
8,994✔
118
user_option(A) ::= IS_IMPORT NK_INTEGER(B).                                       { A = mergeUserOptions(pCxt, NULL, NULL); A->isImport = taosStr2Int8(B.z, NULL, 10); A->hasIsImport = true; }
936✔
119
user_option(A) ::= CREATEDB NK_INTEGER(B).                                        { A = mergeUserOptions(pCxt, NULL, NULL); A->createdb = taosStr2Int8(B.z, NULL, 10); A->hasCreatedb = true; }
3,650✔
120
user_option(A) ::= CHANGEPASS NK_INTEGER(B).                                      { A = mergeUserOptions(pCxt, NULL, NULL); A->changepass = taosStr2Int8(B.z, NULL, 10); A->hasChangepass = true; }
14✔
121
user_option(A) ::= SESSION_PER_USER option_value(B).                              {
122
    A = mergeUserOptions(pCxt, NULL, NULL);
×
123
    if (B.type == TK_DEFAULT) {
×
124
      A->sessionPerUser = TSDB_USER_SESSION_PER_USER_DEFAULT;
×
125
    } else if (B.type == TK_UNLIMITED) {
×
126
      A->sessionPerUser = -1;
×
127
    } else {
128
      A->sessionPerUser = taosStr2Int32(B.z, NULL, 10);
×
129
    }
130
    A->hasSessionPerUser = true;
×
131
  }
132
user_option(A) ::= CONNECT_TIME option_value(B).                                 {
133
    A = mergeUserOptions(pCxt, NULL, NULL);
×
134
    if (B.type == TK_DEFAULT) {
×
135
      A->connectTime = TSDB_USER_CONNECT_TIME_DEFAULT;
×
136
    } else if (B.type == TK_UNLIMITED) {
×
137
      A->connectTime = -1;
×
138
    } else {
139
      A->connectTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
140
    }
141
    A->hasConnectTime = true;
×
142
  }
143
user_option(A) ::= CONNECT_IDLE_TIME option_value(B).                            {
144
    A = mergeUserOptions(pCxt, NULL, NULL);
×
145
    if (B.type == TK_DEFAULT) {
×
146
      A->connectIdleTime = TSDB_USER_CONNECT_IDLE_TIME_DEFAULT;
×
147
    } else if (B.type == TK_UNLIMITED) {
×
148
      A->connectIdleTime = -1;
×
149
    } else {
150
      A->connectIdleTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
151
    }
152
    A->hasConnectIdleTime = true;
×
153
  }
154
user_option(A) ::= CALL_PER_SESSION option_value(B).                             {
155
    A = mergeUserOptions(pCxt, NULL, NULL);
×
156
    if (B.type == TK_DEFAULT) {
×
157
      A->callPerSession = TSDB_USER_CALL_PER_SESSION_DEFAULT;
×
158
    } else if (B.type == TK_UNLIMITED) {
×
159
      A->callPerSession = -1;
×
160
    } else {
161
      A->callPerSession = taosStr2Int32(B.z, NULL, 10);
×
162
    }
163
    A->hasCallPerSession = true;
×
164
  }
165
user_option(A) ::= VNODE_PER_CALL option_value(B).                               {
166
    A = mergeUserOptions(pCxt, NULL, NULL);
×
167
    if (B.type == TK_DEFAULT) {
×
168
      A->vnodePerCall = TSDB_USER_VNODE_PER_CALL_DEFAULT;
×
169
    } else if (B.type == TK_UNLIMITED) {
×
170
      A->vnodePerCall = -1;
×
171
    } else {
172
      A->vnodePerCall = taosStr2Int32(B.z, NULL, 10);
×
173
    }
174
    A->hasVnodePerCall = true;
×
175
  }
176

177
user_option(A) ::= FAILED_LOGIN_ATTEMPTS option_value(B).                        {
178
    A = mergeUserOptions(pCxt, NULL, NULL);
×
179
    if (B.type == TK_DEFAULT) {
×
180
      A->failedLoginAttempts = TSDB_USER_FAILED_LOGIN_ATTEMPTS_DEFAULT;
×
181
    } else if (B.type == TK_UNLIMITED) {
×
182
      A->failedLoginAttempts = -1;
×
183
    } else {
184
      A->failedLoginAttempts = taosStr2Int32(B.z, NULL, 10);
×
185
    }
186
    A->hasFailedLoginAttempts = true;
×
187
  }
188
user_option(A) ::= PASSWORD_LIFE_TIME option_value(B).                           {
189
    A = mergeUserOptions(pCxt, NULL, NULL);
×
190
    if (B.type == TK_DEFAULT) {
×
191
      A->passwordLifeTime = TSDB_USER_PASSWORD_LIFE_TIME_DEFAULT;
×
192
    } else if (B.type == TK_UNLIMITED) {
×
193
      A->passwordLifeTime = -1;
×
194
    } else {
195
      A->passwordLifeTime = taosStr2Int32(B.z, NULL, 10) * 1440 * 60; // default unit is day
×
196
    }
197
    A->hasPasswordLifeTime = true;
×
198
  }
199
user_option(A) ::= PASSWORD_REUSE_TIME option_value(B).                          {
200
    A = mergeUserOptions(pCxt, NULL, NULL);
1,442✔
201
    if (B.type == TK_DEFAULT) {
1,442✔
202
      A->passwordReuseTime = TSDB_USER_PASSWORD_REUSE_TIME_DEFAULT;
×
203
    } else if (B.type == TK_UNLIMITED) {
1,442✔
204
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_OPTION_VALUE, "PASSWORD_REUSE_TIME");
×
205
    } else {
206
      A->passwordReuseTime = taosStr2Int32(B.z, NULL, 10) * 1440 * 60; // default unit is day
1,442✔
207
    }
208
    A->hasPasswordReuseTime = true;
1,442✔
209
  }
210
user_option(A) ::= PASSWORD_REUSE_MAX option_value(B).                           {
211
    A = mergeUserOptions(pCxt, NULL, NULL);
1,442✔
212
    if (B.type == TK_DEFAULT) {
1,442✔
213
      A->passwordReuseMax = TSDB_USER_PASSWORD_REUSE_MAX_DEFAULT;
×
214
    } else if (B.type == TK_UNLIMITED) {
1,442✔
215
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_OPTION_VALUE, "PASSWORD_REUSE_MAX");
×
216
    } else {
217
      A->passwordReuseMax = taosStr2Int32(B.z, NULL, 10);
1,442✔
218
    }
219
    A->hasPasswordReuseMax = true;
1,442✔
220
  }
221
user_option(A) ::= PASSWORD_LOCK_TIME option_value(B).                           {
222
    A = mergeUserOptions(pCxt, NULL, NULL);
×
223
    if (B.type == TK_DEFAULT) {
×
224
      A->passwordLockTime = TSDB_USER_PASSWORD_LOCK_TIME_DEFAULT;
×
225
    } else if (B.type == TK_UNLIMITED) {
×
226
      A->passwordLockTime = -1;
×
227
    } else {
228
      A->passwordLockTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
229
    }
230
    A->hasPasswordLockTime = true;
×
231
  }
232
user_option(A) ::= PASSWORD_GRACE_TIME option_value(B).                          {
233
    A = mergeUserOptions(pCxt, NULL, NULL);
×
234
    if (B.type == TK_DEFAULT) {
×
235
      A->passwordGraceTime = TSDB_USER_PASSWORD_GRACE_TIME_DEFAULT;
×
236
    } else if (B.type == TK_UNLIMITED) {
×
237
      A->passwordGraceTime = -1;
×
238
    } else {
239
      A->passwordGraceTime = taosStr2Int32(B.z, NULL, 10) * 1440 * 60; // default unit is day
×
240
    }
241
    A->hasPasswordGraceTime = true;
×
242
  }
243
user_option(A) ::= INACTIVE_ACCOUNT_TIME option_value(B).                        {
244
    A = mergeUserOptions(pCxt, NULL, NULL);
×
245
    if (B.type == TK_DEFAULT) {
×
246
      A->inactiveAccountTime = TSDB_USER_INACTIVE_ACCOUNT_TIME_DEFAULT;
×
247
    } else if (B.type == TK_UNLIMITED) {
×
248
      A->inactiveAccountTime = -1;
×
249
    } else {
250
      A->inactiveAccountTime = taosStr2Int32(B.z, NULL, 10) * 1440 * 60; // default unit is day
×
251
    }
252
    A->hasInactiveAccountTime = true;
×
253
  }
254
user_option(A) ::= ALLOW_TOKEN_NUM option_value(B).                              {
255
    A = mergeUserOptions(pCxt, NULL, NULL);
×
256
    if (B.type == TK_DEFAULT) {
×
257
      A->allowTokenNum = TSDB_USER_ALLOW_TOKEN_NUM_DEFAULT;
×
258
    } else if (B.type == TK_UNLIMITED) {
×
259
      A->allowTokenNum = -1;
×
260
    } else {
261
      A->allowTokenNum = taosStr2Int32(B.z, NULL, 10);
×
262
    }
263
    A->hasAllowTokenNum = true;
×
264
  }
265

266

267
%type ip_range_list                                                              { SNodeList* }
268
%destructor ip_range_list                                                        { nodesDestroyList($$); }
13,627,344✔
269
ip_range_list(A) ::= NK_STRING(B).                                               { A = createNodeList(pCxt, (SNode*)parseIpRange(pCxt, &B)); }
1,692✔
270
ip_range_list(A) ::= ip_range_list(B) NK_COMMA NK_STRING(C).                     { A = addNodeToList(pCxt, B, (SNode*)parseIpRange(pCxt, &C)); }
304✔
271

272

273
%type datetime_range_list                                                        { SNodeList* }
274
%destructor datetime_range_list                                                  { nodesDestroyList($$); }
275
datetime_range_list(A) ::= NK_STRING(B).                                         { A = createNodeList(pCxt, (SNode*)parseDateTimeRange(pCxt, &B)); }
×
276
datetime_range_list(A) ::= datetime_range_list(B) NK_COMMA NK_STRING(C).         { A = addNodeToList(pCxt, B, (SNode*)parseDateTimeRange(pCxt, &C)); }
×
277

278

279
%type create_user_option                                                         { SUserOptions* }
280
create_user_option(A) ::= HOST ip_range_list(B).                                 { A = mergeUserOptions(pCxt, NULL, NULL); A->pIpRanges = B; }
1,388✔
281
create_user_option(A) ::= NOT_ALLOW_HOST ip_range_list(B).                       {
282
    SNode* pNode = NULL;
×
283
    FOREACH(pNode, B) {
×
284
      ((SIpRangeNode*)pNode)->range.neg = true;
×
285
    }
286
    A = mergeUserOptions(pCxt, NULL, NULL);
×
287
    A->pIpRanges = B;
×
288
  }
289
create_user_option(A) ::= ALLOW_DATETIME datetime_range_list(B).                 { A = mergeUserOptions(pCxt, NULL, NULL); A->pTimeRanges = B; }
×
290
create_user_option(A) ::= NOT_ALLOW_DATETIME datetime_range_list(B).             {
291
    SNode* pNode = NULL;
×
292
    FOREACH(pNode, B) {
×
293
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
294
    }
295
    A = mergeUserOptions(pCxt, NULL, NULL);
×
296
    A->pTimeRanges = B;
×
297
  }
298

299
%type create_user_options                                                        { SUserOptions* }
300
create_user_options(A) ::= user_option(B).                                       { A = B; }
37,311✔
301
create_user_options(A) ::= create_user_option(B).                                { A = B; }
302
create_user_options(A) ::= create_user_options(B) user_option(C).                { A = mergeUserOptions(pCxt, B, C); }
4,638✔
303
create_user_options(A) ::= create_user_options(B) create_user_option(C).         { A = mergeUserOptions(pCxt, B, C); }
304

305
%type create_user_options_opt                                                    { SUserOptions* }
306
create_user_options_opt(A) ::= .                                                 { A = NULL; }
54,513✔
307
create_user_options_opt(A) ::= create_user_options(B).                           { A = B; }
308

309

310
%type alter_user_option                                                          { SUserOptions* }
311
alter_user_option(A) ::= PASS NK_STRING(B).                                      { A = mergeUserOptions(pCxt, NULL, NULL); setUserOptionsPassword(pCxt, A, &B); }
15,055✔
312
alter_user_option(A) ::= ADD HOST ip_range_list(B).                              { A = mergeUserOptions(pCxt, NULL, NULL); A->pIpRanges = B; }
152✔
313
alter_user_option(A) ::= ADD NOT_ALLOW_HOST ip_range_list(B).                    {
314
    SNode* pNode = NULL;
×
315
    FOREACH(pNode, B) {
×
316
      ((SIpRangeNode*)pNode)->range.neg = true;
×
317
    }
318
    A = mergeUserOptions(pCxt, NULL, NULL);
×
319
    A->pIpRanges = B;
×
320
  }
321
alter_user_option(A) ::= DROP HOST ip_range_list(B).                             { A = mergeUserOptions(pCxt, NULL, NULL); A->pDropIpRanges = B; }
152✔
322
alter_user_option(A) ::= DROP NOT_ALLOW_HOST ip_range_list(B).                   {
323
    SNode* pNode = NULL;
×
324
    FOREACH(pNode, B) {
×
325
      ((SIpRangeNode*)pNode)->range.neg = true;
×
326
    }
327
    A = mergeUserOptions(pCxt, NULL, NULL);
×
328
    A->pDropIpRanges = B;
×
329
  }
330
alter_user_option(A) ::= ADD ALLOW_DATETIME datetime_range_list(B).              { A = mergeUserOptions(pCxt, NULL, NULL); A->pTimeRanges = B; }
×
331
alter_user_option(A) ::= ADD NOT_ALLOW_DATETIME datetime_range_list(B).          {
332
    SNode* pNode = NULL;
×
333
    FOREACH(pNode, B) {
×
334
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
335
    }
336
    A = mergeUserOptions(pCxt, NULL, NULL);
×
337
    A->pTimeRanges = B;
×
338
  }
339
alter_user_option(A) ::= DROP ALLOW_DATETIME datetime_range_list(B).             { A = mergeUserOptions(pCxt, NULL, NULL); A->pDropTimeRanges = B; }
×
340
alter_user_option(A) ::= DROP NOT_ALLOW_DATETIME datetime_range_list(B).         {
341
    SNode* pNode = NULL;
×
342
    FOREACH(pNode, B) {
×
343
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
344
    }
345
    A = mergeUserOptions(pCxt, NULL, NULL);
×
346
    A->pDropTimeRanges = B;
×
347
  }
348

349
%type alter_user_options                                                         { SUserOptions* }
350
alter_user_options(A) ::= user_option(B).                                        { A = B; }
351
alter_user_options(A) ::= alter_user_option(B).                                  { A = B; }
352
alter_user_options(A) ::= alter_user_options(B) user_option(C).                  { A = mergeUserOptions(pCxt, B, C); }
353
alter_user_options(A) ::= alter_user_options(B) alter_user_option(C).            { A = mergeUserOptions(pCxt, B, C); }
354

355

356
cmd ::= CREATE USER not_exists_opt(A) user_name(B) PASS NK_STRING(C) create_user_options_opt(D).  {
357
    D = mergeUserOptions(pCxt, D, NULL);
60,719✔
358
    setUserOptionsPassword(pCxt, D, &C);
60,719✔
359
    pCxt->pRootNode = createCreateUserStmt(pCxt, &B, D, A);
60,719✔
360
  }
361
cmd ::= ALTER USER user_name(A) alter_user_options(B).                           { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, B); }
24,587✔
362
cmd ::= DROP USER exists_opt(A) user_name(B).                                    { pCxt->pRootNode = createDropUserStmt(pCxt, &B, A); }
20,415✔
363
cmd ::= ALTER DNODES RELOAD general_name(A).                                     { pCxt->pRootNode = createAlterAllDnodeTLSStmt(pCxt, &A);}
×
364

365

366
/************************************************ create/alter/drop token **********************************************/
367

368
%type token_option                                                               { STokenOptions* }
369
token_option(A) ::= PROVIDER NK_STRING(B).                                       { A = mergeTokenOptions(pCxt, NULL, NULL); setTokenOptionsProvider(pCxt, A, &B); }
×
370
token_option(A) ::= ENABLE NK_INTEGER(B).                                        { A = mergeTokenOptions(pCxt, NULL, NULL);  A->enable = taosStr2Int8(B.z, NULL, 10); A->hasEnable = true; }
×
371
token_option(A) ::= TTL NK_INTEGER(B).                                           { A = mergeTokenOptions(pCxt, NULL, NULL);  A->ttl = taosStr2Int32(B.z, NULL, 10) * 86400; A->hasTtl = true; }
×
372
token_option(A) ::= EXTRA_INFO NK_STRING(B).                                     { A = mergeTokenOptions(pCxt, NULL, NULL); setTokenOptionsExtraInfo(pCxt, A, &B); }
×
373

374
%type token_options                                                              { STokenOptions* }
375
token_options(A) ::= token_option(B).                                            { A = B; }
×
376
token_options(A) ::= token_options(B) token_option(C).                           { A = mergeTokenOptions(pCxt, B, C); }
×
377

378
%type token_options_opt                                                          { STokenOptions* }
379
token_options_opt(A) ::= .                                                       { A = NULL; }
14✔
380
token_options_opt(A) ::= token_options(B).                                       { A = B; }
381

382

383
cmd ::= CREATE TOKEN not_exists_opt(A) NK_ID(B) FROM USER user_name(C) token_options_opt(D).       {
384
    pCxt->pRootNode = createCreateTokenStmt(pCxt, &B, &C, D, A);
14✔
385
  }
386
cmd ::= ALTER TOKEN NK_ID(A) token_options(B). {
387
    pCxt->pRootNode = createAlterTokenStmt(pCxt, &A, B);
×
388
  }
389
cmd ::= DROP TOKEN exists_opt(A) NK_ID(B). {
390
    pCxt->pRootNode = createDropTokenStmt(pCxt, &B, A);
×
391
  }
392

393

394

395
/************************************************ create/drop role **********************************************/
396
cmd ::= CREATE ROLE not_exists_opt(A) role_name(B).                               { pCxt->pRootNode = createCreateRoleStmt(pCxt, A, &B); }
143✔
397
cmd ::= DROP ROLE exists_opt(A) role_name(B).                                     { pCxt->pRootNode = createDropRoleStmt(pCxt, A, &B); }
×
398
cmd ::= LOCK ROLE role_name(A).                                                   { 
399
                                                                                    SToken t = {.n = 1, .z = "1", .type = TK_STRING };
×
400
                                                                                    pCxt->pRootNode = createAlterRoleStmt(pCxt, &A, TSDB_ALTER_ROLE_LOCK, &t); 
×
401
                                                                                  }
402
cmd ::= UNLOCK ROLE role_name(A).                                                 { 
403
                                                                                    SToken t = {.n = 1, .z = "0", .type = TK_STRING };
×
404
                                                                                    pCxt->pRootNode = createAlterRoleStmt(pCxt, &A,TSDB_ALTER_ROLE_LOCK, &t); 
×
405
                                                                                  }
406
cmd ::= GRANT ROLE role_name(A) TO role_name(C).                                  { pCxt->pRootNode = createGrantStmt(pCxt, &A, NULL, &C, NULL, TSDB_ALTER_ROLE_ROLE); }
2,065✔
407
cmd ::= REVOKE ROLE role_name(A) FROM role_name(C).                               { pCxt->pRootNode = createRevokeStmt(pCxt, &A, NULL, &C, NULL, TSDB_ALTER_ROLE_ROLE); }
1,207✔
408
/************************************************ grant/revoke ********************************************************/
409
cmd ::= GRANT privileges(A) priv_level_opt(B) with_clause_opt(D) TO user_name(C). { pCxt->pRootNode = createGrantStmt(pCxt, &A, &B, &C, D, TSDB_ALTER_ROLE_PRIVILEGES); }
549,591✔
410
cmd ::= REVOKE privileges(A) priv_level_opt(B) with_clause_opt(D) FROM user_name(C). { pCxt->pRootNode = createRevokeStmt(pCxt, &A, &B, &C, D, TSDB_ALTER_ROLE_PRIVILEGES); }
397,434✔
411

412
%type privileges                                                                  { SPrivSetArgs }
413
%destructor privileges                                                            {
414
                                                                                    if ($$.selectCols != NULL) {
152✔
415
                                                                                      nodesDestroyList($$.selectCols);
×
416
                                                                                    }
417
                                                                                    if ($$.insertCols != NULL) {
152✔
418
                                                                                      nodesDestroyList($$.insertCols);
×
419
                                                                                    }
420
                                                                                    if ($$.updateCols != NULL) {
152✔
421
                                                                                      nodesDestroyList($$.updateCols);
×
422
                                                                                    }
423

424
                                                                                  }
425
privileges(A) ::= priv_type_list(B).                                              { A = B; }
2,252,880✔
426

427
%type priv_type_list                                                              { SPrivSetArgs }
428
%destructor priv_type_list                                                        {
429
                                                                                    if ($$.selectCols != NULL) {
430
                                                                                      nodesDestroyList($$.selectCols);
431
                                                                                    }
432
                                                                                    if ($$.insertCols != NULL) {
433
                                                                                      nodesDestroyList($$.insertCols);
434
                                                                                    }
435
                                                                                    if ($$.updateCols != NULL) {
436
                                                                                      nodesDestroyList($$.updateCols);
437
                                                                                    }
438

439
                                                                                  }
440
priv_type_list(A) ::= priv_type(B).                                               { A = B; }
441
priv_type_list(A) ::= priv_type_list(B) NK_COMMA priv_type(C).                    { A = privArgsAdd(pCxt, B, C); }
11,258✔
442

443
%type priv_type                                                                   { SPrivSetArgs }
444
%destructor priv_type                                                             {
445
                                                                                    if ($$.selectCols != NULL) {
446
                                                                                      nodesDestroyList($$.selectCols);
447
                                                                                    }
448
                                                                                    if ($$.insertCols != NULL) {
449
                                                                                      nodesDestroyList($$.insertCols);
450
                                                                                    }
451
                                                                                    if ($$.updateCols != NULL) {
452
                                                                                      nodesDestroyList($$.updateCols);
453
                                                                                    }
454

455
                                                                                  }
456
priv_type(A) ::= ALL.                                                             { A = PRIV_SET_TYPE(PRIV_CM_ALL); }
207,847✔
457
priv_type(A) ::= ALL PRIVILEGES.                                                  { A = PRIV_SET_TYPE(PRIV_CM_ALL); }
×
458
priv_type(A) ::= ALTER.                                                           { A = PRIV_SET_TYPE(PRIV_CM_ALTER); }
98,942✔
459
priv_type(A) ::= DROP.                                                            { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
67,870✔
460
priv_type(A) ::= SHOW.                                                            { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
222✔
461
priv_type(A) ::= SHOW CREATE.                                                     { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
222✔
462
priv_type(A) ::= START.                                                           { A = PRIV_SET_TYPE(PRIV_CM_START); }
×
463
priv_type(A) ::= STOP.                                                            { A = PRIV_SET_TYPE(PRIV_CM_STOP); }
×
464
priv_type(A) ::= KILL.                                                            { A = PRIV_SET_TYPE(PRIV_CM_KILL); }
×
465
priv_type(A) ::= RECALCULATE.                                                     { A = PRIV_SET_TYPE(PRIV_CM_RECALC); }
×
466
priv_type(A) ::= SUBSCRIBE.                                                       { A = PRIV_SET_TYPE(PRIV_CM_SUBSCRIBE); }
4,539✔
467
priv_type(A) ::= READ.                                                            { A = PRIV_SET_TYPE(PRIV_TYPE_UNKNOWN); }
5,580✔
468
priv_type(A) ::= WRITE.                                                           { A = PRIV_SET_TYPE(PRIV_TYPE_UNKNOWN); }
469

470
priv_type(A) ::= CREATE DATABASE.                                                 { A = PRIV_SET_TYPE(PRIV_DB_CREATE); }
764✔
471
priv_type(A) ::= DROP OWNED DATABASE.                                             { A = PRIV_SET_TYPE(PRIV_DB_DROP_OWNED); }
×
472
priv_type(A) ::= USE DATABASE.                                                    { A = PRIV_SET_TYPE(PRIV_DB_USE); }
143✔
473
priv_type(A) ::= FLUSH DATABASE.                                                  { A = PRIV_SET_TYPE(PRIV_DB_FLUSH); }
×
474
priv_type(A) ::= COMPACT DATABASE.                                                { A = PRIV_SET_TYPE(PRIV_DB_COMPACT); }
×
475
priv_type(A) ::= TRIM DATABASE.                                                   { A = PRIV_SET_TYPE(PRIV_DB_TRIM); }
×
476
priv_type(A) ::= ROLLUP DATABASE.                                                 { A = PRIV_SET_TYPE(PRIV_DB_ROLLUP); }
×
477
priv_type(A) ::= SCAN DATABASE.                                                   { A = PRIV_SET_TYPE(PRIV_DB_SCAN); }
×
478
priv_type(A) ::= SSMIGRATE DATABASE.                                              { A = PRIV_SET_TYPE(PRIV_DB_SSMIGRATE); }
×
479
priv_type(A) ::= USE.                                                             { A = PRIV_SET_TYPE(PRIV_DB_USE); }
131,659✔
480
priv_type(A) ::= FLUSH.                                                           { A = PRIV_SET_TYPE(PRIV_DB_FLUSH); }
×
481
priv_type(A) ::= COMPACT.                                                         { A = PRIV_SET_TYPE(PRIV_DB_COMPACT); }
×
482
priv_type(A) ::= TRIM.                                                            { A = PRIV_SET_TYPE(PRIV_DB_TRIM); }
×
483
priv_type(A) ::= ROLLUP.                                                          { A = PRIV_SET_TYPE(PRIV_DB_ROLLUP); }
×
484
priv_type(A) ::= SCAN.                                                            { A = PRIV_SET_TYPE(PRIV_DB_SCAN); }
×
485
priv_type(A) ::= SSMIGRATE.                                                       { A = PRIV_SET_TYPE(PRIV_DB_SSMIGRATE); }
×
486
priv_type(A) ::= DROP OWNED.                                                      { A = PRIV_SET_TYPE(PRIV_DB_DROP_OWNED); }
×
487

488
priv_type(A) ::= SHOW VNODES.                                                     { A = PRIV_SET_TYPE(PRIV_SHOW_VNODES); }
×
489
priv_type(A) ::= SHOW VGROUPS.                                                    { A = PRIV_SET_TYPE(PRIV_SHOW_VGROUPS); }
×
490
priv_type(A) ::= SHOW COMPACTS.                                                   { A = PRIV_SET_TYPE(PRIV_SHOW_COMPACTS); }
×
491
priv_type(A) ::= SHOW RETENTIONS.                                                 { A = PRIV_SET_TYPE(PRIV_SHOW_RETENTIONS); }
×
492
priv_type(A) ::= SHOW SCANS.                                                      { A = PRIV_SET_TYPE(PRIV_SHOW_SCANS); }
×
493
priv_type(A) ::= SHOW SSMIGRATES.                                                 { A = PRIV_SET_TYPE(PRIV_SHOW_SSMIGRATES); }
×
494

495
priv_type(A) ::= CREATE TABLE.                                                    { A = PRIV_SET_TYPE(PRIV_TBL_CREATE); }
81,271✔
496

497
priv_type(A) ::= priv_type_tbl_dml(B).                                            { A = B; }
498

499
priv_type(A) ::= CREATE FUNCTION.                                                 { A = PRIV_SET_TYPE(PRIV_FUNC_CREATE); }
×
500
priv_type(A) ::= DROP FUNCTION.                                                   { A = PRIV_SET_TYPE(PRIV_FUNC_DROP); }
×
501
priv_type(A) ::= SHOW FUNCTIONS.                                                  { A = PRIV_SET_TYPE(PRIV_FUNC_SHOW); }
×
502

503
priv_type(A) ::= CREATE INDEX.                                                    { A = PRIV_SET_TYPE(PRIV_IDX_CREATE); }
×
504
priv_type(A) ::= DROP INDEX.                                                      { A = PRIV_SET_TYPE(PRIV_IDX_DROP); }
×
505
priv_type(A) ::= SHOW INDEXES.                                                    { A = PRIV_SET_TYPE(PRIV_IDX_SHOW); }
×
506

507
priv_type(A) ::= CREATE VIEW.                                                     { A = PRIV_SET_TYPE(PRIV_VIEW_CREATE); }
×
508
priv_type(A) ::= SELECT VIEW.                                                     { A = PRIV_SET_TYPE(PRIV_VIEW_SELECT); }
×
509

510
priv_type(A) ::= CREATE RSMA.                                                     { A = PRIV_SET_TYPE(PRIV_RSMA_CREATE); }
×
511
priv_type(A) ::= CREATE TSMA.                                                     { A = PRIV_SET_TYPE(PRIV_TSMA_CREATE); }
×
512

513
priv_type(A) ::= CREATE MOUNT.                                                    { A = PRIV_SET_TYPE(PRIV_MOUNT_CREATE); }
×
514
priv_type(A) ::= DROP MOUNT.                                                      { A = PRIV_SET_TYPE(PRIV_MOUNT_DROP); }
×
515
priv_type(A) ::= SHOW MOUNTS.                                                     { A = PRIV_SET_TYPE(PRIV_MOUNT_SHOW); }
×
516

517
priv_type(A) ::= ALTER PASS.                                                      { A = PRIV_SET_TYPE(PRIV_PASS_ALTER); }
×
518
priv_type(A) ::= ALTER SELF PASS.                                                 { A = PRIV_SET_TYPE(PRIV_PASS_ALTER_SELF); }
×
519

520
priv_type(A) ::= CREATE ROLE.                                                     { A = PRIV_SET_TYPE(PRIV_ROLE_CREATE); }
×
521
priv_type(A) ::= DROP ROLE.                                                       { A = PRIV_SET_TYPE(PRIV_ROLE_DROP); }
×
522
priv_type(A) ::= SHOW ROLES.                                                      { A = PRIV_SET_TYPE(PRIV_ROLE_SHOW); }
×
523

524
priv_type(A) ::= CREATE USER.                                                     { A = PRIV_SET_TYPE(PRIV_USER_CREATE); }
×
525
priv_type(A) ::= DROP USER.                                                       { A = PRIV_SET_TYPE(PRIV_USER_DROP); }
×
526
priv_type(A) ::= SET USER SECURITY INFO.                                          { A = PRIV_SET_TYPE(PRIV_USER_SET_SECURITY); }
×
527
priv_type(A) ::= SET USER AUDIT INFO.                                             { A = PRIV_SET_TYPE(PRIV_USER_SET_AUDIT); }
×
528
priv_type(A) ::= SET USER BASIC INFO.                                             { A = PRIV_SET_TYPE(PRIV_USER_SET_BASIC); }
×
529
priv_type(A) ::= UNLOCK USER.                                                     { A = PRIV_SET_TYPE(PRIV_USER_UNLOCK); }
×
530
priv_type(A) ::= LOCK USER.                                                       { A = PRIV_SET_TYPE(PRIV_USER_LOCK); }
×
531
priv_type(A) ::= SHOW USERS.                                                      { A = PRIV_SET_TYPE(PRIV_USER_SHOW); }
×
532

533
priv_type(A) ::= CREATE AUDIT DATABASE.                                           { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_CREATE); }
×
534
priv_type(A) ::= DROP AUDIT DATABASE.                                             { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_DROP); }
×
535
priv_type(A) ::= ALTER AUDIT DATABASE.                                            { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_ALTER); }
×
536
priv_type(A) ::= USE AUDIT DATABASE.                                              { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_USE); }
×
537

538
priv_type(A) ::= CREATE TOKEN.                                                    { A = PRIV_SET_TYPE(PRIV_TOKEN_CREATE); }
×
539
priv_type(A) ::= DROP TOKEN.                                                      { A = PRIV_SET_TYPE(PRIV_TOKEN_DROP); }
×
540
priv_type(A) ::= ALTER TOKEN.                                                     { A = PRIV_SET_TYPE(PRIV_TOKEN_ALTER); }
×
541
priv_type(A) ::= SHOW TOKENS.                                                     { A = PRIV_SET_TYPE(PRIV_TOKEN_SHOW); }
×
542

543
priv_type(A) ::= UPDATE KEY.                                                      { A = PRIV_SET_TYPE(PRIV_KEY_UPDATE); }
×
544
priv_type(A) ::= CREATE TOTP.                                                     { A = PRIV_SET_TYPE(PRIV_TOTP_CREATE); }
×
545
priv_type(A) ::= DROP TOTP.                                                       { A = PRIV_SET_TYPE(PRIV_TOTP_DROP); }
×
546
priv_type(A) ::= UPDATE TOTP.                                                     { A = PRIV_SET_TYPE(PRIV_TOTP_UPDATE); }
×
547

548
priv_type(A) ::= GRANT PRIVILEGE.                                                 { A = PRIV_SET_TYPE(PRIV_GRANT_PRIVILEGE); }
×
549
priv_type(A) ::= REVOKE PRIVILEGE.                                                { A = PRIV_SET_TYPE(PRIV_REVOKE_PRIVILEGE); }
×
550
priv_type(A) ::= SHOW PRIVILEGES.                                                 { A = PRIV_SET_TYPE(PRIV_SHOW_PRIVILEGES); }
×
551

552
priv_type(A) ::= CREATE NODE.                                                     { A = PRIV_SET_TYPE(PRIV_NODE_CREATE); }
×
553
priv_type(A) ::= DROP NODE.                                                       { A = PRIV_SET_TYPE(PRIV_NODE_DROP); }
×
554
priv_type(A) ::= SHOW NODES.                                                      { A = PRIV_SET_TYPE(PRIV_NODES_SHOW); }
152✔
555

556
priv_type(A) ::= ALTER SECURITY VARIABLE.                                         { A = PRIV_SET_TYPE(PRIV_VAR_SECURITY_ALTER); }
×
557
priv_type(A) ::= ALTER AUDIT VARIABLE.                                            { A = PRIV_SET_TYPE(PRIV_VAR_AUDIT_ALTER); }
×
558
priv_type(A) ::= ALTER SYSTEM VARIABLE.                                           { A = PRIV_SET_TYPE(PRIV_VAR_SYSTEM_ALTER); }
×
559
priv_type(A) ::= ALTER DEBUG VARIABLE.                                            { A = PRIV_SET_TYPE(PRIV_VAR_DEBUG_ALTER); }
×
560
priv_type(A) ::= SHOW SECURITY VARIABLES.                                         { A = PRIV_SET_TYPE(PRIV_VAR_SECURITY_SHOW); }
×
561
priv_type(A) ::= SHOW AUDIT VARIABLES.                                            { A = PRIV_SET_TYPE(PRIV_VAR_AUDIT_SHOW); }
×
562
priv_type(A) ::= SHOW SYSTEM VARIABLES.                                           { A = PRIV_SET_TYPE(PRIV_VAR_SYSTEM_SHOW); }
×
563
priv_type(A) ::= SHOW DEBUG VARIABLES.                                            { A = PRIV_SET_TYPE(PRIV_VAR_DEBUG_SHOW); }
×
564

565
priv_type(A) ::= CREATE TOPIC.                                                    { A = PRIV_SET_TYPE(PRIV_TOPIC_CREATE); }
310✔
566
priv_type(A) ::= SHOW CONSUMERS.                                                  { A = PRIV_SET_TYPE(PRIV_CONSUMER_SHOW); }
×
567
priv_type(A) ::= SHOW SUBSCRIPTIONS.                                              { A = PRIV_SET_TYPE(PRIV_SUBSCRIPTION_SHOW); }
×
568

569
priv_type(A) ::= CREATE STREAM.                                                   { A = PRIV_SET_TYPE(PRIV_STREAM_CREATE); }
388✔
570

571
priv_type(A) ::= SHOW TRANS.                                                      { A = PRIV_SET_TYPE(PRIV_TRANS_SHOW); }
×
572
priv_type(A) ::= KILL TRANS.                                                      { A = PRIV_SET_TYPE(PRIV_TRANS_KILL); }
×
573
priv_type(A) ::= SHOW CONNECTIONS.                                                { A = PRIV_SET_TYPE(PRIV_CONNECTION_SHOW); }
×
574
priv_type(A) ::= KILL CONNECTION.                                                 { A = PRIV_SET_TYPE(PRIV_CONNECTION_KILL); }
×
575
priv_type(A) ::= SHOW QUERIES.                                                    { A = PRIV_SET_TYPE(PRIV_QUERY_SHOW); }
×
576
priv_type(A) ::= KILL QUERY.                                                      { A = PRIV_SET_TYPE(PRIV_QUERY_KILL); }
×
577

578
priv_type(A) ::= USE INFORMATION_SCHEMA.                                          { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_USE); }
×
579
priv_type(A) ::= USE PERFORMANCE_SCHEMA.                                          { A = PRIV_SET_TYPE(PRIV_PERF_SCHEMA_USE); }
×
580
priv_type(A) ::= READ INFORMATION_SCHEMA LIMIT.                                   { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_LIMIT); }
×
581
priv_type(A) ::= READ INFORMATION_SCHEMA SECURITY.                                { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_SEC); }
×
582
priv_type(A) ::= READ INFORMATION_SCHEMA AUDIT.                                   { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_AUDIT); }
×
583
priv_type(A) ::= READ INFORMATION_SCHEMA BASIC.                                   { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_BASIC); }
×
584
priv_type(A) ::= READ PERFORMANCE_SCHEMA LIMIT.                                   { A = PRIV_SET_TYPE(PRIV_PERF_SCHEMA_READ_LIMIT); }
×
585
priv_type(A) ::= READ PERFORMANCE_SCHEMA BASIC.                                   { A = PRIV_SET_TYPE(PRIV_PERF_SCHEMA_READ_BASIC); }
×
586
priv_type(A) ::= SHOW GRANTS.                                                     { A = PRIV_SET_TYPE(PRIV_GRANTS_SHOW); }
×
587
priv_type(A) ::= SHOW CLUSTER.                                                    { A = PRIV_SET_TYPE(PRIV_CLUSTER_SHOW); }
×
588
priv_type(A) ::= SHOW APPS.                                                       { A = PRIV_SET_TYPE(PRIV_APPS_SHOW); }
×
589

590
%type priv_type_tbl_dml                                                           { SPrivSetArgs }
591
%destructor priv_type_tbl_dml                                                     {
592
                                                                                    if ($$.selectCols != NULL) {
×
593
                                                                                      nodesDestroyList($$.selectCols);
×
594
                                                                                    }
595
                                                                                    if ($$.insertCols != NULL) {
×
596
                                                                                      nodesDestroyList($$.insertCols);
×
597
                                                                                    }
598
                                                                                    if ($$.updateCols != NULL) {
×
599
                                                                                      nodesDestroyList($$.updateCols);
×
600
                                                                                    }
601
                                                                                  }
602
priv_type_tbl_dml(A) ::= SELECT TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_SELECT); }
222✔
603
priv_type_tbl_dml(A) ::= SELECT specific_cols_with_mask_opt(B).                   { A = PRIV_SET_COLS(PRIV_TBL_SELECT, B, NULL, NULL); }
226,572✔
604
priv_type_tbl_dml(A) ::= INSERT TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_INSERT); }
×
605
priv_type_tbl_dml(A) ::= INSERT specific_cols_opt(B).                             { A = PRIV_SET_COLS(PRIV_TBL_INSERT, NULL, B, NULL); }
130,844✔
606
/*priv_type_tbl_dml(A) ::= UPDATE TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_UPDATE); }
607
priv_type_tbl_dml(A) ::= UPDATE specific_cols_opt(B).                             { A = PRIV_SET_COLS(PRIV_TBL_UPDATE, NULL, NULL, B); }*/
608
priv_type_tbl_dml(A) ::= DELETE TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_DELETE); }
222✔
609
priv_type_tbl_dml(A) ::= DELETE.                                                  { A = PRIV_SET_TYPE(PRIV_TBL_DELETE); }
666✔
610

611
%type priv_level_opt                                                              { SPrivLevelArgs }
612
%destructor priv_level_opt                                                        { 
613
                                                                                    if ($$.cols != NULL) {
152✔
614
                                                                                      nodesDestroyList($$.cols);
×
615
                                                                                    }
616
                                                                                  }
617
priv_level_opt(A) ::= .                                                           { 
618
                                                                                    A.first = nil_token; A.second = nil_token; 
916✔
619
                                                                                    A.objType = PRIV_OBJ_CLUSTER; A.cols = NULL; 
916✔
620
                                                                                  }
621
priv_level_opt(A) ::= ON priv_level(B).                                           { A = B; A.objType = PRIV_OBJ_TBL; }
730,018✔
622
priv_level_opt(A) ::= ON DATABASE priv_level(B).                                  { A = B; A.objType = PRIV_OBJ_DB; }
209,603✔
623
priv_level_opt(A) ::= ON TABLE priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_TBL; }
1,016✔
624
priv_level_opt(A) ::= ON VIEW priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_VIEW; }
1,085✔
625
priv_level_opt(A) ::= ON INDEX priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_IDX; }
×
626
priv_level_opt(A) ::= ON TOPIC priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_TOPIC; }
4,539✔
627
priv_level_opt(A) ::= ON STREAM priv_level(B).                                    { A = B; A.objType = PRIV_OBJ_STREAM; }
×
628
priv_level_opt(A) ::= ON RSMA priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_RSMA; }
×
629
priv_level_opt(A) ::= ON TSMA priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_TSMA; }
×
630

631
%type priv_level                                                                  { SPrivLevelArgs }
632
%destructor priv_level                                                            { }
633
priv_level(A) ::= NK_STAR(B).                                                     { A.first = B; A.second = nil_token; A.cols = NULL; }
×
634
priv_level(A) ::= NK_STAR(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; A.cols = NULL; }
4,652✔
635
priv_level(A) ::= db_name(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; A.cols = NULL; }
14,788✔
636
priv_level(A) ::= db_name(B) NK_DOT table_name(C).                                { A.first = B; A.second = C; A.cols = NULL; }
430,882✔
637
priv_level(A) ::= db_name(B).                                                     { A.first = B; A.second = nil_token; A.cols = NULL; }
495,939✔
638

639
with_clause_opt(A) ::= .                                                          { A = NULL; }
2,147,483,647✔
640
with_clause_opt(A) ::= WITH search_condition(B).                                  { A = B; }
484,227,886✔
641

642
/************************************************ create encrypt_key *********************************************/
643
cmd ::= CREATE ENCRYPT_KEY NK_STRING(A).                                          { pCxt->pRootNode = createEncryptKeyStmt(pCxt, &A); }
156✔
644

645
cmd ::= CREATE ENCRYPT_ALGR NK_STRING(A) ALGR_NAME NK_STRING(B) DESC NK_STRING(C) ALGR_TYPE NK_STRING(D) OSSL_ALGR_NAME NK_STRING(E).                                          { pCxt->pRootNode = createCreateAlgrStmt(pCxt, &A, &B, &C, &D, &E); }
×
646

647
cmd ::= DROP ENCRYPT_ALGR NK_STRING(A).                                           { pCxt->pRootNode = createDropEncryptAlgrStmt(pCxt, &A); }
×
648

649
/************************************************ alter encrypt key *********************************************/
650
cmd ::= ALTER SYSTEM SET SVR_KEY NK_STRING(A).                                    { pCxt->pRootNode = createAlterEncryptKeyStmt(pCxt, 0, &A); }
×
651
cmd ::= ALTER SYSTEM SET DB_KEY NK_STRING(A).                                     { pCxt->pRootNode = createAlterEncryptKeyStmt(pCxt, 1, &A); }
×
652
/************************************************ create drop update anode ***************************************/
653
cmd ::= CREATE ANODE NK_STRING(A).                                                { pCxt->pRootNode = createCreateAnodeStmt(pCxt, &A); }
×
654
cmd ::= UPDATE ANODE NK_INTEGER(A).                                               { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, &A, false); }
×
655
cmd ::= UPDATE ALL ANODES.                                                        { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, NULL, true); }
×
656
cmd ::= DROP ANODE NK_INTEGER(A).                                                 { pCxt->pRootNode = createDropAnodeStmt(pCxt, &A); }
×
657

658
/************************************************ create/drop/alter/restore dnode *********************************************/
659
cmd ::= CREATE DNODE dnode_endpoint(A).                                           { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); }
726✔
660
cmd ::= CREATE DNODE dnode_endpoint(A) PORT NK_INTEGER(B).                        { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); }
141,776✔
661
cmd ::= DROP DNODE NK_INTEGER(A) force_opt(B).                                    { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
9,650✔
662
cmd ::= DROP DNODE dnode_endpoint(A) force_opt(B).                                { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
×
663
cmd ::= DROP DNODE NK_INTEGER(A) unsafe_opt(B).                                   { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
664
cmd ::= DROP DNODE dnode_endpoint(A) unsafe_opt(B).                               { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
665
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B).                                   { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); }
16,748✔
666
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B) NK_STRING(C).                      { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, &C); }
40,357✔
667
cmd ::= ALTER ALL DNODES NK_STRING(A).                                            { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, NULL); }
22,399✔
668
cmd ::= ALTER ALL DNODES NK_STRING(A) NK_STRING(B).                               { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, &B); }
2,414✔
669
cmd ::= RESTORE DNODE NK_INTEGER(A).                                              { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_DNODE_STMT, &A); }
497✔
670

671
%type dnode_endpoint                                                              { SToken }
672
%destructor dnode_endpoint                                                        { }
673
dnode_endpoint(A) ::= NK_STRING(B).                                               { A = B; }
674
dnode_endpoint(A) ::= NK_ID(B).                                                   { A = B; }
675
dnode_endpoint(A) ::= NK_IPTOKEN(B).                                              { A = B; }
676

677
%type force_opt                                                                   { bool }
678
%destructor force_opt                                                             { }
679
force_opt(A) ::= .                                                                { A = false; }
823,531,763✔
680
force_opt(A) ::= FORCE.                                                           { A = true; }
14,937,464✔
681

682
%type unsafe_opt                                                                  { bool }
683
%destructor unsafe_opt                                                            { }
684
unsafe_opt(A) ::= UNSAFE.                                                         { A = true; }
685

686
/************************************************ alter cluster *********************************************************/
687
cmd ::= ALTER CLUSTER NK_STRING(A).                                               { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, NULL); }
×
688
cmd ::= ALTER CLUSTER NK_STRING(A) NK_STRING(B).                                  { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, &B); }
×
689

690
/************************************************ alter local *********************************************************/
691
cmd ::= ALTER LOCAL NK_STRING(A).                                                 { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
4,260✔
692
cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B).                                    { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); }
210,013✔
693

694
/************************************************ create/drop/restore qnode ***************************************************/
695
cmd ::= CREATE QNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_QNODE_STMT, &A); }
3,674✔
696
cmd ::= DROP QNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_QNODE_STMT, &A); }
648✔
697
cmd ::= RESTORE QNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_QNODE_STMT, &A); }
400✔
698

699
/************************************************ create/drop backup node ***************************************************/
700
// cmd ::= CREATE BACKUPNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_BACKUP_NODE_STMT, &A); }
701
// cmd ::= DROP BACKUPNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_BACKUP_NODE_STMT, &A); }
702

703
/************************************************ create/drop snode ***************************************************/
704
cmd ::= CREATE SNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_SNODE_STMT, &A); }
65,437✔
705
cmd ::= DROP SNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_SNODE_STMT, &A); }
43,223✔
706

707
/************************************************ create/drop bnode ***************************************/
708
cmd ::= CREATE BNODE ON DNODE NK_INTEGER(A) bnode_options(B).                     { pCxt->pRootNode = createCreateBnodeStmt(pCxt, &A, B); }
22,037✔
709
cmd ::= DROP BNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropBnodeStmt(pCxt, &A); }
26,105✔
710

711
bnode_options(A) ::= .                                                            { A = createDefaultBnodeOptions(pCxt); }
22,037✔
712
bnode_options(A) ::= bnode_options(B) NK_ID(C) NK_STRING(D).                      { A = setBnodeOption(pCxt, B, &C, &D); }
×
713

714
/************************************************ create/drop/restore mnode ***************************************************/
715
cmd ::= CREATE MNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_MNODE_STMT, &A); }
18,105✔
716
cmd ::= DROP MNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &A); }
2,204✔
717
cmd ::= RESTORE MNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_MNODE_STMT, &A); }
500✔
718

719
/************************************************ restore vnode ***************************************************/
720
cmd ::= RESTORE VNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_VNODE_STMT, &A); }
297✔
721

722
/************************************************ create/drop/use database ********************************************/
723
cmd ::= CREATE DATABASE not_exists_opt(A) db_name(B) db_options(C).               { pCxt->pRootNode = createCreateDatabaseStmt(pCxt, A, &B, C); }
1,249,195✔
724
cmd ::= DROP DATABASE exists_opt(A) db_name(B) force_opt(C).                      { pCxt->pRootNode = createDropDatabaseStmt(pCxt, A, &B, C); }
1,032,368✔
725
cmd ::= USE db_name(A).                                                           { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); }
1,920,307✔
726
cmd ::= ALTER DATABASE db_name(A) alter_db_options(B).                            { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); }
187,692✔
727
cmd ::= FLUSH DATABASE db_name(A).                                                { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); }
1,703,233✔
728
cmd ::= TRIM DATABASE db_name(A) speed_opt(B).                                    { pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &A, B); }
7,743✔
729
cmd ::= TRIM DATABASE db_name(A) WAL.                                             { pCxt->pRootNode = createTrimDbWalStmt(pCxt, &A); }
524✔
730
cmd ::= SSMIGRATE DATABASE db_name(A).                                            { pCxt->pRootNode = createSsMigrateDatabaseStmt(pCxt, &A); }
×
731
cmd ::= COMPACT DATABASE db_name(A) start_opt(B) end_opt(C) meta_only(D) force_opt(E).                      { pCxt->pRootNode = createCompactStmt(pCxt, &A, B, C, D, E); }
27,096✔
732
cmd ::= COMPACT db_name_cond_opt(A) VGROUPS IN NK_LP integer_list(B) NK_RP start_opt(C) end_opt(D) meta_only(E) force_opt(F).   { pCxt->pRootNode = createCompactVgroupsStmt(pCxt, A, B, C, D, E, F); }
8,262✔
733
cmd ::= SCAN DATABASE db_name(A) start_opt(B) end_opt(C).                                          { pCxt->pRootNode = createScanStmt(pCxt, &A, B, C); }
88✔
734
cmd ::= SCAN db_name_cond_opt(A) VGROUPS IN NK_LP integer_list(B) NK_RP start_opt(C) end_opt(D).   { pCxt->pRootNode = createScanVgroupsStmt(pCxt, A, B, C, D); }
264✔
735

736
%type meta_only                                                                  { bool }
737
%destructor meta_only                                                            { }
738
meta_only(A) ::= .                                                                { A = false; }
739
meta_only(A) ::= META_ONLY.                                                      { A = true; }
740

741
%type not_exists_opt                                                              { bool }
742
%destructor not_exists_opt                                                        { }
743
not_exists_opt(A) ::= IF NOT EXISTS.                                              { A = true; }
10,739,101✔
744
not_exists_opt(A) ::= .                                                           { A = false; }
745

746
%type exists_opt                                                                  { bool }
747
%destructor exists_opt                                                            { }
748
exists_opt(A) ::= IF EXISTS.                                                      { A = true; }
1,806,579✔
749
exists_opt(A) ::= .                                                               { A = false; }
750

751
db_options(A) ::= .                                                               { A = createDefaultDatabaseOptions(pCxt); }
1,281,351✔
752
db_options(A) ::= db_options(B) BUFFER NK_INTEGER(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_BUFFER, &C); }
42,822✔
753
db_options(A) ::= db_options(B) CACHEMODEL NK_STRING(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHEMODEL, &C); }
42,688✔
754
db_options(A) ::= db_options(B) CACHESIZE NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHESIZE, &C); }
6,483✔
755
db_options(A) ::= db_options(B) COMP NK_INTEGER(C).                               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMP, &C); }
15,499✔
756
db_options(A) ::= db_options(B) DURATION NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
281,223✔
757
db_options(A) ::= db_options(B) DURATION NK_VARIABLE(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
758
db_options(A) ::= db_options(B) MAXROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MAXROWS, &C); }
25,215✔
759
db_options(A) ::= db_options(B) MINROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MINROWS, &C); }
23,448✔
760
db_options(A) ::= db_options(B) KEEP integer_list(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
141,433✔
761
db_options(A) ::= db_options(B) KEEP variable_list(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
762
db_options(A) ::= db_options(B) PAGES NK_INTEGER(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGES, &C); }
7,223✔
763
db_options(A) ::= db_options(B) PAGESIZE NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGESIZE, &C); }
5,233✔
764
db_options(A) ::= db_options(B) TSDB_PAGESIZE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_TSDB_PAGESIZE, &C); }
3,950✔
765
db_options(A) ::= db_options(B) PRECISION NK_STRING(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PRECISION, &C); }
103,003✔
766
db_options(A) ::= db_options(B) REPLICAS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
458,074✔
767
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
768
//db_options(A) ::= db_options(B) STRICT NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_STRICT, &C); }
769
db_options(A) ::= db_options(B) VGROUPS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_VGROUPS, &C); }
439,968✔
770
db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SINGLE_STABLE, &C); }
6,584✔
771
db_options(A) ::= db_options(B) RETENTIONS retention_list(C).                     { A = setDatabaseOption(pCxt, B, DB_OPTION_RETENTIONS, C); }
×
772
db_options(A) ::= db_options(B) SCHEMALESS NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SCHEMALESS, &C); }
18,550✔
773
db_options(A) ::= db_options(B) WAL_LEVEL NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL, &C); }
26,909✔
774
db_options(A) ::= db_options(B) WAL_FSYNC_PERIOD NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_FSYNC, &C); }
17,873✔
775
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_INTEGER(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &C); }
60,032✔
776
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_MINUS(D) NK_INTEGER(C).   {
777
                                                                                    SToken t = D;
5,368✔
778
                                                                                    t.n = (C.z + C.n) - D.z;
5,368✔
779
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &t);
5,368✔
780
                                                                                  }
781
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_INTEGER(C).                 { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &C); }
8,546✔
782
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_MINUS(D) NK_INTEGER(C).     {
783
                                                                                    SToken t = D;
5,368✔
784
                                                                                    t.n = (C.z + C.n) - D.z;
5,368✔
785
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &t);
5,368✔
786
                                                                                  }
787
db_options(A) ::= db_options(B) WAL_ROLL_PERIOD NK_INTEGER(C).                    { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_ROLL_PERIOD, &C); }
×
788
db_options(A) ::= db_options(B) WAL_SEGMENT_SIZE NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_SEGMENT_SIZE, &C); }
×
789
db_options(A) ::= db_options(B) STT_TRIGGER NK_INTEGER(C).                        { A = setDatabaseOption(pCxt, B, DB_OPTION_STT_TRIGGER, &C); }
30,085✔
790
db_options(A) ::= db_options(B) TABLE_PREFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_PREFIX, C); }
15,610✔
791
db_options(A) ::= db_options(B) TABLE_SUFFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_SUFFIX, C); }
15,082✔
792
db_options(A) ::= db_options(B) SS_CHUNKPAGES NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_CHUNKPAGES, &C); }
3,351✔
793
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_INTEGER(C).                       { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
4,452✔
794
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_VARIABLE(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
795
db_options(A) ::= db_options(B) SS_COMPACT NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_COMPACT, &C); }
3,351✔
796
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
6,511✔
797
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
798
db_options(A) ::= db_options(B) ENCRYPT_ALGORITHM NK_STRING(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_ENCRYPT_ALGORITHM, &C); }
3,351✔
799
db_options(A) ::= db_options(B) DNODES NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_DNODES, &C); }
25,357✔
800
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_INTEGER (C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
18,804✔
801
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
802
db_options(A) ::= db_options(B) COMPACT_TIME_RANGE signed_duration_list(C).       { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_RANGE, C); }
27,226✔
803
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_INTEGER(C).                { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
17,146✔
804
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_VARIABLE(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
805
db_options(A) ::= db_options(B) IS_AUDIT NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_IS_AUDIT, &C); }
2,806✔
806

807
alter_db_options(A) ::= alter_db_option(B).                                       { A = createAlterDatabaseOptions(pCxt); A = setAlterDatabaseOption(pCxt, A, &B); }
191,758✔
808
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C).                   { A = setAlterDatabaseOption(pCxt, B, &C); }
22,468✔
809

810
%type alter_db_option                                                             { SAlterOption }
811
%destructor alter_db_option                                                       { }
812
alter_db_option(A) ::= BUFFER NK_INTEGER(B).                                      { A.type = DB_OPTION_BUFFER; A.val = B; }
8,012✔
813
alter_db_option(A) ::= CACHEMODEL NK_STRING(B).                                   { A.type = DB_OPTION_CACHEMODEL; A.val = B; }
15,557✔
814
alter_db_option(A) ::= CACHESIZE NK_INTEGER(B).                                   { A.type = DB_OPTION_CACHESIZE; A.val = B; }
4,329✔
815
alter_db_option(A) ::= WAL_FSYNC_PERIOD NK_INTEGER(B).                            { A.type = DB_OPTION_FSYNC; A.val = B; }
11,902✔
816
alter_db_option(A) ::= KEEP integer_list(B).                                      { A.type = DB_OPTION_KEEP; A.pList = B; }
36,213✔
817
alter_db_option(A) ::= KEEP variable_list(B).                                     { A.type = DB_OPTION_KEEP; A.pList = B; }
818
alter_db_option(A) ::= PAGES NK_INTEGER(B).                                       { A.type = DB_OPTION_PAGES; A.val = B; }
5,002✔
819
alter_db_option(A) ::= REPLICA NK_INTEGER(B).                                     { A.type = DB_OPTION_REPLICA; A.val = B; }
10,650✔
820
alter_db_option(A) ::= REPLICAS NK_INTEGER(B).                                    { A.type = DB_OPTION_REPLICA; A.val = B; }
821
//alter_db_option(A) ::= STRICT NK_STRING(B).                                       { A.type = DB_OPTION_STRICT; A.val = B; }
822
alter_db_option(A) ::= WAL_LEVEL NK_INTEGER(B).                                   { A.type = DB_OPTION_WAL; A.val = B; }
17,112✔
823
alter_db_option(A) ::= STT_TRIGGER NK_INTEGER(B).                                 { A.type = DB_OPTION_STT_TRIGGER; A.val = B; }
2,604✔
824
alter_db_option(A) ::= MINROWS NK_INTEGER(B).                                     { A.type = DB_OPTION_MINROWS; A.val = B; }
5,528✔
825
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_INTEGER(B).                        { A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = B; }
12,083✔
826
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_MINUS(B) NK_INTEGER(C).            {
827
                                                                                    SToken t = B;
×
828
                                                                                    t.n = (C.z + C.n) - B.z;
×
829
                                                                                    A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = t;
×
830
                                                                                  }
831
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_INTEGER(B).                          { A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = B; }
1,412✔
832
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_MINUS(B) NK_INTEGER(C).              {
833
                                                                                    SToken t = B;
×
834
                                                                                    t.n = (C.z + C.n) - B.z;
×
835
                                                                                    A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = t;
×
836
                                                                                  }
837
alter_db_option(A) ::= SS_KEEPLOCAL NK_INTEGER(B).                                { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
686✔
838
alter_db_option(A) ::= SS_KEEPLOCAL NK_VARIABLE(B).                               { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
839
alter_db_option(A) ::= SS_COMPACT NK_INTEGER(B).                                  { A.type = DB_OPTION_SS_COMPACT, A.val = B; }
2,058✔
840
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_INTEGER(B).                            { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
4,258✔
841
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_VARIABLE(B).                           { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
842
alter_db_option(A) ::= ENCRYPT_ALGORITHM NK_STRING(B).                            { A.type = DB_OPTION_ENCRYPT_ALGORITHM; A.val = B; }
3,590✔
843
alter_db_option(A) ::= COMPACT_INTERVAL NK_INTEGER(B).                            { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
19,834✔
844
alter_db_option(A) ::= COMPACT_INTERVAL NK_VARIABLE(B).                           { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
845
alter_db_option(A) ::= COMPACT_TIME_RANGE signed_duration_list(B).                { A.type = DB_OPTION_COMPACT_TIME_RANGE; A.pList = B; }
33,543✔
846
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_INTEGER(B).                         { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
19,853✔
847
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_VARIABLE(B).                        { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
848

849
%type integer_list                                                                { SNodeList* }
850
%destructor integer_list                                                          { nodesDestroyList($$); }
851
integer_list(A) ::= NK_INTEGER(B).                                                { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
153,573✔
852
integer_list(A) ::= integer_list(B) NK_COMMA NK_INTEGER(C).                       { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
123,088✔
853

854
%type variable_list                                                               { SNodeList* }
855
%destructor variable_list                                                         { nodesDestroyList($$); }
856
variable_list(A) ::= NK_VARIABLE(B).                                              { A = createNodeList(pCxt, createDurationValueNode(pCxt, &B)); }
38,250✔
857
variable_list(A) ::= variable_list(B) NK_COMMA NK_VARIABLE(C).                    { A = addNodeToList(pCxt, B, createDurationValueNode(pCxt, &C)); }
39,573✔
858

859
%type signed_duration_list                                                        { SNodeList* }
860
%destructor signed_duration_list                                                  { nodesDestroyList($$); }
861
signed_duration_list(A) ::= signed_variable(B).                                   { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
209,540,155✔
862
signed_duration_list(A) ::= signed_integer(B).                                    { A = createNodeList(pCxt, B); }
653,848,087✔
863
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_integer(C).   { A = addNodeToList(pCxt, B, C); }
735,283,541✔
864
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_variable(C).  { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
115,402,477✔
865

866
%type retention_list                                                              { SNodeList* }
867
%destructor retention_list                                                        { nodesDestroyList($$); }
868
retention_list(A) ::= retention(B).                                               { A = createNodeList(pCxt, B); }
869
retention_list(A) ::= retention_list(B) NK_COMMA retention(C).                    { A = addNodeToList(pCxt, B, C); }
870

871
retention(A) ::= NK_VARIABLE(B) NK_COLON NK_VARIABLE(C).                          { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
×
872
retention(A) ::= NK_MINUS(B) NK_COLON NK_VARIABLE(C).                             { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
873

874
%type speed_opt                                                                   { int32_t }
875
%destructor speed_opt                                                             { }
876
speed_opt(A) ::= .                                                                { A = 0; }
15,674✔
877
speed_opt(A) ::= BWLIMIT NK_INTEGER(B).                                           { A = taosStr2Int32(B.z, NULL, 10); }
5,748✔
878

879
start_opt(A) ::= .                                                                { A = NULL; }
880
start_opt(A) ::= START WITH NK_INTEGER(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
×
881
start_opt(A) ::= START WITH NK_STRING(B).                                         { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2,115✔
882
start_opt(A) ::= START WITH TIMESTAMP NK_STRING(B).                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
×
883

884
end_opt(A) ::= .                                                                  { A = NULL; }
885
end_opt(A) ::= END WITH NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
886
end_opt(A) ::= END WITH NK_STRING(B).                                             { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
887
end_opt(A) ::= END WITH TIMESTAMP NK_STRING(B).                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
888

889
/************************************************ create/drop table/stable ********************************************/
890
cmd ::= CREATE TABLE not_exists_opt(A) full_table_name(B)
891
  NK_LP column_def_list(C) NK_RP tags_def_opt(D) table_options(E).                { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
19,487,791✔
892
cmd ::= CREATE TABLE multi_create_clause(A).                                      { pCxt->pRootNode = createCreateMultiTableStmt(pCxt, A); }
29,323,474✔
893
cmd ::= CREATE TABLE not_exists_opt(B) USING full_table_name(C)
894
  NK_LP tag_list_opt(D) NK_RP FILE NK_STRING(E).                                  { pCxt->pRootNode = createCreateSubTableFromFileClause(pCxt, B, C, D, &E); }
1,283✔
895
cmd ::= CREATE STABLE not_exists_opt(A) full_table_name(B)
896
  NK_LP column_def_list(C) NK_RP tags_def(D) table_options(E).                    { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
897
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
898
  NK_LP column_def_list(C) NK_RP.                                                 { pCxt->pRootNode = createCreateVTableStmt(pCxt, A, B, C); }
119,481✔
899
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
900
  NK_LP specific_column_ref_list(C) NK_RP USING full_table_name(D)
901
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, C, NULL, D, E, F); }
61,357✔
902
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
903
  NK_LP column_ref_list(C) NK_RP USING full_table_name(D)
904
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, C, D, E, F); }
126,641✔
905
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B) USING full_table_name(C)
906
  specific_cols_opt(D) TAGS NK_LP tags_literal_list(E) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, NULL, C, D, E); }
783✔
907
cmd ::= DROP TABLE with_opt(A) multi_drop_clause(B).                              { pCxt->pRootNode = createDropTableStmt(pCxt, A, B); }
1,947,441✔
908
cmd ::= DROP STABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropSuperTableStmt(pCxt, A, B, C); }
74,790✔
909
cmd ::= DROP VTABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropVirtualTableStmt(pCxt, A, B, C); }
68,208✔
910

911
cmd ::= ALTER TABLE alter_table_clause(A).                                        { pCxt->pRootNode = A; }
161,151,040✔
912
cmd ::= ALTER STABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterSuperTableType(A); }
472,989✔
913
cmd ::= ALTER VTABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterVirtualTableType(A); }
358,598✔
914

915

916
alter_table_clause(A) ::= full_table_name(B) alter_table_options(C).              { A = createAlterTableModifyOptions(pCxt, B, C); }
65,467✔
917
alter_table_clause(A) ::=
918
  full_table_name(B) ADD COLUMN column_name(C) type_name(D) column_options(E).    { A = createAlterTableAddModifyColOptions2(pCxt, B, TSDB_ALTER_TABLE_ADD_COLUMN, &C, D, E); }
5,886,196✔
919
alter_table_clause(A) ::= full_table_name(B) DROP COLUMN column_name(C).          { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_COLUMN, &C); }
1,544,208✔
920
alter_table_clause(A) ::=
921
  full_table_name(B) MODIFY COLUMN column_name(C) type_name(D).                   { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &C, D); }
1,697,456✔
922
alter_table_clause(A) ::=
923
  full_table_name(B) MODIFY COLUMN column_name(C) column_options(D).              { A = createAlterTableAddModifyColOptions(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS, &C, D); }
104,378✔
924
alter_table_clause(A) ::=
925
  full_table_name(B) RENAME COLUMN column_name(C) column_name(D).                 { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &C, &D); }
68,228✔
926
alter_table_clause(A) ::=
927
  full_table_name(B) ADD TAG column_name(C) type_name(D).                         { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_ADD_TAG, &C, D); }
277,596✔
928
alter_table_clause(A) ::= full_table_name(B) DROP TAG column_name(C).             { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_TAG, &C); }
103,453✔
929
alter_table_clause(A) ::=
930
  full_table_name(B) MODIFY TAG column_name(C) type_name(D).                      { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &C, D); }
511,911✔
931
alter_table_clause(A) ::=
932
  full_table_name(B) RENAME TAG column_name(C) column_name(D).                    { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
102,924✔
933
alter_table_clause(A) ::=
934
  full_table_name(B) ALTER COLUMN column_name(C) SET column_ref(D).
935
                                                                                  { A = createAlterTableAlterColRef(pCxt, B, TSDB_ALTER_TABLE_ALTER_COLUMN_REF, &C, D); }
105,094✔
936

937
alter_table_clause(A) ::=
938
  full_table_name(B) ALTER COLUMN column_name(C) SET NULL(D).                     { A = createAlterTableRemoveColRef(pCxt, B, TSDB_ALTER_TABLE_REMOVE_COLUMN_REF, &C, &D); }
61,572✔
939

940
%type column_tag_value_list                                                          { SNodeList* }
941
%destructor column_tag_value_list                                                    { nodesDestroyList($$); }
942
column_tag_value(A) ::= column_name(C) NK_EQ tags_literal(D).                        { A = createAlterSingleTagColumnNode(pCxt, &C, D); }
7,776,446✔
943
column_tag_value_list(A) ::= column_tag_value(B).                                    { A = createNodeList(pCxt, B); }
944
column_tag_value_list(A) ::= column_tag_value_list(B) NK_COMMA column_tag_value(C).  { A = addNodeToList(pCxt, B, C);}
31,875✔
945

946
alter_table_clause(A) ::=
947
  full_table_name(B) SET TAG column_tag_value_list(C).                            { A = createAlterTableSetMultiTagValue(pCxt, B, C); }
7,743,321✔
948

949
%type multi_create_clause                                                         { SNodeList* }
950
%destructor multi_create_clause                                                   { nodesDestroyList($$); }
951
multi_create_clause(A) ::= create_subtable_clause(B).                             { A = createNodeList(pCxt, B); }
952
multi_create_clause(A) ::= multi_create_clause(B) create_subtable_clause(C).      { A = addNodeToList(pCxt, B, C); }
6,042,454✔
953

954
create_subtable_clause(A) ::=
955
  not_exists_opt(B) full_table_name(C) USING full_table_name(D)
956
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP table_options(G).    { A = createCreateSubTableClause(pCxt, B, C, D, E, F, G); }
35,153,380✔
957

958
%type multi_drop_clause                                                           { SNodeList* }
959
%destructor multi_drop_clause                                                     { nodesDestroyList($$); }
960
multi_drop_clause(A) ::= drop_table_clause(B).                                    { A = createNodeList(pCxt, B); }
961
multi_drop_clause(A) ::= multi_drop_clause(B) NK_COMMA drop_table_clause(C).      { A = addNodeToList(pCxt, B, C); }
962

963
drop_table_clause(A) ::= exists_opt(B) full_table_name(C).                        { A = createDropTableClause(pCxt, B, C); }
2,055,179✔
964

965
%type with_opt                                                                    { bool }
966
%destructor with_opt                                                              { }
967
with_opt(A) ::= .                                                                 { A = false; }
968
with_opt(A) ::= WITH.                                                             { A = true; }
969

970
%type specific_cols_opt                                                           { SNodeList* }
971
%destructor specific_cols_opt                                                     { nodesDestroyList($$); }
972
specific_cols_opt(A) ::= .                                                        { A = NULL; }
1,016,357,501✔
973
specific_cols_opt(A) ::= NK_LP col_name_list(B) NK_RP.                            { A = B; }
1,302,812✔
974

975
%type specific_cols_with_mask_opt                                                 { SNodeList* }
976
%destructor specific_cols_with_mask_opt                                           { nodesDestroyList($$); }
977
specific_cols_with_mask_opt(A) ::= .                                              { A = NULL; }
978
specific_cols_with_mask_opt(A) ::= NK_LP col_name_ex_list(B) NK_RP.               { A = B; }
979

980
full_table_name(A) ::= table_name(B).                                             { A = createRealTableNode(pCxt, NULL, &B, NULL); }
41,868,103✔
981
full_table_name(A) ::= db_name(B) NK_DOT table_name(C).                           { A = createRealTableNode(pCxt, &B, &C, NULL); }
72,073,147✔
982

983
%type tag_def_list                                                                { SNodeList* }
984
%destructor tag_def_list                                                          { nodesDestroyList($$); }
985
tag_def_list(A) ::= tag_def(B).                                                   { A = createNodeList(pCxt, B); }
986
tag_def_list(A) ::= tag_def_list(B) NK_COMMA tag_def(C).                          { A = addNodeToList(pCxt, B, C); }
987
tag_def(A) ::= column_name(B) type_name(C).                                       { A = createColumnDefNode(pCxt, &B, C, NULL); }
4,214,284✔
988

989
%type column_def_list                                                             { SNodeList* }
990
%destructor column_def_list                                                       { nodesDestroyList($$); }
991
column_def_list(A) ::= column_def(B).                                             { A = createNodeList(pCxt, B); }
992
column_def_list(A) ::= column_def_list(B) NK_COMMA column_def(C).                 { A = addNodeToList(pCxt, B, C); }
993

994
// column_def(A) ::= column_name(B) type_name(C).                                 { A = createColumnDefNode(pCxt, &B, C, NULL); }
995
column_def(A) ::= column_name(B) type_name(C) column_options(D).                  { A = createColumnDefNode(pCxt, &B, C, D); }
353,584,693✔
996

997
%type specific_column_ref_list                                                               { SNodeList* }
998
%destructor specific_column_ref_list                                                         { nodesDestroyList($$); }
999
specific_column_ref_list(A) ::= specific_column_ref(B).                                      { A = createNodeList(pCxt, B); }
1000
specific_column_ref_list(A) ::= specific_column_ref_list(B) NK_COMMA specific_column_ref(C). { A = addNodeToList(pCxt, B, C); }
1001

1002
specific_column_ref(A) ::= column_name(B) FROM column_ref(C).                    { A = createColumnRefNodeByNode(pCxt, &B, C); }
44,637,830✔
1003

1004
%type column_ref_list                                                             { SNodeList* }
1005
%destructor column_ref_list                                                       { nodesDestroyList($$); }
1006
column_ref_list(A) ::= column_ref(B).                                             { A = createNodeList(pCxt, B); }
1007
column_ref_list(A) ::= column_ref_list(B) NK_COMMA column_ref(C).                 { A = addNodeToList(pCxt, B, C); }
1008

1009
%type type_name                                                                   { SDataType }
1010
%destructor type_name                                                             { }
1011
type_name(A) ::= BOOL.                                                            { A = createDataType(TSDB_DATA_TYPE_BOOL); }
5,221,675✔
1012
type_name(A) ::= TINYINT.                                                         { A = createDataType(TSDB_DATA_TYPE_TINYINT); }
4,657,490✔
1013
type_name(A) ::= SMALLINT.                                                        { A = createDataType(TSDB_DATA_TYPE_SMALLINT); }
5,544,871✔
1014
type_name(A) ::= INT.                                                             { A = createDataType(TSDB_DATA_TYPE_INT); }
43,022,608✔
1015
type_name(A) ::= INTEGER.                                                         { A = createDataType(TSDB_DATA_TYPE_INT); }
1016
type_name(A) ::= BIGINT.                                                          { A = createDataType(TSDB_DATA_TYPE_BIGINT); }
11,827,319✔
1017
type_name(A) ::= FLOAT.                                                           { A = createDataType(TSDB_DATA_TYPE_FLOAT); }
5,322,143✔
1018
type_name(A) ::= DOUBLE.                                                          { A = createDataType(TSDB_DATA_TYPE_DOUBLE); }
258,538,904✔
1019
type_name(A) ::= BINARY NK_LP NK_INTEGER(B) NK_RP.                                { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &B); }
76,019,609✔
1020
type_name(A) ::= TIMESTAMP.                                                       { A = createDataType(TSDB_DATA_TYPE_TIMESTAMP); }
24,722,320✔
1021
type_name(A) ::= NCHAR NK_LP NK_INTEGER(B) NK_RP.                                 { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &B); }
13,898,630✔
1022
type_name(A) ::= TINYINT UNSIGNED.                                                { A = createDataType(TSDB_DATA_TYPE_UTINYINT); }
461,779✔
1023
type_name(A) ::= SMALLINT UNSIGNED.                                               { A = createDataType(TSDB_DATA_TYPE_USMALLINT); }
451,965✔
1024
type_name(A) ::= INT UNSIGNED.                                                    { A = createDataType(TSDB_DATA_TYPE_UINT); }
512,129✔
1025
type_name(A) ::= BIGINT UNSIGNED.                                                 { A = createDataType(TSDB_DATA_TYPE_UBIGINT); }
1,217,168✔
1026
type_name(A) ::= JSON.                                                            { A = createDataType(TSDB_DATA_TYPE_JSON); }
19,621✔
1027
type_name(A) ::= VARCHAR NK_LP NK_INTEGER(B) NK_RP.                               { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &B); }
680,963✔
1028
type_name(A) ::= MEDIUMBLOB.                                                      { A = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); }
2,524✔
1029
type_name(A) ::= BLOB.                                                            { A = createDataType(TSDB_DATA_TYPE_BLOB); }
11,805✔
1030
type_name(A) ::= VARBINARY NK_LP NK_INTEGER(B) NK_RP.                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &B); }
355,584✔
1031
type_name(A) ::= GEOMETRY NK_LP NK_INTEGER(B) NK_RP.                              { A = createVarLenDataType(TSDB_DATA_TYPE_GEOMETRY, &B); }
345,707✔
1032
// type_name(A) ::= DECIMAL.                                                      { A = createDataType(TSDB_DATA_TYPE_DECIMAL); }
1033
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_RP.                               { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, NULL); }
64,900✔
1034
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_RP.        { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, &C); }
145,570✔
1035

1036
%type type_name_default_len                                                       { SDataType }
1037
%destructor type_name_default_len                                                 { }
1038
type_name_default_len(A) ::= BINARY.                                              { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, NULL); }
10,098✔
1039
type_name_default_len(A) ::= NCHAR.                                               { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, NULL); }
2,324✔
1040
type_name_default_len(A) ::= VARCHAR.                                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, NULL); }
2,550,884✔
1041
type_name_default_len(A) ::= VARBINARY.                                           { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, NULL); }
3,656✔
1042

1043
%type tags_def_opt                                                                { SNodeList* }
1044
%destructor tags_def_opt                                                          { nodesDestroyList($$); }
1045
tags_def_opt(A) ::= .                                                             { A = NULL; }
1046
tags_def_opt(A) ::= tags_def(B).                                                  { A = B; }
27,854,882✔
1047

1048
%type tags_def                                                                    { SNodeList* }
1049
%destructor tags_def                                                              { nodesDestroyList($$); }
1050
tags_def(A) ::= TAGS NK_LP tag_def_list(B) NK_RP.                                 { A = B; }
1,358,250✔
1051

1052
table_options(A) ::= .                                                            { A = createDefaultTableOptions(pCxt); }
54,654,511✔
1053
table_options(A) ::= table_options(B) COMMENT NK_STRING(C).                       { A = setTableOption(pCxt, B, TABLE_OPTION_COMMENT, &C); }
14,943✔
1054
table_options(A) ::= table_options(B) MAX_DELAY duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_MAXDELAY, C); }
×
1055
table_options(A) ::= table_options(B) WATERMARK duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_WATERMARK, C); }
×
1056
table_options(A) ::= table_options(B) ROLLUP NK_LP rollup_func_list(C) NK_RP.     { A = setTableOption(pCxt, B, TABLE_OPTION_ROLLUP, C); }
×
1057
table_options(A) ::= table_options(B) TTL NK_INTEGER(C).                          { A = setTableOption(pCxt, B, TABLE_OPTION_TTL, &C); }
91,425✔
1058
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP.           { A = setTableOption(pCxt, B, TABLE_OPTION_SMA, C); }
21,743✔
1059
table_options(A) ::= table_options(B) DELETE_MARK duration_list(C).               { A = setTableOption(pCxt, B, TABLE_OPTION_DELETE_MARK, C); }
×
1060
table_options(A) ::= table_options(B) KEEP NK_INTEGER(C).                         { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
44,721✔
1061
table_options(A) ::= table_options(B) KEEP NK_VARIABLE(C).                        { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
1062
table_options(A) ::= table_options(B) VIRTUAL NK_INTEGER(C).                      { A = setTableOption(pCxt, B, TABLE_OPTION_VIRTUAL, &C); }
28,288✔
1063

1064
alter_table_options(A) ::= alter_table_option(B).                                 { A = createAlterTableOptions(pCxt); A = setTableOption(pCxt, A, B.type, &B.val); }
65,467✔
1065
alter_table_options(A) ::= alter_table_options(B) alter_table_option(C).          { A = setTableOption(pCxt, B, C.type, &C.val); }
×
1066

1067
%type alter_table_option                                                          { SAlterOption }
1068
%destructor alter_table_option                                                    { }
1069
alter_table_option(A) ::= COMMENT NK_STRING(B).                                   { A.type = TABLE_OPTION_COMMENT; A.val = B; }
32,144✔
1070
alter_table_option(A) ::= TTL NK_INTEGER(B).                                      { A.type = TABLE_OPTION_TTL; A.val = B; }
8,730✔
1071
alter_table_option(A) ::= KEEP NK_INTEGER(B).                                     { A.type = TABLE_OPTION_KEEP; A.val = B; }
24,593✔
1072
alter_table_option(A) ::= KEEP NK_VARIABLE(B).                                    { A.type = TABLE_OPTION_KEEP; A.val = B; }
1073

1074

1075
%type duration_list                                                               { SNodeList* }
1076
%destructor duration_list                                                         { nodesDestroyList($$); }
1077
duration_list(A) ::= duration_literal(B).                                         { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
1078
duration_list(A) ::= duration_list(B) NK_COMMA duration_literal(C).               { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
1079

1080
%type rollup_func_list                                                            { SNodeList* }
1081
%destructor rollup_func_list                                                      { nodesDestroyList($$); }
1082
rollup_func_list(A) ::= rollup_func_name(B).                                      { A = createNodeList(pCxt, B); }
1083
rollup_func_list(A) ::= rollup_func_list(B) NK_COMMA rollup_func_name(C).         { A = addNodeToList(pCxt, B, C); }
1084

1085
rollup_func_name(A) ::= function_name(B).                                         { A = createFunctionNode(pCxt, &B, NULL); }
×
1086
rollup_func_name(A) ::= FIRST(B).                                                 { A = createFunctionNode(pCxt, &B, NULL); }
705✔
1087
rollup_func_name(A) ::= LAST(B).                                                  { A = createFunctionNode(pCxt, &B, NULL); }
1088

1089
%type col_name_list                                                               { SNodeList* }
1090
%destructor col_name_list                                                         { nodesDestroyList($$); }
1091
col_name_list(A) ::= col_name(B).                                                 { A = createNodeList(pCxt, B); }
1092
col_name_list(A) ::= col_name_list(B) NK_COMMA col_name(C).                       { A = addNodeToList(pCxt, B, C); }
1093

1094
%type col_name_ex_list                                                            { SNodeList* }
1095
%destructor col_name_ex_list                                                      { nodesDestroyList($$); }
1096
col_name_ex_list(A) ::= col_name(B).                                              { A = createNodeList(pCxt, B); }
1097
col_name_ex_list(A) ::= col_name_with_mask(B).                                    { A = createNodeList(pCxt, B); }
1098
col_name_ex_list(A) ::= col_name_ex_list(B) NK_COMMA col_name(C).                 { A = addNodeToList(pCxt, B, C); }
1099
col_name_ex_list(A) ::= col_name_ex_list(B) NK_COMMA col_name_with_mask(C).       { A = addNodeToList(pCxt, B, C); }
1100

1101
col_name(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
19,370,632✔
1102
col_name(A) ::= TBNAME(B).                                                        { A = createColumnNode(pCxt, NULL, &B); }
36,141,295✔
1103
col_name_with_mask(A) ::= MASK NK_LP column_name(B) NK_RP.                        { A = createColumnNodeExt(pCxt, NULL, &B, 1); }
×
1104

1105
/************************************************ create/drop mount ********************************************/
1106
cmd ::= CREATE MOUNT not_exists_opt(A) mount_name(B) ON DNODE NK_INTEGER(C) FROM NK_STRING(D). { pCxt->pRootNode = createCreateMountStmt(pCxt, A, &B, &C, &D); }
1,221✔
1107
cmd ::= DROP MOUNT exists_opt(A) mount_name(B).                                   { pCxt->pRootNode = createDropMountStmt(pCxt, A, &B); }
444✔
1108

1109
/************************************************ show ****************************************************************/
1110
cmd ::= SHOW DNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
18,641✔
1111
cmd ::= SHOW USERS.                                                               { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
3,178✔
1112
cmd ::= SHOW USERS FULL.                                                          { pCxt->pRootNode = createShowStmtWithFull(pCxt, QUERY_NODE_SHOW_USERS_FULL_STMT); }
×
1113
cmd ::= SHOW USER PRIVILEGES.                                                     { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); }
2,691✔
1114
cmd ::= SHOW ROLES.                                                               { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLES_STMT); }
143✔
1115
cmd ::= SHOW ROLE PRIVILEGES.                                                     { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLE_PRIVILEGES_STMT); }
715✔
1116
cmd ::= SHOW ROLE COLUMN PRIVILEGES.                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLE_COL_PRIVILEGES_STMT); }
×
1117
cmd ::= SHOW db_kind_opt(A) DATABASES.                                            {
1118
                                                                                    pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT);
151,765✔
1119
                                                                                    (void)setShowKind(pCxt, pCxt->pRootNode, A);
151,765✔
1120
                                                                                  }
1121
cmd ::= SHOW table_kind_db_name_cond_opt(A) TABLES like_pattern_opt(B).           {
1122
                                                                                    pCxt->pRootNode = createShowTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
236,348✔
1123
                                                                                  }
1124
cmd ::= SHOW table_kind_db_name_cond_opt(A) VTABLES like_pattern_opt(B).          {
1125
                                                                                    pCxt->pRootNode = createShowVTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
56,024✔
1126
                                                                                  }
1127
cmd ::= SHOW table_kind_db_name_cond_opt(A) STABLES like_pattern_opt(B).          {
1128
                                                                                    pCxt->pRootNode = createShowSTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
199,370✔
1129
                                                                                  }
1130
cmd ::= SHOW db_name_cond_opt(A) VGROUPS.                                         { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, A, NULL, OP_TYPE_LIKE); }
209,133✔
1131
cmd ::= SHOW MNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); }
273,955✔
1132
//cmd ::= SHOW MODULES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MODULES_STMT); }
1133
cmd ::= SHOW QNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); }
1,216✔
1134
cmd ::= SHOW ANODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_STMT); }
152✔
1135
cmd ::= SHOW ANODES FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_FULL_STMT); }
×
1136
cmd ::= SHOW ARBGROUPS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ARBGROUPS_STMT); }
204✔
1137
cmd ::= SHOW FUNCTIONS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); }
10,381✔
1138
cmd ::= SHOW INDEXES FROM table_name_cond(A) from_db_opt(B).                      { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, B, A, OP_TYPE_EQUAL); }
3,344✔
1139
cmd ::= SHOW INDEXES FROM db_name(B) NK_DOT table_name(A).                        { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, createIdentifierValueNode(pCxt, &B), createIdentifierValueNode(pCxt, &A), OP_TYPE_EQUAL); }
608✔
1140
cmd ::= SHOW db_name_cond_opt(A) STREAMS.                                         { pCxt->pRootNode = createShowStreamsStmt(pCxt, A, QUERY_NODE_SHOW_STREAMS_STMT); }
97,700✔
1141
cmd ::= SHOW ACCOUNTS.                                                            { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
152✔
1142
cmd ::= SHOW APPS.                                                                { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); }
1,216✔
1143
cmd ::= SHOW CONNECTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
1,858✔
1144
cmd ::= SHOW LICENCES.                                                            { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
1,934✔
1145
cmd ::= SHOW GRANTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
1146
cmd ::= SHOW GRANTS FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_FULL_STMT); }
1,064✔
1147
cmd ::= SHOW GRANTS LOGS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_LOGS_STMT); }
1,064✔
1148
cmd ::= SHOW INSTANCES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_INSTANCES_STMT, B); }
×
1149
cmd ::= SHOW CLUSTER MACHINES.                                                    { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT); }
1,216✔
1150
cmd ::= SHOW MOUNTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MOUNTS_STMT); }
5,328✔
1151
cmd ::= SHOW CREATE DATABASE db_name(A).                                          { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
91,265✔
1152
cmd ::= SHOW CREATE TABLE full_table_name(A).                                     { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
69,056✔
1153
cmd ::= SHOW CREATE VTABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateVTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_VTABLE_STMT, A); }
2,641✔
1154
cmd ::= SHOW CREATE STABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT,
456✔
1155
A); }
1156
cmd ::= SHOW ENCRYPTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPTIONS_STMT); }
156✔
1157
cmd ::= SHOW ENCRYPT_ALGORITHMS.                                                  { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPT_ALGORITHMS_STMT); }
×
1158
cmd ::= SHOW ENCRYPT_STATUS.                                                      { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPT_STATUS_STMT); }
×
1159
cmd ::= SHOW QUERIES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
1,216✔
1160
cmd ::= SHOW SCORES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
×
1161
cmd ::= SHOW TOPICS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
16,475✔
1162
cmd ::= SHOW VARIABLES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
7,326✔
1163
cmd ::= SHOW CLUSTER VARIABLES like_pattern_opt(B).                               { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
1164
cmd ::= SHOW LOCAL VARIABLES like_pattern_opt(B).                                 { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT, B); }
9,673✔
1165
cmd ::= SHOW DNODE NK_INTEGER(A) VARIABLES like_pattern_opt(B).                   { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), B); }
33,049✔
1166
// cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BACKUP_NODES_STMT); }
1167
cmd ::= SHOW SNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }
53,094✔
1168
cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
51,208✔
1169
cmd ::= SHOW CLUSTER.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); }
1,520✔
1170
cmd ::= SHOW TRANSACTIONS.                                                        { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); }
385,800✔
1171
cmd ::= SHOW TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createShowTransactionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
256✔
1172
cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A).                                { pCxt->pRootNode = createShowTableDistributedStmt(pCxt, A); }
2,860✔
1173
cmd ::= SHOW CONSUMERS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
14,772✔
1174
cmd ::= SHOW SUBSCRIPTIONS.                                                       { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
20,933✔
1175
cmd ::= SHOW TAGS FROM table_name_cond(A) from_db_opt(B).                         { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, B, A, OP_TYPE_EQUAL); }
630,864✔
1176
cmd ::= SHOW TAGS FROM db_name(B) NK_DOT table_name(A).                           { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, createIdentifierValueNode(pCxt, &B), createIdentifierValueNode(pCxt, &A), OP_TYPE_EQUAL); }
912✔
1177
cmd ::= SHOW TABLE TAGS tag_list_opt(C) FROM table_name_cond(A) from_db_opt(B).   { pCxt->pRootNode = createShowTableTagsStmt(pCxt, A, B, C); }
2,888✔
1178
cmd ::= SHOW TABLE TAGS tag_list_opt(C) FROM db_name(B) NK_DOT table_name(A).     { pCxt->pRootNode = createShowTableTagsStmt(pCxt, createIdentifierValueNode(pCxt, &A), createIdentifierValueNode(pCxt, &B), C); }
1,589✔
1179
cmd ::= SHOW VNODES ON DNODE NK_INTEGER(A).                                       { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), NULL); }
1,622✔
1180
cmd ::= SHOW VNODES.                                                              { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, NULL); }
2,185✔
1181
// show alive
1182
cmd ::= SHOW db_name_cond_opt(A) ALIVE.                                           { pCxt->pRootNode = createShowAliveStmt(pCxt, A,    QUERY_NODE_SHOW_DB_ALIVE_STMT); }
1,382✔
1183
cmd ::= SHOW CLUSTER ALIVE.                                                       { pCxt->pRootNode = createShowAliveStmt(pCxt, NULL, QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT); }
3,561✔
1184
cmd ::= SHOW db_name_cond_opt(A) VIEWS like_pattern_opt(B).                       { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VIEWS_STMT, A, B, OP_TYPE_LIKE); }
1,876✔
1185
cmd ::= SHOW CREATE VIEW full_table_name(A).                                      { pCxt->pRootNode = createShowCreateViewStmt(pCxt, QUERY_NODE_SHOW_CREATE_VIEW_STMT, A); }
×
1186
cmd ::= SHOW COMPACTS.                                                            { pCxt->pRootNode = createShowCompactsStmt(pCxt, QUERY_NODE_SHOW_COMPACTS_STMT); }
331,746✔
1187
cmd ::= SHOW COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createShowCompactDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
60,674✔
1188
cmd ::= SHOW db_name_cond_opt(A) DISK_INFO.                                       { pCxt->pRootNode = createShowDiskUsageStmt(pCxt, A,    QUERY_NODE_SHOW_USAGE_STMT); }
278✔
1189
cmd ::= SHOW SCANS.                                                               { pCxt->pRootNode = createShowScansStmt(pCxt, QUERY_NODE_SHOW_SCANS_STMT); }
1,980✔
1190
cmd ::= SHOW SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createShowScanDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
1,760✔
1191
cmd ::= SHOW SSMIGRATES.                                                          { pCxt->pRootNode = createShowSsMigratesStmt(pCxt, QUERY_NODE_SHOW_SSMIGRATES_STMT); }
×
1192
cmd ::= SHOW TOKENS.                                                              { pCxt->pRootNode = createShowTokensStmt(pCxt, QUERY_NODE_SHOW_TOKENS_STMT); }
×
1193

1194
%type table_kind_db_name_cond_opt                                                 { SShowTablesOption }
1195
%destructor table_kind_db_name_cond_opt                                           { }
1196
table_kind_db_name_cond_opt(A) ::= .                                              { A.kind = SHOW_KIND_ALL; A.dbName = nil_token; }
136,056✔
1197
table_kind_db_name_cond_opt(A) ::= table_kind(B).                                 { A.kind = B; A.dbName = nil_token; }
346✔
1198
table_kind_db_name_cond_opt(A) ::= db_name(C) NK_DOT.                             { A.kind = SHOW_KIND_ALL; A.dbName = C; }
320,410✔
1199
table_kind_db_name_cond_opt(A) ::= table_kind(B) db_name(C) NK_DOT.               { A.kind = B; A.dbName = C; }
36,772✔
1200

1201
%type table_kind                                                                  { EShowKind }
1202
%destructor table_kind                                                            { }
1203
table_kind(A) ::= NORMAL.                                                         { A = SHOW_KIND_TABLES_NORMAL; }
18,575✔
1204
table_kind(A) ::= CHILD.                                                          { A = SHOW_KIND_TABLES_CHILD; }
17,953✔
1205
table_kind(A) ::= VIRTUAL.                                                        { A = SHOW_KIND_TABLES_VIRTUAL; }
590✔
1206

1207
db_name_cond_opt(A) ::= .                                                         { A = createDefaultDatabaseCondValue(pCxt); }
718,022✔
1208
db_name_cond_opt(A) ::= db_name(B) NK_DOT.                                        { A = createIdentifierValueNode(pCxt, &B); }
296,046✔
1209

1210
like_pattern_opt(A) ::= .                                                         { A = NULL; }
1211
like_pattern_opt(A) ::= LIKE NK_STRING(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
29,104✔
1212

1213
table_name_cond(A) ::= table_name(B).                                             { A = createIdentifierValueNode(pCxt, &B); }
637,096✔
1214

1215
from_db_opt(A) ::= .                                                              { A = createDefaultDatabaseCondValue(pCxt); }
1216
from_db_opt(A) ::= FROM db_name(B).                                               { A = createIdentifierValueNode(pCxt, &B); }
4,712✔
1217

1218
%type tag_list_opt                                                                { SNodeList* }
1219
%destructor tag_list_opt                                                          { nodesDestroyList($$); }
1220
tag_list_opt(A) ::= .                                                             { A = NULL; }
1221
tag_list_opt(A) ::= tag_item(B).                                                  { A = createNodeList(pCxt, B); }
1222
tag_list_opt(A) ::= tag_list_opt(B) NK_COMMA tag_item(C).                         { A = addNodeToList(pCxt, B, C); }
1223

1224
tag_item(A) ::= TBNAME(B).                                                        { A = setProjectionAlias(pCxt, createFunctionNode(pCxt, &B, NULL), &B); }
1,283✔
1225
tag_item(A) ::= QTAGS(B).                                                         { A = createFunctionNode(pCxt, &B, NULL); }
1226
tag_item(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
1227
tag_item(A) ::= column_name(B) column_alias(C).                                   { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
525✔
1228
tag_item(A) ::= column_name(B) AS column_alias(C).                                { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
×
1229

1230
%type db_kind_opt                                                                 { EShowKind }
1231
%destructor db_kind_opt                                                           { }
1232
db_kind_opt(A) ::= .                                                              { A = SHOW_KIND_ALL; }
151,451✔
1233
db_kind_opt(A) ::= USER.                                                          { A = SHOW_KIND_DATABASES_USER; }
157✔
1234
db_kind_opt(A) ::= SYSTEM.                                                        { A = SHOW_KIND_DATABASES_SYSTEM; }
157✔
1235

1236
/************************************************ rsma ********************************************************/
1237
cmd ::= CREATE RSMA not_exists_opt(B) rsma_name(C)
1238
  ON full_table_name(D) rsma_func_list(E)
1239
  INTERVAL NK_LP signed_duration_list(F) NK_RP.                                   { pCxt->pRootNode = createCreateRsmaStmt(pCxt, B, &C, D, E, F); }
105,045✔
1240
cmd ::= DROP RSMA exists_opt(B) full_rsma_name(C).                                { pCxt->pRootNode = createDropRsmaStmt(pCxt, B, C); }
2,115✔
1241
cmd ::= SHOW CREATE RSMA full_table_name(A).                                      { pCxt->pRootNode = createShowCreateRsmaStmt(pCxt, QUERY_NODE_SHOW_CREATE_RSMA_STMT, A); }
2,115✔
1242
cmd ::= ALTER RSMA exists_opt(B) full_rsma_name(C) rsma_func_list(D).             { pCxt->pRootNode = createAlterRsmaStmt(pCxt, B, C, TSDB_ALTER_RSMA_FUNCTION, D); }
19,035✔
1243
cmd ::= SHOW db_name_cond_opt(B) RSMAS.                                           { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RSMAS_STMT, B, NULL, OP_TYPE_LIKE); }
12,690✔
1244
cmd ::= SHOW db_name_cond_opt(B) RETENTIONS.                                      { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RETENTIONS_STMT, B, NULL, OP_TYPE_LIKE); }
40,185✔
1245
cmd ::= SHOW RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createShowRetentionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
2,115✔
1246
cmd ::= ROLLUP DATABASE db_name(A) start_opt(B) end_opt(C).                       { pCxt->pRootNode = createRollupStmt(pCxt, &A, B, C); }
9,165✔
1247
cmd ::= ROLLUP db_name_cond_opt(A) VGROUPS IN NK_LP integer_list(B) NK_RP start_opt(C) end_opt(D). { pCxt->pRootNode = createRollupVgroupsStmt(pCxt, A, B, C, D); }
4,230✔
1248

1249
full_rsma_name(A) ::= rsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1250
full_rsma_name(A) ::= db_name(B) NK_DOT rsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1251

1252
%type rsma_func_list                                                              { SNodeList* }
1253
%destructor rsma_func_list                                                        { }
1254
rsma_func_list(A) ::= .                                                           { A = NULL; }
1255
rsma_func_list(A) ::= FUNCTION NK_LP NK_RP.                                       { A = NULL; }
×
1256
rsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = B; }
1257
/************************************************ tsma ********************************************************/
1258
cmd ::= CREATE TSMA not_exists_opt(B) tsma_name(C)
1259
  ON full_table_name(E) tsma_func_list(D)
1260
  INTERVAL NK_LP duration_literal(F) NK_RP.                                       { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, D, E, releaseRawExprNode(pCxt, F)); }
768✔
1261
cmd ::= CREATE RECURSIVE TSMA not_exists_opt(B) tsma_name(C)
1262
  ON full_table_name(D) INTERVAL NK_LP duration_literal(E) NK_RP.                 { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, NULL, D, releaseRawExprNode(pCxt, E)); }
×
1263
cmd ::= DROP TSMA exists_opt(B) full_tsma_name(C).                                { pCxt->pRootNode = createDropTSMAStmt(pCxt, B, C); }
×
1264
cmd ::= SHOW db_name_cond_opt(B) TSMAS.                                           { pCxt->pRootNode = createShowTSMASStmt(pCxt, B); }
×
1265

1266
full_tsma_name(A) ::= tsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1267
full_tsma_name(A) ::= db_name(B) NK_DOT tsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1268

1269
%type tsma_func_list                                                              { SNode* }
1270
%destructor tsma_func_list                                                        { nodesDestroyNode($$); }
×
1271
tsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = createTSMAOptions(pCxt, B); }
768✔
1272

1273
/************************************************ create index ********************************************************/
1274
cmd ::= CREATE SMA INDEX not_exists_opt(D)
1275
  col_name(A) ON full_table_name(B) index_options(C).                      { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, D, A, B, NULL, C); }
×
1276
cmd ::= CREATE INDEX not_exists_opt(D)
1277
  col_name(A) ON full_table_name(B) NK_LP col_name_list(C) NK_RP.          { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_NORMAL, D, A, B, C, NULL); }
11,062✔
1278
cmd ::= DROP INDEX exists_opt(B) full_index_name(A).                              { pCxt->pRootNode = createDropIndexStmt(pCxt, B, A); }
3,090✔
1279

1280
full_index_name(A) ::= index_name(B).                                             { A = createRealTableNodeForIndexName(pCxt, NULL, &B); }
2,746✔
1281
full_index_name(A) ::= db_name(B) NK_DOT index_name(C).                           { A = createRealTableNodeForIndexName(pCxt, &B, &C); }
344✔
1282

1283
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
1284
  NK_LP duration_literal(C) NK_RP sliding_opt(D) sma_stream_opt(E).               { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), NULL, D, E); }
×
1285
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
1286
  NK_LP duration_literal(C) NK_COMMA duration_literal(D) NK_RP sliding_opt(E)
1287
  sma_stream_opt(F).                                                              { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), E, F); }
×
1288

1289
%type func_list                                                                   { SNodeList* }
1290
%destructor func_list                                                             { nodesDestroyList($$); }
1291
func_list(A) ::= func(B).                                                         { A = createNodeList(pCxt, B); }
1292
func_list(A) ::= func_list(B) NK_COMMA func(C).                                   { A = addNodeToList(pCxt, B, C); }
1293

1294
func(A) ::= sma_func_name(B) NK_LP expression_list(C) NK_RP.                      { A = createFunctionNode(pCxt, &B, C); }
286,933✔
1295

1296
%type sma_func_name                                                               { SToken }
1297
%destructor sma_func_name                                                         { }
1298
sma_func_name(A) ::= function_name(B).                                            { A = B; }
53,544,483✔
1299
sma_func_name(A) ::= COUNT(B).                                                    { A = B; }
1300
sma_func_name(A) ::= FIRST(B).                                                    { A = B; }
1301
sma_func_name(A) ::= LAST(B).                                                     { A = B; }
1302
sma_func_name(A) ::= LAST_ROW(B).                                                 { A = B; }
1303

1304
sma_stream_opt(A) ::= .                                                           { A = NULL; }
1305

1306
/************************************************ create/drop topic ***************************************************/
1307
%type with_meta                                                                   { int32_t }
1308
%destructor with_meta                                                             { }
1309
with_meta(A) ::= AS.                                                              { A = 0; }
21,404✔
1310
with_meta(A) ::= WITH META AS.                                                    { A = 1; }
11,077✔
1311
with_meta(A) ::= ONLY META AS.                                                    { A = 2; }
553✔
1312

1313
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) AS query_or_subquery(C).     { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, false); }
126,258✔
1314
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(D)
1315
  DATABASE db_name(C).                                                            { pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, A, &B, &C, D); }
22,578✔
1316
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(E)
1317
  STABLE full_table_name(C) where_clause_opt(D).                                  { pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, A, &B, C, E, D); }
10,456✔
1318

1319
cmd ::= RELOAD TOPIC exists_opt(A) topic_name(B) AS query_or_subquery(C).         { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, true); }
×
1320
cmd ::= DROP TOPIC exists_opt(A) force_opt(C) topic_name(B).                             { pCxt->pRootNode = createDropTopicStmt(pCxt, A, &B, C); }
102,969✔
1321
cmd ::= DROP CONSUMER GROUP exists_opt(A) force_opt(D) cgroup_name(B) ON topic_name(C).  { pCxt->pRootNode = createDropCGroupStmt(pCxt, A, &B, &C, D); }
777✔
1322

1323
/************************************************ desc/describe *******************************************************/
1324
cmd ::= DESC full_table_name(A).                                                  { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
464,586✔
1325
cmd ::= DESCRIBE full_table_name(A).                                              { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
1326

1327
/************************************************ reset query cache ***************************************************/
1328
cmd ::= RESET QUERY CACHE.                                                        { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); }
1,909,957✔
1329

1330
/************************************************ explain *************************************************************/
1331
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) query_or_subquery(C).           { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
11,967,639✔
1332
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) insert_query(C).                { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
1333

1334
%type analyze_opt                                                                 { bool }
1335
%destructor analyze_opt                                                           { }
1336
analyze_opt(A) ::= .                                                              { A = false; }
1337
analyze_opt(A) ::= ANALYZE.                                                       { A = true; }
1338

1339
explain_options(A) ::= .                                                          { A = createDefaultExplainOptions(pCxt); }
12,132,360✔
1340
explain_options(A) ::= explain_options(B) VERBOSE NK_BOOL(C).                     { A = setExplainVerbose(pCxt, B, &C); }
4,331,040✔
1341
explain_options(A) ::= explain_options(B) RATIO NK_FLOAT(C).                      { A = setExplainRatio(pCxt, B, &C); }
1,453,500✔
1342

1343
/************************************************ create/drop function ************************************************/
1344
cmd ::= CREATE or_replace_opt(H) agg_func_opt(A) FUNCTION not_exists_opt(F)
1345
  function_name(B) AS NK_STRING(C) OUTPUTTYPE type_name(D) bufsize_opt(E)
1346
  language_opt(G).                                                                { pCxt->pRootNode = createCreateFunctionStmt(pCxt, F, A, &B, &C, D, E, &G, H); }
13,679✔
1347
cmd ::= DROP FUNCTION exists_opt(B) function_name(A).                             { pCxt->pRootNode = createDropFunctionStmt(pCxt, B, &A); }
8,303✔
1348

1349
%type agg_func_opt                                                                { bool }
1350
%destructor agg_func_opt                                                          { }
1351
agg_func_opt(A) ::= .                                                             { A = false; }
1352
agg_func_opt(A) ::= AGGREGATE.                                                    { A = true; }
1353

1354
%type bufsize_opt                                                                 { int32_t }
1355
%destructor bufsize_opt                                                           { }
1356
bufsize_opt(A) ::= .                                                              { A = 0; }
1357
bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B).                                         { A = taosStr2Int32(B.z, NULL, 10); }
1358

1359
%type language_opt                                                                 { SToken }
1360
%destructor language_opt                                                           { }
1361
language_opt(A) ::= .                                                              { A = nil_token; }
12,423✔
1362
language_opt(A) ::= LANGUAGE NK_STRING(B).                                         { A = B; }
3,255✔
1363

1364
%type or_replace_opt                                                               { bool }
1365
%destructor or_replace_opt                                                         { }
1366
or_replace_opt(A) ::= .                                                            { A = false; }
1367
or_replace_opt(A) ::= OR REPLACE.                                                  { A = true; }
1368

1369
/************************************************ create/drop view **************************************************/
1370
cmd ::= CREATE or_replace_opt(A) VIEW full_view_name(B) AS(C) query_or_subquery(D).
1371
                                                                                  { pCxt->pRootNode = createCreateViewStmt(pCxt, A, B, &C, D); }
16,344✔
1372
cmd ::= DROP VIEW exists_opt(A) full_view_name(B).                                { pCxt->pRootNode = createDropViewStmt(pCxt, A, B); }
342✔
1373

1374
full_view_name(A) ::= view_name(B).                                               { A = createViewNode(pCxt, NULL, &B); }
15,998✔
1375
full_view_name(A) ::= db_name(B) NK_DOT view_name(C).                             { A = createViewNode(pCxt, &B, &C); }
1,030✔
1376

1377
/************************************************ create/drop stream **************************************************/
1378
cmd ::= CREATE STREAM not_exists_opt(A) full_stream_name(B) stream_trigger(C)
1379
        stream_outtable_opt(D) as_subquery_opt(E).                                { pCxt->pRootNode = createCreateStreamStmt(pCxt, A, B, C, D, E); }
244,318✔
1380
cmd ::= DROP STREAM exists_opt(A) stream_name_list(B).                            { pCxt->pRootNode = createDropStreamStmt(pCxt, A, B); }
7,671✔
1381
cmd ::= STOP STREAM exists_opt(A) full_stream_name(B).                            { pCxt->pRootNode = createPauseStreamStmt(pCxt, A, B); }
1,888✔
1382
cmd ::= START STREAM exists_opt(A) ignore_opt(C) full_stream_name(B).             { pCxt->pRootNode = createResumeStreamStmt(pCxt, A, C, B); }
1,888✔
1383
cmd ::= RECALCULATE STREAM full_stream_name(A) recalculate_range(B).              { pCxt->pRootNode = createRecalcStreamStmt(pCxt, A, B); }
10,008✔
1384

1385
/* recalculate_range(A) ::= ALL.                                                     { A = createRecalcRange(pCxt, NULL, NULL); } */
1386
recalculate_range(A) ::= FROM time_point(B).                                      { A = createRecalcRange(pCxt, B, NULL); }
8,290✔
1387
recalculate_range(A) ::= FROM time_point(B) TO time_point(C).                     { A = createRecalcRange(pCxt, B, C); }
1,718✔
1388

1389
full_stream_name(A) ::= stream_name(B).                                           { A = createStreamNode(pCxt, NULL, &B); }
91,219✔
1390
full_stream_name(A) ::= db_name(B) NK_DOT stream_name(C).                         { A = createStreamNode(pCxt, &B, &C); }
186,775✔
1391

1392
%type stream_name_list                                                            { SNodeList* }
1393
%destructor stream_name_list                                                      { nodesDestroyList($$); }
1394
stream_name_list(A) ::= full_stream_name(B).                                      { A = createNodeList(pCxt, B); }
1395
stream_name_list(A) ::= stream_name_list(B) NK_COMMA full_stream_name(C).         { A = addNodeToList(pCxt, B, C); }
1396

1397
/********** stream_outtable **********/
1398
stream_outtable_opt(A) ::= .                                                                                                { A = NULL; }
1399
stream_outtable_opt(A) ::= INTO full_table_name(B) output_subtable_opt(C) column_name_opt(D) stream_tags_def_opt(E).        { A = createStreamOutTableNode(pCxt, B, C, D, E); }
246,364✔
1400

1401
/********** stream_trigger **********/
1402
stream_trigger(A) ::= trigger_type(B) trigger_table_opt(C) stream_partition_by_opt(D)
1403
                      trigger_options_opt(E) notification_opt(F).                                                           { A = createStreamTriggerNode(pCxt, B, C, D, E, F); }
250,530✔
1404

1405
/***** trigger type *****/
1406

1407
trigger_type(A) ::= SESSION NK_LP column_reference(B) NK_COMMA interval_sliding_duration_literal(C) NK_RP.                  { A = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
7,367,453✔
1408
trigger_type(A) ::= STATE_WINDOW NK_LP expr_or_subquery(B) state_window_opt(C) NK_RP true_for_opt(D).                       { A = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, B), C, D); }
2,841,521✔
1409
trigger_type(A) ::= interval_opt(B) SLIDING NK_LP sliding_expr(C) NK_RP.                                                    { A = createIntervalWindowNodeExt(pCxt, B, C); }
98,311✔
1410
trigger_type(A) ::= EVENT_WINDOW NK_LP START WITH search_condition(B) END WITH search_condition(C) NK_RP true_for_opt(D).   { A = createEventWindowNode(pCxt, B, C, D); }
27,802✔
1411
trigger_type(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.                                                          { A = createCountWindowNodeFromArgs(pCxt, B); }
2,458,008✔
1412
trigger_type(A) ::= PERIOD NK_LP interval_sliding_duration_literal(B) offset_opt(C) NK_RP.                                  { A = createPeriodWindowNode(pCxt, releaseRawExprNode(pCxt, B), C); }
15,152✔
1413
trigger_type(A) ::= EVENT_WINDOW NK_LP START WITH NK_LP search_condition_list(B) NK_RP
1414
                    END WITH search_condition(C) NK_RP true_for_opt(D).                                                     { A = createEventWindowNode(pCxt, createNodeListNode(pCxt, B), C, D); }
1,696✔
1415
trigger_type(A) ::= EVENT_WINDOW NK_LP START WITH NK_LP search_condition_list(B) NK_RP NK_RP true_for_opt(D).               { A = createEventWindowNode(pCxt, createNodeListNode(pCxt, B), NULL, D); }
1,696✔
1416

1417
%type search_condition_list                                                                                                 { SNodeList* }
1418
%destructor search_condition_list                                                                                           { nodesDestroyList($$); }
1419
search_condition_list(A) ::= search_condition(B) NK_COMMA search_condition(C).                                              { A = addNodeToList(pCxt, createNodeList(pCxt, B), C); }
3,392✔
1420
search_condition_list(A) ::= search_condition_list(B) NK_COMMA search_condition(C).                                         { A = addNodeToList(pCxt, B, C); }
1421

1422
interval_opt(A) ::= .                                                                                                       { A = NULL; }
1423
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C) NK_RP.                                              { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), NULL, NULL, NULL); }
75,211✔
1424
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C)
1425
                    NK_COMMA interval_sliding_duration_literal(D) NK_RP.                                                    { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), NULL, NULL); }
2,983✔
1426

1427
sliding_expr(A) ::= interval_sliding_duration_literal(B).                                                                   { A = createSlidingWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
94,042✔
1428
sliding_expr(A) ::= interval_sliding_duration_literal(B) NK_COMMA interval_sliding_duration_literal(C).                     { A = createSlidingWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
4,269✔
1429

1430
%type sliding_val_opt                                                             { SToken }
1431
%destructor sliding_val_opt                                                       { }
1432

1433
offset_opt(A) ::= .                                                               { A = NULL; }
1434
offset_opt(A) ::= NK_COMMA interval_sliding_duration_literal(B).                  { A = releaseRawExprNode(pCxt, B); }
17,056,957✔
1435

1436
/***** trigger_table_opt *****/
1437

1438
trigger_table_opt(A) ::= .                                                 { A = NULL; }
1439
trigger_table_opt(A) ::= FROM full_table_name(B).                          { A = B; }
1440

1441
/***** stream_partition_by_opt *****/
1442

1443
%type stream_partition_by_opt                                                                 { SNodeList* }
1444
%destructor stream_partition_by_opt                                                           { nodesDestroyList($$); }
1445
stream_partition_by_opt(A) ::= .                                                              { A = NULL; }
1446
stream_partition_by_opt(A) ::= PARTITION BY stream_partition_list(B).                         { A = B; }
159,537,697✔
1447

1448
%type stream_partition_list                                                                   { SNodeList* }
1449
%destructor stream_partition_list                                                             { nodesDestroyList($$); }
1450
stream_partition_list(A) ::= stream_partition_item(B).                                        { A = createNodeList(pCxt, B); }
1451
stream_partition_list(A) ::= stream_partition_list(B) NK_COMMA stream_partition_item(C).      { A = addNodeToList(pCxt, B, C); }
1452

1453
stream_partition_item(A) ::= expr_or_subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
684,288,957✔
1454
stream_partition_item(A) ::= expr_or_subquery(B) column_alias(C).                             { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
15,309,408✔
1455

1456
/***** trigger_options_opt *****/
1457

1458
trigger_options_opt(A) ::= .                                                              { A = NULL; }
1459
trigger_options_opt(A) ::= STREAM_OPTIONS NK_LP trigger_option_list(B) NK_RP.             { A = B; }
101,556✔
1460

1461
trigger_option_list(A) ::= trigger_option(B).                                       { A = createStreamTriggerOptions(pCxt);  A = setStreamTriggerOptions(pCxt, A, &B);  }
101,968✔
1462
trigger_option_list(A) ::= trigger_option_list(B) NK_BITOR trigger_option(C).       { A = setStreamTriggerOptions(pCxt, B, &C); }
27,257✔
1463

1464
%type trigger_option                                                               { SStreamTriggerOption }
1465
%destructor trigger_option                                                         { }
1466
trigger_option(A) ::= CALC_NOTIFY_ONLY.                                            { A.type = STREAM_TRIGGER_OPTION_CALC_NOTIFY_ONLY; A.pNode = NULL; }
1,594✔
1467
trigger_option(A) ::= DELETE_RECALC.                                               { A.type = STREAM_TRIGGER_OPTION_DELETE_RECALC; A.pNode = NULL; }
8,551✔
1468
trigger_option(A) ::= DELETE_OUTPUT_TABLE.                                         { A.type = STREAM_TRIGGER_OPTION_DELETE_OUTPUT_TABLE; A.pNode = NULL; }
228✔
1469
trigger_option(A) ::= EXPIRED_TIME NK_LP duration_literal(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_EXPIRED_TIME; A.pNode = releaseRawExprNode(pCxt, B); }
5,572✔
1470
trigger_option(A) ::= FILL_HISTORY NK_LP time_point(B) NK_RP.                      { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = B; }
15,552✔
1471
trigger_option(A) ::= FILL_HISTORY_FIRST NK_LP time_point(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = B; }
1,798✔
1472
trigger_option(A) ::= FILL_HISTORY.                                                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = NULL; }
16,647✔
1473
trigger_option(A) ::= FILL_HISTORY_FIRST.                                          { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = NULL; }
824✔
1474
trigger_option(A) ::= FORCE_OUTPUT.                                                { A.type = STREAM_TRIGGER_OPTION_FORCE_OUTPUT; A.pNode = NULL; }
3,617✔
1475
trigger_option(A) ::= IGNORE_DISORDER.                                             { A.type = STREAM_TRIGGER_OPTION_IGNORE_DISORDER; A.pNode = NULL; }
17,120✔
1476
trigger_option(A) ::= LOW_LATENCY_CALC.                                            { A.type = STREAM_TRIGGER_OPTION_LOW_LATENCY_CALC; A.pNode = NULL; }
5,909✔
1477
trigger_option(A) ::= MAX_DELAY NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_MAX_DELAY; A.pNode = releaseRawExprNode(pCxt, B); }
5,751✔
1478
trigger_option(A) ::= PRE_FILTER NK_LP search_condition(B) NK_RP.                  { A.type = STREAM_TRIGGER_OPTION_PRE_FILTER; A.pNode = B; }
15,664✔
1479
trigger_option(A) ::= WATERMARK NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_WATERMARK; A.pNode = releaseRawExprNode(pCxt, B); }
7,680✔
1480
trigger_option(A) ::= EVENT_TYPE NK_LP event_type_list(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_EVENT_TYPE; A.flag = B; A.pNode = NULL; }
5,258✔
1481
trigger_option(A) ::= IGNORE_NODATA_TRIGGER.                                       { A.type = STREAM_TRIGGER_OPTION_IGNORE_NODATA_TRIGGER; A.pNode = NULL; }
17,460✔
1482

1483
/***** notification_opt *****/
1484
notification_opt(A) ::= .                                                         { A = NULL; }
1485
notification_opt(A) ::= NOTIFY NK_LP notify_url_list(B) NK_RP
1486
                        notify_on_opt(C) where_clause_opt(D)
1487
                        notify_options_opt(E).                                    { A = createStreamNotifyOptions(pCxt, B, C, D, E); }
57,536✔
1488

1489
%type notify_url_list                                                             { SNodeList* }
1490
%destructor notify_url_list                                                       { nodesDestroyList($$); }
1491
notify_url_list(A) ::= NK_STRING(B).                                              { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
57,653✔
UNCOV
1492
notify_url_list(A) ::= notify_url_list(B) NK_COMMA NK_STRING(C).                  { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)); }
×
1493

1494
%type notify_on_opt                                                               { int64_t }
1495
%destructor notify_on_opt                                                         { }
1496
notify_on_opt(A) ::= .                                                            { A = EVENT_NONE; }
1,062✔
1497
notify_on_opt(A) ::= ON NK_LP event_type_list(B) NK_RP.                           { A = B; }
58,439✔
1498

1499
%type notify_options_opt                                                          { int64_t }
1500
%destructor notify_options_opt                                                    { }
1501
notify_options_opt(A) ::= .                                                       { A = NOTIFY_NONE; }
55,571✔
1502
notify_options_opt(A) ::= NOTIFY_OPTIONS NK_LP notify_options_list(B) NK_RP.      { A = B; }
1503

1504
%type notify_options_list                                                         { int64_t }
1505
%destructor notify_options_list                                                   { }
1506
notify_options_list(A) ::= notify_option(B).                                      { A = B; }
1,965✔
1507
notify_options_list(A) ::= notify_options_list(B) NK_BITOR notify_option(C).     { A = B | C; }
50,482✔
1508

1509
%type notify_option                                                               { int64_t }
1510
%destructor notify_option                                                         { }
1511
notify_option(A) ::= NOTIFY_HISTORY.                                              { A = NOTIFY_HISTORY; }
1,965✔
1512

1513
/***** common part *****/
1514

1515
time_point(A) ::= NK_INTEGER(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
8,420✔
1516
time_point(A) ::= NK_STRING(B).                                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
919,236✔
1517

1518
%type column_name_list                                                            { SNodeList* }
1519
%destructor column_name_list                                                      { nodesDestroyList($$); }
1520
column_name_list(A) ::= trigger_col_name(B).                                      { A = createNodeList(pCxt, B); }
1521
column_name_list(A) ::= column_name_list(B) NK_COMMA trigger_col_name(C).         { A = addNodeToList(pCxt, B, C); }
1522

1523
trigger_col_name(A) ::= column_name(B).                                           { A = createColumnNode(pCxt, NULL, &B); }
1524
trigger_col_name(A) ::= TBNAME(B).                                                { A = createFunctionNode(pCxt, &B, NULL); }
1525

1526
%type event_type_list                                                             { int64_t }
1527
%destructor event_type_list                                                       { }
1528
event_type_list(A) ::= event_types(B).                                            { A = B;}
61,810✔
1529
event_type_list(A) ::= event_type_list(B) NK_BITOR event_types(C).                { A = B | C; }
1530

1531
%type event_types                                                                 { int64_t }
1532
%destructor event_types                                                           { }
1533
event_types(A) ::= WINDOW_OPEN.                                                   { A = EVENT_WINDOW_OPEN; }
56,205✔
1534
event_types(A) ::= WINDOW_CLOSE.                                                  { A = EVENT_WINDOW_CLOSE; }
56,087✔
1535

1536
/********** output_subtable_opt **********/
1537
output_subtable_opt(A) ::= .                                                      { A = NULL; }
1538
output_subtable_opt(A) ::= OUTPUT_SUBTABLE NK_LP expr_or_subquery(B) NK_RP.       { A = releaseRawExprNode(pCxt, B); }
1,709,012✔
1539

1540
%type column_name_opt                                                             { SNodeList* }
1541
%destructor column_name_opt                                                       { nodesDestroyList($$); }
1542
column_name_opt(A) ::= .                                                          { A = NULL; }
1543
column_name_opt(A) ::= column_name_unit(B).                                       { A = B; }
1544

1545
%type stream_tags_def_opt                                                            { SNodeList* }
1546
%destructor stream_tags_def_opt                                                      { nodesDestroyList($$); }
1547
stream_tags_def_opt(A) ::= .                                                         { A = NULL; }
1548
stream_tags_def_opt(A) ::= TAGS NK_LP stream_tags_def_list(B) NK_RP.                 { A = B; }
1549

1550
%type stream_tags_def_list                                                             { SNodeList* }
1551
%destructor stream_tags_def_list                                                       { nodesDestroyList($$); }
1552
stream_tags_def_list(A) ::= stream_tags_def(B).                                        { A = createNodeList(pCxt, B); }
1553
stream_tags_def_list(A) ::= stream_tags_def_list(B) NK_COMMA stream_tags_def(C).       { A = addNodeToList(pCxt, B, C); }
1554

1555
stream_tags_def(A) ::= column_name(B) type_name(C) AS expression(D).                   { A = createStreamTagDefNode(pCxt, &B, C, releaseRawExprNode(pCxt, D)); }
26,484✔
1556

1557
%type column_name_unit                                                                 { SNodeList* }
1558
%destructor column_name_unit                                                           { nodesDestroyList($$); }
1559
column_name_unit(A) ::= NK_LP column_stream_def_list(B) NK_RP.                         { A = B; }
1560

1561
%type column_stream_def_list                                                      { SNodeList* }
1562
%destructor column_stream_def_list                                                { nodesDestroyList($$); }
1563
column_stream_def_list(A) ::= column_stream_def(B).                               { A = createNodeList(pCxt, B); }
1564
column_stream_def_list(A) ::= column_stream_def_list(B)
1565
 NK_COMMA column_stream_def(C).                                                   { A = addNodeToList(pCxt, B, C); }
1566

1567
column_stream_def(A) ::= column_name(B) stream_col_options(C).                    { A = createColumnDefNode(pCxt, &B, createDataType(TSDB_DATA_TYPE_NULL), C); }
234,662✔
1568

1569
stream_col_options(A) ::= .                                                       { A = createDefaultColumnOptions(pCxt); }
359,823,171✔
1570
stream_col_options(A) ::= stream_col_options(B) PRIMARY KEY.                      { A = setColumnOptionsPK(pCxt, B); }
221,440✔
1571
stream_col_options(A) ::= stream_col_options(B) COMPOSITE KEY.                    { A = setColumnOptionsPK(pCxt, B); }
1572
//column_stream_def(A) ::= column_def(B).                                         { A = B; }
1573

1574
as_subquery_opt(A) ::= .                                                          { A = NULL; }
1575
as_subquery_opt(A) ::= AS query_or_subquery(B).                                   { A = B; }
1576

1577
%type ignore_opt                                                                  { bool }
1578
%destructor ignore_opt                                                            { }
1579
ignore_opt(A) ::= .                                                               { A = false; }
1580
ignore_opt(A) ::= IGNORE UNTREATED.                                               { A = true; }
1581

1582

1583
/************************************************ kill connection/query ***********************************************/
1584
cmd ::= KILL CONNECTION NK_INTEGER(A).                                            { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &A); }
152✔
1585
cmd ::= KILL QUERY NK_STRING(A).                                                  { pCxt->pRootNode = createKillQueryStmt(pCxt, &A); }
42✔
1586
cmd ::= KILL TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &A); }
252✔
1587
cmd ::= KILL COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_COMPACT_STMT, &A); }
2,754✔
UNCOV
1588
cmd ::= KILL RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_RETENTION_STMT, &A); }
×
1589
cmd ::= KILL SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SCAN_STMT, &A); }
88✔
UNCOV
1590
cmd ::= KILL SSMIGRATE NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SSMIGRATE_STMT, &A); }
×
1591

1592
/************************************************ merge/redistribute/ vgroup ******************************************/
1593
cmd ::= BALANCE VGROUP.                                                           { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); }
11,039✔
1594

1595
cmd ::= ASSIGN LEADER FORCE.                                                      { pCxt->pRootNode = createAssignLeaderStmt(pCxt); }
17✔
1596

1597
cmd ::= BALANCE VGROUP LEADER on_vgroup_id(A).                                    { pCxt->pRootNode = createBalanceVgroupLeaderStmt(pCxt, &A); }
1,999✔
1598
cmd ::= BALANCE VGROUP LEADER DATABASE db_name(A).                                { pCxt->pRootNode = createBalanceVgroupLeaderDBNameStmt(pCxt, &A); }
96✔
1599
cmd ::= ALTER VGROUP NK_INTEGER(A) SET KEEP NK_INTEGER(B).                { pCxt->pRootNode = createSetVgroupKeepVersionStmt(pCxt, &A, &B); }
1,046✔
UNCOV
1600
cmd ::= MERGE VGROUP NK_INTEGER(A) NK_INTEGER(B).                                 { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &A, &B); }
×
1601
cmd ::= REDISTRIBUTE VGROUP NK_INTEGER(A) dnode_list(B).                          { pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &A, B); }
42,907✔
1602
cmd ::= SPLIT VGROUP NK_INTEGER(A) force_opt(B).                                  { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &A, B); }
16,738✔
1603

1604
%type on_vgroup_id                                                                { SToken }
1605
%destructor on_vgroup_id                                                          { }
1606
on_vgroup_id(A) ::= .                                                             { A = nil_token; }
1607
on_vgroup_id(A) ::= ON NK_INTEGER(B).                                             { A = B; }
1608

1609
%type dnode_list                                                                  { SNodeList* }
1610
%destructor dnode_list                                                            { nodesDestroyList($$); }
1611
dnode_list(A) ::= DNODE NK_INTEGER(B).                                            { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
42,907✔
1612
dnode_list(A) ::= dnode_list(B) DNODE NK_INTEGER(C).                              { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
1613

1614
/************************************************ syncdb **************************************************************/
1615
//cmd ::= SYNCDB db_name(A) REPLICA.                                                { pCxt->pRootNode = createSyncdbStmt(pCxt, &A); }
1616

1617
/************************************************ syncdb **************************************************************/
1618
cmd ::= DELETE FROM full_table_name(A) where_clause_opt(B).                       { pCxt->pRootNode = createDeleteStmt(pCxt, A, B); }
1,646,195✔
1619

1620
/************************************************ select **************************************************************/
1621
cmd ::= query_or_subquery(A).                                                     { pCxt->pRootNode = A; }
1622

1623
/************************************************ insert **************************************************************/
1624
cmd ::= insert_query(A).                                                          { pCxt->pRootNode = A; }
1625

1626
insert_query(A) ::= INSERT INTO full_table_name(D)
1627
  NK_LP col_name_list(B) NK_RP query_or_subquery(C).                              { A = createInsertStmt(pCxt, D, B, C); }
22,590✔
1628
insert_query(A) ::= INSERT INTO full_table_name(C) query_or_subquery(B).          { A = createInsertStmt(pCxt, C, NULL, B); }
64,336✔
1629

1630
/************************************************ tags_literal *************************************************************/
1631
tags_literal(A) ::= NK_INTEGER(B).                                                { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
54,350,047✔
1632
tags_literal(A) ::= NK_INTEGER(B) NK_PLUS duration_literal(C).                    {
1633
                                                                                    SToken l = B;
19,629✔
1634
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
19,629✔
1635
                                                                                    l.n = (r.z + r.n) - l.z;
19,629✔
1636
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
19,629✔
1637
                                                                                  }
1638
tags_literal(A) ::= NK_INTEGER(B) NK_MINUS duration_literal(C).                   {
1639
                                                                                    SToken l = B;
1640
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1641
                                                                                    l.n = (r.z + r.n) - l.z;
1642
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1643
                                                                                  }
1644
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER(C).                                     {
1645
                                                                                    SToken t = B;
351,103✔
1646
                                                                                    t.n = (C.z + C.n) - B.z;
351,103✔
1647
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
351,145✔
1648
                                                                                  }
1649
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_PLUS duration_literal(C).            {
1650
                                                                                    SToken l = B;
5,089✔
1651
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
5,089✔
1652
                                                                                    l.n = (r.z + r.n) - l.z;
5,089✔
1653
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
5,089✔
1654
                                                                                  }
1655
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_MINUS duration_literal(C).           {
1656
                                                                                    SToken l = B;
1657
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1658
                                                                                    l.n = (r.z + r.n) - l.z;
1659
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1660
                                                                                  }
1661
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER(C).                                    {
1662
                                                                                    SToken t = B;
1663
                                                                                    t.n = (C.z + C.n) - B.z;
1664
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1665
                                                                                  }
1666
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_PLUS duration_literal(C).           {
1667
                                                                                    SToken l = B;
1668
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1669
                                                                                    l.n = (r.z + r.n) - l.z;
1670
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1671
                                                                                  }
1672
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_MINUS duration_literal(C).          {
1673
                                                                                    SToken l = B;
1674
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1675
                                                                                    l.n = (r.z + r.n) - l.z;
1676
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1677
                                                                                  }
1678
tags_literal(A) ::= NK_FLOAT(B).                                                  { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B, NULL); }
401,203✔
1679
tags_literal(A) ::= NK_PLUS(B) NK_FLOAT(C).                                       {
1680
                                                                                    SToken t = B;
79,695✔
1681
                                                                                    t.n = (C.z + C.n) - B.z;
79,695✔
1682
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
79,695✔
1683
                                                                                  }
1684
tags_literal(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1685
                                                                                    SToken t = B;
1686
                                                                                    t.n = (C.z + C.n) - B.z;
1687
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
1688
                                                                                  }
1689

1690
tags_literal(A) ::= NK_BIN(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1691
tags_literal(A) ::= NK_BIN(B) NK_PLUS duration_literal(C).                        {
1692
                                                                                    SToken l = B;
1693
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1694
                                                                                    l.n = (r.z + r.n) - l.z;
1695
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1696
                                                                                  }
1697
tags_literal(A) ::= NK_BIN(B) NK_MINUS duration_literal(C).                       {
1698
                                                                                    SToken l = B;
1699
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1700
                                                                                    l.n = (r.z + r.n) - l.z;
1701
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1702
                                                                                  }
1703
tags_literal(A) ::= NK_PLUS(B) NK_BIN(C).                                         {
1704
                                                                                    SToken t = B;
1705
                                                                                    t.n = (C.z + C.n) - B.z;
1706
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1707
                                                                                  }
1708
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_PLUS duration_literal(C).                {
1709
                                                                                    SToken l = B;
1710
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1711
                                                                                    l.n = (r.z + r.n) - l.z;
1712
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1713
                                                                                  }
1714
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_MINUS duration_literal(C).               {
1715
                                                                                    SToken l = B;
1716
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1717
                                                                                    l.n = (r.z + r.n) - l.z;
1718
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1719
                                                                                  }
1720
tags_literal(A) ::= NK_MINUS(B) NK_BIN(C).                                        {
1721
                                                                                    SToken t = B;
1722
                                                                                    t.n = (C.z + C.n) - B.z;
1723
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1724
                                                                                  }
1725
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_PLUS duration_literal(C).               {
1726
                                                                                    SToken l = B;
1727
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1728
                                                                                    l.n = (r.z + r.n) - l.z;
1729
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1730
                                                                                  }
1731
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_MINUS duration_literal(C).              {
1732
                                                                                    SToken l = B;
1733
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1734
                                                                                    l.n = (r.z + r.n) - l.z;
1735
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1736
                                                                                  }
1737
tags_literal(A) ::= NK_HEX(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1738
tags_literal(A) ::= NK_HEX(B) NK_PLUS duration_literal(C).                        {
1739
                                                                                    SToken l = B;
1740
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1741
                                                                                    l.n = (r.z + r.n) - l.z;
1742
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1743
                                                                                  }
1744
tags_literal(A) ::= NK_HEX(B) NK_MINUS duration_literal(C).                       {
1745
                                                                                    SToken l = B;
1746
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1747
                                                                                    l.n = (r.z + r.n) - l.z;
1748
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1749
                                                                                  }
1750
tags_literal(A) ::= NK_PLUS(B) NK_HEX(C).                                         {
1751
                                                                                    SToken t = B;
1752
                                                                                    t.n = (C.z + C.n) - B.z;
1753
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1754
                                                                                  }
1755
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_PLUS duration_literal(C).                {
1756
                                                                                    SToken l = B;
1757
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1758
                                                                                    l.n = (r.z + r.n) - l.z;
1759
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1760
                                                                                  }
1761
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_MINUS duration_literal(C).               {
1762
                                                                                    SToken l = B;
1763
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1764
                                                                                    l.n = (r.z + r.n) - l.z;
1765
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1766
                                                                                  }
1767
tags_literal(A) ::= NK_MINUS(B) NK_HEX(C).                                        {
1768
                                                                                    SToken t = B;
1769
                                                                                    t.n = (C.z + C.n) - B.z;
1770
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1771
                                                                                  }
1772
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_PLUS duration_literal(C).               {
1773
                                                                                    SToken l = B;
1774
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1775
                                                                                    l.n = (r.z + r.n) - l.z;
1776
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1777
                                                                                  }
1778
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_MINUS duration_literal(C).              {
1779
                                                                                    SToken l = B;
1780
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1781
                                                                                    l.n = (r.z + r.n) - l.z;
1782
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1783
                                                                                  }
1784

1785
tags_literal(A) ::= NK_STRING(B).                                                 { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B, NULL); }
59,012,103✔
1786
tags_literal(A) ::= NK_STRING(B) NK_PLUS duration_literal(C).                     {
1787
                                                                                    SToken l = B;
1788
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1789
                                                                                    l.n = (r.z + r.n) - l.z;
1790
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1791
                                                                                  }
1792
tags_literal(A) ::= NK_STRING(B) NK_MINUS duration_literal(C).                    {
1793
                                                                                    SToken l = B;
1794
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1795
                                                                                    l.n = (r.z + r.n) - l.z;
1796
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1797
                                                                                  }
1798
tags_literal(A) ::= NK_BOOL(B).                                                   { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B, NULL); }
1,605,314✔
1799
tags_literal(A) ::= NULL(B).                                                      { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B, NULL); }
202,387✔
1800

1801
tags_literal(A) ::= literal_func(B).                                              { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, NULL, B); }
162,173✔
1802
tags_literal(A) ::= literal_func(B) NK_PLUS duration_literal(C).                  {
1803
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
21,557✔
1804
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
21,557✔
1805
                                                                                    l.n = (r.z + r.n) - l.z;
21,557✔
1806
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
21,557✔
1807
                                                                                  }
1808
tags_literal(A) ::= literal_func(B) NK_MINUS duration_literal(C).                 {
1809
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
1810
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1811
                                                                                    l.n = (r.z + r.n) - l.z;
1812
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
1813
                                                                                  }
1814

1815
%type tags_literal_list                                                           { SNodeList* }
1816
%destructor tags_literal_list                                                     { nodesDestroyList($$); }
1817
tags_literal_list(A) ::= tags_literal(B).                                         { A = createNodeList(pCxt, B); }
1818
tags_literal_list(A) ::= tags_literal_list(B) NK_COMMA tags_literal(C).           { A = addNodeToList(pCxt, B, C); }
1819

1820
/************************************************ literal *************************************************************/
1821
literal(A) ::= NK_INTEGER(B).                                                     { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B)); }
209,341,537✔
1822
literal(A) ::= NK_FLOAT(B).                                                       { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B)); }
23,812,038✔
1823
literal(A) ::= NK_STRING(B).                                                      { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
42,693,789✔
1824
literal(A) ::= NK_BOOL(B).                                                        { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B)); }
3,181,811✔
1825
literal(A) ::= TIMESTAMP(B) NK_STRING(C).                                         { A = createRawExprNodeExt(pCxt, &B, &C, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &C)); }
1,364✔
1826
literal(A) ::= duration_literal(B).                                               { A = B; }
2,147,483,647✔
1827
literal(A) ::= NULL(B).                                                           { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B)); }
7,995,271✔
1828
literal(A) ::= NK_QUESTION(B).                                                    { A = createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B)); }
9,332✔
1829

1830
duration_literal(A) ::= NK_VARIABLE(B).                                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
47,948,360✔
1831

1832
signed_variable(A) ::= NK_VARIABLE(B).                                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
UNCOV
1833
signed_variable(A) ::= NK_PLUS NK_VARIABLE(B).                                    { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
×
1834
signed_variable(A) ::= NK_MINUS(B) NK_VARIABLE(C).                                { 
1835
                                                                                    SToken t = B;
53,720✔
1836
                                                                                    t.n = (C.z + C.n) - B.z;
53,720✔
1837
                                                                                    A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &t)); 
53,720✔
1838
                                                                                  }
1839

1840
signed_integer(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
4,833,723✔
UNCOV
1841
signed_integer(A) ::= NK_PLUS NK_INTEGER(B).                                      { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
×
1842
signed_integer(A) ::= NK_MINUS(B) NK_INTEGER(C).                                  {
1843
                                                                                    SToken t = B;
142,392✔
1844
                                                                                    t.n = (C.z + C.n) - B.z;
142,392✔
1845
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t);
142,392✔
1846
                                                                                  }
1847

1848

1849
unsigned_integer(A) ::= NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
29,084,496✔
UNCOV
1850
unsigned_integer(A) ::= NK_QUESTION(B).                                           { A = releaseRawExprNode(pCxt, createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B))); }
×
1851

1852
signed_float(A) ::= NK_FLOAT(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
94,320✔
UNCOV
1853
signed_float(A) ::= NK_PLUS NK_FLOAT(B).                                          { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
×
1854
signed_float(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1855
                                                                                    SToken t = B;
44,706✔
1856
                                                                                    t.n = (C.z + C.n) - B.z;
44,706✔
1857
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t);
44,706✔
1858
                                                                                  }
1859

1860
signed(A) ::= signed_integer(B).                                                  { A = B; }
1861
signed(A) ::= signed_float(B).                                                    { A = B; }
1862

1863
signed_literal(A) ::= signed(B).                                                  { A = B; }
1864
signed_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1865
signed_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
3,075,408✔
UNCOV
1866
signed_literal(A) ::= TIMESTAMP NK_STRING(B).                                     { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
×
1867
signed_literal(A) ::= duration_literal(B).                                        { A = releaseRawExprNode(pCxt, B); }
1868
signed_literal(A) ::= NULL(B).                                                    { A = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B); }
9,045✔
1869
signed_literal(A) ::= literal_func(B).                                            { A = releaseRawExprNode(pCxt, B); }
UNCOV
1870
signed_literal(A) ::= NK_QUESTION(B).                                             { A = createPlaceholderValueNode(pCxt, &B); }
×
1871

1872

1873
%type literal_list                                                                { SNodeList* }
1874
%destructor literal_list                                                          { nodesDestroyList($$); }
1875
literal_list(A) ::= signed_literal(B).                                            { A = createNodeList(pCxt, B); }
1876
literal_list(A) ::= literal_list(B) NK_COMMA signed_literal(C).                   { A = addNodeToList(pCxt, B, C); }
1877

1878
/************************************************ names and identifiers ***********************************************/
1879
%type db_name                                                                     { SToken }
1880
%destructor db_name                                                               { }
1881
db_name(A) ::= NK_ID(B).                                                          { A = B; }
1882

1883
%type mount_name                                                                  { SToken }
1884
%destructor mount_name                                                            { }
1885
mount_name(A) ::= NK_ID(B).                                                       { A = B; }
1886

1887
%type table_name                                                                  { SToken }
1888
%destructor table_name                                                            { }
1889
table_name(A) ::= NK_ID(B).                                                       { A = B; }
1890

1891
%type column_name                                                                 { SToken }
1892
%destructor column_name                                                           { }
1893
column_name(A) ::= NK_ID(B).                                                      { A = B; }
1894

1895
%type function_name                                                               { SToken }
1896
%destructor function_name                                                         { }
1897
function_name(A) ::= NK_ID(B).                                                    { A = B; }
1898

1899
%type view_name                                                                   { SToken }
1900
%destructor view_name                                                             { }
1901
view_name(A) ::= NK_ID(B).                                                        { A = B; }
1902

1903
%type table_alias                                                                 { SToken }
1904
%destructor table_alias                                                           { }
1905
table_alias(A) ::= NK_ID(B).                                                      { A = B; }
1906

1907
%type column_alias                                                                { SToken }
1908
%destructor column_alias                                                          { }
1909
column_alias(A) ::= NK_ID(B).                                                     { A = B; }
1910
column_alias(A) ::= NK_ALIAS(B).                                                  { A = B; }
1911

1912
%type user_name                                                                   { SToken }
1913
%destructor user_name                                                             { }
1914
user_name(A) ::= NK_ID(B).                                                        { A = B; }
1915

1916
%type role_name                                                                   { SToken }
1917
%destructor role_name                                                             { }
1918
role_name(A) ::= NK_ID(B).                                                        { A = B; }
1919

1920
%type general_name                                                                { SToken }
1921
%destructor general_name                                                          { }
UNCOV
1922
general_name(A) ::= NK_ID(B).                                                     { A = B;}
×
1923

1924
%type topic_name                                                                  { SToken }
1925
%destructor topic_name                                                            { }
1926
topic_name(A) ::= NK_ID(B).                                                       { A = B; }
1927

1928
%type stream_name                                                                 { SToken }
1929
%destructor stream_name                                                           { }
1930
stream_name(A) ::= NK_ID(B).                                                      { A = B; }
1931

1932
%type cgroup_name                                                                 { SToken }
1933
%destructor cgroup_name                                                           { }
1934
cgroup_name(A) ::= NK_ID(B).                                                      { A = B; }
1935

1936
%type index_name                                                                  { SToken }
1937
%destructor index_name                                                            { }
1938
index_name(A) ::= NK_ID(B).                                                       { A = B; }
1939

1940
%type tsma_name                                                                   { SToken }
1941
%destructor tsma_name                                                             { }
1942
tsma_name(A) ::= NK_ID(B).                                                        { A = B; }
1943

1944
%type rsma_name                                                                   { SToken }
1945
%destructor rsma_name                                                             { }
1946
rsma_name(A) ::= NK_ID(B).                                                        { A = B; }
1947

1948
/************************************************ expression **********************************************************/
1949
expr_or_subquery(A) ::= expression(B).                                            { A = B; }
1950
expr_or_subquery(A) ::= subquery(B).                                              { A = B; }
1951

1952
expression(A) ::= literal(B).                                                     { A = B; }
1953
expression(A) ::= pseudo_column(B).                                               { A = B; (void)setRawExprNodeIsPseudoColumn(pCxt, A, true); }
69,443,177✔
1954
expression(A) ::= column_reference(B).                                            { A = B; }
1955
expression(A) ::= function_expression(B).                                         { A = B; }
1956
expression(A) ::= if_expression(B).                                               { A = B; }
1957
expression(A) ::= case_when_expression(B).                                        { A = B; }
1958
expression(A) ::= NK_LP(B) expression(C) NK_RP(D).                                { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
24,356,026✔
1959
expression(A) ::= NK_PLUS(B) expr_or_subquery(C).                                 {
UNCOV
1960
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
×
UNCOV
1961
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, releaseRawExprNode(pCxt, C));
×
1962
                                                                                  }
1963
expression(A) ::= NK_MINUS(B) expr_or_subquery(C).                                {
1964
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
23,983,648✔
1965
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, C), NULL));
23,983,648✔
1966
                                                                                  }
1967
expression(A) ::= expr_or_subquery(B) NK_PLUS expr_or_subquery(C).                {
1968
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
85,992,954✔
1969
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
85,992,954✔
1970
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
85,992,954✔
1971
                                                                                  }
1972
expression(A) ::= expr_or_subquery(B) NK_MINUS expr_or_subquery(C).               {
1973
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
6,342,428✔
1974
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
6,342,428✔
1975
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
6,342,428✔
1976
                                                                                  }
1977
expression(A) ::= expr_or_subquery(B) NK_STAR expr_or_subquery(C).                {
1978
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
6,457,266✔
1979
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
6,457,266✔
1980
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
6,457,266✔
1981
                                                                                  }
1982
expression(A) ::= expr_or_subquery(B) NK_SLASH expr_or_subquery(C).               {
1983
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
7,741,958✔
1984
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
7,741,958✔
1985
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
7,741,958✔
1986
                                                                                  }
1987
expression(A) ::= expr_or_subquery(B) NK_REM expr_or_subquery(C).                 {
1988
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
234,370✔
1989
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
234,370✔
1990
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
234,370✔
1991
                                                                                  }
1992
expression(A) ::= column_reference(B) NK_ARROW NK_STRING(C).                      {
1993
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
164,773✔
1994
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, B), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)));
164,773✔
1995
                                                                                  }
1996
expression(A) ::= expr_or_subquery(B) NK_BITAND expr_or_subquery(C).              {
1997
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
98,428✔
1998
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
98,428✔
1999
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
98,428✔
2000
                                                                                  }
2001
expression(A) ::= expr_or_subquery(B) NK_BITOR expr_or_subquery(C).               {
2002
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
19,270✔
2003
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
19,270✔
2004
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
19,270✔
2005
                                                                                  }
2006

2007
%type expression_list                                                             { SNodeList* }
2008
%destructor expression_list                                                       { nodesDestroyList($$); }
2009
expression_list(A) ::= expr_or_subquery(B).                                       { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
2010
expression_list(A) ::= expression_list(B) NK_COMMA expr_or_subquery(C).           { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
2011

2012
column_reference(A) ::= column_name(B).                                           { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
631,357,697✔
2013
column_reference(A) ::= table_name(B) NK_DOT column_name(C).                      { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
184,396,176✔
2014
column_reference(A) ::= NK_ALIAS(B).                                              { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
8,925✔
2015
column_reference(A) ::= table_name(B) NK_DOT NK_ALIAS(C).                         { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
2,625✔
2016

2017
pseudo_column(A) ::= ROWTS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
76,000,211✔
2018
pseudo_column(A) ::= TBNAME(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2019
pseudo_column(A) ::= table_name(B) NK_DOT TBNAME(C).                              { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &C, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)))); }
986,689✔
2020
pseudo_column(A) ::= QSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2021
pseudo_column(A) ::= QEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2022
pseudo_column(A) ::= QDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2023
pseudo_column(A) ::= WSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2024
pseudo_column(A) ::= WEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2025
pseudo_column(A) ::= WDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2026
pseudo_column(A) ::= IROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2027
pseudo_column(A) ::= ISFILLED(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2028
pseudo_column(A) ::= QTAGS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2029
pseudo_column(A) ::= FLOW(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2030
pseudo_column(A) ::= FHIGH(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2031
pseudo_column(A) ::= FROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2032
pseudo_column(A) ::= IROWTS_ORIGIN(B).                                            { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2033
pseudo_column(A) ::= TPREV_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2034
pseudo_column(A) ::= TCURRENT_TS(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2035
pseudo_column(A) ::= TNEXT_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2036
pseudo_column(A) ::= TWSTART(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2037
pseudo_column(A) ::= TWEND(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2038
pseudo_column(A) ::= TWDURATION(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2039
pseudo_column(A) ::= TWROWNUM(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2040
pseudo_column(A) ::= TPREV_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2041
pseudo_column(A) ::= TNEXT_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2042
pseudo_column(A) ::= TLOCALTIME(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2043
pseudo_column(A) ::= TGRPID(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2044
pseudo_column(A) ::= NK_PH NK_INTEGER(B).                                         { A = createRawExprNode(pCxt, &B, createPlaceHolderColumnNode(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B))); }
34,843✔
2045
pseudo_column(A) ::= NK_PH TBNAME(B).                                             { A = createRawExprNode(pCxt, &B, createPHTbnameFunctionNode(pCxt, &B, NULL)); }
31,843✔
2046
pseudo_column(A) ::= IMPROWTS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2047
pseudo_column(A) ::= IMPMARK(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2048
pseudo_column(A) ::= ANOMALYMARK(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2049

2050
function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D).                        { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
262,585,988✔
2051
function_expression(A) ::= star_func(B) NK_LP star_func_para_list(C) NK_RP(D).                        { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2052
function_expression(A) ::= cols_func(B) NK_LP cols_func_para_list(C) NK_RP(D).                        { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2053
function_expression(A) ::=
2054
  CAST(B) NK_LP common_expression(C) AS type_name(D) NK_RP(E).                                         { A = createRawExprNodeExt(pCxt, &B, &E, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, C), D)); }
89,391,721✔
2055
function_expression(A) ::=
2056
  CAST(B) NK_LP common_expression(C) AS type_name_default_len(D) NK_RP(E).                             { A = createRawExprNodeExt(pCxt, &B, &E, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, C), D)); }
2057
function_expression(A) ::=
2058
  POSITION(B) NK_LP expr_or_subquery(C) IN expr_or_subquery(D) NK_RP(E).                              { A = createRawExprNodeExt(pCxt, &B, &E, createPositionFunctionNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D))); }
105,036✔
2059
function_expression(A) ::=
2060
  TRIM(B) NK_LP expr_or_subquery(C) NK_RP(D).                                                         { A = createRawExprNodeExt(pCxt, &B, &D, createTrimFunctionNode(pCxt, releaseRawExprNode(pCxt, C), TRIM_TYPE_BOTH)); }
17,284✔
2061
function_expression(A) ::=
2062
  TRIM(B) NK_LP trim_specification_type(C) FROM expr_or_subquery(D) NK_RP(E).                         { A = createRawExprNodeExt(pCxt, &B, &E, createTrimFunctionNode(pCxt, releaseRawExprNode(pCxt, D), C)); }
2,754✔
2063
function_expression(A) ::=
2064
  TRIM(B) NK_LP expr_or_subquery(C) FROM expr_or_subquery(D) NK_RP(E).                                { A = createRawExprNodeExt(pCxt, &B, &E, createTrimFunctionNodeExt(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), TRIM_TYPE_BOTH)); }
16,524✔
2065
function_expression(A) ::=
2066
  TRIM(B) NK_LP trim_specification_type(C) expr_or_subquery(D) FROM expr_or_subquery(E) NK_RP(F).     { A = createRawExprNodeExt(pCxt, &B, &F, createTrimFunctionNodeExt(pCxt, releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E), C)); }
40,392✔
2067
function_expression(A) ::=
2068
  substr_func(B) NK_LP expression_list(C) NK_RP(D).                                                   { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2069
function_expression(A) ::=
2070
  substr_func(B) NK_LP expr_or_subquery(C) FROM expr_or_subquery(D) NK_RP(E).                         { A = createRawExprNodeExt(pCxt, &B, &E, createSubstrFunctionNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D))); }
10,064✔
2071
function_expression(A) ::=
2072
  substr_func(B) NK_LP expr_or_subquery(C) FROM expr_or_subquery(D) FOR expr_or_subquery(E) NK_RP(F). { A = createRawExprNodeExt(pCxt, &B, &F, createSubstrFunctionNodeExt(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E))); }
21,972✔
2073
function_expression(A) ::= REPLACE(B) NK_LP expression_list(C) NK_RP(D).                              { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
73,814✔
2074
function_expression(A) ::= literal_func(B).                                                           { A = B; }
2075
function_expression(A) ::= rand_func(B).                                                              { A = B; }
2076

2077
literal_func(A) ::= noarg_func(B) NK_LP NK_RP(C).                                 { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
13,713,674✔
2078
literal_func(A) ::= NOW(B).                                                       { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2079
literal_func(A) ::= TODAY(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2080

2081
rand_func(A) ::= RAND(B) NK_LP NK_RP(C).                                          { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
6,963✔
2082
rand_func(A) ::= RAND(B) NK_LP expression_list(C) NK_RP(D).                       { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2083

2084
%type substr_func                                                                   { SToken }
2085
%destructor substr_func                                                             { }
2086
substr_func(A) ::= SUBSTR(B).                                                       { A = B; }
2087
substr_func(A) ::= SUBSTRING(B).                                                    { A = B; }
2088

2089
%type trim_specification_type ETrimType
2090
%destructor trim_specification_type                                                { }
2091
trim_specification_type(A) ::= BOTH.                                               { A = TRIM_TYPE_BOTH; }
13,770✔
2092
trim_specification_type(A) ::= TRAILING.                                           { A = TRIM_TYPE_TRAILING; }
14,688✔
2093
trim_specification_type(A) ::= LEADING.                                            { A = TRIM_TYPE_LEADING; }
14,688✔
2094

2095
%type noarg_func                                                                  { SToken }
2096
%destructor noarg_func                                                            { }
2097
noarg_func(A) ::= NOW(B).                                                         { A = B; }
2098
noarg_func(A) ::= TODAY(B).                                                       { A = B; }
2099
noarg_func(A) ::= TIMEZONE(B).                                                    { A = B; }
2100
noarg_func(A) ::= DATABASE(B).                                                    { A = B; }
2101
noarg_func(A) ::= CLIENT_VERSION(B).                                              { A = B; }
2102
noarg_func(A) ::= SERVER_VERSION(B).                                              { A = B; }
2103
noarg_func(A) ::= SERVER_STATUS(B).                                               { A = B; }
2104
noarg_func(A) ::= CURRENT_USER(B).                                                { A = B; }
2105
noarg_func(A) ::= USER(B).                                                        { A = B; }
2106
noarg_func(A) ::= PI(B).                                                          { A = B; }
2107

2108
%type star_func                                                                   { SToken }
2109
%destructor star_func                                                             { }
2110
star_func(A) ::= COUNT(B).                                                        { A = B; }
2111
star_func(A) ::= FIRST(B).                                                        { A = B; }
2112
star_func(A) ::= LAST(B).                                                         { A = B; }
2113
star_func(A) ::= LAST_ROW(B).                                                     { A = B; }
2114

2115
%type cols_func                                                                   { SToken }
2116
%destructor cols_func                                                             { }
2117
cols_func(A) ::= COLS(B).                                                         { A = B; }
2118

2119
%type cols_func_para_list                                                         { SNodeList* }
2120
%destructor cols_func_para_list                                                   { nodesDestroyList($$); }
2121
cols_func_para_list(A) ::= function_expression(B) NK_COMMA cols_func_expression_list(C).    { A = createColsFuncParamNodeList(pCxt, B, C, NULL); }
971,790✔
2122

2123
cols_func_expression(A) ::= expr_or_subquery(B).                                            { A = releaseRawExprNode(pCxt, B); }
2124
cols_func_expression(A) ::= NK_STAR(B).                                                     { A = createColumnNode(pCxt, NULL, &B); }
2125
cols_func_expression(A) ::= expr_or_subquery(B) column_alias(C).                            { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
62,497✔
2126
cols_func_expression(A) ::= expr_or_subquery(B) AS column_alias(C).                         { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
137,931✔
2127

2128
%type cols_func_expression_list                                                             { SNodeList* }
2129
%destructor cols_func_expression_list                                                       { nodesDestroyList($$); }
2130
cols_func_expression_list(A) ::= cols_func_expression(B).                                   { A = createNodeList(pCxt, B); }
2131
cols_func_expression_list(A) ::= cols_func_expression_list(B) NK_COMMA cols_func_expression(C).   { A = addNodeToList(pCxt, B, C); }
2132

2133
%type star_func_para_list                                                         { SNodeList* }
2134
%destructor star_func_para_list                                                   { nodesDestroyList($$); }
2135
star_func_para_list(A) ::= NK_STAR(B).                                            { A = createNodeList(pCxt, createColumnNode(pCxt, NULL, &B)); }
27,178,638✔
2136
star_func_para_list(A) ::= other_para_list(B).                                    { A = B; }
2137

2138
%type other_para_list                                                             { SNodeList* }
2139
%destructor other_para_list                                                       { nodesDestroyList($$); }
2140
other_para_list(A) ::= star_func_para(B).                                         { A = createNodeList(pCxt, B); }
2141
other_para_list(A) ::= other_para_list(B) NK_COMMA star_func_para(C).             { A = addNodeToList(pCxt, B, C); }
2142

2143
star_func_para(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
2144
star_func_para(A) ::= table_name(B) NK_DOT NK_STAR(C).                            { A = createColumnNode(pCxt, &B, &C); }
5,031,681✔
2145

2146
if_expression(A) ::=
2147
  IF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_COMMA common_expression(E) NK_RP(F).    { A = createRawExprNodeExt(pCxt, &B, &F, createIfNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E))); }
61,332✔
2148
if_expression(A) ::=
2149
  IFNULL(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).    { A = createRawExprNodeExt(pCxt, &B, &E, createNvlNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D))); }
8,568✔
2150
if_expression(A) ::=
2151
  NVL(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).       { A = createRawExprNodeExt(pCxt, &B, &E, createNvlNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D))); }
2152
if_expression(A) ::=
2153
  NVL2(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_COMMA common_expression(E) NK_RP(F).  { A = createRawExprNodeExt(pCxt, &B, &F, createNvl2Node(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E))); }
2,564✔
2154
if_expression(A) ::=
2155
  //NULLIF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).    { A = createRawExprNodeExt(pCxt, &B, &E, createNullIfNode(pCxt, C, D)); }
2156
  NULLIF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).    { A = createRawExprNodeExt(pCxt, &B, &E, createNullIfNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D))); }
2,564✔
2157
if_expression(A) ::=
2158
  COALESCE(B) NK_LP expression_list(C) NK_RP(E).                                  { A = createRawExprNodeExt(pCxt, &B, &E, createCoalesceNode(pCxt, C)); }
1,720✔
2159

2160
case_when_expression(A) ::=
2161
  CASE(E) when_then_list(C) case_when_else_opt(D) END(F).                         { A = createRawExprNodeExt(pCxt, &E, &F, createCaseWhenNode(pCxt, NULL, C, D)); }
14,903,788✔
2162
case_when_expression(A) ::=
2163
  CASE(E) common_expression(B) when_then_list(C) case_when_else_opt(D) END(F).    { A = createRawExprNodeExt(pCxt, &E, &F, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, B), C, D)); }
2,443,433✔
2164

2165
%type when_then_list                                                              { SNodeList* }
2166
%destructor when_then_list                                                        { nodesDestroyList($$); }
2167
when_then_list(A) ::= when_then_expr(B).                                          { A = createNodeList(pCxt, B); }
2168
when_then_list(A) ::= when_then_list(B) when_then_expr(C).                        { A = addNodeToList(pCxt, B, C); }
2169

2170
when_then_expr(A) ::= WHEN common_expression(B) THEN common_expression(C).        { A = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
17,629,033✔
2171

2172
case_when_else_opt(A) ::= .                                                       { A = NULL; }
2173
case_when_else_opt(A) ::= ELSE common_expression(B).                              { A = releaseRawExprNode(pCxt, B); }
2174

2175
/************************************************ predicate ***********************************************************/
2176
predicate(A) ::= expr_or_subquery(B) compare_op(C) expr_or_subquery(D).           {
2177
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
150,847,467✔
2178
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
150,846,993✔
2179
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
150,847,467✔
2180
                                                                                  }
2181
//predicate(A) ::= expression(B) compare_op sub_type expression(B).
2182
predicate(A) ::=
2183
  expr_or_subquery(B) BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).        {
2184
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
14,184,732✔
2185
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
14,183,149✔
2186
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
14,186,063✔
2187
                                                                                  }
2188
predicate(A) ::=
2189
  expr_or_subquery(B) NOT BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).    {
2190
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
3,170,031✔
2191
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
3,170,031✔
2192
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
3,170,031✔
2193
                                                                                  }
2194
predicate(A) ::= expr_or_subquery(B) IS NULL(C).                                  {
2195
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
8,361,273✔
2196
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, B), NULL));
8,361,273✔
2197
                                                                                  }
2198
predicate(A) ::= expr_or_subquery(B) IS NOT NULL(C).                              {
2199
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
21,176,598✔
2200
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, B), NULL));
21,176,598✔
2201
                                                                                  }
2202
predicate(A) ::= ISNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                    {
UNCOV
2203
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, C), NULL));
×
2204
                                                                                  }
2205
predicate(A) ::= ISNOTNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                 {
UNCOV
2206
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, C), NULL));
×
2207
                                                                                  }
2208
predicate(A) ::= expr_or_subquery(B) in_op(C) in_predicate_value(D).              {
2209
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
2210
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
2211
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
2212
                                                                                  }
2213

2214
%type compare_op                                                                  { EOperatorType }
2215
%destructor compare_op                                                            { }
2216
compare_op(A) ::= NK_LT.                                                          { A = OP_TYPE_LOWER_THAN; }
7,105,574✔
2217
compare_op(A) ::= NK_GT.                                                          { A = OP_TYPE_GREATER_THAN; }
30,293,504✔
2218
compare_op(A) ::= NK_LE.                                                          { A = OP_TYPE_LOWER_EQUAL; }
12,412,135✔
2219
compare_op(A) ::= NK_GE.                                                          { A = OP_TYPE_GREATER_EQUAL; }
11,440,649✔
2220
compare_op(A) ::= NK_NE.                                                          { A = OP_TYPE_NOT_EQUAL; }
5,635,105✔
2221
compare_op(A) ::= NK_EQ.                                                          { A = OP_TYPE_EQUAL; }
69,127,944✔
2222
compare_op(A) ::= LIKE.                                                           { A = OP_TYPE_LIKE; }
4,935,984✔
2223
compare_op(A) ::= NOT LIKE.                                                       { A = OP_TYPE_NOT_LIKE; }
32,408✔
2224
compare_op(A) ::= MATCH.                                                          { A = OP_TYPE_MATCH; }
3,935,981✔
2225
compare_op(A) ::= NMATCH.                                                         { A = OP_TYPE_NMATCH; }
1,664,816✔
2226
compare_op(A) ::= REGEXP.                                                         { A = OP_TYPE_MATCH; }
2227
compare_op(A) ::= NOT REGEXP.                                                     { A = OP_TYPE_NMATCH; }
2,680✔
2228
compare_op(A) ::= CONTAINS.                                                       { A = OP_TYPE_JSON_CONTAINS; }
7,370✔
2229

2230
%type in_op                                                                       { EOperatorType }
2231
%destructor in_op                                                                 { }
2232
in_op(A) ::= IN.                                                                  { A = OP_TYPE_IN; }
5,987,298✔
2233
in_op(A) ::= NOT IN.                                                              { A = OP_TYPE_NOT_IN; }
2,231,759✔
2234

2235
in_predicate_value(A) ::= NK_LP(C) literal_list(B) NK_RP(D).                      { A = createRawExprNodeExt(pCxt, &C, &D, createNodeListNode(pCxt, B)); }
4,291,249✔
2236

2237
/************************************************ boolean_value_expression ********************************************/
2238
boolean_value_expression(A) ::= boolean_primary(B).                               { A = B; }
2239
boolean_value_expression(A) ::= NOT(C) boolean_primary(B).                        {
2240
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, B);
137,934✔
2241
                                                                                    A = createRawExprNodeExt(pCxt, &C, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, B), NULL));
137,934✔
2242
                                                                                  }
2243
boolean_value_expression(A) ::=
2244
  boolean_value_expression(B) OR boolean_value_expression(C).                     {
2245
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
17,282,646✔
2246
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
17,282,646✔
2247
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
17,282,646✔
2248
                                                                                  }
2249
boolean_value_expression(A) ::=
2250
  boolean_value_expression(B) AND boolean_value_expression(C).                    {
2251
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
39,610,358✔
2252
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
39,610,358✔
2253
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
39,610,358✔
2254
                                                                                  }
2255

2256
boolean_primary(A) ::= predicate(B).                                              { A = B; }
2257
boolean_primary(A) ::= NK_LP(C) boolean_value_expression(B) NK_RP(D).             { A = createRawExprNodeExt(pCxt, &C, &D, releaseRawExprNode(pCxt, B)); }
2258

2259
/************************************************ common_expression ********************************************/
2260
common_expression(A) ::= expr_or_subquery(B).                                     { A = B; }
2261
common_expression(A) ::= boolean_value_expression(B).                             { A = B; }
2262

2263
/************************************************ from_clause_opt *********************************************************/
2264
from_clause_opt(A) ::= .                                                          { A = NULL; }
2265
from_clause_opt(A) ::= FROM table_reference_list(B).                              { A = B; }
2266

2267
table_reference_list(A) ::= table_reference(B).                                   { A = B; }
2268
table_reference_list(A) ::= table_reference_list(B) NK_COMMA table_reference(C).  { A = createJoinTableNode(pCxt, JOIN_TYPE_INNER, JOIN_STYPE_NONE, B, C, NULL); }
7,083,217✔
2269

2270
/************************************************ table_reference *****************************************************/
2271
table_reference(A) ::= table_primary(B).                                          { A = B; }
2272
table_reference(A) ::= joined_table(B).                                           { A = B; }
2273

2274
table_primary(A) ::= table_name(B) alias_opt(C).                                  { A = createRealTableNode(pCxt, NULL, &B, &C); }
297,020,559✔
2275
table_primary(A) ::= db_name(B) NK_DOT table_name(C) alias_opt(D).                { A = createRealTableNode(pCxt, &B, &C, &D); }
76,825,278✔
2276
table_primary(A) ::= subquery(B) alias_opt(C).                                    { A = createTempTableNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
28,055,545✔
2277
table_primary(A) ::= parenthesized_joined_table(B).                               { A = B; }
2278
table_primary(A) ::= NK_PH TBNAME alias_opt(C).                                   { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_TBNAME, &C); }
10,984✔
2279
table_primary(A) ::= NK_PH TROWS alias_opt(C).                                    { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_ROWS, &C); }
99,833✔
2280

2281
%type alias_opt                                                                   { SToken }
2282
%destructor alias_opt                                                             { }
2283
alias_opt(A) ::= .                                                                { A = nil_token;  }
346,132,823✔
2284
alias_opt(A) ::= table_alias(B).                                                  { A = B; }
2285
alias_opt(A) ::= AS table_alias(B).                                               { A = B; }
2,532,808✔
2286

2287
parenthesized_joined_table(A) ::= NK_LP joined_table(B) NK_RP.                    { A = B; }
662✔
2288
parenthesized_joined_table(A) ::= NK_LP parenthesized_joined_table(B) NK_RP.      { A = B; }
2289

2290
/************************************************ joined_table ********************************************************/
2291
joined_table(A) ::= inner_joined(B).                                              { A = B; }
2292
joined_table(A) ::= outer_joined(B).                                              { A = B; }
2293
joined_table(A) ::= semi_joined(B).                                               { A = B; }
2294
joined_table(A) ::= anti_joined(B).                                               { A = B; }
2295
joined_table(A) ::= asof_joined(B).                                               { A = B; }
2296
joined_table(A) ::= win_joined(B).                                                { A = B; }
2297

2298
/************************************************ inner join **********************************************************/
2299
inner_joined(A) ::=
2300
  table_reference(B) JOIN table_reference(E) join_on_clause_opt(F).               { JOINED_TABLE_MK(JOIN_TYPE_INNER, JOIN_STYPE_NONE, A, B, E, F, NULL, NULL); }
10,268,332✔
2301

2302
inner_joined(A) ::=
2303
  table_reference(B) INNER JOIN table_reference(E) join_on_clause_opt(F).         { JOINED_TABLE_MK(JOIN_TYPE_INNER, JOIN_STYPE_NONE, A, B, E, F, NULL, NULL); }
5,071,188✔
2304

2305
/************************************************ outer join **********************************************************/
2306
outer_joined(A) ::=
2307
  table_reference(B) LEFT JOIN table_reference(E) join_on_clause(F).              { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
4,887,358✔
2308

2309
outer_joined(A) ::=
2310
  table_reference(B) RIGHT JOIN table_reference(E) join_on_clause(F).             { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
138,106✔
2311

2312
outer_joined(A) ::=
2313
  table_reference(B) FULL JOIN table_reference(E) join_on_clause(F).              { JOINED_TABLE_MK(JOIN_TYPE_FULL, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
152,510✔
2314

2315
outer_joined(A) ::=
2316
  table_reference(B) LEFT OUTER JOIN table_reference(E) join_on_clause(F).        { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
342✔
2317

2318
outer_joined(A) ::=
2319
  table_reference(B) RIGHT OUTER JOIN table_reference(E) join_on_clause(F).       { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
342✔
2320

2321
outer_joined(A) ::=
2322
  table_reference(B) FULL OUTER JOIN table_reference(E) join_on_clause(F).        { JOINED_TABLE_MK(JOIN_TYPE_FULL, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
342✔
2323

2324
/************************************************ semi join ***********************************************************/
2325
semi_joined(A) ::=
2326
  table_reference(B) LEFT SEMI JOIN table_reference(E) join_on_clause(F).         { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_SEMI, A, B, E, F, NULL, NULL); }
191,546✔
2327

2328
semi_joined(A) ::=
2329
  table_reference(B) RIGHT SEMI JOIN table_reference(E) join_on_clause(F).        { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_SEMI, A, B, E, F, NULL, NULL); }
147,136✔
2330

2331
/************************************************ ansi join ***********************************************************/
2332
anti_joined(A) ::=
2333
  table_reference(B) LEFT ANTI JOIN table_reference(E) join_on_clause(F).         { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_ANTI, A, B, E, F, NULL, NULL); }
191,524✔
2334

2335
anti_joined(A) ::=
2336
  table_reference(B) RIGHT ANTI JOIN table_reference(E) join_on_clause(F).        { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ANTI, A, B, E, F, NULL, NULL); }
128,646✔
2337

2338
/************************************************ asof join ***********************************************************/
2339
asof_joined(A) ::=
2340
  table_reference(B) LEFT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2341
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
267,758✔
2342

2343
asof_joined(A) ::=
2344
  table_reference(B) RIGHT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2345
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
183,610✔
2346

2347
/************************************************ window join *********************************************************/
2348
win_joined(A) ::=
2349
  table_reference(B) LEFT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2350
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
299,780✔
2351

2352
win_joined(A) ::=
2353
  table_reference(B) RIGHT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2354
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
220,476✔
2355

2356
join_on_clause_opt(A) ::= . [ON]                                                  { A = NULL; }
2357
join_on_clause_opt(A) ::= join_on_clause(B).                                      { A = B; }
2358

2359
join_on_clause(A) ::= ON search_condition(B).                                     { A = B; }
2360

2361
window_offset_clause(A) ::= WINDOW_OFFSET NK_LP window_offset_literal(B)
2362
  NK_COMMA window_offset_literal(C) NK_RP.                                        { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
531,312✔
2363

2364
window_offset_literal(A) ::= NK_VARIABLE(B).                                      { A = createRawExprNode(pCxt, &B, createTimeOffsetValueNode(pCxt, &B)); }
554,110✔
2365
window_offset_literal(A) ::= NK_MINUS(B) NK_VARIABLE(C).                          {
2366
                                                                                    SToken t = B;
513,810✔
2367
                                                                                    t.n = (C.z + C.n) - B.z;
513,810✔
2368
                                                                                    A = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t));
513,810✔
2369
                                                                                  }
2370

2371
jlimit_clause_opt(A) ::= . [JLIMIT]                                               { A = NULL; }
2372
jlimit_clause_opt(A) ::= JLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
16,616,510✔
2373

2374
/************************************************ query_specification *************************************************/
2375
query_specification(A) ::=
2376
  SELECT hint_list(M) set_quantifier_opt(B) tag_mode_opt(N) select_list(C) from_clause_opt(D)
2377
  where_clause_opt(E) partition_by_clause_opt(F) range_opt(J) every_opt(K)
2378
  interp_fill_opt(L) twindow_clause_opt(G) group_by_clause_opt(H) having_clause_opt(I).  {
2379
                                                                                    A = createSelectStmt(pCxt, B, C, D, M);
380,092,206✔
2380
                                                                                    A = setSelectStmtTagMode(pCxt, A, N);
380,089,010✔
2381
                                                                                    A = addWhereClause(pCxt, A, E);
380,086,591✔
2382
                                                                                    A = addPartitionByClause(pCxt, A, F);
380,085,553✔
2383
                                                                                    A = addWindowClauseClause(pCxt, A, G);
380,086,561✔
2384
                                                                                    A = addGroupByClause(pCxt, A, H);
380,083,487✔
2385
                                                                                    A = addHavingClause(pCxt, A, I);
380,086,674✔
2386
                                                                                    A = addRangeClause(pCxt, A, J);
380,088,750✔
2387
                                                                                    A = addEveryClause(pCxt, A, K);
380,089,308✔
2388
                                                                                    A = addFillClause(pCxt, A, L);
380,086,631✔
2389
                                                                                  }
2390

2391
%type hint_list                                                                   { SNodeList* }
2392
%destructor hint_list                                                             { nodesDestroyList($$); }
2393
hint_list(A) ::= .                                                                { A = createHintNodeList(pCxt, NULL); }
379,990,268✔
2394
hint_list(A) ::= NK_HINT(B).                                                      { A = createHintNodeList(pCxt, &B); }
7,559,516✔
2395

2396
%type tag_mode_opt                                                                { bool }
2397
%destructor tag_mode_opt                                                          { }
2398
tag_mode_opt(A) ::= .                                                             { A = false; }
2399
tag_mode_opt(A) ::= TAGS.                                                         { A = true; }
2400

2401
%type set_quantifier_opt                                                          { bool }
2402
%destructor set_quantifier_opt                                                    { }
2403
set_quantifier_opt(A) ::= .                                                       { A = false; }
2404
set_quantifier_opt(A) ::= DISTINCT.                                               { A = true; }
UNCOV
2405
set_quantifier_opt(A) ::= ALL.                                                    { A = false; }
×
2406

2407
%type select_list                                                                 { SNodeList* }
2408
%destructor select_list                                                           { nodesDestroyList($$); }
2409
select_list(A) ::= select_item(B).                                                { A = createNodeList(pCxt, B); }
2410
select_list(A) ::= select_list(B) NK_COMMA select_item(C).                        { A = addNodeToList(pCxt, B, C); }
2411

2412
select_item(A) ::= NK_STAR(B).                                                    { A = createColumnNode(pCxt, NULL, &B); }
2413
select_item(A) ::= common_expression(B).                                          { A = releaseRawExprNode(pCxt, B); }
2414
select_item(A) ::= common_expression(B) column_alias(C).                          { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2415
select_item(A) ::= common_expression(B) AS column_alias(C).                       { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
61,460,079✔
2416
select_item(A) ::= table_name(B) NK_DOT NK_STAR(C).                               { A = createColumnNode(pCxt, &B, &C); }
2417

2418
where_clause_opt(A) ::= .                                                         { A = NULL; }
2419
where_clause_opt(A) ::= WHERE search_condition(B).                                { A = B; }
2420

2421
%type partition_by_clause_opt                                                     { SNodeList* }
2422
%destructor partition_by_clause_opt                                               { nodesDestroyList($$); }
2423
partition_by_clause_opt(A) ::= .                                                  { A = NULL; }
2424
partition_by_clause_opt(A) ::= PARTITION BY partition_list(B).                    { A = B; }
2425

2426
%type partition_list                                                              { SNodeList* }
2427
%destructor partition_list                                                        { nodesDestroyList($$); }
2428
partition_list(A) ::= partition_item(B).                                          { A = createNodeList(pCxt, B); }
2429
partition_list(A) ::= partition_list(B) NK_COMMA partition_item(C).               { A = addNodeToList(pCxt, B, C); }
2430

2431
partition_item(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
2432
partition_item(A) ::= expr_or_subquery(B) column_alias(C).                        { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2433
partition_item(A) ::= expr_or_subquery(B) AS column_alias(C).                     { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2434

2435
twindow_clause_opt(A) ::= .                                                       { A = NULL; }
2436
twindow_clause_opt(A) ::= SESSION NK_LP column_reference(B) NK_COMMA
2437
  interval_sliding_duration_literal(C) NK_RP.                                     { A = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
2438
twindow_clause_opt(A) ::=
2439
  STATE_WINDOW NK_LP expr_or_subquery(B) state_window_opt(C) NK_RP true_for_opt(D).     { A = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, B), C, D); }
2440
twindow_clause_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(B)
2441
  NK_RP sliding_opt(C) fill_opt(D).                                               { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL, C, D); }
25,219,951✔
2442
twindow_clause_opt(A) ::=
2443
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2444
  interval_sliding_duration_literal(C) NK_RP
2445
  sliding_opt(D) fill_opt(E).                                                     { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), D, E); }
136,281✔
2446
twindow_clause_opt(A) ::=
2447
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2448
  AUTO(C) NK_RP sliding_opt(D) fill_opt(E).                                       { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), createDurationValueNode(pCxt, &C), D, E); }
111,384✔
2449
twindow_clause_opt(A) ::= EVENT_WINDOW START WITH search_condition(B)
2450
  END WITH search_condition(C) true_for_opt(D).                                   { A = createEventWindowNode(pCxt, B, C, D); }
2,436,237✔
2451
twindow_clause_opt(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.          { A = createCountWindowNodeFromArgs(pCxt, B); }
2452
twindow_clause_opt(A) ::=
UNCOV
2453
  ANOMALY_WINDOW NK_LP expr_or_subquery(B) NK_RP.                                 { A = createAnomalyWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
×
2454
twindow_clause_opt(A) ::=
UNCOV
2455
  ANOMALY_WINDOW NK_LP expr_or_subquery(B) NK_COMMA NK_STRING(C) NK_RP.           { A = createAnomalyWindowNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
×
2456

2457
extend_literal(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_INT, &B); }
21,384✔
2458

2459
zeroth_literal(A) ::= signed_integer(B).                                          { A = B; }
2460
zeroth_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2461
zeroth_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
2462

2463
%type state_window_opt                                                            { SNodeList* }
2464
%destructor state_window_opt                                                      { nodesDestroyList($$); }
2465
state_window_opt(A) ::= .                                                         { A = NULL; }
2466
state_window_opt(A) ::= NK_COMMA extend_literal(B).                               { A = createNodeList(pCxt, B); }
21,032✔
UNCOV
2467
state_window_opt(A) ::= NK_COMMA extend_literal(B) NK_COMMA zeroth_literal(C).    { A = addNodeToList(pCxt, createNodeList(pCxt, B), C); }
×
2468

2469
sliding_opt(A) ::= .                                                              { A = NULL; }
2470
sliding_opt(A) ::= SLIDING NK_LP interval_sliding_duration_literal(B) NK_RP.      { A = releaseRawExprNode(pCxt, B); }
2471

2472
interval_sliding_duration_literal(A) ::= NK_VARIABLE(B).                          { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2473
interval_sliding_duration_literal(A) ::= NK_STRING(B).                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2474
interval_sliding_duration_literal(A) ::= NK_INTEGER(B).                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2475

2476
interp_fill_opt(A) ::= .                                                          { A = NULL; }
2477
interp_fill_opt(A) ::= fill_value(B).                                             { A = B; }
2478
interp_fill_opt(A) ::=
2479
  FILL NK_LP fill_position_mode_extension(B) NK_COMMA expression_list(C) NK_RP.   { A = createFillNode(pCxt, B, createNodeListNode(pCxt, C)); }
891,453✔
2480
interp_fill_opt(A) ::= FILL NK_LP interp_fill_mode(B) NK_RP.                      { A = createFillNode(pCxt, B, NULL); }
1,636,542✔
2481

2482
fill_opt(A) ::= .                                                                 { A = NULL; }
2483
fill_opt(A) ::= FILL NK_LP fill_mode(B) NK_RP.                                    { A = createFillNode(pCxt, B, NULL); }
2484
fill_opt(A) ::= fill_value(B).                                                    { A = B; }
2485

2486
fill_value(A) ::= FILL NK_LP VALUE NK_COMMA expression_list(B) NK_RP.             { A = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, B)); }
185,165✔
2487
fill_value(A) ::= FILL NK_LP VALUE_F NK_COMMA expression_list(B) NK_RP.           { A = createFillNode(pCxt, FILL_MODE_VALUE_F, createNodeListNode(pCxt, B)); }
25,314✔
2488

2489
count_window_args(A) ::= NK_INTEGER(B).                                           { A = createCountWindowArgs(pCxt, &B, NULL, NULL); }
2,420,337✔
2490
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C).                    { A = createCountWindowArgs(pCxt, &B, &C, NULL); }
6,588✔
2491
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA column_name_list(D).              { A = createCountWindowArgs(pCxt, &B, NULL, D); }
18,434✔
2492
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_COMMA column_name_list(D). { A = createCountWindowArgs(pCxt, &B, &C, D); }
12,649✔
2493

2494
%type fill_mode                                                                   { EFillMode }
2495
%destructor fill_mode                                                             { }
2496
fill_mode(A) ::= NONE.                                                            { A = FILL_MODE_NONE; }
3,303✔
2497
fill_mode(A) ::= NULL.                                                            { A = FILL_MODE_NULL; }
146,821✔
2498
fill_mode(A) ::= NULL_F.                                                          { A = FILL_MODE_NULL_F; }
23,052✔
2499
fill_mode(A) ::= LINEAR.                                                          { A = FILL_MODE_LINEAR; }
229,868✔
2500
fill_mode(A) ::= fill_position_mode(B).                                           { A = B; }
820,991✔
2501

2502
%type fill_position_mode                                                          { EFillMode }
2503
%destructor fill_position_mode                                                    { }
2504
fill_position_mode(A) ::= PREV.                                                   { A = FILL_MODE_PREV; }
250,383✔
2505
fill_position_mode(A) ::= NEXT.                                                   { A = FILL_MODE_NEXT; }
173,467✔
2506

2507
%type fill_position_mode_extension                                                { EFillMode }
2508
%destructor fill_position_mode_extension                                          { }
2509
fill_position_mode_extension(A) ::= fill_position_mode(B).                        { A = B; }
2510
fill_position_mode_extension(A) ::= NEAR.                                         { A = FILL_MODE_NEAR; }
1,706,540✔
2511

2512
%type interp_fill_mode                                                            { EFillMode }
2513
%destructor interp_fill_mode                                                      { }
2514
interp_fill_mode(A) ::= fill_mode(B).                                             { A = B; }
2515
interp_fill_mode(A) ::= NEAR.                                                     { A = FILL_MODE_NEAR; }
2516

2517
%type group_by_clause_opt                                                         { SNodeList* }
2518
%destructor group_by_clause_opt                                                   { nodesDestroyList($$); }
2519
group_by_clause_opt(A) ::= .                                                      { A = NULL; }
2520
group_by_clause_opt(A) ::= GROUP BY group_by_list(B).                             { A = B; }
2521

2522
%type group_by_list                                                               { SNodeList* }
2523
%destructor group_by_list                                                         { nodesDestroyList($$); }
2524
group_by_list(A) ::= expr_or_subquery(B).                                         { A = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, B))); }
37,610,400✔
2525
group_by_list(A) ::= group_by_list(B) NK_COMMA expr_or_subquery(C).               { A = addNodeToList(pCxt, B, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, C))); }
3,021,760✔
2526

2527
having_clause_opt(A) ::= .                                                        { A = NULL; }
2528
having_clause_opt(A) ::= HAVING search_condition(B).                              { A = B; }
2529

2530
range_opt(A) ::= .                                                                { A = NULL; }
2531
range_opt(A) ::=
2532
  RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_COMMA expr_or_subquery(D) NK_RP.              { 
2533
                                                                                    A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)); }
58,301✔
2534
range_opt(A) ::=
2535
  RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_RP.             { A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), NULL); }
2,147,857✔
2536
range_opt(A) ::=
2537
  RANGE NK_LP expr_or_subquery(B) NK_RP.                                          { A = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, B)); }
41,452✔
2538

2539
every_opt(A) ::= .                                                                { A = NULL; }
2540
every_opt(A) ::= EVERY NK_LP duration_literal(B) NK_RP.                           { A = releaseRawExprNode(pCxt, B); }
2541

2542
true_for_opt(A) ::= .                                                             { A = NULL; }
2543
true_for_opt(A) ::= TRUE_FOR NK_LP interval_sliding_duration_literal(B) NK_RP.    { A = releaseRawExprNode(pCxt, B); }
2544

2545
/************************************************ query_expression ****************************************************/
2546
query_expression(A) ::= query_simple(B)
2547
  order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E).                {
2548
                                                                                    A = addOrderByClause(pCxt, B, C);
359,090,434✔
2549
                                                                                    A = addSlimitClause(pCxt, A, D);
359,082,930✔
2550
                                                                                    A = addLimitClause(pCxt, A, E);
359,087,105✔
2551
                                                                                  }
2552

2553
query_simple(A) ::= query_specification(B).                                       { A = B; }
2554
query_simple(A) ::= union_query_expression(B).                                    { A = B; }
2555

2556
union_query_expression(A) ::=
2557
  query_simple_or_subquery(B) UNION ALL query_simple_or_subquery(C).              { A = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, B, C); }
14,092,988✔
2558
union_query_expression(A) ::=
2559
  query_simple_or_subquery(B) UNION query_simple_or_subquery(C).                  { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, C); }
13,767,138✔
2560

2561
query_simple_or_subquery(A) ::= query_simple(B).                                  { A = B; }
2562
query_simple_or_subquery(A) ::= subquery(B).                                      { A = releaseRawExprNode(pCxt, B); }
2563

2564
query_or_subquery(A) ::= query_expression(B).                                     { A = B; }
2565
query_or_subquery(A) ::= subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
2566

2567
%type order_by_clause_opt                                                         { SNodeList* }
2568
%destructor order_by_clause_opt                                                   { nodesDestroyList($$); }
2569
order_by_clause_opt(A) ::= .                                                      { A = NULL; }
2570
order_by_clause_opt(A) ::= ORDER BY sort_specification_list(B).                   { A = B; }
2571

2572
slimit_clause_opt(A) ::= .                                                        { A = NULL; }
2573
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
2574
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B) SOFFSET unsigned_integer(C).  { A = createLimitNode(pCxt, B, C); }
5,796,885✔
2575
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B). { A = createLimitNode(pCxt, B, C); }
434,152✔
2576

2577
limit_clause_opt(A) ::= .                                                         { A = NULL; }
2578
limit_clause_opt(A) ::= LIMIT unsigned_integer(B).                                { A = createLimitNode(pCxt, B, NULL); }
2579
limit_clause_opt(A) ::= LIMIT unsigned_integer(B) OFFSET unsigned_integer(C).     { A = createLimitNode(pCxt, B, C); }
2580
limit_clause_opt(A) ::= LIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B).   { A = createLimitNode(pCxt, B, C); }
2581

2582
/************************************************ subquery ************************************************************/
2583
subquery(A) ::= NK_LP(B) query_expression(C) NK_RP(D).                            { A = createRawExprNodeExt(pCxt, &B, &D, C); }
201,722,448✔
2584
subquery(A) ::= NK_LP(B) subquery(C) NK_RP(D).                                    { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
2585

2586
/************************************************ search_condition ****************************************************/
2587
search_condition(A) ::= common_expression(B).                                     { A = releaseRawExprNode(pCxt, B); }
2588

2589
/************************************************ sort_specification_list *********************************************/
2590
%type sort_specification_list                                                     { SNodeList* }
2591
%destructor sort_specification_list                                               { nodesDestroyList($$); }
2592
sort_specification_list(A) ::= sort_specification(B).                             { A = createNodeList(pCxt, B); }
2593
sort_specification_list(A) ::=
2594
  sort_specification_list(B) NK_COMMA sort_specification(C).                      { A = addNodeToList(pCxt, B, C); }
2595

2596
sort_specification(A) ::=
2597
  expr_or_subquery(B) ordering_specification_opt(C) null_ordering_opt(D).         { A = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, B), C, D); }
112,934,741✔
2598

2599
%type ordering_specification_opt EOrder
2600
%destructor ordering_specification_opt                                            { }
2601
ordering_specification_opt(A) ::= .                                               { A = ORDER_ASC; }
101,523,348✔
2602
ordering_specification_opt(A) ::= ASC.                                            { A = ORDER_ASC; }
7,424,499✔
2603
ordering_specification_opt(A) ::= DESC.                                           { A = ORDER_DESC; }
3,986,894✔
2604

2605
%type null_ordering_opt ENullOrder
2606
%destructor null_ordering_opt                                                     { }
2607
null_ordering_opt(A) ::= .                                                        { A = NULL_ORDER_DEFAULT; }
112,933,568✔
2608
null_ordering_opt(A) ::= NULLS FIRST.                                             { A = NULL_ORDER_FIRST; }
1,173✔
UNCOV
2609
null_ordering_opt(A) ::= NULLS LAST.                                              { A = NULL_ORDER_LAST; }
×
2610

2611
%fallback ABORT AFTER ATTACH BEFORE BEGIN BITAND BITNOT BITOR BLOCKS CHANGE COMMA CONCAT CONFLICT COPY DEFERRED DELIMITERS DETACH DIVIDE DOT EACH END FAIL
2612
  FILE FOR GLOB ID IMMEDIATE IMPORT INITIALLY INSTEAD ISNULL KEY MODULES NK_BITNOT NK_SEMI NOTNULL OF PLUS PRIVILEGE RAISE RESTRICT ROW SEMI STAR STATEMENT
2613
  STRICT STRING TIMES VALUES VARIABLE VIEW WAL.
2614

2615
column_options(A) ::= .                                                           { A = createDefaultColumnOptions(pCxt); }
2616
column_options(A) ::= column_options(B) PRIMARY KEY.                              { A = setColumnOptionsPK(pCxt, B); }
2617
column_options(A) ::= column_options(B) COMPOSITE KEY.                            { A = setColumnOptionsPK(pCxt, B); }
2618
column_options(A) ::= column_options(B) NK_ID(C) NK_STRING(D).                    { A = setColumnOptions(pCxt, B, &C, &D); }
2,033,454✔
2619
column_options(A) ::= column_options(B) FROM column_ref(C).                       { A = setColumnReference(pCxt, B, C); }
74,549,629✔
2620

2621
column_ref(A) ::= column_name_triplet(B).                                            { A = createColumnRefNodeByName(pCxt, B); }
119,924,120✔
2622

2623
%type column_name_triplet                                                            { STokenTriplet* }
2624
%destructor column_name_triplet                                                      { }
2625
column_name_triplet(A) ::= NK_ID(B).                                                 { A = createTokenTriplet(pCxt, B); }
119,924,120✔
2626
column_name_triplet(A) ::= column_name_triplet(B) NK_DOT NK_ID(C).                   { A = setColumnName(pCxt, B, C); }
120,069,045✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc