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

taosdata / TDengine / #4976

06 Mar 2026 09:48AM UTC coverage: 68.446% (+0.08%) from 68.37%
#4976

push

travis-ci

web-flow
feat(TDgpt): support multiple input data columns for anomaly detection. (#34606)

0 of 93 new or added lines in 9 files covered. (0.0%)

5718 existing lines in 144 files now uncovered.

211146 of 308486 relevant lines covered (68.45%)

136170362.0 hits per line

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

86.62
/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($$); }
30,802,818✔
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) {
12,630,025✔
40
    if(TOKEN.z) {
12,629,560✔
41
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, TOKEN.z);
12,404,181✔
42
    } else {
43
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INCOMPLETE_SQL);
225,461✔
44
    }
45
  } else if (TSDB_CODE_PAR_DB_NOT_SPECIFIED == pCxt->errCode && TK_NK_FLOAT == TOKEN.type) {
722✔
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 ANY SOME EXISTS.
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); }
4,487✔
112

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

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

267

268
%type ip_range_list                                                              { SNodeList* }
269
%destructor ip_range_list                                                        { nodesDestroyList($$); }
25,330,241✔
270
ip_range_list(A) ::= NK_STRING(B).                                               { A = createNodeList(pCxt, (SNode*)parseIpRange(pCxt, &B)); }
4,576✔
271
ip_range_list(A) ::= ip_range_list(B) NK_COMMA NK_STRING(C).                     { A = addNodeToList(pCxt, B, (SNode*)parseIpRange(pCxt, &C)); }
626✔
272

273

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

279

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

300
%type create_user_options                                                        { SUserOptions* }
301
create_user_options(A) ::= user_option(B).                                       { A = B; }
94,066✔
302
create_user_options(A) ::= create_user_option(B).                                { A = B; }
303
create_user_options(A) ::= create_user_options(B) user_option(C).                { A = mergeUserOptions(pCxt, B, C); }
12,208✔
304
create_user_options(A) ::= create_user_options(B) create_user_option(C).         { A = mergeUserOptions(pCxt, B, C); }
305

306
%type create_user_options_opt                                                    { SUserOptions* }
307
create_user_options_opt(A) ::= .                                                 { A = NULL; }
79,005✔
308
create_user_options_opt(A) ::= create_user_options(B).                           { A = B; }
309

310

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

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

356

357
cmd ::= CREATE USER not_exists_opt(A) user_name(B) PASS NK_STRING(C) create_user_options_opt(D).  {
358
    D = mergeUserOptions(pCxt, D, NULL);
95,709✔
359
    setUserOptionsPassword(pCxt, D, &C);
95,709✔
360
    pCxt->pRootNode = createCreateUserStmt(pCxt, &B, D, A);
95,631✔
361
  }
362
cmd ::= ALTER USER user_name(A) alter_user_options(B).                           { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, B); }
53,967✔
363
cmd ::= DROP USER exists_opt(A) user_name(B).                                    { pCxt->pRootNode = createDropUserStmt(pCxt, &B, A); }
36,754✔
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); }
1,032✔
370
token_option(A) ::= ENABLE NK_INTEGER(B).                                        { A = mergeTokenOptions(pCxt, NULL, NULL);  A->enable = taosStr2Int8(B.z, NULL, 10); A->hasEnable = true; }
3,038✔
371
token_option(A) ::= TTL NK_INTEGER(B).                                           { A = mergeTokenOptions(pCxt, NULL, NULL);  A->ttl = taosStr2Int32(B.z, NULL, 10) * 86400; A->hasTtl = true; }
1,529✔
372
token_option(A) ::= EXTRA_INFO NK_STRING(B).                                     { A = mergeTokenOptions(pCxt, NULL, NULL); setTokenOptionsExtraInfo(pCxt, A, &B); }
1,032✔
373

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

378
%type token_options_opt                                                          { STokenOptions* }
379
token_options_opt(A) ::= .                                                       { A = NULL; }
19,670✔
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);
21,715✔
385
  }
386
cmd ::= ALTER TOKEN NK_ID(A) token_options(B). {
387
    pCxt->pRootNode = createAlterTokenStmt(pCxt, &A, B);
3,057✔
388
  }
389
cmd ::= DROP TOKEN exists_opt(A) NK_ID(B). {
390
    pCxt->pRootNode = createDropTokenStmt(pCxt, &B, A);
2,407✔
391
  }
392

393

394
/************************************************ create/drop totpsecret **********************************************/
395
cmd ::= CREATE TOTP_SECRET FOR USER user_name(A). {
396
    pCxt->pRootNode = createCreateTotpSecretStmt(pCxt, &A);
18,304✔
397
  }
398
cmd ::= DROP TOTP_SECRET FROM USER user_name(A). {
399
    pCxt->pRootNode = createDropTotpSecretStmt(pCxt, &A);
8,632✔
400
  }
401

402
/************************************************ create/drop role **********************************************/
403
cmd ::= CREATE ROLE not_exists_opt(A) role_name(B).                               { pCxt->pRootNode = createCreateRoleStmt(pCxt, A, &B); }
422✔
404
cmd ::= DROP ROLE exists_opt(A) role_name(B).                                     { pCxt->pRootNode = createDropRoleStmt(pCxt, A, &B); }
270✔
405
cmd ::= LOCK ROLE role_name(A).                                                   { 
406
                                                                                    SToken t = {.n = 1, .z = "1", .type = TK_STRING };
54✔
407
                                                                                    pCxt->pRootNode = createAlterRoleStmt(pCxt, &A, TSDB_ALTER_ROLE_LOCK, &t); 
54✔
408
                                                                                  }
409
cmd ::= UNLOCK ROLE role_name(A).                                                 { 
410
                                                                                    SToken t = {.n = 1, .z = "0", .type = TK_STRING };
×
411
                                                                                    pCxt->pRootNode = createAlterRoleStmt(pCxt, &A,TSDB_ALTER_ROLE_LOCK, &t); 
×
412
                                                                                  }
413
cmd ::= GRANT ROLE role_name(A) TO role_name(C).                                  { pCxt->pRootNode = createGrantStmt(pCxt, &A, NULL, &C, NULL, TSDB_ALTER_ROLE_ROLE); }
2,989✔
414
cmd ::= REVOKE ROLE role_name(A) FROM role_name(C).                               { pCxt->pRootNode = createRevokeStmt(pCxt, &A, NULL, &C, NULL, TSDB_ALTER_ROLE_ROLE); }
2,051✔
415
/************************************************ grant/revoke ********************************************************/
416
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); }
835,187✔
417
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); }
448,489✔
418

419
%type privileges                                                                  { SPrivSetArgs }
420
%destructor privileges                                                            {
421
                                                                                    if ($$.selectCols != NULL) {
1,199✔
422
                                                                                      nodesDestroyList($$.selectCols);
×
423
                                                                                    }
424
                                                                                    if ($$.insertCols != NULL) {
1,199✔
425
                                                                                      nodesDestroyList($$.insertCols);
×
426
                                                                                    }
427
                                                                                    if ($$.updateCols != NULL) {
1,199✔
428
                                                                                      nodesDestroyList($$.updateCols);
×
429
                                                                                    }
430

431
                                                                                  }
432
privileges(A) ::= priv_type_list(B).                                              { A = B; }
3,105,010✔
433

434
%type priv_type_list                                                              { SPrivSetArgs }
435
%destructor priv_type_list                                                        {
436
                                                                                    if ($$.selectCols != NULL) {
437
                                                                                      nodesDestroyList($$.selectCols);
438
                                                                                    }
439
                                                                                    if ($$.insertCols != NULL) {
440
                                                                                      nodesDestroyList($$.insertCols);
441
                                                                                    }
442
                                                                                    if ($$.updateCols != NULL) {
443
                                                                                      nodesDestroyList($$.updateCols);
444
                                                                                    }
445

446
                                                                                  }
447
priv_type_list(A) ::= priv_type(B).                                               { A = B; }
448
priv_type_list(A) ::= priv_type_list(B) NK_COMMA priv_type(C).                    { A = privArgsAdd(pCxt, B, C); }
12,067✔
449

450
%type priv_type                                                                   { SPrivSetArgs }
451
%destructor priv_type                                                             {
452
                                                                                    if ($$.selectCols != NULL) {
453
                                                                                      nodesDestroyList($$.selectCols);
454
                                                                                    }
455
                                                                                    if ($$.insertCols != NULL) {
456
                                                                                      nodesDestroyList($$.insertCols);
457
                                                                                    }
458
                                                                                    if ($$.updateCols != NULL) {
459
                                                                                      nodesDestroyList($$.updateCols);
460
                                                                                    }
461

462
                                                                                  }
463
priv_type(A) ::= ALL.                                                             { A = PRIV_SET_TYPE(PRIV_CM_ALL); }
248,563✔
464
priv_type(A) ::= ALL PRIVILEGES.                                                  { A = PRIV_SET_TYPE(PRIV_CM_ALL); }
×
465
priv_type(A) ::= ALTER.                                                           { A = PRIV_SET_TYPE(PRIV_CM_ALTER); }
105,169✔
466
priv_type(A) ::= DROP.                                                            { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
73,959✔
467
priv_type(A) ::= SHOW.                                                            { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
800✔
468
priv_type(A) ::= SHOW CREATE.                                                     { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
454✔
469
priv_type(A) ::= START.                                                           { A = PRIV_SET_TYPE(PRIV_CM_START); }
18✔
470
priv_type(A) ::= STOP.                                                            { A = PRIV_SET_TYPE(PRIV_CM_STOP); }
18✔
471
priv_type(A) ::= KILL.                                                            { A = PRIV_SET_TYPE(PRIV_CM_KILL); }
×
472
priv_type(A) ::= RECALCULATE.                                                     { A = PRIV_SET_TYPE(PRIV_CM_RECALC); }
18✔
473
priv_type(A) ::= SUBSCRIBE.                                                       { A = PRIV_SET_TYPE(PRIV_CM_SUBSCRIBE); }
5,210✔
474
priv_type(A) ::= READ.                                                            { A = PRIV_SET_TYPE(PRIV_TYPE_UNKNOWN); }
8,463✔
475
priv_type(A) ::= WRITE.                                                           { A = PRIV_SET_TYPE(PRIV_TYPE_UNKNOWN); }
476

477
priv_type(A) ::= CREATE DATABASE.                                                 { A = PRIV_SET_TYPE(PRIV_DB_CREATE); }
2,455✔
478
priv_type(A) ::= USE DATABASE.                                                    { A = PRIV_SET_TYPE(PRIV_DB_USE); }
170✔
479
priv_type(A) ::= FLUSH DATABASE.                                                  { A = PRIV_SET_TYPE(PRIV_DB_FLUSH); }
×
480
priv_type(A) ::= COMPACT DATABASE.                                                { A = PRIV_SET_TYPE(PRIV_DB_COMPACT); }
×
481
priv_type(A) ::= TRIM DATABASE.                                                   { A = PRIV_SET_TYPE(PRIV_DB_TRIM); }
×
482
priv_type(A) ::= ROLLUP DATABASE.                                                 { A = PRIV_SET_TYPE(PRIV_DB_ROLLUP); }
×
483
priv_type(A) ::= SCAN DATABASE.                                                   { A = PRIV_SET_TYPE(PRIV_DB_SCAN); }
×
484
priv_type(A) ::= SSMIGRATE DATABASE.                                              { A = PRIV_SET_TYPE(PRIV_DB_SSMIGRATE); }
×
485
priv_type(A) ::= SHOW DATABASES.                                                  { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
×
486
priv_type(A) ::= USE.                                                             { A = PRIV_SET_TYPE(PRIV_DB_USE); }
221,568✔
487
priv_type(A) ::= FLUSH.                                                           { A = PRIV_SET_TYPE(PRIV_DB_FLUSH); }
36✔
488
priv_type(A) ::= COMPACT.                                                         { A = PRIV_SET_TYPE(PRIV_DB_COMPACT); }
54✔
489
priv_type(A) ::= TRIM.                                                            { A = PRIV_SET_TYPE(PRIV_DB_TRIM); }
18✔
490
priv_type(A) ::= ROLLUP.                                                          { A = PRIV_SET_TYPE(PRIV_DB_ROLLUP); }
36✔
491
priv_type(A) ::= SCAN.                                                            { A = PRIV_SET_TYPE(PRIV_DB_SCAN); }
36✔
492
priv_type(A) ::= SSMIGRATE.                                                       { A = PRIV_SET_TYPE(PRIV_DB_SSMIGRATE); }
36✔
493

494
priv_type(A) ::= SHOW VNODES.                                                     { A = PRIV_SET_TYPE(PRIV_SHOW_VNODES); }
×
495
priv_type(A) ::= SHOW VGROUPS.                                                    { A = PRIV_SET_TYPE(PRIV_SHOW_VGROUPS); }
×
496
priv_type(A) ::= SHOW COMPACTS.                                                   { A = PRIV_SET_TYPE(PRIV_SHOW_COMPACTS); }
×
497
priv_type(A) ::= SHOW RETENTIONS.                                                 { A = PRIV_SET_TYPE(PRIV_SHOW_RETENTIONS); }
×
498
priv_type(A) ::= SHOW SCANS.                                                      { A = PRIV_SET_TYPE(PRIV_SHOW_SCANS); }
×
499
priv_type(A) ::= SHOW SSMIGRATES.                                                 { A = PRIV_SET_TYPE(PRIV_SHOW_SSMIGRATES); }
×
500

501
priv_type(A) ::= CREATE TABLE.                                                    { A = PRIV_SET_TYPE(PRIV_TBL_CREATE); }
86,859✔
502
priv_type(A) ::= ALTER TABLE.                                                     { A = PRIV_SET_TYPE(PRIV_CM_ALTER); }
×
503
priv_type(A) ::= DROP TABLE.                                                      { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
×
504
priv_type(A) ::= SHOW CREATE TABLE.                                               { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
×
505
priv_type(A) ::= SHOW TABLES.                                                     { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
506

507
priv_type(A) ::= priv_type_tbl_dml(B).                                            { A = B; }
508

509
priv_type(A) ::= CREATE FUNCTION.                                                 { A = PRIV_SET_TYPE(PRIV_FUNC_CREATE); }
18✔
510
priv_type(A) ::= DROP FUNCTION.                                                   { A = PRIV_SET_TYPE(PRIV_FUNC_DROP); }
×
511
priv_type(A) ::= SHOW FUNCTIONS.                                                  { A = PRIV_SET_TYPE(PRIV_FUNC_SHOW); }
×
512

513
priv_type(A) ::= CREATE INDEX.                                                    { A = PRIV_SET_TYPE(PRIV_IDX_CREATE); }
18✔
514
priv_type(A) ::= DROP INDEX.                                                      { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
515
priv_type(A) ::= SHOW CREATE INDEX.                                               { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
516
priv_type(A) ::= SHOW INDEXES.                                                    { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
517

518
priv_type(A) ::= CREATE VIEW.                                                     { A = PRIV_SET_TYPE(PRIV_VIEW_CREATE); }
5,246✔
519
priv_type(A) ::= ALTER VIEW.                                                      { A = PRIV_SET_TYPE(PRIV_CM_ALTER); }
520
priv_type(A) ::= DROP VIEW.                                                       { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
521
priv_type(A) ::= SHOW CREATE VIEW.                                                { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
522
priv_type(A) ::= SHOW VIEWS.                                                      { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
523
priv_type(A) ::= SELECT VIEW.                                                     { A = PRIV_SET_TYPE(PRIV_VIEW_SELECT); }
×
524

525
priv_type(A) ::= CREATE RSMA.                                                     { A = PRIV_SET_TYPE(PRIV_RSMA_CREATE); }
36✔
526
priv_type(A) ::= DROP RSMA.                                                       { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
527
priv_type(A) ::= SHOW CREATE RSMA.                                                { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
528
priv_type(A) ::= SHOW RSMAS.                                                      { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
529
priv_type(A) ::= CREATE TSMA.                                                     { A = PRIV_SET_TYPE(PRIV_TSMA_CREATE); }
36✔
530
priv_type(A) ::= DROP TSMA.                                                       { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
531
priv_type(A) ::= SHOW CREATE TSMA.                                                { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
532
priv_type(A) ::= SHOW TSMAS.                                                      { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
533

534
priv_type(A) ::= CREATE MOUNT.                                                    { A = PRIV_SET_TYPE(PRIV_MOUNT_CREATE); }
18✔
535
priv_type(A) ::= DROP MOUNT.                                                      { A = PRIV_SET_TYPE(PRIV_MOUNT_DROP); }
18✔
536
priv_type(A) ::= SHOW MOUNTS.                                                     { A = PRIV_SET_TYPE(PRIV_MOUNT_SHOW); }
18✔
537

538
priv_type(A) ::= ALTER PASS.                                                      { A = PRIV_SET_TYPE(PRIV_PASS_ALTER); }
18✔
539

540
priv_type(A) ::= CREATE ROLE.                                                     { A = PRIV_SET_TYPE(PRIV_ROLE_CREATE); }
36✔
541
priv_type(A) ::= DROP ROLE.                                                       { A = PRIV_SET_TYPE(PRIV_ROLE_DROP); }
36✔
542
priv_type(A) ::= SHOW ROLES.                                                      { A = PRIV_SET_TYPE(PRIV_ROLE_SHOW); }
36✔
543

544
priv_type(A) ::= CREATE USER.                                                     { A = PRIV_SET_TYPE(PRIV_USER_CREATE); }
×
545
priv_type(A) ::= DROP USER.                                                       { A = PRIV_SET_TYPE(PRIV_USER_DROP); }
×
546
priv_type(A) ::= UNLOCK USER.                                                     { A = PRIV_SET_TYPE(PRIV_USER_UNLOCK); }
18✔
547
priv_type(A) ::= LOCK USER.                                                       { A = PRIV_SET_TYPE(PRIV_USER_LOCK); }
18✔
548
priv_type(A) ::= SHOW USERS.                                                      { A = PRIV_SET_TYPE(PRIV_USER_SHOW); }
×
549
priv_type(A) ::= ALTER USER.                                                      { A = PRIV_SET_TYPE(PRIV_USER_ALTER); }
18✔
550

551
priv_type(A) ::= CREATE TOKEN.                                                    { A = PRIV_SET_TYPE(PRIV_TOKEN_CREATE); }
18✔
552
priv_type(A) ::= DROP TOKEN.                                                      { A = PRIV_SET_TYPE(PRIV_TOKEN_DROP); }
18✔
553
priv_type(A) ::= ALTER TOKEN.                                                     { A = PRIV_SET_TYPE(PRIV_TOKEN_ALTER); }
18✔
554
priv_type(A) ::= SHOW TOKENS.                                                     { A = PRIV_SET_TYPE(PRIV_TOKEN_SHOW); }
18✔
555

556
priv_type(A) ::= UPDATE KEY.                                                      { A = PRIV_SET_TYPE(PRIV_KEY_UPDATE); }
×
557
priv_type(A) ::= CREATE TOTP.                                                     { A = PRIV_SET_TYPE(PRIV_TOTP_CREATE); }
×
558
priv_type(A) ::= DROP TOTP.                                                       { A = PRIV_SET_TYPE(PRIV_TOTP_DROP); }
×
559

560
priv_type(A) ::= GRANT PRIVILEGE.                                                 { A = PRIV_SET_TYPE(PRIV_GRANT_PRIVILEGE); }
18✔
561
priv_type(A) ::= REVOKE PRIVILEGE.                                                { A = PRIV_SET_TYPE(PRIV_REVOKE_PRIVILEGE); }
18✔
562
priv_type(A) ::= SHOW PRIVILEGES.                                                 { A = PRIV_SET_TYPE(PRIV_SHOW_PRIVILEGES); }
×
563

564
priv_type(A) ::= CREATE NODE.                                                     { A = PRIV_SET_TYPE(PRIV_NODE_CREATE); }
18✔
565
priv_type(A) ::= DROP NODE.                                                       { A = PRIV_SET_TYPE(PRIV_NODE_DROP); }
18✔
566
priv_type(A) ::= SHOW NODES.                                                      { A = PRIV_SET_TYPE(PRIV_NODES_SHOW); }
190✔
567

568
priv_type(A) ::= CREATE TOPIC.                                                    { A = PRIV_SET_TYPE(PRIV_TOPIC_CREATE); }
364✔
569
priv_type(A) ::= DROP TOPIC.                                                      { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
570
priv_type(A) ::= SUBSCRIBE TOPIC.                                                 { A = PRIV_SET_TYPE(PRIV_CM_SUBSCRIBE); }
×
571
priv_type(A) ::= SHOW CREATE TOPIC.                                               { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
572
priv_type(A) ::= SHOW TOPICS.                                                     { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
573
priv_type(A) ::= SHOW CONSUMERS.                                                  { A = PRIV_SET_TYPE(PRIV_CONSUMER_SHOW); }
18✔
574
priv_type(A) ::= SHOW SUBSCRIPTIONS.                                              { A = PRIV_SET_TYPE(PRIV_SUBSCRIPTION_SHOW); }
18✔
575

576
priv_type(A) ::= CREATE STREAM.                                                   { A = PRIV_SET_TYPE(PRIV_STREAM_CREATE); }
466✔
577
priv_type(A) ::= DROP STREAM.                                                     { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
578
priv_type(A) ::= SHOW STREAMS.                                                    { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
579
priv_type(A) ::= SHOW CREATE STREAM.                                              { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
580
priv_type(A) ::= START STREAM.                                                    { A = PRIV_SET_TYPE(PRIV_CM_START); }
×
581
priv_type(A) ::= STOP STREAMS.                                                    { A = PRIV_SET_TYPE(PRIV_CM_STOP); }
×
582
priv_type(A) ::= RECALCULATE STREAMS.                                             { A = PRIV_SET_TYPE(PRIV_CM_RECALC); }
×
583

584
priv_type(A) ::= SHOW TRANSACTIONS.                                               { A = PRIV_SET_TYPE(PRIV_TRANS_SHOW); }
36✔
585
priv_type(A) ::= KILL TRANSACTION.                                                { A = PRIV_SET_TYPE(PRIV_TRANS_KILL); }
18✔
586
priv_type(A) ::= SHOW CONNECTIONS.                                                { A = PRIV_SET_TYPE(PRIV_CONN_SHOW); }
36✔
587
priv_type(A) ::= KILL CONNECTION.                                                 { A = PRIV_SET_TYPE(PRIV_CONN_KILL); }
18✔
588
priv_type(A) ::= SHOW QUERIES.                                                    { A = PRIV_SET_TYPE(PRIV_QUERY_SHOW); }
36✔
589
priv_type(A) ::= KILL QUERY.                                                      { A = PRIV_SET_TYPE(PRIV_QUERY_KILL); }
18✔
590
priv_type(A) ::= SHOW GRANTS.                                                     { A = PRIV_SET_TYPE(PRIV_GRANTS_SHOW); }
36✔
591
priv_type(A) ::= SHOW CLUSTER.                                                    { A = PRIV_SET_TYPE(PRIV_CLUSTER_SHOW); }
36✔
592
priv_type(A) ::= SHOW APPS.                                                       { A = PRIV_SET_TYPE(PRIV_APPS_SHOW); }
36✔
593

594
%type priv_type_tbl_dml                                                           { SPrivSetArgs }
595
%destructor priv_type_tbl_dml                                                     {
596
                                                                                    if ($$.selectCols != NULL) {
×
597
                                                                                      nodesDestroyList($$.selectCols);
×
598
                                                                                    }
599
                                                                                    if ($$.insertCols != NULL) {
×
600
                                                                                      nodesDestroyList($$.insertCols);
×
601
                                                                                    }
602
                                                                                    if ($$.updateCols != NULL) {
×
603
                                                                                      nodesDestroyList($$.updateCols);
×
604
                                                                                    }
605
                                                                                  }
606
priv_type_tbl_dml(A) ::= SELECT TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_SELECT); }
274✔
607
priv_type_tbl_dml(A) ::= SELECT specific_cols_with_mask_opt(B).                   { A = PRIV_SET_COLS(PRIV_TBL_SELECT, B, NULL, NULL); }
321,905✔
608
priv_type_tbl_dml(A) ::= INSERT TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_INSERT); }
×
609
priv_type_tbl_dml(A) ::= INSERT specific_cols_opt(B).                             { A = PRIV_SET_COLS(PRIV_TBL_INSERT, NULL, B, NULL); }
211,099✔
610
/*priv_type_tbl_dml(A) ::= UPDATE TABLE.                                          { A = PRIV_SET_TYPE(PRIV_TBL_UPDATE); }
611
priv_type_tbl_dml(A) ::= UPDATE specific_cols_opt(B).                             { A = PRIV_SET_COLS(PRIV_TBL_UPDATE, NULL, NULL, B); }*/
612
priv_type_tbl_dml(A) ::= DELETE TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_DELETE); }
274✔
613
priv_type_tbl_dml(A) ::= DELETE.                                                  { A = PRIV_SET_TYPE(PRIV_TBL_DELETE); }
1,708✔
614

615
priv_type(A) ::= ALTER priv_id(B) priv_id(C).                                     { A = privArgsSet(pCxt, 0, &B, &C); }
234✔
616
priv_type(A) ::= READ priv_id(B) priv_id(C).                                      { A = privArgsSet(pCxt, 1, &B, &C); }
216✔
617
priv_type(A) ::= SHOW priv_id(B) priv_id(C).                                      { A = privArgsSet(pCxt, 2, &B, &C); }
216✔
618
priv_type(A) ::= SET USER priv_id(B) priv_id(C).                                  { A = privArgsSet(pCxt, 3, &B, &C); }
×
619
priv_type(A) ::= SHOW USERS priv_id(B) priv_id(C).                                { A = privArgsSet(pCxt, 4, &B, &C); }
18✔
620

621
%type priv_id                                                                     { SToken }
622
%destructor priv_id                                                               { }
623
priv_id(A) ::= NK_ID(B).                                                          { A = B; }
624
priv_id(A) ::= SYSTEM(B).                                                         { A = B; }
625
priv_id(A) ::= VARIABLES(B).                                                      { A = B; }
626
priv_id(A) ::= PASS(B).                                                           { A = B; }
627

628
%type priv_level_opt                                                              { SPrivLevelArgs }
629
%destructor priv_level_opt                                                        { 
630
                                                                                    if ($$.cols != NULL) {
1,199✔
631
                                                                                      nodesDestroyList($$.cols);
×
632
                                                                                    }
633
                                                                                  }
634
priv_level_opt(A) ::= .                                                           { 
635
                                                                                    A.first = nil_token; A.second = nil_token; 
4,301✔
636
                                                                                    A.objType = PRIV_OBJ_CLUSTER; A.cols = NULL; 
4,301✔
637
                                                                                  }
638
priv_level_opt(A) ::= ON priv_level(B).                                           { A = B; A.objType = PRIV_OBJ_TBL; }
944,180✔
639
priv_level_opt(A) ::= ON DATABASE priv_level(B).                                  { A = B; A.objType = PRIV_OBJ_DB; }
310,758✔
640
priv_level_opt(A) ::= ON TABLE priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_TBL; }
3,629✔
641
priv_level_opt(A) ::= ON VIEW priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_VIEW; }
16,275✔
642
priv_level_opt(A) ::= ON INDEX priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_IDX; }
72✔
643
priv_level_opt(A) ::= ON TOPIC priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_TOPIC; }
5,264✔
644
priv_level_opt(A) ::= ON STREAM priv_level(B).                                    { A = B; A.objType = PRIV_OBJ_STREAM; }
216✔
645
priv_level_opt(A) ::= ON RSMA priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_RSMA; }
126✔
646
priv_level_opt(A) ::= ON TSMA priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_TSMA; }
54✔
647

648
%type priv_level                                                                  { SPrivLevelArgs }
649
%destructor priv_level                                                            { }
650
priv_level(A) ::= NK_STAR(B).                                                     { A.first = B; A.second = nil_token; A.cols = NULL; }
360✔
651
priv_level(A) ::= NK_STAR(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; A.cols = NULL; }
5,977✔
652
priv_level(A) ::= db_name(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; A.cols = NULL; }
347,407✔
653
priv_level(A) ::= db_name(B) NK_DOT table_name(C).                                { A.first = B; A.second = C; A.cols = NULL; }
612,724✔
654
priv_level(A) ::= db_name(B).                                                     { A.first = B; A.second = nil_token; A.cols = NULL; }
314,106✔
655

656
with_clause_opt(A) ::= .                                                          { A = NULL; }
2,147,483,647✔
657
with_clause_opt(A) ::= WITH search_condition(B).                                  { A = B; }
859,506,897✔
658

659
/************************************************ create encrypt_key *********************************************/
660
cmd ::= CREATE ENCRYPT_KEY NK_STRING(A).                                          { pCxt->pRootNode = createEncryptKeyStmt(pCxt, &A); }
1,691✔
661

662
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); }
×
663

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

666
/************************************************ alter encrypt key *********************************************/
667
cmd ::= ALTER SYSTEM SET SVR_KEY NK_STRING(A).                                    { pCxt->pRootNode = createAlterEncryptKeyStmt(pCxt, 0, &A); }
142✔
668
cmd ::= ALTER SYSTEM SET DB_KEY NK_STRING(A).                                     { pCxt->pRootNode = createAlterEncryptKeyStmt(pCxt, 1, &A); }
142✔
669
cmd ::= ALTER SYSTEM SET KEY_EXPIRATION NK_INTEGER(A) DAYS STRATEGY NK_STRING(B). { pCxt->pRootNode = createAlterKeyExpirationStmt(pCxt, &A, &B); }
×
670
/************************************************ create drop update anode ***************************************/
671
cmd ::= CREATE ANODE NK_STRING(A).                                                { pCxt->pRootNode = createCreateAnodeStmt(pCxt, &A); }
×
672
cmd ::= UPDATE ANODE NK_INTEGER(A).                                               { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, &A, false); }
×
673
cmd ::= UPDATE ALL ANODES.                                                        { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, NULL, true); }
×
674
cmd ::= DROP ANODE NK_INTEGER(A).                                                 { pCxt->pRootNode = createDropAnodeStmt(pCxt, &A); }
×
675

676
/************************************************ create drop update xnode ***************************************/
677

678
%type xnode_endpoint                                                              { SToken }
679
%destructor xnode_endpoint                                                        { }
680
xnode_endpoint(A) ::= NK_STRING(B).                                               { A = B; }
681
xnode_endpoint(A) ::= NK_INTEGER(B).                                              { A = B; }
682

683
%destructor xnode_task_source                                                     { }
684
xnode_task_source(A) ::= NK_STRING(B).                                            { A = createXnodeSourceAsDsn(pCxt, &B); }
12,480✔
685
xnode_task_source(A) ::= DATABASE db_name(B).                                     { A = createXnodeSourceAsDatabase(pCxt, &B); }
780✔
686
xnode_task_source(A) ::= TOPIC topic_name(B).                                     { A = createXnodeSourceAsTopic(pCxt, &B); }
3,900✔
687

688
xnode_task_sink(A) ::= NK_STRING(B).                                              { A = createXnodeSinkAsDsn(pCxt, &B); }
10,140✔
689
xnode_task_sink(A) ::= DATABASE db_name(B).                                       { A = createXnodeSinkAsDatabase(pCxt, &B); }
7,800✔
690

691
%type xnode_task_opt_v                                                            { SToken }
692
%destructor xnode_task_opt_v                                                      { }
693
xnode_task_opt_v(A) ::=  NK_STRING(B).                                            { A = B; }
694
xnode_task_opt_v(A) ::=  NK_INTEGER(B).                                           { A = B; }
695
xnode_task_options(A) ::= NK_ID(C) xnode_task_opt_v(D).                           { A = setXnodeTaskOption(pCxt, NULL, &C, &D); }
24,180✔
696
xnode_task_options(A) ::= NK_ID(C) NK_EQ xnode_task_opt_v(D).                     { A = setXnodeTaskOption(pCxt, NULL, &C, &D); }
×
697
xnode_task_options(A) ::= xnode_task_options(B) NK_ID(C) xnode_task_opt_v(D).     { A = setXnodeTaskOption(pCxt, B, &C, &D); }
19,734✔
698
xnode_task_options(A) ::= xnode_task_options(B) NK_ID(C) NK_EQ xnode_task_opt_v(D).          { A = setXnodeTaskOption(pCxt, B, &C, &D); }
×
699
xnode_task_options(A) ::= xnode_task_options(B) NK_COMMA NK_ID(C) xnode_task_opt_v(D). { A = setXnodeTaskOption(pCxt, B, &C, &D); }
26,130✔
700
xnode_task_options(A) ::= xnode_task_options(B) NK_COMMA NK_ID(C) NK_EQ xnode_task_opt_v(D). { A = setXnodeTaskOption(pCxt, B, &C, &D); }
780✔
701
xnode_task_options(A) ::= xnode_task_options(B) AND NK_ID(C) xnode_task_opt_v(D).      { A = setXnodeTaskOption(pCxt, B, &C, &D); }
702
xnode_task_options(A) ::= xnode_task_options(B) AND NK_ID(C) NK_EQ xnode_task_opt_v(D).      { A = setXnodeTaskOption(pCxt, B, &C, &D); }
703
//xnode_task_options(A) ::= xnode_task_options(B) NK_COMMA NK_ID(C).                { A = setXnodeTaskOption(pCxt, B, &C, NULL); }
704
//xnode_task_options(A) ::= xnode_task_options(B) AND NK_ID(C).                     { A = setXnodeTaskOption(pCxt, B, &C, NULL); }
705
xnode_task_options(A) ::= xnode_task_options(B) TRIGGER NK_STRING(D).             { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
×
706
xnode_task_options(A) ::= xnode_task_options(B) TRIGGER NK_EQ NK_STRING(D).       { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
×
707
xnode_task_options(A) ::= xnode_task_options(B) NK_COMMA TRIGGER NK_STRING(D).         { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
708
xnode_task_options(A) ::= xnode_task_options(B) NK_COMMA TRIGGER NK_EQ NK_STRING(D).         { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
×
709
xnode_task_options(A) ::= xnode_task_options(B) AND TRIGGER NK_STRING(D).          { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
710
xnode_task_options(A) ::= xnode_task_options(B) AND TRIGGER NK_EQ NK_STRING(D).    { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
711

712
with_task_options_opt(A) ::= .                                                    { A = NULL; }
713
with_task_options_opt(A) ::= WITH xnode_task_options(B).                          { A = B; }
714
with_task_options_opt(A) ::= SET xnode_task_options(B).                           { A = B; }
715

716
xnode_task_from_opt(A) ::= .                                                      { A = NULL; }
717
xnode_task_from_opt(A) ::= FROM xnode_task_source(B).                             { A = B; }
718

719
xnode_task_to_opt(A) ::= .                                                        { A = NULL; }
720
xnode_task_to_opt(A) ::= TO xnode_task_sink(B).                                   { A = B; }
721

722
cmd ::= CREATE XNODE NK_STRING(A).                                                { pCxt->pRootNode = createCreateXnodeStmt(pCxt, &A); }
2,362✔
723
cmd ::= CREATE XNODE NK_STRING(A) USER user_name(B) PASS NK_STRING(C).            { pCxt->pRootNode = createCreateXnodeWithUserPassStmt(pCxt, &A, &B, &C); }
1,830✔
724
cmd ::= CREATE XNODE NK_STRING(A) TOKEN NK_STRING(B).                             { pCxt->pRootNode = createCreateXnodeWithTokenStmt(pCxt, &A, &B); }
78✔
725
// alter
726
cmd ::= ALTER XNODE SET TOKEN NK_STRING(B).                                       { pCxt->pRootNode = createAlterXnodeStmt(pCxt, &B, NULL, NULL); }
156✔
727
cmd ::= ALTER XNODE SET USER user_name(B) PASS NK_STRING(C).                      { pCxt->pRootNode = createAlterXnodeStmt(pCxt, NULL, &B, &C); }
312✔
728
cmd ::= DROP XNODE xnode_endpoint(A) force_opt(B).                                { pCxt->pRootNode = createDropXnodeStmt(pCxt, &A, B); }
4,899✔
729
cmd ::= DROP XNODE FORCE xnode_endpoint(A).                                       { pCxt->pRootNode = createDropXnodeStmt(pCxt, &A, true); }
3,289✔
730

731
cmd ::= DRAIN XNODE NK_INTEGER(A).                                                { pCxt->pRootNode = createDrainXnodeStmt(pCxt, &A); }
1,486✔
732

733
%type xnode_resource_type                                                         { EXnodeResourceType }
734
%destructor xnode_resource_type                                                   { }
735
xnode_resource_type(A) ::= NK_ID(B).                                              { A = setXnodeResourceType(pCxt, &B); }
63,912✔
736

737
/* create xnode agent 'a1' */
738
cmd ::= CREATE XNODE xnode_resource_type(A) NK_STRING(B) with_task_options_opt(E).
739
                                                                                  { pCxt->pRootNode = createXnodeTaskWithOptions(pCxt, A, &B, NULL, NULL, E); }
702✔
740

741
/* create xnode task 't1' from 'mqtt://xxx' to database s1 with parser '{...}' */
742
cmd ::= CREATE XNODE xnode_resource_type(A) NK_STRING(B) FROM xnode_task_source(C) TO xnode_task_sink(D) with_task_options_opt(E).
743
                                                                                  { pCxt->pRootNode = createXnodeTaskWithOptions(pCxt, A, &B, C, D, E); }
16,380✔
744

745
/* create xnode job on 1 with config '{"json":true}' */
746
cmd ::= CREATE XNODE xnode_resource_type(A) ON NK_INTEGER(B) with_task_options_opt(C).
747
                                                                                  { pCxt->pRootNode = createXnodeTaskJobWithOptions(pCxt, A, &B, C); }
2,808✔
748

749
/*start xnode task 1; stop xnode task 1;*/
750
cmd ::= START XNODE xnode_resource_type(A) NK_INTEGER(B).                          { pCxt->pRootNode = createStartXnodeTaskStmt(pCxt, A, &B); }
780✔
751
cmd ::= START XNODE xnode_resource_type(A) NK_STRING(B).                          { pCxt->pRootNode = createStartXnodeTaskStmt(pCxt, A, &B); }
752
cmd ::= STOP XNODE xnode_resource_type(A) NK_INTEGER(B).                           { pCxt->pRootNode = createStopXnodeTaskStmt(pCxt, A, &B); }
780✔
753
cmd ::= STOP XNODE xnode_resource_type(A) NK_STRING(B).                            { pCxt->pRootNode = createStopXnodeTaskStmt(pCxt, A, &B); }
754

755
/* rebalance xnode job 1 with xnode_id 3;*/
756
cmd ::= REBALANCE XNODE xnode_resource_type(A) NK_INTEGER(B) with_task_options_opt(C).
757
                                                                                   { pCxt->pRootNode = createRebalanceXnodeJobStmt(pCxt, A, &B, C); }
858✔
758
cmd ::= REBALANCE XNODE xnode_resource_type(A) where_clause_opt(B).
759
                                                                                   { pCxt->pRootNode = createRebalanceXnodeJobWhereStmt(pCxt, A, B); }
1,170✔
760
                                                                                   
761
/* alter xnode task 't1' from 'mqtt://xxx' to database s1 with parser '{...}' */
762
cmd ::= ALTER XNODE xnode_resource_type(A) NK_INTEGER(B) xnode_task_from_opt(C) xnode_task_to_opt(D) with_task_options_opt(E).
763
                                                                                  { pCxt->pRootNode = alterXnodeTaskWithOptions(pCxt, A, &B, C, D, E); }
3,432✔
764
cmd ::= ALTER XNODE xnode_resource_type(A) NK_STRING(B) xnode_task_from_opt(C) xnode_task_to_opt(D) with_task_options_opt(E).
765
                                                                                  { pCxt->pRootNode = alterXnodeTaskWithOptions(pCxt, A, &B, C, D, E); }
766

767
/* drop xnode agent 'a1'; drop xnode task 't1'; drop xnode job 1; drop xnode task 1; */
768
cmd ::= DROP XNODE xnode_resource_type(A) NK_STRING(B).                           { pCxt->pRootNode = dropXnodeResource(pCxt, A, &B); }
14,976✔
769
cmd ::= DROP XNODE xnode_resource_type(A) NK_INTEGER(B).                          { pCxt->pRootNode = dropXnodeResource(pCxt, A, &B); }
770
cmd ::= DROP XNODE xnode_resource_type(A) WHERE search_condition(B).              { pCxt->pRootNode = dropXnodeResourceWhere(pCxt, A, B); }
12,792✔
771

772
/* show xnodes; or show xnodes where ...*/
773
cmd ::= SHOW XNODES where_clause_opt(B).                                          { pCxt->pRootNode = createShowXnodeStmtWithCond(pCxt, QUERY_NODE_SHOW_XNODES_STMT, B); }
1,553✔
774
/* show xnode tasks; or show xnode tasks where ...*/
775
/* show xnode agents; show xnode agents where ... */
776
/* show xnode jobs; show xnode jobs where ... */
777
cmd ::= SHOW XNODE xnode_resource_type(A) where_clause_opt(B).                    { pCxt->pRootNode = createShowXNodeResourcesWhereStmt(pCxt, A, B); }
9,234✔
778

779
/************************************************ create/drop/alter/restore dnode *********************************************/
780
cmd ::= CREATE DNODE dnode_endpoint(A).                                           { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); }
813✔
781
cmd ::= CREATE DNODE dnode_endpoint(A) PORT NK_INTEGER(B).                        { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); }
153,262✔
782
cmd ::= DROP DNODE NK_INTEGER(A) force_opt(B).                                    { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
10,458✔
783
cmd ::= DROP DNODE dnode_endpoint(A) force_opt(B).                                { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
×
784
cmd ::= DROP DNODE NK_INTEGER(A) unsafe_opt(B).                                   { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
785
cmd ::= DROP DNODE dnode_endpoint(A) unsafe_opt(B).                               { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
786
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B).                                   { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); }
19,434✔
787
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B) NK_STRING(C).                      { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, &C); }
44,604✔
788
cmd ::= ALTER DNODES RELOAD general_name(A).                                      { pCxt->pRootNode = createAlterAllDnodeTLSStmt(pCxt, &A);}
×
789
cmd ::= ALTER ALL DNODES NK_STRING(A).                                            { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, NULL); }
40,488✔
790
cmd ::= ALTER ALL DNODES NK_STRING(A) NK_STRING(B).                               { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, &B); }
4,054✔
791
cmd ::= RESTORE DNODE NK_INTEGER(A).                                              { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_DNODE_STMT, &A); }
317✔
792

793
%type dnode_endpoint                                                              { SToken }
794
%destructor dnode_endpoint                                                        { }
795
dnode_endpoint(A) ::= NK_STRING(B).                                               { A = B; }
796
dnode_endpoint(A) ::= NK_ID(B).                                                   { A = B; }
797
dnode_endpoint(A) ::= NK_IPTOKEN(B).                                              { A = B; }
798

799
%type force_opt                                                                   { bool }
800
%destructor force_opt                                                             { }
801
force_opt(A) ::= .                                                                { A = false; }
1,442,909,365✔
802
force_opt(A) ::= FORCE.                                                           { A = true; }
59,058,957✔
803

804
%type unsafe_opt                                                                  { bool }
805
%destructor unsafe_opt                                                            { }
806
unsafe_opt(A) ::= UNSAFE.                                                         { A = true; }
807

808
/************************************************ alter cluster *********************************************************/
809
cmd ::= ALTER CLUSTER NK_STRING(A).                                               { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, NULL); }
×
810
cmd ::= ALTER CLUSTER NK_STRING(A) NK_STRING(B).                                  { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, &B); }
858✔
811

812
/************************************************ alter local *********************************************************/
813
cmd ::= ALTER LOCAL NK_STRING(A).                                                 { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
5,088✔
814
cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B).                                    { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); }
423,299✔
815

816
/************************************************ create/drop/restore qnode ***************************************************/
817
cmd ::= CREATE QNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_QNODE_STMT, &A); }
3,956✔
818
cmd ::= DROP QNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_QNODE_STMT, &A); }
754✔
819
cmd ::= RESTORE QNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_QNODE_STMT, &A); }
412✔
820

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

825
/************************************************ create/drop snode ***************************************************/
826
cmd ::= CREATE SNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_SNODE_STMT, &A); }
78,660✔
827
cmd ::= DROP SNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_SNODE_STMT, &A); }
51,459✔
828

829
/************************************************ create/drop bnode ***************************************/
830
cmd ::= CREATE BNODE ON DNODE NK_INTEGER(A) bnode_options(B).                     { pCxt->pRootNode = createCreateBnodeStmt(pCxt, &A, B); }
24,399✔
831
cmd ::= DROP BNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropBnodeStmt(pCxt, &A); }
28,907✔
832

833
bnode_options(A) ::= .                                                            { A = createDefaultBnodeOptions(pCxt); }
24,399✔
834
bnode_options(A) ::= bnode_options(B) NK_ID(C) NK_STRING(D).                      { A = setBnodeOption(pCxt, B, &C, &D); }
×
835

836
/************************************************ create/drop/restore mnode ***************************************************/
837
cmd ::= CREATE MNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_MNODE_STMT, &A); }
22,147✔
838
cmd ::= DROP MNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &A); }
2,614✔
839
cmd ::= RESTORE MNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_MNODE_STMT, &A); }
420✔
840

841
/************************************************ restore vnode ***************************************************/
842
cmd ::= RESTORE VNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_VNODE_STMT, &A); }
420✔
843

844
/************************************************ create/drop/use database ********************************************/
845
cmd ::= CREATE DATABASE not_exists_opt(A) db_name(B) db_options(C).               { pCxt->pRootNode = createCreateDatabaseStmt(pCxt, A, &B, C); }
1,420,641✔
846
cmd ::= DROP DATABASE exists_opt(A) db_name(B) force_opt(C).                      { pCxt->pRootNode = createDropDatabaseStmt(pCxt, A, &B, C); }
1,172,563✔
847
cmd ::= USE db_name(A).                                                           { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); }
82,296,223✔
848
cmd ::= ALTER DATABASE db_name(A) alter_db_options(B).                            { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); }
185,064✔
849
cmd ::= FLUSH DATABASE db_name(A).                                                { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); }
1,796,837✔
850
cmd ::= TRIM DATABASE db_name(A) speed_opt(B).                                    { pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &A, B); }
8,238✔
851
cmd ::= TRIM DATABASE db_name(A) WAL.                                             { pCxt->pRootNode = createTrimDbWalStmt(pCxt, &A); }
1,120✔
852
cmd ::= SSMIGRATE DATABASE db_name(A).                                            { pCxt->pRootNode = createSsMigrateDatabaseStmt(pCxt, &A); }
2,301✔
853
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); }
28,140✔
854
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); }
4,554✔
855
cmd ::= SCAN DATABASE db_name(A) start_opt(B) end_opt(C).                                          { pCxt->pRootNode = createScanStmt(pCxt, &A, B, C); }
236✔
856
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); }
384✔
857

858
%type meta_only                                                                  { bool }
859
%destructor meta_only                                                            { }
860
meta_only(A) ::= .                                                                { A = false; }
861
meta_only(A) ::= META_ONLY.                                                      { A = true; }
862

863
%type not_exists_opt                                                              { bool }
864
%destructor not_exists_opt                                                        { }
865
not_exists_opt(A) ::= IF NOT EXISTS.                                              { A = true; }
20,308,397✔
866
not_exists_opt(A) ::= .                                                           { A = false; }
867

868
%type exists_opt                                                                  { bool }
869
%destructor exists_opt                                                            { }
870
exists_opt(A) ::= IF EXISTS.                                                      { A = true; }
2,043,830✔
871
exists_opt(A) ::= .                                                               { A = false; }
872

873
db_options(A) ::= .                                                               { A = createDefaultDatabaseOptions(pCxt); }
1,454,629✔
874
db_options(A) ::= db_options(B) BUFFER NK_INTEGER(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_BUFFER, &C); }
46,705✔
875
db_options(A) ::= db_options(B) CACHEMODEL NK_STRING(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHEMODEL, &C); }
48,077✔
876
db_options(A) ::= db_options(B) CACHESIZE NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHESIZE, &C); }
7,042✔
877
db_options(A) ::= db_options(B) COMP NK_INTEGER(C).                               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMP, &C); }
16,854✔
878
db_options(A) ::= db_options(B) DURATION NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
295,281✔
879
db_options(A) ::= db_options(B) DURATION NK_VARIABLE(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
880
db_options(A) ::= db_options(B) MAXROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MAXROWS, &C); }
30,263✔
881
db_options(A) ::= db_options(B) MINROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MINROWS, &C); }
28,370✔
882
db_options(A) ::= db_options(B) KEEP integer_list(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
154,688✔
883
db_options(A) ::= db_options(B) KEEP variable_list(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
884
db_options(A) ::= db_options(B) PAGES NK_INTEGER(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGES, &C); }
7,720✔
885
db_options(A) ::= db_options(B) PAGESIZE NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGESIZE, &C); }
5,565✔
886
db_options(A) ::= db_options(B) TSDB_PAGESIZE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_TSDB_PAGESIZE, &C); }
4,210✔
887
db_options(A) ::= db_options(B) PRECISION NK_STRING(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PRECISION, &C); }
118,798✔
888
db_options(A) ::= db_options(B) REPLICAS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
515,820✔
889
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
890
//db_options(A) ::= db_options(B) STRICT NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_STRICT, &C); }
891
db_options(A) ::= db_options(B) VGROUPS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_VGROUPS, &C); }
517,247✔
892
db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SINGLE_STABLE, &C); }
6,971✔
893
db_options(A) ::= db_options(B) RETENTIONS retention_list(C).                     { A = setDatabaseOption(pCxt, B, DB_OPTION_RETENTIONS, C); }
×
894
db_options(A) ::= db_options(B) SCHEMALESS NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SCHEMALESS, &C); }
19,886✔
895
db_options(A) ::= db_options(B) WAL_LEVEL NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL, &C); }
27,242✔
896
db_options(A) ::= db_options(B) WAL_FSYNC_PERIOD NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_FSYNC, &C); }
18,826✔
897
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_INTEGER(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &C); }
66,420✔
898
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_MINUS(D) NK_INTEGER(C).   {
899
                                                                                    SToken t = D;
6,033✔
900
                                                                                    t.n = (C.z + C.n) - D.z;
6,033✔
901
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &t);
6,033✔
902
                                                                                  }
903
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_INTEGER(C).                 { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &C); }
9,137✔
904
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_MINUS(D) NK_INTEGER(C).     {
905
                                                                                    SToken t = D;
6,033✔
906
                                                                                    t.n = (C.z + C.n) - D.z;
6,033✔
907
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &t);
6,033✔
908
                                                                                  }
909
db_options(A) ::= db_options(B) WAL_ROLL_PERIOD NK_INTEGER(C).                    { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_ROLL_PERIOD, &C); }
×
910
db_options(A) ::= db_options(B) WAL_SEGMENT_SIZE NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_SEGMENT_SIZE, &C); }
×
911
db_options(A) ::= db_options(B) STT_TRIGGER NK_INTEGER(C).                        { A = setDatabaseOption(pCxt, B, DB_OPTION_STT_TRIGGER, &C); }
37,014✔
912
db_options(A) ::= db_options(B) TABLE_PREFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_PREFIX, C); }
16,495✔
913
db_options(A) ::= db_options(B) TABLE_SUFFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_SUFFIX, C); }
15,937✔
914
db_options(A) ::= db_options(B) SS_CHUNKPAGES NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_CHUNKPAGES, &C); }
4,829✔
915
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_INTEGER(C).                       { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
4,739✔
916
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_VARIABLE(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
917
db_options(A) ::= db_options(B) SS_COMPACT NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_COMPACT, &C); }
3,551✔
918
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
6,878✔
919
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
920
db_options(A) ::= db_options(B) ENCRYPT_ALGORITHM NK_STRING(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_ENCRYPT_ALGORITHM, &C); }
6,468✔
921
db_options(A) ::= db_options(B) DNODES NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_DNODES, &C); }
26,947✔
922
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_INTEGER (C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
16,214✔
923
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
924
db_options(A) ::= db_options(B) COMPACT_TIME_RANGE signed_duration_list(C).       { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_RANGE, C); }
25,735✔
925
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_INTEGER(C).                { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
14,350✔
926
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_VARIABLE(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
927
db_options(A) ::= db_options(B) IS_AUDIT NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_IS_AUDIT, &C); }
3,222✔
928

929

930
alter_db_options(A) ::= alter_db_option(B).                                       { A = createAlterDatabaseOptions(pCxt); A = setAlterDatabaseOption(pCxt, A, &B); }
189,564✔
931
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C).                   { A = setAlterDatabaseOption(pCxt, B, &C); }
15,575✔
932

933
%type alter_db_option                                                             { SAlterOption }
934
%destructor alter_db_option                                                       { }
935
alter_db_option(A) ::= BUFFER NK_INTEGER(B).                                      { A.type = DB_OPTION_BUFFER; A.val = B; }
8,575✔
936
alter_db_option(A) ::= CACHEMODEL NK_STRING(B).                                   { A.type = DB_OPTION_CACHEMODEL; A.val = B; }
17,074✔
937
alter_db_option(A) ::= CACHESIZE NK_INTEGER(B).                                   { A.type = DB_OPTION_CACHESIZE; A.val = B; }
4,570✔
938
alter_db_option(A) ::= WAL_FSYNC_PERIOD NK_INTEGER(B).                            { A.type = DB_OPTION_FSYNC; A.val = B; }
12,485✔
939
alter_db_option(A) ::= KEEP integer_list(B).                                      { A.type = DB_OPTION_KEEP; A.pList = B; }
38,789✔
940
alter_db_option(A) ::= KEEP variable_list(B).                                     { A.type = DB_OPTION_KEEP; A.pList = B; }
941
alter_db_option(A) ::= PAGES NK_INTEGER(B).                                       { A.type = DB_OPTION_PAGES; A.val = B; }
5,257✔
942
alter_db_option(A) ::= REPLICA NK_INTEGER(B).                                     { A.type = DB_OPTION_REPLICA; A.val = B; }
10,360✔
943
alter_db_option(A) ::= REPLICAS NK_INTEGER(B).                                    { A.type = DB_OPTION_REPLICA; A.val = B; }
944
//alter_db_option(A) ::= STRICT NK_STRING(B).                                       { A.type = DB_OPTION_STRICT; A.val = B; }
945
alter_db_option(A) ::= WAL_LEVEL NK_INTEGER(B).                                   { A.type = DB_OPTION_WAL; A.val = B; }
18,168✔
946
alter_db_option(A) ::= STT_TRIGGER NK_INTEGER(B).                                 { A.type = DB_OPTION_STT_TRIGGER; A.val = B; }
2,762✔
947
alter_db_option(A) ::= MINROWS NK_INTEGER(B).                                     { A.type = DB_OPTION_MINROWS; A.val = B; }
5,876✔
948
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_INTEGER(B).                        { A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = B; }
13,248✔
949
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_MINUS(B) NK_INTEGER(C).            {
950
                                                                                    SToken t = B;
×
951
                                                                                    t.n = (C.z + C.n) - B.z;
×
952
                                                                                    A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = t;
×
953
                                                                                  }
954
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_INTEGER(B).                          { A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = B; }
1,490✔
955
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_MINUS(B) NK_INTEGER(C).              {
956
                                                                                    SToken t = B;
×
957
                                                                                    t.n = (C.z + C.n) - B.z;
×
958
                                                                                    A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = t;
×
959
                                                                                  }
960
alter_db_option(A) ::= SS_KEEPLOCAL NK_INTEGER(B).                                { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
731✔
961
alter_db_option(A) ::= SS_KEEPLOCAL NK_VARIABLE(B).                               { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
962
alter_db_option(A) ::= SS_COMPACT NK_INTEGER(B).                                  { A.type = DB_OPTION_SS_COMPACT, A.val = B; }
2,193✔
963
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_INTEGER(B).                            { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
4,471✔
964
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_VARIABLE(B).                           { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
965
alter_db_option(A) ::= ENCRYPT_ALGORITHM NK_STRING(B).                            { A.type = DB_OPTION_ENCRYPT_ALGORITHM; A.val = B; }
3,767✔
966
alter_db_option(A) ::= COMPACT_INTERVAL NK_INTEGER(B).                            { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
15,883✔
967
alter_db_option(A) ::= COMPACT_INTERVAL NK_VARIABLE(B).                           { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
968
alter_db_option(A) ::= COMPACT_TIME_RANGE signed_duration_list(B).                { A.type = DB_OPTION_COMPACT_TIME_RANGE; A.pList = B; }
24,288✔
969
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_INTEGER(B).                         { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
15,152✔
970
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_VARIABLE(B).                        { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
971
alter_db_option(A) ::= ALLOW_DROP NK_INTEGER(B).                                  { A.type = DB_OPTION_ALLOW_DROP; A.val = B; }
×
972

973
%type integer_list                                                                { SNodeList* }
974
%destructor integer_list                                                          { nodesDestroyList($$); }
975
integer_list(A) ::= NK_INTEGER(B).                                                { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
160,727✔
976
integer_list(A) ::= integer_list(B) NK_COMMA NK_INTEGER(C).                       { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
127,888✔
977

978
%type variable_list                                                               { SNodeList* }
979
%destructor variable_list                                                         { nodesDestroyList($$); }
980
variable_list(A) ::= NK_VARIABLE(B).                                              { A = createNodeList(pCxt, createDurationValueNode(pCxt, &B)); }
42,897✔
981
variable_list(A) ::= variable_list(B) NK_COMMA NK_VARIABLE(C).                    { A = addNodeToList(pCxt, B, createDurationValueNode(pCxt, &C)); }
43,298✔
982

983
%type signed_duration_list                                                        { SNodeList* }
984
%destructor signed_duration_list                                                  { nodesDestroyList($$); }
985
signed_duration_list(A) ::= signed_variable(B).                                   { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
283,792,703✔
986
signed_duration_list(A) ::= signed_integer(B).                                    { A = createNodeList(pCxt, B); }
1,045,775,841✔
987
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_integer(C).   { A = addNodeToList(pCxt, B, C); }
930,596,455✔
988
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_variable(C).  { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
126,064,662✔
989

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

995
retention(A) ::= NK_VARIABLE(B) NK_COLON NK_VARIABLE(C).                          { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
×
996
retention(A) ::= NK_MINUS(B) NK_COLON NK_VARIABLE(C).                             { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
997

998
%type speed_opt                                                                   { int32_t }
999
%destructor speed_opt                                                             { }
1000
speed_opt(A) ::= .                                                                { A = 0; }
16,395✔
1001
speed_opt(A) ::= BWLIMIT NK_INTEGER(B).                                           { A = taosStr2Int32(B.z, NULL, 10); }
5,945✔
1002

1003
start_opt(A) ::= .                                                                { A = NULL; }
1004
start_opt(A) ::= START WITH NK_INTEGER(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
×
1005
start_opt(A) ::= START WITH NK_STRING(B).                                         { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2,193✔
1006
start_opt(A) ::= START WITH TIMESTAMP NK_STRING(B).                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
×
1007

1008
end_opt(A) ::= .                                                                  { A = NULL; }
1009
end_opt(A) ::= END WITH NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
1010
end_opt(A) ::= END WITH NK_STRING(B).                                             { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1011
end_opt(A) ::= END WITH TIMESTAMP NK_STRING(B).                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1012

1013
/************************************************ create/drop table/stable ********************************************/
1014
cmd ::= CREATE TABLE not_exists_opt(A) full_table_name(B)
1015
  NK_LP column_def_list(C) NK_RP tags_def_opt(D) table_options(E).                { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
8,482,404✔
1016
cmd ::= CREATE TABLE multi_create_clause(A).                                      { pCxt->pRootNode = createCreateMultiTableStmt(pCxt, A); }
40,517,735✔
1017
cmd ::= CREATE TABLE not_exists_opt(B) USING full_table_name(C)
1018
  NK_LP tag_list_opt(D) NK_RP FILE NK_STRING(E).                                  { pCxt->pRootNode = createCreateSubTableFromFileClause(pCxt, B, C, D, &E); }
1,355✔
1019
cmd ::= CREATE STABLE not_exists_opt(A) full_table_name(B)
1020
  NK_LP column_def_list(C) NK_RP tags_def(D) table_options(E).                    { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
1021
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
1022
  NK_LP column_def_list(C) NK_RP.                                                 { pCxt->pRootNode = createCreateVTableStmt(pCxt, A, B, C); }
175,362✔
1023
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
1024
  NK_LP specific_column_ref_list(C) NK_RP USING full_table_name(D)
1025
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, C, NULL, D, E, F); }
122,337✔
1026
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
1027
  NK_LP column_ref_list(C) NK_RP USING full_table_name(D)
1028
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, C, D, E, F); }
137,884✔
1029
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B) USING full_table_name(C)
1030
  specific_cols_opt(D) TAGS NK_LP tags_literal_list(E) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, NULL, C, D, E); }
21,706✔
1031
cmd ::= DROP TABLE with_opt(A) multi_drop_clause(B).                              { pCxt->pRootNode = createDropTableStmt(pCxt, A, B); }
2,121,397✔
1032
cmd ::= DROP STABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropSuperTableStmt(pCxt, A, B, C); }
83,968✔
1033
cmd ::= DROP VTABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropVirtualTableStmt(pCxt, A, B, C); }
72,569✔
1034

1035
cmd ::= ALTER TABLE alter_table_clause(A).                                        { pCxt->pRootNode = A; }
186,573,868✔
1036
cmd ::= ALTER STABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterSuperTableType(A); }
507,057✔
1037
cmd ::= ALTER VTABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterVirtualTableType(A); }
383,054✔
1038

1039

1040
alter_table_clause(A) ::= full_table_name(B) alter_table_options(C).              { A = createAlterTableModifyOptions(pCxt, B, C); }
70,349✔
1041
alter_table_clause(A) ::=
1042
  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); }
6,257,935✔
1043
alter_table_clause(A) ::= full_table_name(B) DROP COLUMN column_name(C).          { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_COLUMN, &C); }
1,612,851✔
1044
alter_table_clause(A) ::=
1045
  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,796,409✔
1046
alter_table_clause(A) ::=
1047
  full_table_name(B) MODIFY COLUMN column_name(C) column_options(D).              { A = createAlterTableAddModifyColOptions(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS, &C, D); }
111,469✔
1048
alter_table_clause(A) ::=
1049
  full_table_name(B) RENAME COLUMN column_name(C) column_name(D).                 { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &C, &D); }
73,164✔
1050
alter_table_clause(A) ::=
1051
  full_table_name(B) ADD TAG column_name(C) type_name(D).                         { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_ADD_TAG, &C, D); }
304,637✔
1052
alter_table_clause(A) ::= full_table_name(B) DROP TAG column_name(C).             { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_TAG, &C); }
119,368✔
1053
alter_table_clause(A) ::=
1054
  full_table_name(B) MODIFY TAG column_name(C) type_name(D).                      { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &C, D); }
541,708✔
1055
alter_table_clause(A) ::=
1056
  full_table_name(B) RENAME TAG column_name(C) column_name(D).                    { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
129,267✔
1057
alter_table_clause(A) ::=
1058
  full_table_name(B) ALTER COLUMN column_name(C) SET column_ref(D).
1059
                                                                                  { A = createAlterTableAlterColRef(pCxt, B, TSDB_ALTER_TABLE_ALTER_COLUMN_REF, &C, D); }
112,114✔
1060

1061
alter_table_clause(A) ::=
1062
  full_table_name(B) ALTER COLUMN column_name(C) SET NULL(D).                     { A = createAlterTableRemoveColRef(pCxt, B, TSDB_ALTER_TABLE_REMOVE_COLUMN_REF, &C, &D); }
66,201✔
1063

1064
%type column_tag_value_list                                                          { SNodeList* }
1065
%destructor column_tag_value_list                                                    { nodesDestroyList($$); }
1066
column_tag_value(A) ::= column_name(C) NK_EQ tags_literal(D).                        { A = createAlterSingleTagColumnNode(pCxt, &C, D); }
8,207,353✔
1067
column_tag_value_list(A) ::= column_tag_value(B).                                    { A = createNodeList(pCxt, B); }
1068
column_tag_value_list(A) ::= column_tag_value_list(B) NK_COMMA column_tag_value(C).  { A = addNodeToList(pCxt, B, C);}
34,426✔
1069

1070
alter_table_clause(A) ::=
1071
  full_table_name(B) SET TAG column_tag_value_list(C).                            { A = createAlterTableSetMultiTagValue(pCxt, B, C); }
8,171,591✔
1072

1073
%type multi_create_clause                                                         { SNodeList* }
1074
%destructor multi_create_clause                                                   { nodesDestroyList($$); }
1075
multi_create_clause(A) ::= create_subtable_clause(B).                             { A = createNodeList(pCxt, B); }
1076
multi_create_clause(A) ::= multi_create_clause(B) create_subtable_clause(C).      { A = addNodeToList(pCxt, B, C); }
6,613,974✔
1077

1078
create_subtable_clause(A) ::=
1079
  not_exists_opt(B) full_table_name(C) USING full_table_name(D)
1080
  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); }
46,899,771✔
1081

1082
%type multi_drop_clause                                                           { SNodeList* }
1083
%destructor multi_drop_clause                                                     { nodesDestroyList($$); }
1084
multi_drop_clause(A) ::= drop_table_clause(B).                                    { A = createNodeList(pCxt, B); }
1085
multi_drop_clause(A) ::= multi_drop_clause(B) NK_COMMA drop_table_clause(C).      { A = addNodeToList(pCxt, B, C); }
1086

1087
drop_table_clause(A) ::= exists_opt(B) full_table_name(C).                        { A = createDropTableClause(pCxt, B, C); }
2,242,916✔
1088

1089
%type with_opt                                                                    { bool }
1090
%destructor with_opt                                                              { }
1091
with_opt(A) ::= .                                                                 { A = false; }
1092
with_opt(A) ::= WITH.                                                             { A = true; }
1093

1094
%type specific_cols_opt                                                           { SNodeList* }
1095
%destructor specific_cols_opt                                                     { nodesDestroyList($$); }
1096
specific_cols_opt(A) ::= .                                                        { A = NULL; }
1,797,962,374✔
1097
specific_cols_opt(A) ::= NK_LP col_name_list(B) NK_RP.                            { A = B; }
1,399,145✔
1098

1099
%type specific_cols_with_mask_opt                                                 { SNodeList* }
1100
%destructor specific_cols_with_mask_opt                                           { nodesDestroyList($$); }
1101
specific_cols_with_mask_opt(A) ::= .                                              { A = NULL; }
1102
specific_cols_with_mask_opt(A) ::= NK_LP col_name_ex_list(B) NK_RP.               { A = B; }
1103

1104
full_table_name(A) ::= table_name(B).                                             { A = createRealTableNode(pCxt, NULL, &B, NULL); }
33,801,910✔
1105
full_table_name(A) ::= db_name(B) NK_DOT table_name(C).                           { A = createRealTableNode(pCxt, &B, &C, NULL); }
94,884,840✔
1106

1107
%type tag_def_list                                                                { SNodeList* }
1108
%destructor tag_def_list                                                          { nodesDestroyList($$); }
1109
tag_def_list(A) ::= tag_def(B).                                                   { A = createNodeList(pCxt, B); }
1110
tag_def_list(A) ::= tag_def_list(B) NK_COMMA tag_def(C).                          { A = addNodeToList(pCxt, B, C); }
1111
tag_def(A) ::= column_name(B) type_name(C).                                       { A = createColumnDefNode(pCxt, &B, C, NULL); }
5,011,153✔
1112

1113
%type column_def_list                                                             { SNodeList* }
1114
%destructor column_def_list                                                       { nodesDestroyList($$); }
1115
column_def_list(A) ::= column_def(B).                                             { A = createNodeList(pCxt, B); }
1116
column_def_list(A) ::= column_def_list(B) NK_COMMA column_def(C).                 { A = addNodeToList(pCxt, B, C); }
1117

1118
// column_def(A) ::= column_name(B) type_name(C).                                 { A = createColumnDefNode(pCxt, &B, C, NULL); }
1119
column_def(A) ::= column_name(B) type_name(C) column_options(D).                  { A = createColumnDefNode(pCxt, &B, C, D); }
399,269,934✔
1120

1121
%type specific_column_ref_list                                                               { SNodeList* }
1122
%destructor specific_column_ref_list                                                         { nodesDestroyList($$); }
1123
specific_column_ref_list(A) ::= specific_column_ref(B).                                      { A = createNodeList(pCxt, B); }
1124
specific_column_ref_list(A) ::= specific_column_ref_list(B) NK_COMMA specific_column_ref(C). { A = addNodeToList(pCxt, B, C); }
1125

1126
specific_column_ref(A) ::= column_name(B) FROM column_ref(C).                    { A = createColumnRefNodeByNode(pCxt, &B, C); }
54,103,905✔
1127

1128
%type column_ref_list                                                             { SNodeList* }
1129
%destructor column_ref_list                                                       { nodesDestroyList($$); }
1130
column_ref_list(A) ::= column_ref(B).                                             { A = createNodeList(pCxt, B); }
1131
column_ref_list(A) ::= column_ref_list(B) NK_COMMA column_ref(C).                 { A = addNodeToList(pCxt, B, C); }
1132

1133
%type type_name                                                                   { SDataType }
1134
%destructor type_name                                                             { }
1135
type_name(A) ::= BOOL.                                                            { A = createDataType(TSDB_DATA_TYPE_BOOL); }
6,331,052✔
1136
type_name(A) ::= TINYINT.                                                         { A = createDataType(TSDB_DATA_TYPE_TINYINT); }
5,668,339✔
1137
type_name(A) ::= SMALLINT.                                                        { A = createDataType(TSDB_DATA_TYPE_SMALLINT); }
6,616,847✔
1138
type_name(A) ::= INT.                                                             { A = createDataType(TSDB_DATA_TYPE_INT); }
50,241,301✔
1139
type_name(A) ::= INTEGER.                                                         { A = createDataType(TSDB_DATA_TYPE_INT); }
1140
type_name(A) ::= BIGINT.                                                          { A = createDataType(TSDB_DATA_TYPE_BIGINT); }
15,453,435✔
1141
type_name(A) ::= FLOAT.                                                           { A = createDataType(TSDB_DATA_TYPE_FLOAT); }
6,450,812✔
1142
type_name(A) ::= DOUBLE.                                                          { A = createDataType(TSDB_DATA_TYPE_DOUBLE); }
294,453,904✔
1143
type_name(A) ::= BINARY NK_LP NK_INTEGER(B) NK_RP.                                { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &B); }
86,560,103✔
1144
type_name(A) ::= TIMESTAMP.                                                       { A = createDataType(TSDB_DATA_TYPE_TIMESTAMP); }
16,577,948✔
1145
type_name(A) ::= NCHAR NK_LP NK_INTEGER(B) NK_RP.                                 { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &B); }
16,130,364✔
1146
type_name(A) ::= TINYINT UNSIGNED.                                                { A = createDataType(TSDB_DATA_TYPE_UTINYINT); }
1,033,187✔
1147
type_name(A) ::= SMALLINT UNSIGNED.                                               { A = createDataType(TSDB_DATA_TYPE_USMALLINT); }
1,023,154✔
1148
type_name(A) ::= INT UNSIGNED.                                                    { A = createDataType(TSDB_DATA_TYPE_UINT); }
1,081,504✔
1149
type_name(A) ::= BIGINT UNSIGNED.                                                 { A = createDataType(TSDB_DATA_TYPE_UBIGINT); }
1,825,391✔
1150
type_name(A) ::= JSON.                                                            { A = createDataType(TSDB_DATA_TYPE_JSON); }
23,461✔
1151
type_name(A) ::= VARCHAR NK_LP NK_INTEGER(B) NK_RP.                               { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &B); }
770,519✔
1152
type_name(A) ::= MEDIUMBLOB.                                                      { A = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); }
2,696✔
1153
type_name(A) ::= BLOB.                                                            { A = createDataType(TSDB_DATA_TYPE_BLOB); }
17,641✔
1154
type_name(A) ::= VARBINARY NK_LP NK_INTEGER(B) NK_RP.                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &B); }
386,597✔
1155
type_name(A) ::= GEOMETRY NK_LP NK_INTEGER(B) NK_RP.                              { A = createVarLenDataType(TSDB_DATA_TYPE_GEOMETRY, &B); }
375,610✔
1156
// type_name(A) ::= DECIMAL.                                                      { A = createDataType(TSDB_DATA_TYPE_DECIMAL); }
1157
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_RP.                               { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, NULL); }
76,366✔
1158
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_RP.        { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, &C); }
156,464✔
1159

1160
%type type_name_default_len                                                       { SDataType }
1161
%destructor type_name_default_len                                                 { }
1162
type_name_default_len(A) ::= BINARY.                                              { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, NULL); }
10,912✔
1163
type_name_default_len(A) ::= NCHAR.                                               { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, NULL); }
3,200✔
1164
type_name_default_len(A) ::= VARCHAR.                                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, NULL); }
4,497,855✔
1165
type_name_default_len(A) ::= VARBINARY.                                           { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, NULL); }
3,888✔
1166

1167
%type tags_def_opt                                                                { SNodeList* }
1168
%destructor tags_def_opt                                                          { nodesDestroyList($$); }
1169
tags_def_opt(A) ::= .                                                             { A = NULL; }
1170
tags_def_opt(A) ::= tags_def(B).                                                  { A = B; }
36,531,593✔
1171

1172
%type tags_def                                                                    { SNodeList* }
1173
%destructor tags_def                                                              { nodesDestroyList($$); }
1174
tags_def(A) ::= TAGS NK_LP tag_def_list(B) NK_RP.                                 { A = B; }
1,650,382✔
1175

1176
table_options(A) ::= .                                                            { A = createDefaultTableOptions(pCxt); }
55,409,824✔
1177
table_options(A) ::= table_options(B) COMMENT NK_STRING(C).                       { A = setTableOption(pCxt, B, TABLE_OPTION_COMMENT, &C); }
15,955✔
1178
table_options(A) ::= table_options(B) MAX_DELAY duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_MAXDELAY, C); }
×
1179
table_options(A) ::= table_options(B) WATERMARK duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_WATERMARK, C); }
×
1180
table_options(A) ::= table_options(B) ROLLUP NK_LP rollup_func_list(C) NK_RP.     { A = setTableOption(pCxt, B, TABLE_OPTION_ROLLUP, C); }
×
1181
table_options(A) ::= table_options(B) TTL NK_INTEGER(C).                          { A = setTableOption(pCxt, B, TABLE_OPTION_TTL, &C); }
97,780✔
1182
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP.           { A = setTableOption(pCxt, B, TABLE_OPTION_SMA, C); }
454,606✔
1183
table_options(A) ::= table_options(B) DELETE_MARK duration_list(C).               { A = setTableOption(pCxt, B, TABLE_OPTION_DELETE_MARK, C); }
×
1184
table_options(A) ::= table_options(B) KEEP NK_INTEGER(C).                         { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
48,323✔
1185
table_options(A) ::= table_options(B) KEEP NK_VARIABLE(C).                        { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
1186
table_options(A) ::= table_options(B) VIRTUAL NK_INTEGER(C).                      { A = setTableOption(pCxt, B, TABLE_OPTION_VIRTUAL, &C); }
47,619✔
1187

1188
alter_table_options(A) ::= alter_table_option(B).                                 { A = createAlterTableOptions(pCxt); A = setTableOption(pCxt, A, B.type, &B.val); }
70,349✔
1189
alter_table_options(A) ::= alter_table_options(B) alter_table_option(C).          { A = setTableOption(pCxt, B, C.type, &C.val); }
×
1190

1191
%type alter_table_option                                                          { SAlterOption }
1192
%destructor alter_table_option                                                    { }
1193
alter_table_option(A) ::= COMMENT NK_STRING(B).                                   { A.type = TABLE_OPTION_COMMENT; A.val = B; }
34,478✔
1194
alter_table_option(A) ::= TTL NK_INTEGER(B).                                      { A.type = TABLE_OPTION_TTL; A.val = B; }
9,322✔
1195
alter_table_option(A) ::= KEEP NK_INTEGER(B).                                     { A.type = TABLE_OPTION_KEEP; A.val = B; }
26,549✔
1196
alter_table_option(A) ::= KEEP NK_VARIABLE(B).                                    { A.type = TABLE_OPTION_KEEP; A.val = B; }
1197

1198

1199
%type duration_list                                                               { SNodeList* }
1200
%destructor duration_list                                                         { nodesDestroyList($$); }
1201
duration_list(A) ::= duration_literal(B).                                         { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
1202
duration_list(A) ::= duration_list(B) NK_COMMA duration_literal(C).               { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
1203

1204
%type rollup_func_list                                                            { SNodeList* }
1205
%destructor rollup_func_list                                                      { nodesDestroyList($$); }
1206
rollup_func_list(A) ::= rollup_func_name(B).                                      { A = createNodeList(pCxt, B); }
1207
rollup_func_list(A) ::= rollup_func_list(B) NK_COMMA rollup_func_name(C).         { A = addNodeToList(pCxt, B, C); }
1208

1209
rollup_func_name(A) ::= function_name(B).                                         { A = createFunctionNode(pCxt, &B, NULL); }
×
1210
rollup_func_name(A) ::= FIRST(B).                                                 { A = createFunctionNode(pCxt, &B, NULL); }
738✔
1211
rollup_func_name(A) ::= LAST(B).                                                  { A = createFunctionNode(pCxt, &B, NULL); }
1212

1213
%type col_name_list                                                               { SNodeList* }
1214
%destructor col_name_list                                                         { nodesDestroyList($$); }
1215
col_name_list(A) ::= col_name(B).                                                 { A = createNodeList(pCxt, B); }
1216
col_name_list(A) ::= col_name_list(B) NK_COMMA col_name(C).                       { A = addNodeToList(pCxt, B, C); }
1217

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

1225
col_name(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
25,019,026✔
1226
col_name(A) ::= TBNAME(B).                                                        { A = createColumnNode(pCxt, NULL, &B); }
49,953,834✔
1227
col_name_with_mask(A) ::= MASK NK_LP column_name(B) NK_RP.                        { A = createColumnNodeExt(pCxt, NULL, &B, 1); }
18✔
1228

1229
/************************************************ create/drop mount ********************************************/
1230
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,525✔
1231
cmd ::= DROP MOUNT exists_opt(A) mount_name(B).                                   { pCxt->pRootNode = createDropMountStmt(pCxt, A, &B); }
548✔
1232

1233
/************************************************ show ****************************************************************/
1234
cmd ::= SHOW DNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
19,565✔
1235
cmd ::= SHOW USERS.                                                               { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
95,073✔
1236
cmd ::= SHOW USERS FULL.                                                          { pCxt->pRootNode = createShowStmtWithFull(pCxt, QUERY_NODE_SHOW_USERS_FULL_STMT); }
12,708✔
1237
cmd ::= SHOW USER PRIVILEGES.                                                     { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); }
3,098✔
1238
cmd ::= SHOW ROLES.                                                               { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLES_STMT); }
278✔
1239
cmd ::= SHOW ROLE PRIVILEGES.                                                     { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLE_PRIVILEGES_STMT); }
868✔
1240
cmd ::= SHOW ROLE COLUMN PRIVILEGES.                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLE_COL_PRIVILEGES_STMT); }
×
1241
cmd ::= SHOW db_kind_opt(A) DATABASES.                                            {
1242
                                                                                    pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT);
181,580✔
1243
                                                                                    (void)setShowKind(pCxt, pCxt->pRootNode, A);
181,580✔
1244
                                                                                  }
1245
cmd ::= SHOW table_kind_db_name_cond_opt(A) TABLES like_pattern_opt(B).           {
1246
                                                                                    pCxt->pRootNode = createShowTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
255,178✔
1247
                                                                                  }
1248
cmd ::= SHOW table_kind_db_name_cond_opt(A) VTABLES like_pattern_opt(B).          {
1249
                                                                                    pCxt->pRootNode = createShowVTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
59,652✔
1250
                                                                                  }
1251
cmd ::= SHOW table_kind_db_name_cond_opt(A) STABLES like_pattern_opt(B).          {
1252
                                                                                    pCxt->pRootNode = createShowSTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
223,612✔
1253
                                                                                  }
1254
cmd ::= SHOW db_name_cond_opt(A) VGROUPS.                                         { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, A, NULL, OP_TYPE_LIKE); }
256,409✔
1255
cmd ::= SHOW MNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); }
310,033✔
1256
//cmd ::= SHOW MODULES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MODULES_STMT); }
1257
cmd ::= SHOW QNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); }
1,412✔
1258
cmd ::= SHOW ANODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_STMT); }
172✔
1259
cmd ::= SHOW ANODES FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_FULL_STMT); }
×
1260
cmd ::= SHOW ARBGROUPS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ARBGROUPS_STMT); }
270✔
1261
cmd ::= SHOW FUNCTIONS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); }
11,028✔
1262
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,784✔
1263
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); }
742✔
1264
cmd ::= SHOW db_name_cond_opt(A) STREAMS.                                         { pCxt->pRootNode = createShowStreamsStmt(pCxt, A, QUERY_NODE_SHOW_STREAMS_STMT); }
109,554✔
1265
cmd ::= SHOW ACCOUNTS.                                                            { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
172✔
1266
cmd ::= SHOW APPS.                                                                { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); }
1,430✔
1267
cmd ::= SHOW CONNECTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
2,106✔
1268
cmd ::= SHOW LICENCES.                                                            { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
2,683✔
1269
cmd ::= SHOW GRANTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
1270
cmd ::= SHOW GRANTS FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_FULL_STMT); }
1,204✔
1271
cmd ::= SHOW GRANTS LOGS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_LOGS_STMT); }
1,204✔
1272
cmd ::= SHOW INSTANCES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_INSTANCES_STMT, B); }
×
1273
cmd ::= SHOW CLUSTER MACHINES.                                                    { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT); }
1,376✔
1274
cmd ::= SHOW MOUNTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MOUNTS_STMT); }
6,594✔
1275
cmd ::= SHOW CREATE DATABASE db_name(A).                                          { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
59,573✔
1276
cmd ::= SHOW CREATE TABLE full_table_name(A).                                     { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
81,419✔
1277
cmd ::= SHOW CREATE VTABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateVTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_VTABLE_STMT, A); }
7,091✔
1278
cmd ::= SHOW CREATE STABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT,
1,125✔
1279
A); }
1280
cmd ::= SHOW ENCRYPTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPTIONS_STMT); }
173✔
1281
cmd ::= SHOW ENCRYPT_ALGORITHMS.                                                  { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPT_ALGORITHMS_STMT); }
759✔
1282
cmd ::= SHOW ENCRYPT_STATUS.                                                      { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPT_STATUS_STMT); }
×
1283
cmd ::= SHOW QUERIES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
1,430✔
1284
cmd ::= SHOW SCORES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
×
1285
cmd ::= SHOW TOPICS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
18,087✔
1286
cmd ::= SHOW VARIABLES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
8,522✔
1287
cmd ::= SHOW CLUSTER VARIABLES like_pattern_opt(B).                               { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
1288
cmd ::= SHOW LOCAL VARIABLES like_pattern_opt(B).                                 { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT, B); }
12,470✔
1289
cmd ::= SHOW DNODE NK_INTEGER(A) VARIABLES like_pattern_opt(B).                   { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), B); }
37,309✔
1290
// cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BACKUP_NODES_STMT); }
1291
cmd ::= SHOW SNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }
64,050✔
1292
cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
56,351✔
1293
cmd ::= SHOW CLUSTER.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); }
1,810✔
1294
cmd ::= SHOW TRANSACTIONS.                                                        { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); }
391,044✔
1295
cmd ::= SHOW TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createShowTransactionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
174✔
1296
cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A).                                { pCxt->pRootNode = createShowTableDistributedStmt(pCxt, A); }
3,125✔
1297
cmd ::= SHOW CONSUMERS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
16,518✔
1298
cmd ::= SHOW SUBSCRIPTIONS.                                                       { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
23,230✔
1299
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); }
659,350✔
1300
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); }
1,032✔
1301
cmd ::= SHOW TABLE TAGS tag_list_opt(C) FROM table_name_cond(A) from_db_opt(B).   { pCxt->pRootNode = createShowTableTagsStmt(pCxt, A, B, C); }
3,268✔
1302
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,762✔
1303
cmd ::= SHOW VNODES ON DNODE NK_INTEGER(A).                                       { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), NULL); }
1,783✔
1304
cmd ::= SHOW VNODES.                                                              { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, NULL); }
3,684✔
1305
// show alive
1306
cmd ::= SHOW db_name_cond_opt(A) ALIVE.                                           { pCxt->pRootNode = createShowAliveStmt(pCxt, A,    QUERY_NODE_SHOW_DB_ALIVE_STMT); }
1,531✔
1307
cmd ::= SHOW CLUSTER ALIVE.                                                       { pCxt->pRootNode = createShowAliveStmt(pCxt, NULL, QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT); }
3,367✔
1308
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); }
13,861✔
1309
cmd ::= SHOW CREATE VIEW full_table_name(A).                                      { pCxt->pRootNode = createShowCreateViewStmt(pCxt, QUERY_NODE_SHOW_CREATE_VIEW_STMT, A); }
7,562✔
1310
cmd ::= SHOW COMPACTS.                                                            { pCxt->pRootNode = createShowCompactsStmt(pCxt, QUERY_NODE_SHOW_COMPACTS_STMT); }
339,445✔
1311
cmd ::= SHOW COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createShowCompactDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
32,050✔
1312
cmd ::= SHOW db_name_cond_opt(A) DISK_INFO.                                       { pCxt->pRootNode = createShowDiskUsageStmt(pCxt, A,    QUERY_NODE_SHOW_USAGE_STMT); }
320✔
1313
cmd ::= SHOW SCANS.                                                               { pCxt->pRootNode = createShowScansStmt(pCxt, QUERY_NODE_SHOW_SCANS_STMT); }
2,816✔
1314
cmd ::= SHOW SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createShowScanDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
2,176✔
1315
cmd ::= SHOW SSMIGRATES.                                                          { pCxt->pRootNode = createShowSsMigratesStmt(pCxt, QUERY_NODE_SHOW_SSMIGRATES_STMT); }
91,375✔
1316
cmd ::= SHOW TOKENS.                                                              { pCxt->pRootNode = createShowTokensStmt(pCxt, QUERY_NODE_SHOW_TOKENS_STMT); }
1,649✔
1317

1318
%type table_kind_db_name_cond_opt                                                 { SShowTablesOption }
1319
%destructor table_kind_db_name_cond_opt                                           { }
1320
table_kind_db_name_cond_opt(A) ::= .                                              { A.kind = SHOW_KIND_ALL; A.dbName = nil_token; }
156,108✔
1321
table_kind_db_name_cond_opt(A) ::= table_kind(B).                                 { A.kind = B; A.dbName = nil_token; }
378✔
1322
table_kind_db_name_cond_opt(A) ::= db_name(C) NK_DOT.                             { A.kind = SHOW_KIND_ALL; A.dbName = C; }
344,804✔
1323
table_kind_db_name_cond_opt(A) ::= table_kind(B) db_name(C) NK_DOT.               { A.kind = B; A.dbName = C; }
39,134✔
1324

1325
%type table_kind                                                                  { EShowKind }
1326
%destructor table_kind                                                            { }
1327
table_kind(A) ::= NORMAL.                                                         { A = SHOW_KIND_TABLES_NORMAL; }
19,772✔
1328
table_kind(A) ::= CHILD.                                                          { A = SHOW_KIND_TABLES_CHILD; }
19,103✔
1329
table_kind(A) ::= VIRTUAL.                                                        { A = SHOW_KIND_TABLES_VIRTUAL; }
637✔
1330

1331
db_name_cond_opt(A) ::= .                                                         { A = createDefaultDatabaseCondValue(pCxt); }
757,939✔
1332
db_name_cond_opt(A) ::= db_name(B) NK_DOT.                                        { A = createIdentifierValueNode(pCxt, &B); }
352,319✔
1333

1334
like_pattern_opt(A) ::= .                                                         { A = NULL; }
1335
like_pattern_opt(A) ::= LIKE NK_STRING(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
32,282✔
1336

1337
table_name_cond(A) ::= table_name(B).                                             { A = createIdentifierValueNode(pCxt, &B); }
666,402✔
1338

1339
from_db_opt(A) ::= .                                                              { A = createDefaultDatabaseCondValue(pCxt); }
1340
from_db_opt(A) ::= FROM db_name(B).                                               { A = createIdentifierValueNode(pCxt, &B); }
5,332✔
1341

1342
%type tag_list_opt                                                                { SNodeList* }
1343
%destructor tag_list_opt                                                          { nodesDestroyList($$); }
1344
tag_list_opt(A) ::= .                                                             { A = NULL; }
1345
tag_list_opt(A) ::= tag_item(B).                                                  { A = createNodeList(pCxt, B); }
1346
tag_list_opt(A) ::= tag_list_opt(B) NK_COMMA tag_item(C).                         { A = addNodeToList(pCxt, B, C); }
1347

1348
tag_item(A) ::= TBNAME(B).                                                        { A = setProjectionAlias(pCxt, createFunctionNode(pCxt, &B, NULL), &B); }
1,355✔
1349
tag_item(A) ::= QTAGS(B).                                                         { A = createFunctionNode(pCxt, &B, NULL); }
1350
tag_item(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
1351
tag_item(A) ::= column_name(B) column_alias(C).                                   { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
558✔
1352
tag_item(A) ::= column_name(B) AS column_alias(C).                                { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
×
1353

1354
%type db_kind_opt                                                                 { EShowKind }
1355
%destructor db_kind_opt                                                           { }
1356
db_kind_opt(A) ::= .                                                              { A = SHOW_KIND_ALL; }
181,234✔
1357
db_kind_opt(A) ::= USER.                                                          { A = SHOW_KIND_DATABASES_USER; }
173✔
1358
db_kind_opt(A) ::= SYSTEM.                                                        { A = SHOW_KIND_DATABASES_SYSTEM; }
173✔
1359

1360
/************************************************ rsma ********************************************************/
1361
cmd ::= CREATE RSMA not_exists_opt(B) rsma_name(C)
1362
  ON full_table_name(D) rsma_func_list(E)
1363
  INTERVAL NK_LP signed_duration_list(F) NK_RP.                                   { pCxt->pRootNode = createCreateRsmaStmt(pCxt, B, &C, D, E, F); }
109,758✔
1364
cmd ::= DROP RSMA exists_opt(B) full_rsma_name(C).                                { pCxt->pRootNode = createDropRsmaStmt(pCxt, B, C); }
9,593✔
1365
cmd ::= SHOW CREATE RSMA full_table_name(A).                                      { pCxt->pRootNode = createShowCreateRsmaStmt(pCxt, QUERY_NODE_SHOW_CREATE_RSMA_STMT, A); }
2,319✔
1366
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,845✔
1367
cmd ::= SHOW db_name_cond_opt(B) RSMAS.                                           { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RSMAS_STMT, B, NULL, OP_TYPE_LIKE); }
13,212✔
1368
cmd ::= SHOW db_name_cond_opt(B) RETENTIONS.                                      { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RETENTIONS_STMT, B, NULL, OP_TYPE_LIKE); }
41,667✔
1369
cmd ::= SHOW RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createShowRetentionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
2,193✔
1370
cmd ::= ROLLUP DATABASE db_name(A) start_opt(B) end_opt(C).                       { pCxt->pRootNode = createRollupStmt(pCxt, &A, B, C); }
9,539✔
1371
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,386✔
1372

1373
full_rsma_name(A) ::= rsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1374
full_rsma_name(A) ::= db_name(B) NK_DOT rsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1375

1376
%type rsma_func_list                                                              { SNodeList* }
1377
%destructor rsma_func_list                                                        { }
1378
rsma_func_list(A) ::= .                                                           { A = NULL; }
1379
rsma_func_list(A) ::= FUNCTION NK_LP NK_RP.                                       { A = NULL; }
×
1380
rsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = B; }
1381
/************************************************ tsma ********************************************************/
1382
cmd ::= CREATE TSMA not_exists_opt(B) tsma_name(C)
1383
  ON full_table_name(E) tsma_func_list(D)
1384
  INTERVAL NK_LP duration_literal(F) NK_RP.                                       { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, D, E, releaseRawExprNode(pCxt, F)); }
4,812✔
1385
cmd ::= CREATE RECURSIVE TSMA not_exists_opt(B) tsma_name(C)
1386
  ON full_table_name(D) INTERVAL NK_LP duration_literal(E) NK_RP.                 { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, NULL, D, releaseRawExprNode(pCxt, E)); }
1,044✔
1387
cmd ::= DROP TSMA exists_opt(B) full_tsma_name(C).                                { pCxt->pRootNode = createDropTSMAStmt(pCxt, B, C); }
2,258✔
1388
cmd ::= SHOW db_name_cond_opt(B) TSMAS.                                           { pCxt->pRootNode = createShowTSMASStmt(pCxt, B); }
18✔
1389

1390
full_tsma_name(A) ::= tsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1391
full_tsma_name(A) ::= db_name(B) NK_DOT tsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1392

1393
%type tsma_func_list                                                              { SNode* }
1394
%destructor tsma_func_list                                                        { nodesDestroyNode($$); }
580✔
1395
tsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = createTSMAOptions(pCxt, B); }
5,392✔
1396

1397
/************************************************ create index ********************************************************/
1398
cmd ::= CREATE SMA INDEX not_exists_opt(D)
1399
  col_name(A) ON full_table_name(B) index_options(C).                      { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, D, A, B, NULL, C); }
×
1400
cmd ::= CREATE INDEX not_exists_opt(D)
1401
  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); }
12,094✔
1402
cmd ::= DROP INDEX exists_opt(B) full_index_name(A).                              { pCxt->pRootNode = createDropIndexStmt(pCxt, B, A); }
3,417✔
1403

1404
full_index_name(A) ::= index_name(B).                                             { A = createRealTableNodeForIndexName(pCxt, NULL, &B); }
2,967✔
1405
full_index_name(A) ::= db_name(B) NK_DOT index_name(C).                           { A = createRealTableNodeForIndexName(pCxt, &B, &C); }
450✔
1406

1407
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
1408
  NK_LP duration_literal(C) NK_RP sliding_opt(D) sma_stream_opt(E).               { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), NULL, D, E); }
×
1409
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
1410
  NK_LP duration_literal(C) NK_COMMA duration_literal(D) NK_RP sliding_opt(E)
1411
  sma_stream_opt(F).                                                              { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), E, F); }
×
1412

1413
%type func_list                                                                   { SNodeList* }
1414
%destructor func_list                                                             { nodesDestroyList($$); }
1415
func_list(A) ::= func(B).                                                         { A = createNodeList(pCxt, B); }
1416
func_list(A) ::= func_list(B) NK_COMMA func(C).                                   { A = addNodeToList(pCxt, B, C); }
1417

1418
func(A) ::= sma_func_name(B) NK_LP expression_list(C) NK_RP.                      { A = createFunctionNode(pCxt, &B, C); }
309,758✔
1419

1420
%type sma_func_name                                                               { SToken }
1421
%destructor sma_func_name                                                         { }
1422
sma_func_name(A) ::= function_name(B).                                            { A = B; }
79,917,355✔
1423
sma_func_name(A) ::= COUNT(B).                                                    { A = B; }
1424
sma_func_name(A) ::= FIRST(B).                                                    { A = B; }
1425
sma_func_name(A) ::= LAST(B).                                                     { A = B; }
1426
sma_func_name(A) ::= LAST_ROW(B).                                                 { A = B; }
1427

1428
sma_stream_opt(A) ::= .                                                           { A = NULL; }
1429

1430
/************************************************ create/drop topic ***************************************************/
1431
%type with_meta                                                                   { int32_t }
1432
%destructor with_meta                                                             { }
1433
with_meta(A) ::= AS.                                                              { A = 0; }
25,172✔
1434
with_meta(A) ::= WITH META AS.                                                    { A = 1; }
12,346✔
1435
with_meta(A) ::= ONLY META AS.                                                    { A = 2; }
626✔
1436

1437
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) AS query_or_subquery(C).     { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, false); }
139,426✔
1438
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(D)
1439
  DATABASE db_name(C).                                                            { pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, A, &B, &C, D); }
25,484✔
1440
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(E)
1441
  STABLE full_table_name(C) where_clause_opt(D).                                  { pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, A, &B, C, E, D); }
12,660✔
1442

1443
cmd ::= RELOAD TOPIC exists_opt(A) topic_name(B) AS query_or_subquery(C).         { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, true); }
×
1444
cmd ::= DROP TOPIC exists_opt(A) force_opt(C) topic_name(B).                             { pCxt->pRootNode = createDropTopicStmt(pCxt, A, &B, C); }
111,339✔
1445
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); }
842✔
1446

1447
/************************************************ desc/describe *******************************************************/
1448
cmd ::= DESC full_table_name(A).                                                  { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
533,036✔
1449
cmd ::= DESCRIBE full_table_name(A).                                              { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
1450

1451
/************************************************ reset query cache ***************************************************/
1452
cmd ::= RESET QUERY CACHE.                                                        { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); }
2,063,276✔
1453

1454
/************************************************ explain *************************************************************/
1455
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) query_or_subquery(C).           { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
85,302,733✔
1456
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) insert_query(C).                { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
1457

1458
%type analyze_opt                                                                 { bool }
1459
%destructor analyze_opt                                                           { }
1460
analyze_opt(A) ::= .                                                              { A = false; }
1461
analyze_opt(A) ::= ANALYZE.                                                       { A = true; }
1462

1463
explain_options(A) ::= .                                                          { A = createDefaultExplainOptions(pCxt); }
93,258,897✔
1464
explain_options(A) ::= explain_options(B) VERBOSE NK_BOOL(C).                     { A = setExplainVerbose(pCxt, B, &C); }
51,200,073✔
1465
explain_options(A) ::= explain_options(B) RATIO NK_FLOAT(C).                      { A = setExplainRatio(pCxt, B, &C); }
1,548,360✔
1466

1467
/************************************************ create/drop function ************************************************/
1468
cmd ::= CREATE or_replace_opt(H) agg_func_opt(A) FUNCTION not_exists_opt(F)
1469
  function_name(B) AS NK_STRING(C) OUTPUTTYPE type_name(D) bufsize_opt(E)
1470
  language_opt(G).                                                                { pCxt->pRootNode = createCreateFunctionStmt(pCxt, F, A, &B, &C, D, E, &G, H); }
14,102✔
1471
cmd ::= DROP FUNCTION exists_opt(B) function_name(A).                             { pCxt->pRootNode = createDropFunctionStmt(pCxt, B, &A); }
8,669✔
1472

1473
%type agg_func_opt                                                                { bool }
1474
%destructor agg_func_opt                                                          { }
1475
agg_func_opt(A) ::= .                                                             { A = false; }
1476
agg_func_opt(A) ::= AGGREGATE.                                                    { A = true; }
1477

1478
%type bufsize_opt                                                                 { int32_t }
1479
%destructor bufsize_opt                                                           { }
1480
bufsize_opt(A) ::= .                                                              { A = 0; }
1481
bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B).                                         { A = taosStr2Int32(B.z, NULL, 10); }
1482

1483
%type language_opt                                                                 { SToken }
1484
%destructor language_opt                                                           { }
1485
language_opt(A) ::= .                                                              { A = nil_token; }
13,375✔
1486
language_opt(A) ::= LANGUAGE NK_STRING(B).                                         { A = B; }
3,195✔
1487

1488
%type or_replace_opt                                                               { bool }
1489
%destructor or_replace_opt                                                         { }
1490
or_replace_opt(A) ::= .                                                            { A = false; }
1491
or_replace_opt(A) ::= OR REPLACE.                                                  { A = true; }
1492

1493
/************************************************ create/drop view **************************************************/
1494
cmd ::= CREATE or_replace_opt(A) VIEW full_view_name(B) AS(C) query_or_subquery(D).
1495
                                                                                  { pCxt->pRootNode = createCreateViewStmt(pCxt, A, B, &C, D); }
211,235✔
1496
cmd ::= DROP VIEW exists_opt(A) full_view_name(B).                                { pCxt->pRootNode = createDropViewStmt(pCxt, A, B); }
158,259✔
1497

1498
full_view_name(A) ::= view_name(B).                                               { A = createViewNode(pCxt, NULL, &B); }
190,589✔
1499
full_view_name(A) ::= db_name(B) NK_DOT view_name(C).                             { A = createViewNode(pCxt, &B, &C); }
183,377✔
1500

1501
/************************************************ create/drop stream **************************************************/
1502
cmd ::= CREATE STREAM not_exists_opt(A) full_stream_name(B) stream_trigger(C)
1503
        stream_outtable_opt(D) as_subquery_opt(E).                                { pCxt->pRootNode = createCreateStreamStmt(pCxt, A, B, C, D, E); }
312,979✔
1504
cmd ::= DROP STREAM exists_opt(A) stream_name_list(B).                            { pCxt->pRootNode = createDropStreamStmt(pCxt, A, B); }
8,789✔
1505
cmd ::= STOP STREAM exists_opt(A) full_stream_name(B).                            { pCxt->pRootNode = createPauseStreamStmt(pCxt, A, B); }
2,381✔
1506
cmd ::= START STREAM exists_opt(A) ignore_opt(C) full_stream_name(B).             { pCxt->pRootNode = createResumeStreamStmt(pCxt, A, C, B); }
2,381✔
1507
cmd ::= RECALCULATE STREAM full_stream_name(A) recalculate_range(B).              { pCxt->pRootNode = createRecalcStreamStmt(pCxt, A, B); }
11,437✔
1508

1509
/* recalculate_range(A) ::= ALL.                                                     { A = createRecalcRange(pCxt, NULL, NULL); } */
1510
recalculate_range(A) ::= FROM time_point(B).                                      { A = createRecalcRange(pCxt, B, NULL); }
9,436✔
1511
recalculate_range(A) ::= FROM time_point(B) TO time_point(C).                     { A = createRecalcRange(pCxt, B, C); }
2,001✔
1512

1513
full_stream_name(A) ::= stream_name(B).                                           { A = createStreamNode(pCxt, NULL, &B); }
131,199✔
1514
full_stream_name(A) ::= db_name(B) NK_DOT stream_name(C).                         { A = createStreamNode(pCxt, &B, &C); }
222,863✔
1515

1516
%type stream_name_list                                                            { SNodeList* }
1517
%destructor stream_name_list                                                      { nodesDestroyList($$); }
1518
stream_name_list(A) ::= full_stream_name(B).                                      { A = createNodeList(pCxt, B); }
1519
stream_name_list(A) ::= stream_name_list(B) NK_COMMA full_stream_name(C).         { A = addNodeToList(pCxt, B, C); }
1520

1521
/********** stream_outtable **********/
1522
stream_outtable_opt(A) ::= .                                                                                                { A = NULL; }
1523
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); }
315,395✔
1524

1525
/********** stream_trigger **********/
1526
stream_trigger(A) ::= trigger_type(B) trigger_table_opt(C) stream_partition_by_opt(D)
1527
                      trigger_options_opt(E) notification_opt(F).                                                           { A = createStreamTriggerNode(pCxt, B, C, D, E, F); }
320,897✔
1528

1529
/***** trigger type *****/
1530

1531
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)); }
13,052,499✔
1532
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); }
5,448,518✔
1533
trigger_type(A) ::= interval_opt(B) SLIDING NK_LP sliding_expr(C) NK_RP.                                                    { A = createIntervalWindowNodeExt(pCxt, B, C); }
112,953✔
1534
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); }
33,336✔
1535
trigger_type(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.                                                          { A = createCountWindowNodeFromArgs(pCxt, B); }
4,393,081✔
1536
trigger_type(A) ::= PERIOD NK_LP interval_sliding_duration_literal(B) offset_opt(C) NK_RP.                                  { A = createPeriodWindowNode(pCxt, releaseRawExprNode(pCxt, B), C); }
16,277✔
1537
trigger_type(A) ::= EVENT_WINDOW NK_LP START WITH NK_LP search_condition_list(B) NK_RP
1538
                    END WITH search_condition(C) NK_RP true_for_opt(D).                                                     { A = createEventWindowNode(pCxt, createNodeListNode(pCxt, B), C, D); }
1,984✔
1539
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,984✔
1540

1541
%type search_condition_list                                                                                                 { SNodeList* }
1542
%destructor search_condition_list                                                                                           { nodesDestroyList($$); }
1543
search_condition_list(A) ::= search_condition(B) NK_COMMA search_condition(C).                                              { A = addNodeToList(pCxt, createNodeList(pCxt, B), C); }
3,968✔
1544
search_condition_list(A) ::= search_condition_list(B) NK_COMMA search_condition(C).                                         { A = addNodeToList(pCxt, B, C); }
1545

1546
interval_opt(A) ::= .                                                                                                       { A = NULL; }
1547
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C) NK_RP.                                              { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), NULL, NULL, NULL); }
87,030✔
1548
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C)
1549
                    NK_COMMA interval_sliding_duration_literal(D) NK_RP.                                                    { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), NULL, NULL); }
3,147✔
1550

1551
sliding_expr(A) ::= interval_sliding_duration_literal(B).                                                                   { A = createSlidingWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
108,484✔
1552
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,469✔
1553

1554
%type sliding_val_opt                                                             { SToken }
1555
%destructor sliding_val_opt                                                       { }
1556

1557
offset_opt(A) ::= .                                                               { A = NULL; }
1558
offset_opt(A) ::= NK_COMMA interval_sliding_duration_literal(B).                  { A = releaseRawExprNode(pCxt, B); }
30,378,732✔
1559

1560
/***** trigger_table_opt *****/
1561

1562
trigger_table_opt(A) ::= .                                                 { A = NULL; }
1563
trigger_table_opt(A) ::= FROM full_table_name(B).                          { A = B; }
1564

1565
/***** stream_partition_by_opt *****/
1566

1567
%type stream_partition_by_opt                                                                 { SNodeList* }
1568
%destructor stream_partition_by_opt                                                           { nodesDestroyList($$); }
1569
stream_partition_by_opt(A) ::= .                                                              { A = NULL; }
1570
stream_partition_by_opt(A) ::= PARTITION BY stream_partition_list(B).                         { A = B; }
238,035,532✔
1571

1572
%type stream_partition_list                                                                   { SNodeList* }
1573
%destructor stream_partition_list                                                             { nodesDestroyList($$); }
1574
stream_partition_list(A) ::= stream_partition_item(B).                                        { A = createNodeList(pCxt, B); }
1575
stream_partition_list(A) ::= stream_partition_list(B) NK_COMMA stream_partition_item(C).      { A = addNodeToList(pCxt, B, C); }
1576

1577
stream_partition_item(A) ::= expr_or_subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
1,174,142,352✔
1578
stream_partition_item(A) ::= expr_or_subquery(B) column_alias(C).                             { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
22,565,745✔
1579

1580
/***** trigger_options_opt *****/
1581

1582
trigger_options_opt(A) ::= .                                                              { A = NULL; }
1583
trigger_options_opt(A) ::= STREAM_OPTIONS NK_LP trigger_option_list(B) NK_RP.             { A = B; }
117,664✔
1584

1585
trigger_option_list(A) ::= trigger_option(B).                                       { A = createStreamTriggerOptions(pCxt);  A = setStreamTriggerOptions(pCxt, A, &B);  }
118,124✔
1586
trigger_option_list(A) ::= trigger_option_list(B) NK_BITOR trigger_option(C).       { A = setStreamTriggerOptions(pCxt, B, &C); }
31,783✔
1587

1588
%type trigger_option                                                               { SStreamTriggerOption }
1589
%destructor trigger_option                                                         { }
1590
trigger_option(A) ::= CALC_NOTIFY_ONLY.                                            { A.type = STREAM_TRIGGER_OPTION_CALC_NOTIFY_ONLY; A.pNode = NULL; }
1,792✔
1591
trigger_option(A) ::= DELETE_RECALC.                                               { A.type = STREAM_TRIGGER_OPTION_DELETE_RECALC; A.pNode = NULL; }
9,463✔
1592
trigger_option(A) ::= DELETE_OUTPUT_TABLE.                                         { A.type = STREAM_TRIGGER_OPTION_DELETE_OUTPUT_TABLE; A.pNode = NULL; }
258✔
1593
trigger_option(A) ::= EXPIRED_TIME NK_LP duration_literal(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_EXPIRED_TIME; A.pNode = releaseRawExprNode(pCxt, B); }
6,313✔
1594
trigger_option(A) ::= FILL_HISTORY NK_LP time_point(B) NK_RP.                      { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = B; }
18,241✔
1595
trigger_option(A) ::= FILL_HISTORY_FIRST NK_LP time_point(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = B; }
2,017✔
1596
trigger_option(A) ::= FILL_HISTORY.                                                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = NULL; }
19,009✔
1597
trigger_option(A) ::= FILL_HISTORY_FIRST.                                          { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = NULL; }
920✔
1598
trigger_option(A) ::= FORCE_OUTPUT.                                                { A.type = STREAM_TRIGGER_OPTION_FORCE_OUTPUT; A.pNode = NULL; }
4,196✔
1599
trigger_option(A) ::= IGNORE_DISORDER.                                             { A.type = STREAM_TRIGGER_OPTION_IGNORE_DISORDER; A.pNode = NULL; }
22,017✔
1600
trigger_option(A) ::= LOW_LATENCY_CALC.                                            { A.type = STREAM_TRIGGER_OPTION_LOW_LATENCY_CALC; A.pNode = NULL; }
6,491✔
1601
trigger_option(A) ::= MAX_DELAY NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_MAX_DELAY; A.pNode = releaseRawExprNode(pCxt, B); }
6,592✔
1602
trigger_option(A) ::= PRE_FILTER NK_LP search_condition(B) NK_RP.                  { A.type = STREAM_TRIGGER_OPTION_PRE_FILTER; A.pNode = B; }
17,201✔
1603
trigger_option(A) ::= WATERMARK NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_WATERMARK; A.pNode = releaseRawExprNode(pCxt, B); }
8,901✔
1604
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; }
7,770✔
1605
trigger_option(A) ::= IGNORE_NODATA_TRIGGER.                                       { A.type = STREAM_TRIGGER_OPTION_IGNORE_NODATA_TRIGGER; A.pNode = NULL; }
18,726✔
1606

1607
/***** notification_opt *****/
1608
notification_opt(A) ::= .                                                         { A = NULL; }
1609
notification_opt(A) ::= NOTIFY NK_LP notify_url_list(B) NK_RP
1610
                        notify_on_opt(C) where_clause_opt(D)
1611
                        notify_options_opt(E).                                    { A = createStreamNotifyOptions(pCxt, B, C, D, E); }
61,296✔
1612

1613
%type notify_url_list                                                             { SNodeList* }
1614
%destructor notify_url_list                                                       { nodesDestroyList($$); }
1615
notify_url_list(A) ::= NK_STRING(B).                                              { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
61,413✔
1616
notify_url_list(A) ::= notify_url_list(B) NK_COMMA NK_STRING(C).                  { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)); }
×
1617

1618
%type notify_on_opt                                                               { int64_t }
1619
%destructor notify_on_opt                                                         { }
1620
notify_on_opt(A) ::= .                                                            { A = EVENT_NONE; }
1,118✔
1621
notify_on_opt(A) ::= ON NK_LP event_type_list(B) NK_RP.                           { A = B; }
62,368✔
1622

1623
%type notify_options_opt                                                          { int64_t }
1624
%destructor notify_options_opt                                                    { }
1625
notify_options_opt(A) ::= .                                                       { A = NOTIFY_NONE; }
59,106✔
1626
notify_options_opt(A) ::= NOTIFY_OPTIONS NK_LP notify_options_list(B) NK_RP.      { A = B; }
1627

1628
%type notify_options_list                                                         { int64_t }
1629
%destructor notify_options_list                                                   { }
1630
notify_options_list(A) ::= notify_option(B).                                      { A = B; }
2,190✔
1631
notify_options_list(A) ::= notify_options_list(B) NK_BITOR notify_option(C).     { A = B | C; }
53,910✔
1632

1633
%type notify_option                                                               { int64_t }
1634
%destructor notify_option                                                         { }
1635
notify_option(A) ::= NOTIFY_HISTORY.                                              { A = NOTIFY_HISTORY; }
2,190✔
1636

1637
/***** common part *****/
1638

1639
time_point(A) ::= NK_INTEGER(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
9,536✔
1640
time_point(A) ::= NK_STRING(B).                                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1,731,068✔
1641

1642
%type column_name_list                                                            { SNodeList* }
1643
%destructor column_name_list                                                      { nodesDestroyList($$); }
1644
column_name_list(A) ::= trigger_col_name(B).                                      { A = createNodeList(pCxt, B); }
1645
column_name_list(A) ::= column_name_list(B) NK_COMMA trigger_col_name(C).         { A = addNodeToList(pCxt, B, C); }
1646

1647
trigger_col_name(A) ::= column_name(B).                                           { A = createColumnNode(pCxt, NULL, &B); }
1648
trigger_col_name(A) ::= TBNAME(B).                                                { A = createFunctionNode(pCxt, &B, NULL); }
1649

1650
%type event_type_list                                                             { int64_t }
1651
%destructor event_type_list                                                       { }
1652
event_type_list(A) ::= event_types(B).                                            { A = B;}
68,026✔
1653
event_type_list(A) ::= event_type_list(B) NK_BITOR event_types(C).                { A = B | C; }
1654

1655
%type event_types                                                                 { int64_t }
1656
%destructor event_types                                                           { }
1657
event_types(A) ::= WINDOW_OPEN.                                                   { A = EVENT_WINDOW_OPEN; }
61,692✔
1658
event_types(A) ::= WINDOW_CLOSE.                                                  { A = EVENT_WINDOW_CLOSE; }
60,244✔
1659

1660
/********** output_subtable_opt **********/
1661
output_subtable_opt(A) ::= .                                                      { A = NULL; }
1662
output_subtable_opt(A) ::= OUTPUT_SUBTABLE NK_LP expr_or_subquery(B) NK_RP.       { A = releaseRawExprNode(pCxt, B); }
2,652,419✔
1663

1664
%type column_name_opt                                                             { SNodeList* }
1665
%destructor column_name_opt                                                       { nodesDestroyList($$); }
1666
column_name_opt(A) ::= .                                                          { A = NULL; }
1667
column_name_opt(A) ::= column_name_unit(B).                                       { A = B; }
1668

1669
%type stream_tags_def_opt                                                            { SNodeList* }
1670
%destructor stream_tags_def_opt                                                      { nodesDestroyList($$); }
1671
stream_tags_def_opt(A) ::= .                                                         { A = NULL; }
1672
stream_tags_def_opt(A) ::= TAGS NK_LP stream_tags_def_list(B) NK_RP.                 { A = B; }
1673

1674
%type stream_tags_def_list                                                             { SNodeList* }
1675
%destructor stream_tags_def_list                                                       { nodesDestroyList($$); }
1676
stream_tags_def_list(A) ::= stream_tags_def(B).                                        { A = createNodeList(pCxt, B); }
1677
stream_tags_def_list(A) ::= stream_tags_def_list(B) NK_COMMA stream_tags_def(C).       { A = addNodeToList(pCxt, B, C); }
1678

1679
stream_tags_def(A) ::= column_name(B) type_name(C) AS expression(D).                   { A = createStreamTagDefNode(pCxt, &B, C, releaseRawExprNode(pCxt, D)); }
30,757✔
1680

1681
%type column_name_unit                                                                 { SNodeList* }
1682
%destructor column_name_unit                                                           { nodesDestroyList($$); }
1683
column_name_unit(A) ::= NK_LP column_stream_def_list(B) NK_RP.                         { A = B; }
1684

1685
%type column_stream_def_list                                                      { SNodeList* }
1686
%destructor column_stream_def_list                                                { nodesDestroyList($$); }
1687
column_stream_def_list(A) ::= column_stream_def(B).                               { A = createNodeList(pCxt, B); }
1688
column_stream_def_list(A) ::= column_stream_def_list(B)
1689
 NK_COMMA column_stream_def(C).                                                   { A = addNodeToList(pCxt, B, C); }
1690

1691
column_stream_def(A) ::= column_name(B) stream_col_options(C).                    { A = createColumnDefNode(pCxt, &B, createDataType(TSDB_DATA_TYPE_NULL), C); }
262,518✔
1692

1693
stream_col_options(A) ::= .                                                       { A = createDefaultColumnOptions(pCxt); }
405,915,989✔
1694
stream_col_options(A) ::= stream_col_options(B) PRIMARY KEY.                      { A = setColumnOptionsPK(pCxt, B); }
237,663✔
1695
stream_col_options(A) ::= stream_col_options(B) COMPOSITE KEY.                    { A = setColumnOptionsPK(pCxt, B); }
1696
//column_stream_def(A) ::= column_def(B).                                         { A = B; }
1697

1698
as_subquery_opt(A) ::= .                                                          { A = NULL; }
1699
as_subquery_opt(A) ::= AS query_or_subquery(B).                                   { A = B; }
1700

1701
%type ignore_opt                                                                  { bool }
1702
%destructor ignore_opt                                                            { }
1703
ignore_opt(A) ::= .                                                               { A = false; }
1704
ignore_opt(A) ::= IGNORE UNTREATED.                                               { A = true; }
1705

1706

1707
/************************************************ kill connection/query ***********************************************/
1708
cmd ::= KILL CONNECTION NK_INTEGER(A).                                            { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &A); }
190✔
1709
cmd ::= KILL QUERY NK_STRING(A).                                                  { pCxt->pRootNode = createKillQueryStmt(pCxt, &A); }
63✔
1710
cmd ::= KILL TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &A); }
209✔
1711
cmd ::= KILL COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_COMPACT_STMT, &A); }
1,518✔
1712
cmd ::= KILL RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_RETENTION_STMT, &A); }
×
1713
cmd ::= KILL SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SCAN_STMT, &A); }
128✔
1714
cmd ::= KILL SSMIGRATE NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SSMIGRATE_STMT, &A); }
×
1715

1716
/************************************************ merge/redistribute/ vgroup ******************************************/
1717
cmd ::= BALANCE VGROUP.                                                           { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); }
11,841✔
1718

1719
cmd ::= ASSIGN LEADER FORCE.                                                      { pCxt->pRootNode = createAssignLeaderStmt(pCxt); }
18✔
1720

1721
cmd ::= BALANCE VGROUP LEADER on_vgroup_id(A).                                    { pCxt->pRootNode = createBalanceVgroupLeaderStmt(pCxt, &A); }
2,468✔
1722
cmd ::= BALANCE VGROUP LEADER DATABASE db_name(A).                                { pCxt->pRootNode = createBalanceVgroupLeaderDBNameStmt(pCxt, &A); }
105✔
1723
cmd ::= ALTER VGROUP NK_INTEGER(A) SET KEEP NK_INTEGER(B).                { pCxt->pRootNode = createSetVgroupKeepVersionStmt(pCxt, &A, &B); }
1,118✔
1724
cmd ::= MERGE VGROUP NK_INTEGER(A) NK_INTEGER(B).                                 { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &A, &B); }
×
1725
cmd ::= REDISTRIBUTE VGROUP NK_INTEGER(A) dnode_list(B).                          { pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &A, B); }
46,590✔
1726
cmd ::= SPLIT VGROUP NK_INTEGER(A) force_opt(B).                                  { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &A, B); }
20,682✔
1727

1728
%type on_vgroup_id                                                                { SToken }
1729
%destructor on_vgroup_id                                                          { }
1730
on_vgroup_id(A) ::= .                                                             { A = nil_token; }
1731
on_vgroup_id(A) ::= ON NK_INTEGER(B).                                             { A = B; }
1732

1733
%type dnode_list                                                                  { SNodeList* }
1734
%destructor dnode_list                                                            { nodesDestroyList($$); }
1735
dnode_list(A) ::= DNODE NK_INTEGER(B).                                            { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
46,590✔
1736
dnode_list(A) ::= dnode_list(B) DNODE NK_INTEGER(C).                              { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
1737

1738
/************************************************ syncdb **************************************************************/
1739
//cmd ::= SYNCDB db_name(A) REPLICA.                                                { pCxt->pRootNode = createSyncdbStmt(pCxt, &A); }
1740

1741
/************************************************ syncdb **************************************************************/
1742
cmd ::= DELETE FROM full_table_name(A) where_clause_opt(B).                       { pCxt->pRootNode = createDeleteStmt(pCxt, A, B); }
1,771,679✔
1743

1744
/************************************************ select **************************************************************/
1745
cmd ::= query_or_subquery(A).                                                     { pCxt->pRootNode = A; }
1746

1747
/************************************************ insert **************************************************************/
1748
cmd ::= insert_query(A).                                                          { pCxt->pRootNode = A; }
1749

1750
insert_query(A) ::= INSERT INTO full_table_name(D)
1751
  NK_LP col_name_list(B) NK_RP query_or_subquery(C).                              { A = createInsertStmt(pCxt, D, B, C); }
27,153✔
1752
insert_query(A) ::= INSERT INTO full_table_name(C) query_or_subquery(B).          { A = createInsertStmt(pCxt, C, NULL, B); }
349,513✔
1753

1754
/************************************************ tags_literal *************************************************************/
1755
tags_literal(A) ::= NK_INTEGER(B).                                                { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
69,029,944✔
1756
tags_literal(A) ::= NK_INTEGER(B) NK_PLUS duration_literal(C).                    {
1757
                                                                                    SToken l = B;
20,493✔
1758
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
20,493✔
1759
                                                                                    l.n = (r.z + r.n) - l.z;
20,493✔
1760
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
20,493✔
1761
                                                                                  }
1762
tags_literal(A) ::= NK_INTEGER(B) NK_MINUS duration_literal(C).                   {
1763
                                                                                    SToken l = B;
1764
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1765
                                                                                    l.n = (r.z + r.n) - l.z;
1766
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1767
                                                                                  }
1768
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER(C).                                     {
1769
                                                                                    SToken t = B;
374,532✔
1770
                                                                                    t.n = (C.z + C.n) - B.z;
374,532✔
1771
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
374,532✔
1772
                                                                                  }
1773
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_PLUS duration_literal(C).            {
1774
                                                                                    SToken l = B;
5,313✔
1775
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
5,313✔
1776
                                                                                    l.n = (r.z + r.n) - l.z;
5,313✔
1777
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
5,313✔
1778
                                                                                  }
1779
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_MINUS duration_literal(C).           {
1780
                                                                                    SToken l = B;
1781
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1782
                                                                                    l.n = (r.z + r.n) - l.z;
1783
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1784
                                                                                  }
1785
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER(C).                                    {
1786
                                                                                    SToken t = B;
1787
                                                                                    t.n = (C.z + C.n) - B.z;
1788
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1789
                                                                                  }
1790
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_PLUS duration_literal(C).           {
1791
                                                                                    SToken l = B;
1792
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1793
                                                                                    l.n = (r.z + r.n) - l.z;
1794
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1795
                                                                                  }
1796
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_MINUS duration_literal(C).          {
1797
                                                                                    SToken l = B;
1798
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1799
                                                                                    l.n = (r.z + r.n) - l.z;
1800
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1801
                                                                                  }
1802
tags_literal(A) ::= NK_FLOAT(B).                                                  { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B, NULL); }
444,761✔
1803
tags_literal(A) ::= NK_PLUS(B) NK_FLOAT(C).                                       {
1804
                                                                                    SToken t = B;
84,995✔
1805
                                                                                    t.n = (C.z + C.n) - B.z;
84,995✔
1806
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
84,995✔
1807
                                                                                  }
1808
tags_literal(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1809
                                                                                    SToken t = B;
1810
                                                                                    t.n = (C.z + C.n) - B.z;
1811
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
1812
                                                                                  }
1813

1814
tags_literal(A) ::= NK_BIN(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1815
tags_literal(A) ::= NK_BIN(B) NK_PLUS duration_literal(C).                        {
1816
                                                                                    SToken l = B;
1817
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1818
                                                                                    l.n = (r.z + r.n) - l.z;
1819
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1820
                                                                                  }
1821
tags_literal(A) ::= NK_BIN(B) NK_MINUS duration_literal(C).                       {
1822
                                                                                    SToken l = B;
1823
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1824
                                                                                    l.n = (r.z + r.n) - l.z;
1825
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1826
                                                                                  }
1827
tags_literal(A) ::= NK_PLUS(B) NK_BIN(C).                                         {
1828
                                                                                    SToken t = B;
1829
                                                                                    t.n = (C.z + C.n) - B.z;
1830
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1831
                                                                                  }
1832
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_PLUS duration_literal(C).                {
1833
                                                                                    SToken l = B;
1834
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1835
                                                                                    l.n = (r.z + r.n) - l.z;
1836
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1837
                                                                                  }
1838
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_MINUS duration_literal(C).               {
1839
                                                                                    SToken l = B;
1840
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1841
                                                                                    l.n = (r.z + r.n) - l.z;
1842
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1843
                                                                                  }
1844
tags_literal(A) ::= NK_MINUS(B) NK_BIN(C).                                        {
1845
                                                                                    SToken t = B;
1846
                                                                                    t.n = (C.z + C.n) - B.z;
1847
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1848
                                                                                  }
1849
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_PLUS duration_literal(C).               {
1850
                                                                                    SToken l = B;
1851
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1852
                                                                                    l.n = (r.z + r.n) - l.z;
1853
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1854
                                                                                  }
1855
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_MINUS duration_literal(C).              {
1856
                                                                                    SToken l = B;
1857
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1858
                                                                                    l.n = (r.z + r.n) - l.z;
1859
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1860
                                                                                  }
1861
tags_literal(A) ::= NK_HEX(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1862
tags_literal(A) ::= NK_HEX(B) NK_PLUS duration_literal(C).                        {
1863
                                                                                    SToken l = B;
1864
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1865
                                                                                    l.n = (r.z + r.n) - l.z;
1866
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1867
                                                                                  }
1868
tags_literal(A) ::= NK_HEX(B) NK_MINUS duration_literal(C).                       {
1869
                                                                                    SToken l = B;
1870
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1871
                                                                                    l.n = (r.z + r.n) - l.z;
1872
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1873
                                                                                  }
1874
tags_literal(A) ::= NK_PLUS(B) NK_HEX(C).                                         {
1875
                                                                                    SToken t = B;
1876
                                                                                    t.n = (C.z + C.n) - B.z;
1877
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1878
                                                                                  }
1879
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_PLUS duration_literal(C).                {
1880
                                                                                    SToken l = B;
1881
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1882
                                                                                    l.n = (r.z + r.n) - l.z;
1883
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1884
                                                                                  }
1885
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_MINUS duration_literal(C).               {
1886
                                                                                    SToken l = B;
1887
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1888
                                                                                    l.n = (r.z + r.n) - l.z;
1889
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1890
                                                                                  }
1891
tags_literal(A) ::= NK_MINUS(B) NK_HEX(C).                                        {
1892
                                                                                    SToken t = B;
1893
                                                                                    t.n = (C.z + C.n) - B.z;
1894
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1895
                                                                                  }
1896
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_PLUS duration_literal(C).               {
1897
                                                                                    SToken l = B;
1898
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1899
                                                                                    l.n = (r.z + r.n) - l.z;
1900
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1901
                                                                                  }
1902
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_MINUS duration_literal(C).              {
1903
                                                                                    SToken l = B;
1904
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1905
                                                                                    l.n = (r.z + r.n) - l.z;
1906
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1907
                                                                                  }
1908

1909
tags_literal(A) ::= NK_STRING(B).                                                 { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B, NULL); }
73,257,086✔
1910
tags_literal(A) ::= NK_STRING(B) NK_PLUS duration_literal(C).                     {
1911
                                                                                    SToken l = B;
1912
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1913
                                                                                    l.n = (r.z + r.n) - l.z;
1914
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1915
                                                                                  }
1916
tags_literal(A) ::= NK_STRING(B) NK_MINUS duration_literal(C).                    {
1917
                                                                                    SToken l = B;
1918
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1919
                                                                                    l.n = (r.z + r.n) - l.z;
1920
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1921
                                                                                  }
1922
tags_literal(A) ::= NK_BOOL(B).                                                   { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B, NULL); }
2,282,935✔
1923
tags_literal(A) ::= NULL(B).                                                      { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B, NULL); }
221,110✔
1924

1925
tags_literal(A) ::= literal_func(B).                                              { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, NULL, B); }
175,011✔
1926
tags_literal(A) ::= literal_func(B) NK_PLUS duration_literal(C).                  {
1927
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
22,797✔
1928
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
22,797✔
1929
                                                                                    l.n = (r.z + r.n) - l.z;
22,797✔
1930
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
22,797✔
1931
                                                                                  }
1932
tags_literal(A) ::= literal_func(B) NK_MINUS duration_literal(C).                 {
1933
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
1934
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1935
                                                                                    l.n = (r.z + r.n) - l.z;
1936
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
1937
                                                                                  }
1938

1939
%type tags_literal_list                                                           { SNodeList* }
1940
%destructor tags_literal_list                                                     { nodesDestroyList($$); }
1941
tags_literal_list(A) ::= tags_literal(B).                                         { A = createNodeList(pCxt, B); }
1942
tags_literal_list(A) ::= tags_literal_list(B) NK_COMMA tags_literal(C).           { A = addNodeToList(pCxt, B, C); }
1943

1944
/************************************************ literal *************************************************************/
1945
literal(A) ::= NK_INTEGER(B).                                                     { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B)); }
329,823,829✔
1946
literal(A) ::= NK_FLOAT(B).                                                       { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B)); }
27,355,909✔
1947
literal(A) ::= NK_STRING(B).                                                      { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
56,276,152✔
1948
literal(A) ::= NK_BOOL(B).                                                        { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B)); }
5,072,012✔
1949
literal(A) ::= TIMESTAMP(B) NK_STRING(C).                                         { A = createRawExprNodeExt(pCxt, &B, &C, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &C)); }
1,587✔
1950
literal(A) ::= duration_literal(B).                                               { A = B; }
2,147,483,647✔
1951
literal(A) ::= NULL(B).                                                           { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B)); }
22,801,269✔
1952
literal(A) ::= NK_QUESTION(B).                                                    { A = createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B)); }
10,095✔
1953

1954
duration_literal(A) ::= NK_VARIABLE(B).                                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
69,838,116✔
1955

1956
signed_variable(A) ::= NK_VARIABLE(B).                                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
1957
signed_variable(A) ::= NK_PLUS NK_VARIABLE(B).                                    { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
×
1958
signed_variable(A) ::= NK_MINUS(B) NK_VARIABLE(C).                                {
1959
                                                                                    SToken t = B;
40,433✔
1960
                                                                                    t.n = (C.z + C.n) - B.z;
40,433✔
1961
                                                                                    A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &t));
40,433✔
1962
                                                                                  }
1963

1964
signed_integer(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
5,257,402✔
1965
signed_integer(A) ::= NK_PLUS NK_INTEGER(B).                                      { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
×
1966
signed_integer(A) ::= NK_MINUS(B) NK_INTEGER(C).                                  {
1967
                                                                                    SToken t = B;
151,875✔
1968
                                                                                    t.n = (C.z + C.n) - B.z;
151,875✔
1969
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t);
151,875✔
1970
                                                                                  }
1971

1972

1973
unsigned_integer(A) ::= NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
36,343,599✔
1974
unsigned_integer(A) ::= NK_QUESTION(B).                                           { A = releaseRawExprNode(pCxt, createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B))); }
×
1975

1976
signed_float(A) ::= NK_FLOAT(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
73,843✔
1977
signed_float(A) ::= NK_PLUS NK_FLOAT(B).                                          { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
×
1978
signed_float(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1979
                                                                                    SToken t = B;
60,456✔
1980
                                                                                    t.n = (C.z + C.n) - B.z;
60,456✔
1981
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t);
60,456✔
1982
                                                                                  }
1983

1984
signed(A) ::= signed_integer(B).                                                  { A = B; }
1985
signed(A) ::= signed_float(B).                                                    { A = B; }
1986

1987
signed_literal(A) ::= signed(B).                                                  { A = B; }
1988
signed_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1989
signed_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
3,074,766✔
1990
signed_literal(A) ::= TIMESTAMP NK_STRING(B).                                     { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
×
1991
signed_literal(A) ::= duration_literal(B).                                        { A = releaseRawExprNode(pCxt, B); }
1992
signed_literal(A) ::= NULL(B).                                                    { A = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B); }
219,472✔
1993
signed_literal(A) ::= literal_func(B).                                            { A = releaseRawExprNode(pCxt, B); }
1994
signed_literal(A) ::= NK_QUESTION(B).                                             { A = createPlaceholderValueNode(pCxt, &B); }
×
1995

1996

1997
%type literal_list                                                                { SNodeList* }
1998
%destructor literal_list                                                          { nodesDestroyList($$); }
1999
literal_list(A) ::= signed_literal(B).                                            { A = createNodeList(pCxt, B); }
2000
literal_list(A) ::= literal_list(B) NK_COMMA signed_literal(C).                   { A = addNodeToList(pCxt, B, C); }
2001

2002
/************************************************ names and identifiers ***********************************************/
2003
%type db_name                                                                     { SToken }
2004
%destructor db_name                                                               { }
2005
db_name(A) ::= NK_ID(B).                                                          { A = B; }
2006

2007
%type mount_name                                                                  { SToken }
2008
%destructor mount_name                                                            { }
2009
mount_name(A) ::= NK_ID(B).                                                       { A = B; }
2010

2011
%type table_name                                                                  { SToken }
2012
%destructor table_name                                                            { }
2013
table_name(A) ::= NK_ID(B).                                                       { A = B; }
2014

2015
%type column_name                                                                 { SToken }
2016
%destructor column_name                                                           { }
2017
column_name(A) ::= NK_ID(B).                                                      { A = B; }
2018

2019
%type function_name                                                               { SToken }
2020
%destructor function_name                                                         { }
2021
function_name(A) ::= NK_ID(B).                                                    { A = B; }
2022

2023
%type view_name                                                                   { SToken }
2024
%destructor view_name                                                             { }
2025
view_name(A) ::= NK_ID(B).                                                        { A = B; }
2026

2027
%type table_alias                                                                 { SToken }
2028
%destructor table_alias                                                           { }
2029
table_alias(A) ::= NK_ID(B).                                                      { A = B; }
2030

2031
%type column_alias                                                                { SToken }
2032
%destructor column_alias                                                          { }
2033
column_alias(A) ::= NK_ID(B).                                                     { A = B; }
2034
column_alias(A) ::= NK_ALIAS(B).                                                  { A = B; }
2035

2036
%type user_name                                                                   { SToken }
2037
%destructor user_name                                                             { }
2038
user_name(A) ::= NK_ID(B).                                                        { A = B; }
2039

2040
%type role_name                                                                   { SToken }
2041
%destructor role_name                                                             { }
2042
role_name(A) ::= NK_ID(B).                                                        { A = B; }
2043

2044
%type general_name                                                                { SToken }
2045
%destructor general_name                                                          { }
2046
general_name(A) ::= NK_ID(B).                                                     { A = B;}
×
2047

2048
%type topic_name                                                                  { SToken }
2049
%destructor topic_name                                                            { }
2050
topic_name(A) ::= NK_ID(B).                                                       { A = B; }
2051

2052
%type stream_name                                                                 { SToken }
2053
%destructor stream_name                                                           { }
2054
stream_name(A) ::= NK_ID(B).                                                      { A = B; }
2055

2056
%type cgroup_name                                                                 { SToken }
2057
%destructor cgroup_name                                                           { }
2058
cgroup_name(A) ::= NK_ID(B).                                                      { A = B; }
2059

2060
%type index_name                                                                  { SToken }
2061
%destructor index_name                                                            { }
2062
index_name(A) ::= NK_ID(B).                                                       { A = B; }
2063

2064
%type tsma_name                                                                   { SToken }
2065
%destructor tsma_name                                                             { }
2066
tsma_name(A) ::= NK_ID(B).                                                        { A = B; }
2067

2068
%type rsma_name                                                                   { SToken }
2069
%destructor rsma_name                                                             { }
2070
rsma_name(A) ::= NK_ID(B).                                                        { A = B; }
2071

2072
/************************************************ expression **********************************************************/
2073
expr_or_subquery(A) ::= expression(B).                                            { A = B; }
2074
expr_or_subquery(A) ::= subquery(B).                                              { A = B; }
2075

2076
expression(A) ::= literal(B).                                                     { A = B; }
2077
expression(A) ::= pseudo_column(B).                                               { A = B; (void)setRawExprNodeIsPseudoColumn(pCxt, A, true); }
92,142,792✔
2078
expression(A) ::= column_reference(B).                                            { A = B; }
2079
expression(A) ::= function_expression(B).                                         { A = B; }
2080
expression(A) ::= if_expression(B).                                               { A = B; }
2081
expression(A) ::= case_when_expression(B).                                        { A = B; }
2082
expression(A) ::= NK_LP(B) expression(C) NK_RP(D).                                { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
36,424,160✔
2083
expression(A) ::= NK_PLUS(B) expr_or_subquery(C).                                 {
2084
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
×
2085
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, releaseRawExprNode(pCxt, C));
×
2086
                                                                                  }
2087
expression(A) ::= NK_MINUS(B) expr_or_subquery(C).                                {
2088
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
31,729,849✔
2089
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, C), NULL));
31,730,516✔
2090
                                                                                  }
2091
expression(A) ::= expr_or_subquery(B) NK_PLUS expr_or_subquery(C).                {
2092
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
107,129,034✔
2093
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
107,133,809✔
2094
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
107,138,393✔
2095
                                                                                  }
2096
expression(A) ::= expr_or_subquery(B) NK_MINUS expr_or_subquery(C).               {
2097
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
7,181,758✔
2098
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
7,181,758✔
2099
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
7,181,758✔
2100
                                                                                  }
2101
expression(A) ::= expr_or_subquery(B) NK_STAR expr_or_subquery(C).                {
2102
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
10,318,155✔
2103
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
10,318,758✔
2104
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
10,319,060✔
2105
                                                                                  }
2106
expression(A) ::= expr_or_subquery(B) NK_SLASH expr_or_subquery(C).               {
2107
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
9,056,954✔
2108
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
9,057,624✔
2109
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
9,058,314✔
2110
                                                                                  }
2111
expression(A) ::= expr_or_subquery(B) NK_REM expr_or_subquery(C).                 {
2112
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
256,105✔
2113
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
256,105✔
2114
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
256,105✔
2115
                                                                                  }
2116
expression(A) ::= column_reference(B) NK_ARROW NK_STRING(C).                      {
2117
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
4,642,067✔
2118
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, B), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)));
4,642,067✔
2119
                                                                                  }
2120
expression(A) ::= expr_or_subquery(B) NK_BITAND expr_or_subquery(C).              {
2121
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
105,012✔
2122
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
105,012✔
2123
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
105,012✔
2124
                                                                                  }
2125
expression(A) ::= expr_or_subquery(B) NK_BITOR expr_or_subquery(C).               {
2126
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
21,011✔
2127
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
21,011✔
2128
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
21,011✔
2129
                                                                                  }
2130

2131
%type expression_list                                                             { SNodeList* }
2132
%destructor expression_list                                                       { nodesDestroyList($$); }
2133
expression_list(A) ::= expr_or_subquery(B).                                       { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
2134
expression_list(A) ::= expression_list(B) NK_COMMA expr_or_subquery(C).           { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
2135

2136
column_reference(A) ::= column_name(B).                                           { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
1,030,956,191✔
2137
column_reference(A) ::= table_name(B) NK_DOT column_name(C).                      { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
236,740,033✔
2138
column_reference(A) ::= NK_ALIAS(B).                                              { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
9,486✔
2139
column_reference(A) ::= table_name(B) NK_DOT NK_ALIAS(C).                         { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
2,790✔
2140

2141
pseudo_column(A) ::= ROWTS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
99,102,544✔
2142
pseudo_column(A) ::= TBNAME(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2143
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)))); }
1,109,270✔
2144
pseudo_column(A) ::= QSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2145
pseudo_column(A) ::= QEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2146
pseudo_column(A) ::= QDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2147
pseudo_column(A) ::= WSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2148
pseudo_column(A) ::= WEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2149
pseudo_column(A) ::= WDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2150
pseudo_column(A) ::= IROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2151
pseudo_column(A) ::= ISFILLED(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2152
pseudo_column(A) ::= QTAGS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2153
pseudo_column(A) ::= FLOW(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2154
pseudo_column(A) ::= FHIGH(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2155
pseudo_column(A) ::= FROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2156
pseudo_column(A) ::= IROWTS_ORIGIN(B).                                            { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2157
pseudo_column(A) ::= TPREV_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2158
pseudo_column(A) ::= TCURRENT_TS(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2159
pseudo_column(A) ::= TNEXT_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2160
pseudo_column(A) ::= TWSTART(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2161
pseudo_column(A) ::= TWEND(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2162
pseudo_column(A) ::= TWDURATION(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2163
pseudo_column(A) ::= TWROWNUM(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2164
pseudo_column(A) ::= TPREV_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2165
pseudo_column(A) ::= TNEXT_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2166
pseudo_column(A) ::= TLOCALTIME(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2167
pseudo_column(A) ::= TGRPID(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2168
pseudo_column(A) ::= NK_PH NK_INTEGER(B).                                         { A = createRawExprNode(pCxt, &B, createPlaceHolderColumnNode(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B))); }
45,389✔
2169
pseudo_column(A) ::= NK_PH TBNAME(B).                                             { A = createRawExprNode(pCxt, &B, createPHTbnameFunctionNode(pCxt, &B, NULL)); }
39,681✔
2170
pseudo_column(A) ::= IMPROWTS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2171
pseudo_column(A) ::= IMPMARK(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2172
pseudo_column(A) ::= ANOMALYMARK(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2173

2174
function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D).                        { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
346,382,532✔
2175
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)); }
2176
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)); }
2177
function_expression(A) ::=
2178
  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)); }
102,538,186✔
2179
function_expression(A) ::=
2180
  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)); }
2181
function_expression(A) ::=
2182
  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))); }
117,701✔
2183
function_expression(A) ::=
2184
  TRIM(B) NK_LP expr_or_subquery(C) NK_RP(D).                                                         { A = createRawExprNodeExt(pCxt, &B, &D, createTrimFunctionNode(pCxt, releaseRawExprNode(pCxt, C), TRIM_TYPE_BOTH)); }
18,893✔
2185
function_expression(A) ::=
2186
  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,922✔
2187
function_expression(A) ::=
2188
  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)); }
17,532✔
2189
function_expression(A) ::=
2190
  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)); }
42,856✔
2191
function_expression(A) ::=
2192
  substr_func(B) NK_LP expression_list(C) NK_RP(D).                                                   { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2193
function_expression(A) ::=
2194
  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))); }
9,931✔
2195
function_expression(A) ::=
2196
  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,830✔
2197
function_expression(A) ::= REPLACE(B) NK_LP expression_list(C) NK_RP(D).                              { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
82,115✔
2198
function_expression(A) ::= literal_func(B).                                                           { A = B; }
2199
function_expression(A) ::= rand_func(B).                                                              { A = B; }
2200

2201
literal_func(A) ::= noarg_func(B) NK_LP NK_RP(C).                                 { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
14,998,697✔
2202
literal_func(A) ::= NOW(B).                                                       { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2203
literal_func(A) ::= TODAY(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2204

2205
rand_func(A) ::= RAND(B) NK_LP NK_RP(C).                                          { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
7,971✔
2206
rand_func(A) ::= RAND(B) NK_LP expression_list(C) NK_RP(D).                       { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2207

2208
%type substr_func                                                                   { SToken }
2209
%destructor substr_func                                                             { }
2210
substr_func(A) ::= SUBSTR(B).                                                       { A = B; }
2211
substr_func(A) ::= SUBSTRING(B).                                                    { A = B; }
2212

2213
%type trim_specification_type ETrimType
2214
%destructor trim_specification_type                                                { }
2215
trim_specification_type(A) ::= BOTH.                                               { A = TRIM_TYPE_BOTH; }
14,610✔
2216
trim_specification_type(A) ::= TRAILING.                                           { A = TRIM_TYPE_TRAILING; }
15,584✔
2217
trim_specification_type(A) ::= LEADING.                                            { A = TRIM_TYPE_LEADING; }
15,584✔
2218

2219
%type noarg_func                                                                  { SToken }
2220
%destructor noarg_func                                                            { }
2221
noarg_func(A) ::= NOW(B).                                                         { A = B; }
2222
noarg_func(A) ::= TODAY(B).                                                       { A = B; }
2223
noarg_func(A) ::= TIMEZONE(B).                                                    { A = B; }
2224
noarg_func(A) ::= DATABASE(B).                                                    { A = B; }
2225
noarg_func(A) ::= CLIENT_VERSION(B).                                              { A = B; }
2226
noarg_func(A) ::= SERVER_VERSION(B).                                              { A = B; }
2227
noarg_func(A) ::= SERVER_STATUS(B).                                               { A = B; }
2228
noarg_func(A) ::= CURRENT_USER(B).                                                { A = B; }
2229
noarg_func(A) ::= USER(B).                                                        { A = B; }
2230
noarg_func(A) ::= PI(B).                                                          { A = B; }
2231

2232
%type star_func                                                                   { SToken }
2233
%destructor star_func                                                             { }
2234
star_func(A) ::= COUNT(B).                                                        { A = B; }
2235
star_func(A) ::= FIRST(B).                                                        { A = B; }
2236
star_func(A) ::= LAST(B).                                                         { A = B; }
2237
star_func(A) ::= LAST_ROW(B).                                                     { A = B; }
2238

2239
%type cols_func                                                                   { SToken }
2240
%destructor cols_func                                                             { }
2241
cols_func(A) ::= COLS(B).                                                         { A = B; }
2242

2243
%type cols_func_para_list                                                         { SNodeList* }
2244
%destructor cols_func_para_list                                                   { nodesDestroyList($$); }
2245
cols_func_para_list(A) ::= function_expression(B) NK_COMMA cols_func_expression_list(C).    { A = createColsFuncParamNodeList(pCxt, B, C, NULL); }
1,073,832✔
2246

2247
cols_func_expression(A) ::= expr_or_subquery(B).                                            { A = releaseRawExprNode(pCxt, B); }
2248
cols_func_expression(A) ::= NK_STAR(B).                                                     { A = createColumnNode(pCxt, NULL, &B); }
2249
cols_func_expression(A) ::= expr_or_subquery(B) column_alias(C).                            { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
68,760✔
2250
cols_func_expression(A) ::= expr_or_subquery(B) AS column_alias(C).                         { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
162,818✔
2251

2252
%type cols_func_expression_list                                                             { SNodeList* }
2253
%destructor cols_func_expression_list                                                       { nodesDestroyList($$); }
2254
cols_func_expression_list(A) ::= cols_func_expression(B).                                   { A = createNodeList(pCxt, B); }
2255
cols_func_expression_list(A) ::= cols_func_expression_list(B) NK_COMMA cols_func_expression(C).   { A = addNodeToList(pCxt, B, C); }
2256

2257
%type star_func_para_list                                                         { SNodeList* }
2258
%destructor star_func_para_list                                                   { nodesDestroyList($$); }
2259
star_func_para_list(A) ::= NK_STAR(B).                                            { A = createNodeList(pCxt, createColumnNode(pCxt, NULL, &B)); }
31,045,134✔
2260
star_func_para_list(A) ::= other_para_list(B).                                    { A = B; }
2261

2262
%type other_para_list                                                             { SNodeList* }
2263
%destructor other_para_list                                                       { nodesDestroyList($$); }
2264
other_para_list(A) ::= star_func_para(B).                                         { A = createNodeList(pCxt, B); }
2265
other_para_list(A) ::= other_para_list(B) NK_COMMA star_func_para(C).             { A = addNodeToList(pCxt, B, C); }
2266

2267
star_func_para(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
2268
star_func_para(A) ::= table_name(B) NK_DOT NK_STAR(C).                            { A = createColumnNode(pCxt, &B, &C); }
9,175,241✔
2269

2270
if_expression(A) ::=
2271
  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))); }
67,188✔
2272
if_expression(A) ::=
2273
  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))); }
10,684✔
2274
if_expression(A) ::=
2275
  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))); }
2276
if_expression(A) ::=
2277
  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))); }
3,005✔
2278
if_expression(A) ::=
2279
  //NULLIF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).    { A = createRawExprNodeExt(pCxt, &B, &E, createNullIfNode(pCxt, C, D)); }
2280
  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))); }
3,005✔
2281
if_expression(A) ::=
2282
  COALESCE(B) NK_LP expression_list(C) NK_RP(E).                                  { A = createRawExprNodeExt(pCxt, &B, &E, createCoalesceNode(pCxt, C)); }
1,850✔
2283

2284
case_when_expression(A) ::=
2285
  CASE(E) when_then_list(C) case_when_else_opt(D) END(F).                         { A = createRawExprNodeExt(pCxt, &E, &F, createCaseWhenNode(pCxt, NULL, C, D)); }
25,985,385✔
2286
case_when_expression(A) ::=
2287
  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)); }
4,424,985✔
2288

2289
%type when_then_list                                                              { SNodeList* }
2290
%destructor when_then_list                                                        { nodesDestroyList($$); }
2291
when_then_list(A) ::= when_then_expr(B).                                          { A = createNodeList(pCxt, B); }
2292
when_then_list(A) ::= when_then_list(B) when_then_expr(C).                        { A = addNodeToList(pCxt, B, C); }
2293

2294
when_then_expr(A) ::= WHEN common_expression(B) THEN common_expression(C).        { A = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
31,239,668✔
2295

2296
case_when_else_opt(A) ::= .                                                       { A = NULL; }
2297
case_when_else_opt(A) ::= ELSE common_expression(B).                              { A = releaseRawExprNode(pCxt, B); }
2298

2299
/************************************************ predicate ***********************************************************/
2300
%type quantified_expr                                                             { EQuantifyType }           
2301
%destructor quantified_expr                                                       { }                         
2302
quantified_expr(A) ::= ANY.                                                       { A = QU_TYPE_ANY; } 
34,075,539✔
2303
quantified_expr(A) ::= SOME.                                                      { A = QU_TYPE_ANY; }
2304
quantified_expr(A) ::= ALL.                                                       { A = QU_TYPE_ALL; }
20,890,371✔
2305

2306
predicate(A) ::= expr_or_subquery(B) compare_op(C) expr_or_subquery(D).           {
2307
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
239,807,057✔
2308
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
239,824,602✔
2309
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
239,830,488✔
2310
                                                                                  }
2311
predicate(A) ::= expr_or_subquery(B) quantified_compare_op(C) quantified_expr(D) subquery(E).    {
2312
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
54,965,251✔
2313
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, E);
54,965,004✔
2314
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), setNodeQuantifyType(pCxt, releaseRawExprNode(pCxt, E), D)));
54,965,666✔
2315
                                                                                  }
2316
predicate(A) ::=
2317
  expr_or_subquery(B) BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).        {
2318
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
17,419,321✔
2319
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
17,420,950✔
2320
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
17,419,436✔
2321
                                                                                  }
2322
predicate(A) ::=
2323
  expr_or_subquery(B) NOT BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).    {
2324
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
3,379,032✔
2325
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
3,379,032✔
2326
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
3,379,032✔
2327
                                                                                  }
2328
predicate(A) ::= expr_or_subquery(B) IS NULL(C).                                  {
2329
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
21,460,768✔
2330
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, B), NULL));
21,462,168✔
2331
                                                                                  }
2332
predicate(A) ::= expr_or_subquery(B) IS NOT NULL(C).                              {
2333
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
33,357,533✔
2334
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, B), NULL));
33,358,053✔
2335
                                                                                  }
2336
predicate(A) ::= ISNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                    {
UNCOV
2337
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, C), NULL));
×
2338
                                                                                  }
2339
predicate(A) ::= ISNOTNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                 {
UNCOV
2340
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, C), NULL));
×
2341
                                                                                  }
2342
predicate(A) ::= expr_or_subquery(B) in_op(C) in_predicate_value(D).              {
2343
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
2344
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
2345
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
2346
                                                                                  }
2347
predicate(A) ::= EXISTS(B) subquery(C).                                           {
2348
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
4,357,038✔
2349
                                                                                    A = createRawExprNodeExt(pCxt, &B, &e, createOperatorNode(pCxt, OP_TYPE_EXISTS, releaseRawExprNode(pCxt, C), NULL));
4,356,956✔
2350
                                                                                  }
2351
predicate(A) ::= NOT(B) EXISTS subquery(C).                                       {
UNCOV
2352
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
×
UNCOV
2353
                                                                                    A = createRawExprNodeExt(pCxt, &B, &e, createOperatorNode(pCxt, OP_TYPE_NOT_EXISTS, releaseRawExprNode(pCxt, C), NULL));
×
2354
                                                                                  }
2355

2356

2357
%type quantified_compare_op                                                       { EOperatorType }
2358
%destructor quantified_compare_op                                                 { }
2359
quantified_compare_op(A) ::= NK_LT.                                               { A = OP_TYPE_LOWER_THAN; }
21,114,942✔
2360
quantified_compare_op(A) ::= NK_GT.                                               { A = OP_TYPE_GREATER_THAN; }
58,725,254✔
2361
quantified_compare_op(A) ::= NK_LE.                                               { A = OP_TYPE_LOWER_EQUAL; }
21,737,103✔
2362
quantified_compare_op(A) ::= NK_GE.                                               { A = OP_TYPE_GREATER_EQUAL; }
22,436,789✔
2363
quantified_compare_op(A) ::= NK_NE.                                               { A = OP_TYPE_NOT_EQUAL; }
18,061,780✔
2364
quantified_compare_op(A) ::= NK_EQ.                                               { A = OP_TYPE_EQUAL; }
119,619,201✔
2365

2366
%type compare_op                                                                  { EOperatorType }
2367
%destructor compare_op                                                            { }
2368
compare_op(A) ::= quantified_compare_op(B).                                       { A = B; }
206,739,740✔
2369
compare_op(A) ::= LIKE.                                                           { A = OP_TYPE_LIKE; }
5,541,266✔
2370
compare_op(A) ::= NOT LIKE.                                                       { A = OP_TYPE_NOT_LIKE; }
36,148✔
2371
compare_op(A) ::= MATCH.                                                          { A = OP_TYPE_MATCH; }
4,194,089✔
2372
compare_op(A) ::= NMATCH.                                                         { A = OP_TYPE_NMATCH; }
1,808,090✔
2373
compare_op(A) ::= REGEXP.                                                         { A = OP_TYPE_MATCH; }
2374
compare_op(A) ::= NOT REGEXP.                                                     { A = OP_TYPE_NMATCH; }
3,400✔
2375
compare_op(A) ::= CONTAINS.                                                       { A = OP_TYPE_JSON_CONTAINS; }
8,028✔
2376

2377
%type in_op                                                                       { EOperatorType }
2378
%destructor in_op                                                                 { }
2379
in_op(A) ::= IN.                                                                  { A = OP_TYPE_IN; }
17,713,453✔
2380
in_op(A) ::= NOT IN.                                                              { A = OP_TYPE_NOT_IN; }
4,506,549✔
2381

2382
in_predicate_value(A) ::= NK_LP(C) literal_list(B) NK_RP(D).                      { A = createRawExprNodeExt(pCxt, &C, &D, createNodeListNode(pCxt, B)); }
4,987,699✔
2383
in_predicate_value(A) ::= NK_LP(C) query_expression(B) NK_RP(D).                  { A = createRawExprNodeExt(pCxt, &C, &D, B); }
376,826,176✔
2384
in_predicate_value(A) ::= NK_LP(C) subquery(B) NK_RP(D).                          { A = createRawExprNodeExt(pCxt, &C, &D, releaseRawExprNode(pCxt, B)); }
2385

2386
/************************************************ boolean_value_expression ********************************************/
2387
boolean_value_expression(A) ::= boolean_primary(B).                               { A = B; }
2388
boolean_value_expression(A) ::= NOT(C) boolean_primary(B).                        {
2389
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, B);
325,945✔
2390
                                                                                    A = createRawExprNodeExt(pCxt, &C, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, B), NULL));
325,945✔
2391
                                                                                  }
2392
boolean_value_expression(A) ::=
2393
  boolean_value_expression(B) OR boolean_value_expression(C).                     {
2394
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
20,165,041✔
2395
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
20,165,035✔
2396
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
20,164,887✔
2397
                                                                                  }
2398
boolean_value_expression(A) ::=
2399
  boolean_value_expression(B) AND boolean_value_expression(C).                    {
2400
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
51,941,761✔
2401
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
51,941,862✔
2402
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
51,943,616✔
2403
                                                                                  }
2404

2405
boolean_primary(A) ::= predicate(B).                                              { A = B; }
2406
boolean_primary(A) ::= NK_LP(C) boolean_value_expression(B) NK_RP(D).             { A = createRawExprNodeExt(pCxt, &C, &D, releaseRawExprNode(pCxt, B)); }
2407

2408
/************************************************ common_expression ********************************************/
2409
common_expression(A) ::= expr_or_subquery(B).                                     { A = B; }
2410
common_expression(A) ::= boolean_value_expression(B).                             { A = B; }
2411

2412
/************************************************ from_clause_opt *********************************************************/
2413
from_clause_opt(A) ::= .                                                          { A = NULL; }
2414
from_clause_opt(A) ::= FROM table_reference_list(B).                              { A = B; }
2415

2416
table_reference_list(A) ::= table_reference(B).                                   { A = B; }
2417
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,717,187✔
2418

2419
/************************************************ table_reference *****************************************************/
2420
table_reference(A) ::= table_primary(B).                                          { A = B; }
2421
table_reference(A) ::= joined_table(B).                                           { A = B; }
2422

2423
table_primary(A) ::= table_name(B) alias_opt(C).                                  { A = createRealTableNode(pCxt, NULL, &B, &C); }
567,291,852✔
2424
table_primary(A) ::= db_name(B) NK_DOT table_name(C) alias_opt(D).                { A = createRealTableNode(pCxt, &B, &C, &D); }
92,884,266✔
2425
table_primary(A) ::= subquery(B) alias_opt(C).                                    { A = createTempTableNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
30,906,248✔
2426
table_primary(A) ::= parenthesized_joined_table(B).                               { A = B; }
2427
table_primary(A) ::= NK_PH TBNAME alias_opt(C).                                   { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_TBNAME, &C); }
14,136✔
2428
table_primary(A) ::= NK_PH TROWS alias_opt(C).                                    { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_ROWS, &C); }
119,948✔
2429

2430
%type alias_opt                                                                   { SToken }
2431
%destructor alias_opt                                                             { }
2432
alias_opt(A) ::= .                                                                { A = nil_token;  }
608,470,171✔
2433
alias_opt(A) ::= table_alias(B).                                                  { A = B; }
2434
alias_opt(A) ::= AS table_alias(B).                                               { A = B; }
3,023,204✔
2435

2436
parenthesized_joined_table(A) ::= NK_LP joined_table(B) NK_RP.                    { A = B; }
760✔
2437
parenthesized_joined_table(A) ::= NK_LP parenthesized_joined_table(B) NK_RP.      { A = B; }
2438

2439
/************************************************ joined_table ********************************************************/
2440
joined_table(A) ::= inner_joined(B).                                              { A = B; }
2441
joined_table(A) ::= outer_joined(B).                                              { A = B; }
2442
joined_table(A) ::= semi_joined(B).                                               { A = B; }
2443
joined_table(A) ::= anti_joined(B).                                               { A = B; }
2444
joined_table(A) ::= asof_joined(B).                                               { A = B; }
2445
joined_table(A) ::= win_joined(B).                                                { A = B; }
2446

2447
/************************************************ inner join **********************************************************/
2448
inner_joined(A) ::=
2449
  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); }
18,233,408✔
2450

2451
inner_joined(A) ::=
2452
  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,544,514✔
2453

2454
/************************************************ outer join **********************************************************/
2455
outer_joined(A) ::=
2456
  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); }
8,089,867✔
2457

2458
outer_joined(A) ::=
2459
  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); }
170,791✔
2460

2461
outer_joined(A) ::=
2462
  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); }
188,763✔
2463

2464
outer_joined(A) ::=
2465
  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); }
383✔
2466

2467
outer_joined(A) ::=
2468
  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); }
383✔
2469

2470
outer_joined(A) ::=
2471
  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); }
383✔
2472

2473
/************************************************ semi join ***********************************************************/
2474
semi_joined(A) ::=
2475
  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); }
231,255✔
2476

2477
semi_joined(A) ::=
2478
  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); }
180,005✔
2479

2480
/************************************************ ansi join ***********************************************************/
2481
anti_joined(A) ::=
2482
  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); }
231,222✔
2483

2484
anti_joined(A) ::=
2485
  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); }
159,344✔
2486

2487
/************************************************ asof join ***********************************************************/
2488
asof_joined(A) ::=
2489
  table_reference(B) LEFT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2490
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
321,239✔
2491

2492
asof_joined(A) ::=
2493
  table_reference(B) RIGHT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2494
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
225,533✔
2495

2496
/************************************************ window join *********************************************************/
2497
win_joined(A) ::=
2498
  table_reference(B) LEFT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2499
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
355,761✔
2500

2501
win_joined(A) ::=
2502
  table_reference(B) RIGHT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2503
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
264,632✔
2504

2505
join_on_clause_opt(A) ::= . [ON]                                                  { A = NULL; }
2506
join_on_clause_opt(A) ::= join_on_clause(B).                                      { A = B; }
2507

2508
join_on_clause(A) ::= ON search_condition(B).                                     { A = B; }
2509

2510
window_offset_clause(A) ::= WINDOW_OFFSET NK_LP window_offset_literal(B)
2511
  NK_COMMA window_offset_literal(C) NK_RP.                                        { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
630,061✔
2512

2513
window_offset_literal(A) ::= NK_VARIABLE(B).                                      { A = createRawExprNode(pCxt, &B, createTimeOffsetValueNode(pCxt, &B)); }
656,301✔
2514
window_offset_literal(A) ::= NK_MINUS(B) NK_VARIABLE(C).                          {
2515
                                                                                    SToken t = B;
609,901✔
2516
                                                                                    t.n = (C.z + C.n) - B.z;
609,901✔
2517
                                                                                    A = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t));
609,901✔
2518
                                                                                  }
2519

2520
jlimit_clause_opt(A) ::= . [JLIMIT]                                               { A = NULL; }
2521
jlimit_clause_opt(A) ::= JLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
23,191,013✔
2522

2523
/************************************************ query_specification *************************************************/
2524
query_specification(A) ::=
2525
  SELECT hint_list(M) set_quantifier_opt(B) tag_mode_opt(N) select_list(C) from_clause_opt(D)
2526
  where_clause_opt(E) partition_by_clause_opt(F) range_opt(J) every_opt(K)
2527
  fill_opt(L) twindow_clause_opt(G) group_by_clause_opt(H) having_clause_opt(I).  {
2528
                                                                                    A = createSelectStmt(pCxt, B, C, D, M);
668,933,071✔
2529
                                                                                    A = setSelectStmtTagMode(pCxt, A, N);
668,909,117✔
2530
                                                                                    A = addWhereClause(pCxt, A, E);
668,948,926✔
2531
                                                                                    A = addPartitionByClause(pCxt, A, F);
668,931,819✔
2532
                                                                                    A = addWindowClauseClause(pCxt, A, G);
668,921,155✔
2533
                                                                                    A = addGroupByClause(pCxt, A, H);
668,913,662✔
2534
                                                                                    A = addHavingClause(pCxt, A, I);
668,915,675✔
2535
                                                                                    A = addRangeClause(pCxt, A, J);
668,920,815✔
2536
                                                                                    A = addEveryClause(pCxt, A, K);
668,913,231✔
2537
                                                                                    A = addFillClause(pCxt, A, L);
668,914,262✔
2538
                                                                                  }
2539

2540
%type hint_list                                                                   { SNodeList* }
2541
%destructor hint_list                                                             { nodesDestroyList($$); }
2542
hint_list(A) ::= .                                                                { A = createHintNodeList(pCxt, NULL); }
674,121,385✔
2543
hint_list(A) ::= NK_HINT(B).                                                      { A = createHintNodeList(pCxt, &B); }
8,385,304✔
2544

2545
%type tag_mode_opt                                                                { bool }
2546
%destructor tag_mode_opt                                                          { }
2547
tag_mode_opt(A) ::= .                                                             { A = false; }
2548
tag_mode_opt(A) ::= TAGS.                                                         { A = true; }
2549

2550
%type set_quantifier_opt                                                          { bool }
2551
%destructor set_quantifier_opt                                                    { }
2552
set_quantifier_opt(A) ::= .                                                       { A = false; }
2553
set_quantifier_opt(A) ::= DISTINCT.                                               { A = true; }
UNCOV
2554
set_quantifier_opt(A) ::= ALL.                                                    { A = false; }
×
2555

2556
%type select_list                                                                 { SNodeList* }
2557
%destructor select_list                                                           { nodesDestroyList($$); }
2558
select_list(A) ::= select_item(B).                                                { A = createNodeList(pCxt, B); }
2559
select_list(A) ::= select_list(B) NK_COMMA select_item(C).                        { A = addNodeToList(pCxt, B, C); }
2560

2561
select_item(A) ::= NK_STAR(B).                                                    { A = createColumnNode(pCxt, NULL, &B); }
2562
select_item(A) ::= common_expression(B).                                          { A = releaseRawExprNode(pCxt, B); }
2563
select_item(A) ::= common_expression(B) column_alias(C).                          { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2564
select_item(A) ::= common_expression(B) AS column_alias(C).                       { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
66,701,432✔
2565
select_item(A) ::= table_name(B) NK_DOT NK_STAR(C).                               { A = createColumnNode(pCxt, &B, &C); }
2566

2567
where_clause_opt(A) ::= .                                                         { A = NULL; }
2568
where_clause_opt(A) ::= WHERE search_condition(B).                                { A = B; }
2569

2570
%type partition_by_clause_opt                                                     { SNodeList* }
2571
%destructor partition_by_clause_opt                                               { nodesDestroyList($$); }
2572
partition_by_clause_opt(A) ::= .                                                  { A = NULL; }
2573
partition_by_clause_opt(A) ::= PARTITION BY partition_list(B).                    { A = B; }
2574

2575
%type partition_list                                                              { SNodeList* }
2576
%destructor partition_list                                                        { nodesDestroyList($$); }
2577
partition_list(A) ::= partition_item(B).                                          { A = createNodeList(pCxt, B); }
2578
partition_list(A) ::= partition_list(B) NK_COMMA partition_item(C).               { A = addNodeToList(pCxt, B, C); }
2579

2580
partition_item(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
2581
partition_item(A) ::= expr_or_subquery(B) column_alias(C).                        { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2582
partition_item(A) ::= expr_or_subquery(B) AS column_alias(C).                     { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2583

2584
twindow_clause_opt(A) ::= .                                                       { A = NULL; }
2585
twindow_clause_opt(A) ::= SESSION NK_LP column_reference(B) NK_COMMA
2586
  interval_sliding_duration_literal(C) NK_RP.                                     { A = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
2587
twindow_clause_opt(A) ::=
2588
  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); }
2589
twindow_clause_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(B)
2590
  NK_RP sliding_opt(C) fill_opt(D).                                               { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL, C, D); }
37,670,390✔
2591
twindow_clause_opt(A) ::=
2592
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2593
  interval_sliding_duration_literal(C) NK_RP
2594
  sliding_opt(D) fill_opt(E).                                                     { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), D, E); }
313,650✔
2595
twindow_clause_opt(A) ::=
2596
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2597
  AUTO(C) NK_RP sliding_opt(D) fill_opt(E).                                       { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), createDurationValueNode(pCxt, &C), D, E); }
137,472✔
2598
twindow_clause_opt(A) ::= EVENT_WINDOW START WITH search_condition(B)
2599
  END WITH search_condition(C) true_for_opt(D).                                   { A = createEventWindowNode(pCxt, B, C, D); }
4,618,782✔
2600
twindow_clause_opt(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.          { A = createCountWindowNodeFromArgs(pCxt, B); }
2601
twindow_clause_opt(A) ::=
NEW
2602
  ANOMALY_WINDOW NK_LP anomaly_col_list(B) NK_RP.                                 { A = createAnomalyWindowNode(pCxt, B); }
×
2603

2604
%type anomaly_col_list                                                            { SNodeList* }
2605
%destructor anomaly_col_list                                                      { nodesDestroyList($$); }
2606
anomaly_col_list(A) ::= expr_or_subquery(B).                                      { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
2607
anomaly_col_list(A) ::= anomaly_col_list(B) NK_COMMA expr_or_subquery(C).         { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
2608

2609
extend_literal(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_INT, &B); }
514,243✔
2610

2611
zeroth_literal(A) ::= signed_integer(B).                                          { A = B; }
2612
zeroth_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2613
zeroth_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
2614

2615
%type state_window_opt                                                            { SNodeList* }
2616
%destructor state_window_opt                                                      { nodesDestroyList($$); }
2617
state_window_opt(A) ::= .                                                         { A = NULL; }
2618
state_window_opt(A) ::= NK_COMMA extend_literal(B).                               { A = createNodeList(pCxt, B); }
513,856✔
UNCOV
2619
state_window_opt(A) ::= NK_COMMA extend_literal(B) NK_COMMA zeroth_literal(C).    { A = addNodeToList(pCxt, createNodeList(pCxt, B), C); }
×
2620

2621
sliding_opt(A) ::= .                                                              { A = NULL; }
2622
sliding_opt(A) ::= SLIDING NK_LP interval_sliding_duration_literal(B) NK_RP.      { A = releaseRawExprNode(pCxt, B); }
2623

2624
interval_sliding_duration_literal(A) ::= NK_VARIABLE(B).                          { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2625
interval_sliding_duration_literal(A) ::= NK_STRING(B).                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2626
interval_sliding_duration_literal(A) ::= NK_INTEGER(B).                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
UNCOV
2627
interval_sliding_duration_literal(A) ::= NK_QUESTION(B).                         { A = createRawExprNode(pCxt, &B, createDurationPlaceholderValueNode(pCxt, &B)); }
×
2628

2629

2630
fill_opt(A) ::= .                                                                 { A = NULL; }
2631
fill_opt(A) ::= fill_value(B).                                                    { A = B; }
2632
fill_opt(A) ::= FILL NK_LP fill_mode(B) NK_RP.                                    { A = createFillNode(pCxt, B, NULL); }
490,235✔
2633
fill_opt(A) ::=
2634
  FILL NK_LP fill_position_mode(B) NK_RP surround_opt(C).                         { A = createFillNodeWithSurroundNode(pCxt, B, C); }
1,940,288✔
2635
fill_opt(A) ::= 
2636
  FILL NK_LP fill_position_mode(B) NK_COMMA expression_list(C) NK_RP.             { A = createFillNode(pCxt, B, createNodeListNode(pCxt, C)); }
1,502,849✔
2637

2638
fill_value(A) ::= FILL NK_LP VALUE NK_RP.                                         { A = createFillNode(pCxt, FILL_MODE_VALUE, NULL); }
722✔
2639
fill_value(A) ::= FILL NK_LP VALUE NK_COMMA expression_list(B) NK_RP.             { A = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, B)); }
205,246✔
UNCOV
2640
fill_value(A) ::= FILL NK_LP VALUE_F NK_RP.                                       { A = createFillNode(pCxt, FILL_MODE_VALUE_F, NULL); }
×
2641
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)); }
27,636✔
2642

2643
%type fill_mode                                                                   { EFillMode }
2644
%destructor fill_mode                                                             { }
2645
fill_mode(A) ::= NONE.                                                            { A = FILL_MODE_NONE; }
4,609✔
2646
fill_mode(A) ::= NULL.                                                            { A = FILL_MODE_NULL; }
177,390✔
2647
fill_mode(A) ::= NULL_F.                                                          { A = FILL_MODE_NULL_F; }
43,583✔
2648
fill_mode(A) ::= LINEAR.                                                          { A = FILL_MODE_LINEAR; }
274,174✔
2649

2650
%type fill_position_mode                                                          { EFillMode }
2651
%destructor fill_position_mode                                                    { }
2652
fill_position_mode(A) ::= PREV.                                                   { A = FILL_MODE_PREV; }
348,106✔
2653
fill_position_mode(A) ::= NEXT.                                                   { A = FILL_MODE_NEXT; }
260,464✔
2654
fill_position_mode(A) ::= NEAR.                                                   { A = FILL_MODE_NEAR; }
2,851,462✔
2655

2656
%type surround_opt                                                                { SNode* }
2657
%destructor surround_opt                                                          { nodesDestroyNode($$); }
2658
surround_opt(A) ::= .                                                             { A = NULL; }
2659
surround_opt(A) ::= SURROUND NK_LP duration_literal(B) NK_RP.                     { A = createSurroundNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
6,596✔
2660
surround_opt(A) ::=
2661
  SURROUND NK_LP duration_literal(B) NK_COMMA expression_list(C) NK_RP.           { A = createSurroundNode(pCxt, releaseRawExprNode(pCxt, B), createNodeListNode(pCxt, C)); }
72,601✔
2662

2663
count_window_args(A) ::= NK_INTEGER(B).                                           { A = createCountWindowArgs(pCxt, &B, NULL, NULL); }
4,350,435✔
2664
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C).                    { A = createCountWindowArgs(pCxt, &B, &C, NULL); }
7,512✔
2665
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA column_name_list(D).              { A = createCountWindowArgs(pCxt, &B, NULL, D); }
25,776✔
2666
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_COMMA column_name_list(D). { A = createCountWindowArgs(pCxt, &B, &C, D); }
13,761✔
2667

2668
%type group_by_clause_opt                                                         { SNodeList* }
2669
%destructor group_by_clause_opt                                                   { nodesDestroyList($$); }
2670
group_by_clause_opt(A) ::= .                                                      { A = NULL; }
2671
group_by_clause_opt(A) ::= GROUP BY group_by_list(B).                             { A = B; }
2672

2673
%type group_by_list                                                               { SNodeList* }
2674
%destructor group_by_list                                                         { nodesDestroyList($$); }
2675
group_by_list(A) ::= expr_or_subquery(B).                                         { A = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, B))); }
50,423,496✔
2676
group_by_list(A) ::= group_by_list(B) NK_COMMA expr_or_subquery(C).               { A = addNodeToList(pCxt, B, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, C))); }
4,464,249✔
2677

2678
having_clause_opt(A) ::= .                                                        { A = NULL; }
2679
having_clause_opt(A) ::= HAVING search_condition(B).                              { A = B; }
2680

2681
range_opt(A) ::= .                                                                { A = NULL; }
2682
range_opt(A) ::=
2683
  RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_COMMA expr_or_subquery(D) NK_RP.              {
2684
                                                                                    A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)); }
116,697✔
2685
range_opt(A) ::=
2686
  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); }
3,381,103✔
2687
range_opt(A) ::=
2688
  RANGE NK_LP expr_or_subquery(B) NK_RP.                                          { A = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, B)); }
128,701✔
2689

2690
every_opt(A) ::= .                                                                { A = NULL; }
2691
every_opt(A) ::= EVERY NK_LP duration_literal(B) NK_RP.                           { A = releaseRawExprNode(pCxt, B); }
2692

2693
true_for_opt(A) ::= .                                                             { A = NULL; }
2694
true_for_opt(A) ::= TRUE_FOR NK_LP interval_sliding_duration_literal(B) NK_RP.    { A = releaseRawExprNode(pCxt, B); }
2695
true_for_opt(A) ::= TRUE_FOR NK_LP COUNT NK_INTEGER(B) NK_RP.                     { A = createTrueForCountNode(pCxt, &B); }
3,234✔
2696
true_for_opt(A) ::= TRUE_FOR NK_LP interval_sliding_duration_literal(B) AND COUNT NK_INTEGER(C) NK_RP. { A = createTrueForAndNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
3,234✔
2697
true_for_opt(A) ::= TRUE_FOR NK_LP interval_sliding_duration_literal(B) OR COUNT NK_INTEGER(C) NK_RP.  { A = createTrueForOrNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
3,234✔
2698

2699
/************************************************ query_expression ****************************************************/
2700
query_expression(A) ::= query_simple(B)
2701
  order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E).                {
2702
                                                                                    A = addOrderByClause(pCxt, B, C);
636,673,553✔
2703
                                                                                    A = addSlimitClause(pCxt, A, D);
636,671,956✔
2704
                                                                                    A = addLimitClause(pCxt, A, E);
636,686,493✔
2705
                                                                                  }
2706

2707
query_simple(A) ::= query_specification(B).                                       { A = B; }
2708
query_simple(A) ::= union_query_expression(B).                                    { A = B; }
2709

2710
union_query_expression(A) ::=
2711
  query_simple_or_subquery(B) UNION ALL query_simple_or_subquery(C).              { A = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, B, C); }
23,120,813✔
2712
union_query_expression(A) ::=
2713
  query_simple_or_subquery(B) UNION query_simple_or_subquery(C).                  { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, C); }
16,729,194✔
2714

2715
query_simple_or_subquery(A) ::= query_simple(B).                                  { A = B; }
2716
query_simple_or_subquery(A) ::= subquery(B).                                      { A = releaseRawExprNode(pCxt, B); }
2717

2718
query_or_subquery(A) ::= query_expression(B).                                     { A = B; }
2719
query_or_subquery(A) ::= subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
2720

2721
%type order_by_clause_opt                                                         { SNodeList* }
2722
%destructor order_by_clause_opt                                                   { nodesDestroyList($$); }
2723
order_by_clause_opt(A) ::= .                                                      { A = NULL; }
2724
order_by_clause_opt(A) ::= ORDER BY sort_specification_list(B).                   { A = B; }
2725

2726
slimit_clause_opt(A) ::= .                                                        { A = NULL; }
2727
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
2728
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B) SOFFSET unsigned_integer(C).  { A = createLimitNode(pCxt, B, C); }
6,167,495✔
2729
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B). { A = createLimitNode(pCxt, B, C); }
406,798✔
2730

2731
limit_clause_opt(A) ::= .                                                         { A = NULL; }
2732
limit_clause_opt(A) ::= LIMIT unsigned_integer(B).                                { A = createLimitNode(pCxt, B, NULL); }
2733
limit_clause_opt(A) ::= LIMIT unsigned_integer(B) OFFSET unsigned_integer(C).     { A = createLimitNode(pCxt, B, C); }
2734
limit_clause_opt(A) ::= LIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B).   { A = createLimitNode(pCxt, B, C); }
2735

2736
/************************************************ subquery ************************************************************/
2737
subquery(A) ::= NK_LP(B) query_expression(C) NK_RP(D).                            { A = createRawExprNodeExt(pCxt, &B, &D, C); }
2738
subquery(A) ::= NK_LP(B) subquery(C) NK_RP(D).                                    { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
2739

2740
/************************************************ search_condition ****************************************************/
2741
search_condition(A) ::= common_expression(B).                                     { A = releaseRawExprNode(pCxt, B); }
2742

2743
/************************************************ sort_specification_list *********************************************/
2744
%type sort_specification_list                                                     { SNodeList* }
2745
%destructor sort_specification_list                                               { nodesDestroyList($$); }
2746
sort_specification_list(A) ::= sort_specification(B).                             { A = createNodeList(pCxt, B); }
2747
sort_specification_list(A) ::=
2748
  sort_specification_list(B) NK_COMMA sort_specification(C).                      { A = addNodeToList(pCxt, B, C); }
2749

2750
sort_specification(A) ::=
2751
  expr_or_subquery(B) ordering_specification_opt(C) null_ordering_opt(D).         { A = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, B), C, D); }
167,447,552✔
2752

2753
%type ordering_specification_opt EOrder
2754
%destructor ordering_specification_opt                                            { }
2755
ordering_specification_opt(A) ::= .                                               { A = ORDER_ASC; }
153,953,404✔
2756
ordering_specification_opt(A) ::= ASC.                                            { A = ORDER_ASC; }
8,776,372✔
2757
ordering_specification_opt(A) ::= DESC.                                           { A = ORDER_DESC; }
4,714,364✔
2758

2759
%type null_ordering_opt ENullOrder
2760
%destructor null_ordering_opt                                                     { }
2761
null_ordering_opt(A) ::= .                                                        { A = NULL_ORDER_DEFAULT; }
167,101,868✔
2762
null_ordering_opt(A) ::= NULLS FIRST.                                             { A = NULL_ORDER_FIRST; }
172,076✔
2763
null_ordering_opt(A) ::= NULLS LAST.                                              { A = NULL_ORDER_LAST; }
170,790✔
2764

2765
%fallback NK_ID FROM_BASE64 TO_BASE64 MD5 SHA SHA1 SHA2 AES_ENCRYPT AES_DECRYPT SM4_ENCRYPT SM4_DECRYPT.
2766
%fallback ABORT AFTER ATTACH BEFORE BEGIN BITAND BITNOT BITOR BLOCKS CHANGE COMMA CONCAT CONFLICT COPY DEFERRED DELIMITERS DETACH DIVIDE DOT EACH END FAIL
2767
  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
2768
  STRICT STRING TIMES VALUES VARIABLE VIEW WAL.
2769

2770
column_options(A) ::= .                                                           { A = createDefaultColumnOptions(pCxt); }
2771
column_options(A) ::= column_options(B) PRIMARY KEY.                              { A = setColumnOptionsPK(pCxt, B); }
2772
column_options(A) ::= column_options(B) COMPOSITE KEY.                            { A = setColumnOptionsPK(pCxt, B); }
2773
column_options(A) ::= column_options(B) NK_ID(C) NK_STRING(D).                    { A = setColumnOptions(pCxt, B, &C, &D); }
2,186,211✔
2774
column_options(A) ::= column_options(B) FROM column_ref(C).                       { A = setColumnReference(pCxt, B, C); }
89,549,688✔
2775

2776
column_ref(A) ::= column_name_triplet(B).                                            { A = createColumnRefNodeByName(pCxt, B); }
144,480,019✔
2777

2778
%type column_name_triplet                                                            { STokenTriplet* }
2779
%destructor column_name_triplet                                                      { }
2780
column_name_triplet(A) ::= NK_ID(B).                                                 { A = createTokenTriplet(pCxt, B); }
144,480,019✔
2781
column_name_triplet(A) ::= column_name_triplet(B) NK_DOT NK_ID(C).                   { A = setColumnName(pCxt, B, C); }
144,884,277✔
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