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

taosdata / TDengine / #4914

06 Jan 2026 01:30AM UTC coverage: 64.876% (-0.008%) from 64.884%
#4914

push

travis-ci

web-flow
merge: from main to 3.0 branch #34167

180 of 319 new or added lines in 14 files covered. (56.43%)

3475 existing lines in 124 files now uncovered.

194993 of 300563 relevant lines covered (64.88%)

116239151.85 hits per line

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

67.48
/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($$); }
13,999,032✔
8

9
%extra_argument { SAstCreateContext* pCxt }
10

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

18
#define ALLOW_FORBID_FUNC
19

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

26
#define YYSTACKDEPTH 0
27

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

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

38
%syntax_error {
39
  if (TSDB_CODE_SUCCESS == pCxt->errCode) {
7,849,412✔
40
    if(TOKEN.z) {
7,848,744✔
41
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, TOKEN.z);
7,649,033✔
42
    } else {
43
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INCOMPLETE_SQL);
199,711✔
44
    }
45
  } else if (TSDB_CODE_PAR_DB_NOT_SPECIFIED == pCxt->errCode && TK_NK_FLOAT == TOKEN.type) {
668✔
46
    pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, TOKEN.z);
×
47
  }
48
}
49

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

59
%right NOT.
60
%left NK_ARROW.
61

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

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

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

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

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

99

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

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

113
%type user_option                                                                 { SUserOptions* }
114
// NOTE: TOTPSEED is deprecated, please use CREATE/DROP TOTPSECRET.
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; }
2,389✔
118
user_option(A) ::= SYSINFO NK_INTEGER(B).                                         { A = mergeUserOptions(pCxt, NULL, NULL); A->sysinfo = taosStr2Int8(B.z, NULL, 10); A->hasSysinfo = true; }
9,124✔
119
user_option(A) ::= IS_IMPORT NK_INTEGER(B).                                       { A = mergeUserOptions(pCxt, NULL, NULL); A->isImport = taosStr2Int8(B.z, NULL, 10); A->hasIsImport = true; }
948✔
120
user_option(A) ::= CREATEDB NK_INTEGER(B).                                        { A = mergeUserOptions(pCxt, NULL, NULL); A->createdb = taosStr2Int8(B.z, NULL, 10); A->hasCreatedb = true; }
3,698✔
121
user_option(A) ::= CHANGEPASS NK_INTEGER(B).                                      { A = mergeUserOptions(pCxt, NULL, NULL); A->changepass = taosStr2Int8(B.z, NULL, 10); A->hasChangepass = true; }
40✔
122
user_option(A) ::= SESSION_PER_USER option_value(B).                              {
UNCOV
123
    A = mergeUserOptions(pCxt, NULL, NULL);
×
124
    if (B.type == TK_DEFAULT) {
×
125
      A->sessionPerUser = TSDB_USER_SESSION_PER_USER_DEFAULT;
×
126
    } else if (B.type == TK_UNLIMITED) {
×
127
      A->sessionPerUser = -1;
×
128
    } else {
UNCOV
129
      A->sessionPerUser = taosStr2Int32(B.z, NULL, 10);
×
130
    }
UNCOV
131
    A->hasSessionPerUser = true;
×
132
  }
133
user_option(A) ::= CONNECT_TIME option_value(B).                                 {
UNCOV
134
    A = mergeUserOptions(pCxt, NULL, NULL);
×
135
    if (B.type == TK_DEFAULT) {
×
136
      A->connectTime = TSDB_USER_CONNECT_TIME_DEFAULT;
×
137
    } else if (B.type == TK_UNLIMITED) {
×
138
      A->connectTime = -1;
×
139
    } else {
UNCOV
140
      A->connectTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
141
    }
UNCOV
142
    A->hasConnectTime = true;
×
143
  }
144
user_option(A) ::= CONNECT_IDLE_TIME option_value(B).                            {
UNCOV
145
    A = mergeUserOptions(pCxt, NULL, NULL);
×
146
    if (B.type == TK_DEFAULT) {
×
147
      A->connectIdleTime = TSDB_USER_CONNECT_IDLE_TIME_DEFAULT;
×
148
    } else if (B.type == TK_UNLIMITED) {
×
149
      A->connectIdleTime = -1;
×
150
    } else {
UNCOV
151
      A->connectIdleTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
152
    }
UNCOV
153
    A->hasConnectIdleTime = true;
×
154
  }
155
user_option(A) ::= CALL_PER_SESSION option_value(B).                             {
UNCOV
156
    A = mergeUserOptions(pCxt, NULL, NULL);
×
157
    if (B.type == TK_DEFAULT) {
×
158
      A->callPerSession = TSDB_USER_CALL_PER_SESSION_DEFAULT;
×
159
    } else if (B.type == TK_UNLIMITED) {
×
160
      A->callPerSession = -1;
×
161
    } else {
UNCOV
162
      A->callPerSession = taosStr2Int32(B.z, NULL, 10);
×
163
    }
UNCOV
164
    A->hasCallPerSession = true;
×
165
  }
166
user_option(A) ::= VNODE_PER_CALL option_value(B).                               {
UNCOV
167
    A = mergeUserOptions(pCxt, NULL, NULL);
×
168
    if (B.type == TK_DEFAULT) {
×
169
      A->vnodePerCall = TSDB_USER_VNODE_PER_CALL_DEFAULT;
×
170
    } else if (B.type == TK_UNLIMITED) {
×
171
      A->vnodePerCall = -1;
×
172
    } else {
UNCOV
173
      A->vnodePerCall = taosStr2Int32(B.z, NULL, 10);
×
174
    }
UNCOV
175
    A->hasVnodePerCall = true;
×
176
  }
177

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

267

268
%type ip_range_list                                                              { SNodeList* }
269
%destructor ip_range_list                                                        { nodesDestroyList($$); }
15,587,116✔
270
ip_range_list(A) ::= NK_STRING(B).                                               { A = createNodeList(pCxt, (SNode*)parseIpRange(pCxt, &B)); }
1,738✔
271
ip_range_list(A) ::= ip_range_list(B) NK_COMMA NK_STRING(C).                     { A = addNodeToList(pCxt, B, (SNode*)parseIpRange(pCxt, &C)); }
316✔
272

273

274
%type datetime_range_list                                                        { SNodeList* }
275
%destructor datetime_range_list                                                  { nodesDestroyList($$); }
UNCOV
276
datetime_range_list(A) ::= NK_STRING(B).                                         { A = createNodeList(pCxt, (SNode*)parseDateTimeRange(pCxt, &B)); }
×
277
datetime_range_list(A) ::= datetime_range_list(B) NK_COMMA NK_STRING(C).         { A = addNodeToList(pCxt, B, (SNode*)parseDateTimeRange(pCxt, &C)); }
×
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; }
1,422✔
282
create_user_option(A) ::= NOT_ALLOW_HOST ip_range_list(B).                       {
UNCOV
283
    SNode* pNode = NULL;
×
284
    FOREACH(pNode, B) {
×
285
      ((SIpRangeNode*)pNode)->range.neg = true;
×
286
    }
UNCOV
287
    A = mergeUserOptions(pCxt, NULL, NULL);
×
288
    A->pIpRanges = B;
×
289
  }
UNCOV
290
create_user_option(A) ::= ALLOW_DATETIME datetime_range_list(B).                 { A = mergeUserOptions(pCxt, NULL, NULL); A->pTimeRanges = B; }
×
291
create_user_option(A) ::= NOT_ALLOW_DATETIME datetime_range_list(B).             {
UNCOV
292
    SNode* pNode = NULL;
×
293
    FOREACH(pNode, B) {
×
294
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
295
    }
UNCOV
296
    A = mergeUserOptions(pCxt, NULL, NULL);
×
297
    A->pTimeRanges = B;
×
298
  }
299

300
%type create_user_options                                                        { SUserOptions* }
301
create_user_options(A) ::= user_option(B).                                       { A = B; }
37,706✔
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); }
4,639✔
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; }
55,506✔
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); }
15,191✔
313
alter_user_option(A) ::= ADD HOST ip_range_list(B).                              { A = mergeUserOptions(pCxt, NULL, NULL); A->pIpRanges = B; }
158✔
314
alter_user_option(A) ::= ADD NOT_ALLOW_HOST ip_range_list(B).                    {
UNCOV
315
    SNode* pNode = NULL;
×
316
    FOREACH(pNode, B) {
×
317
      ((SIpRangeNode*)pNode)->range.neg = true;
×
318
    }
UNCOV
319
    A = mergeUserOptions(pCxt, NULL, NULL);
×
320
    A->pIpRanges = B;
×
321
  }
322
alter_user_option(A) ::= DROP HOST ip_range_list(B).                             { A = mergeUserOptions(pCxt, NULL, NULL); A->pDropIpRanges = B; }
158✔
323
alter_user_option(A) ::= DROP NOT_ALLOW_HOST ip_range_list(B).                   {
UNCOV
324
    SNode* pNode = NULL;
×
325
    FOREACH(pNode, B) {
×
326
      ((SIpRangeNode*)pNode)->range.neg = true;
×
327
    }
UNCOV
328
    A = mergeUserOptions(pCxt, NULL, NULL);
×
329
    A->pDropIpRanges = B;
×
330
  }
UNCOV
331
alter_user_option(A) ::= ADD ALLOW_DATETIME datetime_range_list(B).              { A = mergeUserOptions(pCxt, NULL, NULL); A->pTimeRanges = B; }
×
332
alter_user_option(A) ::= ADD NOT_ALLOW_DATETIME datetime_range_list(B).          {
UNCOV
333
    SNode* pNode = NULL;
×
334
    FOREACH(pNode, B) {
×
335
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
336
    }
UNCOV
337
    A = mergeUserOptions(pCxt, NULL, NULL);
×
338
    A->pTimeRanges = B;
×
339
  }
UNCOV
340
alter_user_option(A) ::= DROP ALLOW_DATETIME datetime_range_list(B).             { A = mergeUserOptions(pCxt, NULL, NULL); A->pDropTimeRanges = B; }
×
341
alter_user_option(A) ::= DROP NOT_ALLOW_DATETIME datetime_range_list(B).         {
UNCOV
342
    SNode* pNode = NULL;
×
343
    FOREACH(pNode, B) {
×
344
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
345
    }
UNCOV
346
    A = mergeUserOptions(pCxt, NULL, NULL);
×
347
    A->pDropTimeRanges = B;
×
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);
61,763✔
359
    setUserOptionsPassword(pCxt, D, &C);
61,763✔
360
    pCxt->pRootNode = createCreateUserStmt(pCxt, &B, D, A);
61,763✔
361
  }
362
cmd ::= ALTER USER user_name(A) alter_user_options(B).                           { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, B); }
24,876✔
363
cmd ::= DROP USER exists_opt(A) user_name(B).                                    { pCxt->pRootNode = createDropUserStmt(pCxt, &B, A); }
20,661✔
364

365

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

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

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

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

393

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

402
/************************************************ create/drop role **********************************************/
403
cmd ::= CREATE ROLE not_exists_opt(A) role_name(B).                               { pCxt->pRootNode = createCreateRoleStmt(pCxt, A, &B); }
153✔
UNCOV
404
cmd ::= DROP ROLE exists_opt(A) role_name(B).                                     { pCxt->pRootNode = createDropRoleStmt(pCxt, A, &B); }
×
405
cmd ::= LOCK ROLE role_name(A).                                                   { 
406
                                                                                    SToken t = {.n = 1, .z = "1", .type = TK_STRING };
×
UNCOV
407
                                                                                    pCxt->pRootNode = createAlterRoleStmt(pCxt, &A, TSDB_ALTER_ROLE_LOCK, &t); 
×
408
                                                                                  }
409
cmd ::= UNLOCK ROLE role_name(A).                                                 { 
UNCOV
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,163✔
414
cmd ::= REVOKE ROLE role_name(A) FROM role_name(C).                               { pCxt->pRootNode = createRevokeStmt(pCxt, &A, NULL, &C, NULL, TSDB_ALTER_ROLE_ROLE); }
1,245✔
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); }
554,164✔
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); }
400,616✔
418

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

431
                                                                                  }
432
privileges(A) ::= priv_type_list(B).                                              { A = B; }
2,273,929✔
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); }
11,475✔
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); }
206,960✔
UNCOV
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); }
99,816✔
466
priv_type(A) ::= DROP.                                                            { A = PRIV_SET_TYPE(PRIV_CM_DROP); }
68,432✔
467
priv_type(A) ::= SHOW.                                                            { A = PRIV_SET_TYPE(PRIV_CM_SHOW); }
224✔
468
priv_type(A) ::= SHOW CREATE.                                                     { A = PRIV_SET_TYPE(PRIV_CM_SHOW_CREATE); }
224✔
UNCOV
469
priv_type(A) ::= START.                                                           { A = PRIV_SET_TYPE(PRIV_CM_START); }
×
UNCOV
470
priv_type(A) ::= STOP.                                                            { A = PRIV_SET_TYPE(PRIV_CM_STOP); }
×
471
priv_type(A) ::= KILL.                                                            { A = PRIV_SET_TYPE(PRIV_CM_KILL); }
×
UNCOV
472
priv_type(A) ::= RECALCULATE.                                                     { A = PRIV_SET_TYPE(PRIV_CM_RECALC); }
×
473
priv_type(A) ::= SUBSCRIBE.                                                       { A = PRIV_SET_TYPE(PRIV_CM_SUBSCRIBE); }
4,716✔
474
priv_type(A) ::= READ.                                                            { A = PRIV_SET_TYPE(PRIV_TYPE_UNKNOWN); }
5,670✔
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); }
787✔
478
priv_type(A) ::= DROP OWNED DATABASE.                                             { A = PRIV_SET_TYPE(PRIV_DB_DROP_OWNED); }
×
479
priv_type(A) ::= USE DATABASE.                                                    { A = PRIV_SET_TYPE(PRIV_DB_USE); }
153✔
UNCOV
480
priv_type(A) ::= FLUSH DATABASE.                                                  { A = PRIV_SET_TYPE(PRIV_DB_FLUSH); }
×
UNCOV
481
priv_type(A) ::= COMPACT DATABASE.                                                { A = PRIV_SET_TYPE(PRIV_DB_COMPACT); }
×
UNCOV
482
priv_type(A) ::= TRIM DATABASE.                                                   { A = PRIV_SET_TYPE(PRIV_DB_TRIM); }
×
UNCOV
483
priv_type(A) ::= ROLLUP DATABASE.                                                 { A = PRIV_SET_TYPE(PRIV_DB_ROLLUP); }
×
UNCOV
484
priv_type(A) ::= SCAN DATABASE.                                                   { A = PRIV_SET_TYPE(PRIV_DB_SCAN); }
×
485
priv_type(A) ::= SSMIGRATE DATABASE.                                              { A = PRIV_SET_TYPE(PRIV_DB_SSMIGRATE); }
×
486
priv_type(A) ::= USE.                                                             { A = PRIV_SET_TYPE(PRIV_DB_USE); }
132,683✔
487
priv_type(A) ::= FLUSH.                                                           { A = PRIV_SET_TYPE(PRIV_DB_FLUSH); }
×
488
priv_type(A) ::= COMPACT.                                                         { A = PRIV_SET_TYPE(PRIV_DB_COMPACT); }
×
489
priv_type(A) ::= TRIM.                                                            { A = PRIV_SET_TYPE(PRIV_DB_TRIM); }
×
490
priv_type(A) ::= ROLLUP.                                                          { A = PRIV_SET_TYPE(PRIV_DB_ROLLUP); }
×
491
priv_type(A) ::= SCAN.                                                            { A = PRIV_SET_TYPE(PRIV_DB_SCAN); }
×
492
priv_type(A) ::= SSMIGRATE.                                                       { A = PRIV_SET_TYPE(PRIV_DB_SSMIGRATE); }
×
UNCOV
493
priv_type(A) ::= DROP OWNED.                                                      { A = PRIV_SET_TYPE(PRIV_DB_DROP_OWNED); }
×
494

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

502
priv_type(A) ::= CREATE TABLE.                                                    { A = PRIV_SET_TYPE(PRIV_TBL_CREATE); }
81,829✔
503

504
priv_type(A) ::= priv_type_tbl_dml(B).                                            { A = B; }
505

506
priv_type(A) ::= CREATE FUNCTION.                                                 { A = PRIV_SET_TYPE(PRIV_FUNC_CREATE); }
×
507
priv_type(A) ::= DROP FUNCTION.                                                   { A = PRIV_SET_TYPE(PRIV_FUNC_DROP); }
×
UNCOV
508
priv_type(A) ::= SHOW FUNCTIONS.                                                  { A = PRIV_SET_TYPE(PRIV_FUNC_SHOW); }
×
509

UNCOV
510
priv_type(A) ::= CREATE INDEX.                                                    { A = PRIV_SET_TYPE(PRIV_IDX_CREATE); }
×
UNCOV
511
priv_type(A) ::= DROP INDEX.                                                      { A = PRIV_SET_TYPE(PRIV_IDX_DROP); }
×
UNCOV
512
priv_type(A) ::= SHOW INDEXES.                                                    { A = PRIV_SET_TYPE(PRIV_IDX_SHOW); }
×
513

514
priv_type(A) ::= CREATE VIEW.                                                     { A = PRIV_SET_TYPE(PRIV_VIEW_CREATE); }
×
515
priv_type(A) ::= SELECT VIEW.                                                     { A = PRIV_SET_TYPE(PRIV_VIEW_SELECT); }
×
516

517
priv_type(A) ::= CREATE RSMA.                                                     { A = PRIV_SET_TYPE(PRIV_RSMA_CREATE); }
×
518
priv_type(A) ::= CREATE TSMA.                                                     { A = PRIV_SET_TYPE(PRIV_TSMA_CREATE); }
×
519

UNCOV
520
priv_type(A) ::= CREATE MOUNT.                                                    { A = PRIV_SET_TYPE(PRIV_MOUNT_CREATE); }
×
521
priv_type(A) ::= DROP MOUNT.                                                      { A = PRIV_SET_TYPE(PRIV_MOUNT_DROP); }
×
522
priv_type(A) ::= SHOW MOUNTS.                                                     { A = PRIV_SET_TYPE(PRIV_MOUNT_SHOW); }
×
523

524
priv_type(A) ::= ALTER PASS.                                                      { A = PRIV_SET_TYPE(PRIV_PASS_ALTER); }
×
525
priv_type(A) ::= ALTER SELF PASS.                                                 { A = PRIV_SET_TYPE(PRIV_PASS_ALTER_SELF); }
×
526

527
priv_type(A) ::= CREATE ROLE.                                                     { A = PRIV_SET_TYPE(PRIV_ROLE_CREATE); }
×
528
priv_type(A) ::= DROP ROLE.                                                       { A = PRIV_SET_TYPE(PRIV_ROLE_DROP); }
×
529
priv_type(A) ::= SHOW ROLES.                                                      { A = PRIV_SET_TYPE(PRIV_ROLE_SHOW); }
×
530

531
priv_type(A) ::= CREATE USER.                                                     { A = PRIV_SET_TYPE(PRIV_USER_CREATE); }
×
532
priv_type(A) ::= DROP USER.                                                       { A = PRIV_SET_TYPE(PRIV_USER_DROP); }
×
UNCOV
533
priv_type(A) ::= SET USER SECURITY INFO.                                          { A = PRIV_SET_TYPE(PRIV_USER_SET_SECURITY); }
×
534
priv_type(A) ::= SET USER AUDIT INFO.                                             { A = PRIV_SET_TYPE(PRIV_USER_SET_AUDIT); }
×
535
priv_type(A) ::= SET USER BASIC INFO.                                             { A = PRIV_SET_TYPE(PRIV_USER_SET_BASIC); }
×
536
priv_type(A) ::= UNLOCK USER.                                                     { A = PRIV_SET_TYPE(PRIV_USER_UNLOCK); }
×
UNCOV
537
priv_type(A) ::= LOCK USER.                                                       { A = PRIV_SET_TYPE(PRIV_USER_LOCK); }
×
538
priv_type(A) ::= SHOW USERS.                                                      { A = PRIV_SET_TYPE(PRIV_USER_SHOW); }
×
539

540
priv_type(A) ::= CREATE AUDIT DATABASE.                                           { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_CREATE); }
×
541
priv_type(A) ::= DROP AUDIT DATABASE.                                             { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_DROP); }
×
542
priv_type(A) ::= ALTER AUDIT DATABASE.                                            { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_ALTER); }
×
543
priv_type(A) ::= USE AUDIT DATABASE.                                              { A = PRIV_SET_TYPE(PRIV_AUDIT_DB_USE); }
×
544

545
priv_type(A) ::= CREATE TOKEN.                                                    { A = PRIV_SET_TYPE(PRIV_TOKEN_CREATE); }
×
UNCOV
546
priv_type(A) ::= DROP TOKEN.                                                      { A = PRIV_SET_TYPE(PRIV_TOKEN_DROP); }
×
547
priv_type(A) ::= ALTER TOKEN.                                                     { A = PRIV_SET_TYPE(PRIV_TOKEN_ALTER); }
×
548
priv_type(A) ::= SHOW TOKENS.                                                     { A = PRIV_SET_TYPE(PRIV_TOKEN_SHOW); }
×
549

550
priv_type(A) ::= UPDATE KEY.                                                      { A = PRIV_SET_TYPE(PRIV_KEY_UPDATE); }
×
UNCOV
551
priv_type(A) ::= CREATE TOTP.                                                     { A = PRIV_SET_TYPE(PRIV_TOTP_CREATE); }
×
552
priv_type(A) ::= DROP TOTP.                                                       { A = PRIV_SET_TYPE(PRIV_TOTP_DROP); }
×
553
priv_type(A) ::= UPDATE TOTP.                                                     { A = PRIV_SET_TYPE(PRIV_TOTP_UPDATE); }
×
554

555
priv_type(A) ::= GRANT PRIVILEGE.                                                 { A = PRIV_SET_TYPE(PRIV_GRANT_PRIVILEGE); }
×
UNCOV
556
priv_type(A) ::= REVOKE PRIVILEGE.                                                { A = PRIV_SET_TYPE(PRIV_REVOKE_PRIVILEGE); }
×
557
priv_type(A) ::= SHOW PRIVILEGES.                                                 { A = PRIV_SET_TYPE(PRIV_SHOW_PRIVILEGES); }
×
558

559
priv_type(A) ::= CREATE NODE.                                                     { A = PRIV_SET_TYPE(PRIV_NODE_CREATE); }
×
560
priv_type(A) ::= DROP NODE.                                                       { A = PRIV_SET_TYPE(PRIV_NODE_DROP); }
×
561
priv_type(A) ::= SHOW NODES.                                                      { A = PRIV_SET_TYPE(PRIV_NODES_SHOW); }
156✔
562

563
priv_type(A) ::= ALTER SECURITY VARIABLE.                                         { A = PRIV_SET_TYPE(PRIV_VAR_SECURITY_ALTER); }
×
564
priv_type(A) ::= ALTER AUDIT VARIABLE.                                            { A = PRIV_SET_TYPE(PRIV_VAR_AUDIT_ALTER); }
×
UNCOV
565
priv_type(A) ::= ALTER SYSTEM VARIABLE.                                           { A = PRIV_SET_TYPE(PRIV_VAR_SYSTEM_ALTER); }
×
566
priv_type(A) ::= ALTER DEBUG VARIABLE.                                            { A = PRIV_SET_TYPE(PRIV_VAR_DEBUG_ALTER); }
×
567
priv_type(A) ::= SHOW SECURITY VARIABLES.                                         { A = PRIV_SET_TYPE(PRIV_VAR_SECURITY_SHOW); }
×
UNCOV
568
priv_type(A) ::= SHOW AUDIT VARIABLES.                                            { A = PRIV_SET_TYPE(PRIV_VAR_AUDIT_SHOW); }
×
UNCOV
569
priv_type(A) ::= SHOW SYSTEM VARIABLES.                                           { A = PRIV_SET_TYPE(PRIV_VAR_SYSTEM_SHOW); }
×
570
priv_type(A) ::= SHOW DEBUG VARIABLES.                                            { A = PRIV_SET_TYPE(PRIV_VAR_DEBUG_SHOW); }
×
571

572
priv_type(A) ::= CREATE TOPIC.                                                    { A = PRIV_SET_TYPE(PRIV_TOPIC_CREATE); }
316✔
573
priv_type(A) ::= SHOW CONSUMERS.                                                  { A = PRIV_SET_TYPE(PRIV_CONSUMER_SHOW); }
×
574
priv_type(A) ::= SHOW SUBSCRIPTIONS.                                              { A = PRIV_SET_TYPE(PRIV_SUBSCRIPTION_SHOW); }
×
575

576
priv_type(A) ::= CREATE STREAM.                                                   { A = PRIV_SET_TYPE(PRIV_STREAM_CREATE); }
394✔
577

UNCOV
578
priv_type(A) ::= SHOW TRANS.                                                      { A = PRIV_SET_TYPE(PRIV_TRANS_SHOW); }
×
UNCOV
579
priv_type(A) ::= KILL TRANS.                                                      { A = PRIV_SET_TYPE(PRIV_TRANS_KILL); }
×
580
priv_type(A) ::= SHOW CONNECTIONS.                                                { A = PRIV_SET_TYPE(PRIV_CONNECTION_SHOW); }
×
581
priv_type(A) ::= KILL CONNECTION.                                                 { A = PRIV_SET_TYPE(PRIV_CONNECTION_KILL); }
×
UNCOV
582
priv_type(A) ::= SHOW QUERIES.                                                    { A = PRIV_SET_TYPE(PRIV_QUERY_SHOW); }
×
UNCOV
583
priv_type(A) ::= KILL QUERY.                                                      { A = PRIV_SET_TYPE(PRIV_QUERY_KILL); }
×
584

585
priv_type(A) ::= USE INFORMATION_SCHEMA.                                          { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_USE); }
×
586
priv_type(A) ::= USE PERFORMANCE_SCHEMA.                                          { A = PRIV_SET_TYPE(PRIV_PERF_SCHEMA_USE); }
×
587
priv_type(A) ::= READ INFORMATION_SCHEMA LIMIT.                                   { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_LIMIT); }
×
588
priv_type(A) ::= READ INFORMATION_SCHEMA SECURITY.                                { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_SEC); }
×
589
priv_type(A) ::= READ INFORMATION_SCHEMA AUDIT.                                   { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_AUDIT); }
×
590
priv_type(A) ::= READ INFORMATION_SCHEMA BASIC.                                   { A = PRIV_SET_TYPE(PRIV_INFO_SCHEMA_READ_BASIC); }
×
UNCOV
591
priv_type(A) ::= READ PERFORMANCE_SCHEMA LIMIT.                                   { A = PRIV_SET_TYPE(PRIV_PERF_SCHEMA_READ_LIMIT); }
×
592
priv_type(A) ::= READ PERFORMANCE_SCHEMA BASIC.                                   { A = PRIV_SET_TYPE(PRIV_PERF_SCHEMA_READ_BASIC); }
×
593
priv_type(A) ::= SHOW GRANTS.                                                     { A = PRIV_SET_TYPE(PRIV_GRANTS_SHOW); }
×
594
priv_type(A) ::= SHOW CLUSTER.                                                    { A = PRIV_SET_TYPE(PRIV_CLUSTER_SHOW); }
×
595
priv_type(A) ::= SHOW APPS.                                                       { A = PRIV_SET_TYPE(PRIV_APPS_SHOW); }
×
596

597
%type priv_type_tbl_dml                                                           { SPrivSetArgs }
598
%destructor priv_type_tbl_dml                                                     {
599
                                                                                    if ($$.selectCols != NULL) {
×
600
                                                                                      nodesDestroyList($$.selectCols);
×
601
                                                                                    }
602
                                                                                    if ($$.insertCols != NULL) {
×
UNCOV
603
                                                                                      nodesDestroyList($$.insertCols);
×
604
                                                                                    }
UNCOV
605
                                                                                    if ($$.updateCols != NULL) {
×
606
                                                                                      nodesDestroyList($$.updateCols);
×
607
                                                                                    }
608
                                                                                  }
609
priv_type_tbl_dml(A) ::= SELECT TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_SELECT); }
224✔
610
priv_type_tbl_dml(A) ::= SELECT specific_cols_with_mask_opt(B).                   { A = PRIV_SET_COLS(PRIV_TBL_SELECT, B, NULL, NULL); }
229,728✔
UNCOV
611
priv_type_tbl_dml(A) ::= INSERT TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_INSERT); }
×
612
priv_type_tbl_dml(A) ::= INSERT specific_cols_opt(B).                             { A = PRIV_SET_COLS(PRIV_TBL_INSERT, NULL, B, NULL); }
133,205✔
613
/*priv_type_tbl_dml(A) ::= UPDATE TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_UPDATE); }
614
priv_type_tbl_dml(A) ::= UPDATE specific_cols_opt(B).                             { A = PRIV_SET_COLS(PRIV_TBL_UPDATE, NULL, NULL, B); }*/
615
priv_type_tbl_dml(A) ::= DELETE TABLE.                                            { A = PRIV_SET_TYPE(PRIV_TBL_DELETE); }
224✔
616
priv_type_tbl_dml(A) ::= DELETE.                                                  { A = PRIV_SET_TYPE(PRIV_TBL_DELETE); }
672✔
617

618
%type priv_level_opt                                                              { SPrivLevelArgs }
619
%destructor priv_level_opt                                                        { 
620
                                                                                    if ($$.cols != NULL) {
158✔
UNCOV
621
                                                                                      nodesDestroyList($$.cols);
×
622
                                                                                    }
623
                                                                                  }
624
priv_level_opt(A) ::= .                                                           { 
625
                                                                                    A.first = nil_token; A.second = nil_token; 
943✔
626
                                                                                    A.objType = PRIV_OBJ_CLUSTER; A.cols = NULL; 
943✔
627
                                                                                  }
628
priv_level_opt(A) ::= ON priv_level(B).                                           { A = B; A.objType = PRIV_OBJ_TBL; }
735,947✔
629
priv_level_opt(A) ::= ON DATABASE priv_level(B).                                  { A = B; A.objType = PRIV_OBJ_DB; }
211,166✔
630
priv_level_opt(A) ::= ON TABLE priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_TBL; }
1,060✔
631
priv_level_opt(A) ::= ON VIEW priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_VIEW; }
1,106✔
UNCOV
632
priv_level_opt(A) ::= ON INDEX priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_IDX; }
×
633
priv_level_opt(A) ::= ON TOPIC priv_level(B).                                     { A = B; A.objType = PRIV_OBJ_TOPIC; }
4,716✔
UNCOV
634
priv_level_opt(A) ::= ON STREAM priv_level(B).                                    { A = B; A.objType = PRIV_OBJ_STREAM; }
×
UNCOV
635
priv_level_opt(A) ::= ON RSMA priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_RSMA; }
×
UNCOV
636
priv_level_opt(A) ::= ON TSMA priv_level(B).                                      { A = B; A.objType = PRIV_OBJ_TSMA; }
×
637

638
%type priv_level                                                                  { SPrivLevelArgs }
639
%destructor priv_level                                                            { }
UNCOV
640
priv_level(A) ::= NK_STAR(B).                                                     { A.first = B; A.second = nil_token; A.cols = NULL; }
×
641
priv_level(A) ::= NK_STAR(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; A.cols = NULL; }
4,730✔
642
priv_level(A) ::= db_name(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; A.cols = NULL; }
15,064✔
643
priv_level(A) ::= db_name(B) NK_DOT table_name(C).                                { A.first = B; A.second = C; A.cols = NULL; }
434,515✔
644
priv_level(A) ::= db_name(B).                                                     { A.first = B; A.second = nil_token; A.cols = NULL; }
499,686✔
645

646
with_clause_opt(A) ::= .                                                          { A = NULL; }
2,147,483,647✔
647
with_clause_opt(A) ::= WITH search_condition(B).                                  { A = B; }
537,378,244✔
648

649
/************************************************ create encrypt_key *********************************************/
650
cmd ::= CREATE ENCRYPT_KEY NK_STRING(A).                                          { pCxt->pRootNode = createEncryptKeyStmt(pCxt, &A); }
158✔
651

UNCOV
652
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); }
×
653

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

656
/************************************************ alter encrypt key *********************************************/
UNCOV
657
cmd ::= ALTER SYSTEM SET SVR_KEY NK_STRING(A).                                    { pCxt->pRootNode = createAlterEncryptKeyStmt(pCxt, 0, &A); }
×
UNCOV
658
cmd ::= ALTER SYSTEM SET DB_KEY NK_STRING(A).                                     { pCxt->pRootNode = createAlterEncryptKeyStmt(pCxt, 1, &A); }
×
659
/************************************************ create drop update anode ***************************************/
UNCOV
660
cmd ::= CREATE ANODE NK_STRING(A).                                                { pCxt->pRootNode = createCreateAnodeStmt(pCxt, &A); }
×
661
cmd ::= UPDATE ANODE NK_INTEGER(A).                                               { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, &A, false); }
×
UNCOV
662
cmd ::= UPDATE ALL ANODES.                                                        { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, NULL, true); }
×
UNCOV
663
cmd ::= DROP ANODE NK_INTEGER(A).                                                 { pCxt->pRootNode = createDropAnodeStmt(pCxt, &A); }
×
664

665
/************************************************ create drop update xnode ***************************************/
666

667
%type xnode_endpoint                                                              { SToken }
668
%destructor xnode_endpoint                                                        { }
669
xnode_endpoint(A) ::= NK_STRING(B).                                               { A = B; }
670
xnode_endpoint(A) ::= NK_INTEGER(B).                                              { A = B; }
671

672
%destructor xnode_task_source                                                     { }
UNCOV
673
xnode_task_source(A) ::= NK_STRING(B).                                            { A = createXnodeSourceAsDsn(pCxt, &B); }
×
UNCOV
674
xnode_task_source(A) ::= DATABASE db_name(B).                                     { A = createXnodeSourceAsDatabase(pCxt, &B); }
×
UNCOV
675
xnode_task_source(A) ::= TOPIC topic_name(B).                                     { A = createXnodeSourceAsTopic(pCxt, &B); }
×
676

UNCOV
677
xnode_task_sink(A) ::= NK_STRING(B).                                              { A = createXnodeSinkAsDsn(pCxt, &B); }
×
UNCOV
678
xnode_task_sink(A) ::= DATABASE db_name(B).                                       { A = createXnodeSinkAsDatabase(pCxt, &B); }
×
679

680
%type xnode_task_opt_v                                                            { SToken }
681
%destructor xnode_task_opt_v                                                      { }
682
xnode_task_opt_v(A) ::=  NK_STRING(B).                                            { A = B; }
683
xnode_task_opt_v(A) ::=  NK_INTEGER(B).                                           { A = B; }
684
xnode_task_options(A) ::= NK_ID(C) xnode_task_opt_v(D).                           { A = setXnodeTaskOption(pCxt, NULL, &C, &D); }
×
685
xnode_task_options(A) ::= NK_ID(C) NK_EQ xnode_task_opt_v(D).                     { A = setXnodeTaskOption(pCxt, NULL, &C, &D); }
×
UNCOV
686
xnode_task_options(A) ::= xnode_task_options(B) NK_ID(C) xnode_task_opt_v(D).     { A = setXnodeTaskOption(pCxt, B, &C, &D); }
×
UNCOV
687
xnode_task_options(A) ::= xnode_task_options(B) NK_ID(C) NK_EQ xnode_task_opt_v(D).          { A = setXnodeTaskOption(pCxt, B, &C, &D); }
×
UNCOV
688
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); }
×
689
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); }
UNCOV
690
xnode_task_options(A) ::= xnode_task_options(B) NK_COMMA NK_ID(C).                { A = setXnodeTaskOption(pCxt, B, &C, NULL); }
×
691
xnode_task_options(A) ::= xnode_task_options(B) AND NK_ID(C).                     { A = setXnodeTaskOption(pCxt, B, &C, NULL); }
692
xnode_task_options(A) ::= xnode_task_options(B) TRIGGER NK_STRING(D).             { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
×
693
xnode_task_options(A) ::= xnode_task_options(B) TRIGGER NK_EQ NK_STRING(D).       { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
×
694
xnode_task_options(A) ::= xnode_task_options(B) NK_COMMA TRIGGER NK_EQ NK_STRING(D).         { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
×
695
xnode_task_options(A) ::= xnode_task_options(B) AND TRIGGER NK_EQ NK_STRING(D).    { A = setXnodeTaskOption(pCxt, B, createTriggerToken(), &D); }
696

697
with_task_options_opt(A) ::= .                                                    { A = NULL; }
698
with_task_options_opt(A) ::= WITH xnode_task_options(B).                          { A = B; }
699

700
xnode_task_from_opt(A) ::= .                                                      { A = NULL; }
701
xnode_task_from_opt(A) ::= FROM xnode_task_source(B).                             { A = B; }
702

703
xnode_task_to_opt(A) ::= .                                                        { A = NULL; }
704
xnode_task_to_opt(A) ::= TO xnode_task_sink(B).                                   { A = B; }
705

706
cmd ::= CREATE XNODE NK_STRING(A).                                                { pCxt->pRootNode = createCreateXnodeStmt(pCxt, &A); }
122✔
707
cmd ::= CREATE XNODE NK_STRING(A) USER user_name(B) PASS NK_STRING(C).            { pCxt->pRootNode = createCreateXnodeWithUserPassStmt(pCxt, &A, &B, &C); }
122✔
708
cmd ::= DROP XNODE xnode_endpoint(A) force_opt(B).                                { pCxt->pRootNode = createDropXnodeStmt(pCxt, &A, B); }
1,342✔
709
cmd ::= DROP XNODE FORCE xnode_endpoint(A).                                       { pCxt->pRootNode = createDropXnodeStmt(pCxt, &A, true); }
2,440✔
710

711
cmd ::= DRAIN XNODE NK_INTEGER(A).                                                { pCxt->pRootNode = createDrainXnodeStmt(pCxt, &A); }
1,220✔
712

713
%type xnode_resource_type                                                         { EXnodeResourceType }
714
%destructor xnode_resource_type                                                   { }
715
xnode_resource_type(A) ::= NK_ID(B).                                              { A = setXnodeResourceType(pCxt, &B); }
1,107✔
716

717
/* create xnode agent 'a1' */
718
cmd ::= CREATE XNODE xnode_resource_type(A) NK_STRING(B) with_task_options_opt(E).
UNCOV
719
                                                                                  { pCxt->pRootNode = createXnodeTaskWithOptions(pCxt, A, &B, NULL, NULL, E); }
×
720

721
/* create xnode task 't1' from 'mqtt://xxx' to database s1 with parser '{...}' */
722
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).
UNCOV
723
                                                                                  { pCxt->pRootNode = createXnodeTaskWithOptions(pCxt, A, &B, C, D, E); }
×
724

725
/* create xnode job on 1 with config '{"json":true}' */
726
cmd ::= CREATE XNODE xnode_resource_type(A) ON NK_INTEGER(B) with_task_options_opt(C).
UNCOV
727
                                                                                  { pCxt->pRootNode = createXnodeTaskJobWithOptions(pCxt, A, &B, C); }
×
728

729
/*start xnode task 1; stop xnode task 1;*/
730
cmd ::= START XNODE xnode_resource_type(A) NK_INTEGER(B).                          { pCxt->pRootNode = createStartXnodeTaskStmt(pCxt, A, &B); }
×
731
cmd ::= START XNODE xnode_resource_type(A) NK_STRING(B).                          { pCxt->pRootNode = createStartXnodeTaskStmt(pCxt, A, &B); }
UNCOV
732
cmd ::= STOP XNODE xnode_resource_type(A) NK_INTEGER(B).                           { pCxt->pRootNode = createStopXnodeTaskStmt(pCxt, A, &B); }
×
733
cmd ::= STOP XNODE xnode_resource_type(A) NK_STRING(B).                            { pCxt->pRootNode = createStopXnodeTaskStmt(pCxt, A, &B); }
734

735
/* rebalance xnode job 1 with xnode_id 3;*/
736
cmd ::= REBALANCE XNODE xnode_resource_type(A) NK_INTEGER(B) with_task_options_opt(C).
737
                                                                                   { pCxt->pRootNode = createRebalanceXnodeJobStmt(pCxt, A, &B, C); }
×
738
cmd ::= REBALANCE XNODE xnode_resource_type(A) where_clause_opt(B).
739
                                                                                   { pCxt->pRootNode = createRebalanceXnodeJobWhereStmt(pCxt, A, B); }
×
740
                                                                                   
741
//cmd ::= SHOW XNODE xnode_resource_type(A) where_clause_opt(B).                    { pCxt->pRootNode = createShowXNodeResourcesWhereStmt(pCxt, A, B); }
742

743
/* alter xnode task 't1' from 'mqtt://xxx' to database s1 with parser '{...}' */
744
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).
UNCOV
745
                                                                                  { pCxt->pRootNode = alterXnodeTaskWithOptions(pCxt, A, &B, C, D, E); }
×
746
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).
747
                                                                                  { pCxt->pRootNode = alterXnodeTaskWithOptions(pCxt, A, &B, C, D, E); }
748

749
/* drop xnode agent 'a1'; drop xnode task 't1'; drop xnode job 1; drop xnode task 1; */
UNCOV
750
cmd ::= DROP XNODE xnode_resource_type(A) NK_STRING(B).                           { pCxt->pRootNode = dropXnodeResource(pCxt, A, &B); }
×
751
cmd ::= DROP XNODE xnode_resource_type(A) NK_INTEGER(B).                          { pCxt->pRootNode = dropXnodeResource(pCxt, A, &B); }
752
//cmd ::= DROP XNODE xnode_resource_type(A) where_clause_opt(C).                    { pCxt->pRootNode = dropXnodeResourceWhere(pCxt, A, C); }
753
//cmd ::= DROP XNODE xnode_resource_type(A) ON NK_INTEGER(B) where_clause_opt(C).   { pCxt->pRootNode = dropXnodeResourceOn(pCxt, A, &B, C); }
754

755

756
cmd ::= SHOW XNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_XNODES_STMT); }
369✔
757
/* show xnode tasks */
758
/* show xnode agents */
759
/* show xnode jobs */
760
cmd ::= SHOW XNODE xnode_resource_type(A).                                        { pCxt->pRootNode = createShowXNodeResourcesStmt(pCxt, A); }
1,107✔
761

762
/************************************************ create/drop/alter/restore dnode *********************************************/
763
cmd ::= CREATE DNODE dnode_endpoint(A).                                           { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); }
740✔
764
cmd ::= CREATE DNODE dnode_endpoint(A) PORT NK_INTEGER(B).                        { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); }
141,690✔
765
cmd ::= DROP DNODE NK_INTEGER(A) force_opt(B).                                    { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
9,754✔
UNCOV
766
cmd ::= DROP DNODE dnode_endpoint(A) force_opt(B).                                { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
×
UNCOV
767
cmd ::= DROP DNODE NK_INTEGER(A) unsafe_opt(B).                                   { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
UNCOV
768
cmd ::= DROP DNODE dnode_endpoint(A) unsafe_opt(B).                               { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
769
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B).                                   { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); }
16,801✔
770
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B) NK_STRING(C).                      { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, &C); }
41,870✔
NEW
771
cmd ::= ALTER DNODES RELOAD general_name(A).                                      { pCxt->pRootNode = createAlterAllDnodeTLSStmt(pCxt, &A);}
×
772
cmd ::= ALTER ALL DNODES NK_STRING(A).                                            { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, NULL); }
23,995✔
773
cmd ::= ALTER ALL DNODES NK_STRING(A) NK_STRING(B).                               { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, &B); }
3,362✔
774
cmd ::= RESTORE DNODE NK_INTEGER(A).                                              { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_DNODE_STMT, &A); }
511✔
775

776
%type dnode_endpoint                                                              { SToken }
777
%destructor dnode_endpoint                                                        { }
778
dnode_endpoint(A) ::= NK_STRING(B).                                               { A = B; }
779
dnode_endpoint(A) ::= NK_ID(B).                                                   { A = B; }
780
dnode_endpoint(A) ::= NK_IPTOKEN(B).                                              { A = B; }
781

782
%type force_opt                                                                   { bool }
783
%destructor force_opt                                                             { }
784
force_opt(A) ::= .                                                                { A = false; }
916,505,826✔
785
force_opt(A) ::= FORCE.                                                           { A = true; }
17,189,456✔
786

787
%type unsafe_opt                                                                  { bool }
788
%destructor unsafe_opt                                                            { }
789
unsafe_opt(A) ::= UNSAFE.                                                         { A = true; }
790

791
/************************************************ alter cluster *********************************************************/
UNCOV
792
cmd ::= ALTER CLUSTER NK_STRING(A).                                               { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, NULL); }
×
793
cmd ::= ALTER CLUSTER NK_STRING(A) NK_STRING(B).                                  { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, &B); }
762✔
794

795
/************************************************ alter local *********************************************************/
796
cmd ::= ALTER LOCAL NK_STRING(A).                                                 { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
4,569✔
797
cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B).                                    { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); }
211,130✔
798

799
/************************************************ create/drop/restore qnode ***************************************************/
800
cmd ::= CREATE QNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_QNODE_STMT, &A); }
3,746✔
801
cmd ::= DROP QNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_QNODE_STMT, &A); }
656✔
802
cmd ::= RESTORE QNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_QNODE_STMT, &A); }
500✔
803

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

808
/************************************************ create/drop snode ***************************************************/
809
cmd ::= CREATE SNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_SNODE_STMT, &A); }
65,548✔
810
cmd ::= DROP SNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_SNODE_STMT, &A); }
46,662✔
811

812
/************************************************ create/drop bnode ***************************************/
813
cmd ::= CREATE BNODE ON DNODE NK_INTEGER(A) bnode_options(B).                     { pCxt->pRootNode = createCreateBnodeStmt(pCxt, &A, B); }
22,147✔
814
cmd ::= DROP BNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropBnodeStmt(pCxt, &A); }
26,237✔
815

816
bnode_options(A) ::= .                                                            { A = createDefaultBnodeOptions(pCxt); }
22,147✔
UNCOV
817
bnode_options(A) ::= bnode_options(B) NK_ID(C) NK_STRING(D).                      { A = setBnodeOption(pCxt, B, &C, &D); }
×
818

819
/************************************************ create/drop/restore mnode ***************************************************/
820
cmd ::= CREATE MNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_MNODE_STMT, &A); }
18,297✔
821
cmd ::= DROP MNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &A); }
2,246✔
822
cmd ::= RESTORE MNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_MNODE_STMT, &A); }
408✔
823

824
/************************************************ restore vnode ***************************************************/
825
cmd ::= RESTORE VNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_VNODE_STMT, &A); }
306✔
826

827
/************************************************ create/drop/use database ********************************************/
828
cmd ::= CREATE DATABASE not_exists_opt(A) db_name(B) db_options(C).               { pCxt->pRootNode = createCreateDatabaseStmt(pCxt, A, &B, C); }
1,255,648✔
829
cmd ::= DROP DATABASE exists_opt(A) db_name(B) force_opt(C).                      { pCxt->pRootNode = createDropDatabaseStmt(pCxt, A, &B, C); }
1,035,792✔
830
cmd ::= USE db_name(A).                                                           { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); }
1,940,273✔
831
cmd ::= ALTER DATABASE db_name(A) alter_db_options(B).                            { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); }
173,992✔
832
cmd ::= FLUSH DATABASE db_name(A).                                                { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); }
1,720,606✔
833
cmd ::= TRIM DATABASE db_name(A) speed_opt(B).                                    { pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &A, B); }
7,800✔
834
cmd ::= TRIM DATABASE db_name(A) WAL.                                             { pCxt->pRootNode = createTrimDbWalStmt(pCxt, &A); }
530✔
UNCOV
835
cmd ::= SSMIGRATE DATABASE db_name(A).                                            { pCxt->pRootNode = createSsMigrateDatabaseStmt(pCxt, &A); }
×
836
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); }
25,868✔
837
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,254✔
838
cmd ::= SCAN DATABASE db_name(A) start_opt(B) end_opt(C).                                          { pCxt->pRootNode = createScanStmt(pCxt, &A, B, C); }
86✔
839
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); }
258✔
840

841
%type meta_only                                                                  { bool }
842
%destructor meta_only                                                            { }
843
meta_only(A) ::= .                                                                { A = false; }
844
meta_only(A) ::= META_ONLY.                                                      { A = true; }
845

846
%type not_exists_opt                                                              { bool }
847
%destructor not_exists_opt                                                        { }
848
not_exists_opt(A) ::= IF NOT EXISTS.                                              { A = true; }
10,846,127✔
849
not_exists_opt(A) ::= .                                                           { A = false; }
850

851
%type exists_opt                                                                  { bool }
852
%destructor exists_opt                                                            { }
853
exists_opt(A) ::= IF EXISTS.                                                      { A = true; }
1,825,307✔
854
exists_opt(A) ::= .                                                               { A = false; }
855

856
db_options(A) ::= .                                                               { A = createDefaultDatabaseOptions(pCxt); }
1,288,150✔
857
db_options(A) ::= db_options(B) BUFFER NK_INTEGER(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_BUFFER, &C); }
41,909✔
858
db_options(A) ::= db_options(B) CACHEMODEL NK_STRING(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHEMODEL, &C); }
44,865✔
859
db_options(A) ::= db_options(B) CACHESIZE NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHESIZE, &C); }
6,525✔
860
db_options(A) ::= db_options(B) COMP NK_INTEGER(C).                               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMP, &C); }
15,551✔
861
db_options(A) ::= db_options(B) DURATION NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
274,039✔
862
db_options(A) ::= db_options(B) DURATION NK_VARIABLE(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
863
db_options(A) ::= db_options(B) MAXROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MAXROWS, &C); }
25,338✔
864
db_options(A) ::= db_options(B) MINROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MINROWS, &C); }
23,555✔
865
db_options(A) ::= db_options(B) KEEP integer_list(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
140,915✔
866
db_options(A) ::= db_options(B) KEEP variable_list(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
867
db_options(A) ::= db_options(B) PAGES NK_INTEGER(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGES, &C); }
7,288✔
868
db_options(A) ::= db_options(B) PAGESIZE NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGESIZE, &C); }
5,282✔
869
db_options(A) ::= db_options(B) TSDB_PAGESIZE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_TSDB_PAGESIZE, &C); }
3,988✔
870
db_options(A) ::= db_options(B) PRECISION NK_STRING(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PRECISION, &C); }
103,935✔
871
db_options(A) ::= db_options(B) REPLICAS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
463,798✔
872
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
873
//db_options(A) ::= db_options(B) STRICT NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_STRICT, &C); }
874
db_options(A) ::= db_options(B) VGROUPS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_VGROUPS, &C); }
444,203✔
875
db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SINGLE_STABLE, &C); }
6,628✔
UNCOV
876
db_options(A) ::= db_options(B) RETENTIONS retention_list(C).                     { A = setDatabaseOption(pCxt, B, DB_OPTION_RETENTIONS, C); }
×
877
db_options(A) ::= db_options(B) SCHEMALESS NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SCHEMALESS, &C); }
18,704✔
878
db_options(A) ::= db_options(B) WAL_LEVEL NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL, &C); }
25,696✔
879
db_options(A) ::= db_options(B) WAL_FSYNC_PERIOD NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_FSYNC, &C); }
17,967✔
880
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_INTEGER(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &C); }
60,683✔
881
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_MINUS(D) NK_INTEGER(C).   {
882
                                                                                    SToken t = D;
5,434✔
883
                                                                                    t.n = (C.z + C.n) - D.z;
5,434✔
884
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &t);
5,434✔
885
                                                                                  }
886
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_INTEGER(C).                 { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &C); }
8,635✔
887
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_MINUS(D) NK_INTEGER(C).     {
888
                                                                                    SToken t = D;
5,434✔
889
                                                                                    t.n = (C.z + C.n) - D.z;
5,434✔
890
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &t);
5,434✔
891
                                                                                  }
UNCOV
892
db_options(A) ::= db_options(B) WAL_ROLL_PERIOD NK_INTEGER(C).                    { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_ROLL_PERIOD, &C); }
×
UNCOV
893
db_options(A) ::= db_options(B) WAL_SEGMENT_SIZE NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_SEGMENT_SIZE, &C); }
×
894
db_options(A) ::= db_options(B) STT_TRIGGER NK_INTEGER(C).                        { A = setDatabaseOption(pCxt, B, DB_OPTION_STT_TRIGGER, &C); }
30,414✔
895
db_options(A) ::= db_options(B) TABLE_PREFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_PREFIX, C); }
15,704✔
896
db_options(A) ::= db_options(B) TABLE_SUFFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_SUFFIX, C); }
15,172✔
897
db_options(A) ::= db_options(B) SS_CHUNKPAGES NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_CHUNKPAGES, &C); }
3,380✔
898
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_INTEGER(C).                       { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
4,484✔
899
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_VARIABLE(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
900
db_options(A) ::= db_options(B) SS_COMPACT NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_COMPACT, &C); }
3,380✔
901
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
6,566✔
902
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
903
db_options(A) ::= db_options(B) ENCRYPT_ALGORITHM NK_STRING(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_ENCRYPT_ALGORITHM, &C); }
3,380✔
904
db_options(A) ::= db_options(B) DNODES NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_DNODES, &C); }
25,505✔
905
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_INTEGER (C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
15,201✔
906
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
907
db_options(A) ::= db_options(B) COMPACT_TIME_RANGE signed_duration_list(C).       { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_RANGE, C); }
24,100✔
908
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_INTEGER(C).                { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
13,465✔
909
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_VARIABLE(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
910
db_options(A) ::= db_options(B) IS_AUDIT NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_IS_AUDIT, &C); }
2,829✔
911

912
alter_db_options(A) ::= alter_db_option(B).                                       { A = createAlterDatabaseOptions(pCxt); A = setAlterDatabaseOption(pCxt, A, &B); }
178,214✔
913
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C).                   { A = setAlterDatabaseOption(pCxt, B, &C); }
14,065✔
914

915
%type alter_db_option                                                             { SAlterOption }
916
%destructor alter_db_option                                                       { }
917
alter_db_option(A) ::= BUFFER NK_INTEGER(B).                                      { A.type = DB_OPTION_BUFFER; A.val = B; }
8,067✔
918
alter_db_option(A) ::= CACHEMODEL NK_STRING(B).                                   { A.type = DB_OPTION_CACHEMODEL; A.val = B; }
15,089✔
919
alter_db_option(A) ::= CACHESIZE NK_INTEGER(B).                                   { A.type = DB_OPTION_CACHESIZE; A.val = B; }
3,767✔
920
alter_db_option(A) ::= WAL_FSYNC_PERIOD NK_INTEGER(B).                            { A.type = DB_OPTION_FSYNC; A.val = B; }
11,955✔
921
alter_db_option(A) ::= KEEP integer_list(B).                                      { A.type = DB_OPTION_KEEP; A.pList = B; }
36,386✔
922
alter_db_option(A) ::= KEEP variable_list(B).                                     { A.type = DB_OPTION_KEEP; A.pList = B; }
923
alter_db_option(A) ::= PAGES NK_INTEGER(B).                                       { A.type = DB_OPTION_PAGES; A.val = B; }
5,033✔
924
alter_db_option(A) ::= REPLICA NK_INTEGER(B).                                     { A.type = DB_OPTION_REPLICA; A.val = B; }
10,603✔
925
alter_db_option(A) ::= REPLICAS NK_INTEGER(B).                                    { A.type = DB_OPTION_REPLICA; A.val = B; }
926
//alter_db_option(A) ::= STRICT NK_STRING(B).                                       { A.type = DB_OPTION_STRICT; A.val = B; }
927
alter_db_option(A) ::= WAL_LEVEL NK_INTEGER(B).                                   { A.type = DB_OPTION_WAL; A.val = B; }
17,190✔
928
alter_db_option(A) ::= STT_TRIGGER NK_INTEGER(B).                                 { A.type = DB_OPTION_STT_TRIGGER; A.val = B; }
2,620✔
929
alter_db_option(A) ::= MINROWS NK_INTEGER(B).                                     { A.type = DB_OPTION_MINROWS; A.val = B; }
5,554✔
930
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_INTEGER(B).                        { A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = B; }
12,175✔
931
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_MINUS(B) NK_INTEGER(C).            {
UNCOV
932
                                                                                    SToken t = B;
×
UNCOV
933
                                                                                    t.n = (C.z + C.n) - B.z;
×
UNCOV
934
                                                                                    A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = t;
×
935
                                                                                  }
936
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_INTEGER(B).                          { A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = B; }
1,420✔
937
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_MINUS(B) NK_INTEGER(C).              {
UNCOV
938
                                                                                    SToken t = B;
×
UNCOV
939
                                                                                    t.n = (C.z + C.n) - B.z;
×
940
                                                                                    A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = t;
×
941
                                                                                  }
942
alter_db_option(A) ::= SS_KEEPLOCAL NK_INTEGER(B).                                { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
689✔
943
alter_db_option(A) ::= SS_KEEPLOCAL NK_VARIABLE(B).                               { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
944
alter_db_option(A) ::= SS_COMPACT NK_INTEGER(B).                                  { A.type = DB_OPTION_SS_COMPACT, A.val = B; }
2,067✔
945
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_INTEGER(B).                            { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
4,288✔
946
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_VARIABLE(B).                           { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
947
alter_db_option(A) ::= ENCRYPT_ALGORITHM NK_STRING(B).                            { A.type = DB_OPTION_ENCRYPT_ALGORITHM; A.val = B; }
3,613✔
948
alter_db_option(A) ::= COMPACT_INTERVAL NK_INTEGER(B).                            { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
14,871✔
949
alter_db_option(A) ::= COMPACT_INTERVAL NK_VARIABLE(B).                           { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
950
alter_db_option(A) ::= COMPACT_TIME_RANGE signed_duration_list(B).                { A.type = DB_OPTION_COMPACT_TIME_RANGE; A.pList = B; }
22,710✔
951
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_INTEGER(B).                         { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
14,182✔
952
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_VARIABLE(B).                        { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
953

954
%type integer_list                                                                { SNodeList* }
955
%destructor integer_list                                                          { nodesDestroyList($$); }
956
integer_list(A) ::= NK_INTEGER(B).                                                { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
148,361✔
957
integer_list(A) ::= integer_list(B) NK_COMMA NK_INTEGER(C).                       { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
120,505✔
958

959
%type variable_list                                                               { SNodeList* }
960
%destructor variable_list                                                         { nodesDestroyList($$); }
961
variable_list(A) ::= NK_VARIABLE(B).                                              { A = createNodeList(pCxt, createDurationValueNode(pCxt, &B)); }
38,458✔
962
variable_list(A) ::= variable_list(B) NK_COMMA NK_VARIABLE(C).                    { A = addNodeToList(pCxt, B, createDurationValueNode(pCxt, &C)); }
39,776✔
963

964
%type signed_duration_list                                                        { SNodeList* }
965
%destructor signed_duration_list                                                  { nodesDestroyList($$); }
966
signed_duration_list(A) ::= signed_variable(B).                                   { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
225,580,085✔
967
signed_duration_list(A) ::= signed_integer(B).                                    { A = createNodeList(pCxt, B); }
720,287,013✔
968
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_integer(C).   { A = addNodeToList(pCxt, B, C); }
760,882,208✔
969
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_variable(C).  { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
117,042,034✔
970

971
%type retention_list                                                              { SNodeList* }
972
%destructor retention_list                                                        { nodesDestroyList($$); }
973
retention_list(A) ::= retention(B).                                               { A = createNodeList(pCxt, B); }
974
retention_list(A) ::= retention_list(B) NK_COMMA retention(C).                    { A = addNodeToList(pCxt, B, C); }
975

UNCOV
976
retention(A) ::= NK_VARIABLE(B) NK_COLON NK_VARIABLE(C).                          { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
×
977
retention(A) ::= NK_MINUS(B) NK_COLON NK_VARIABLE(C).                             { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
978

979
%type speed_opt                                                                   { int32_t }
980
%destructor speed_opt                                                             { }
981
speed_opt(A) ::= .                                                                { A = 0; }
38,327✔
982
speed_opt(A) ::= BWLIMIT NK_INTEGER(B).                                           { A = taosStr2Int32(B.z, NULL, 10); }
15,627✔
983

984
start_opt(A) ::= .                                                                { A = NULL; }
UNCOV
985
start_opt(A) ::= START WITH NK_INTEGER(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
×
986
start_opt(A) ::= START WITH NK_STRING(B).                                         { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2,127✔
UNCOV
987
start_opt(A) ::= START WITH TIMESTAMP NK_STRING(B).                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
×
988

989
end_opt(A) ::= .                                                                  { A = NULL; }
990
end_opt(A) ::= END WITH NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
991
end_opt(A) ::= END WITH NK_STRING(B).                                             { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
992
end_opt(A) ::= END WITH TIMESTAMP NK_STRING(B).                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
993

994
/************************************************ create/drop table/stable ********************************************/
995
cmd ::= CREATE TABLE not_exists_opt(A) full_table_name(B)
996
  NK_LP column_def_list(C) NK_RP tags_def_opt(D) table_options(E).                { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
19,641,553✔
997
cmd ::= CREATE TABLE multi_create_clause(A).                                      { pCxt->pRootNode = createCreateMultiTableStmt(pCxt, A); }
29,581,026✔
998
cmd ::= CREATE TABLE not_exists_opt(B) USING full_table_name(C)
999
  NK_LP tag_list_opt(D) NK_RP FILE NK_STRING(E).                                  { pCxt->pRootNode = createCreateSubTableFromFileClause(pCxt, B, C, D, &E); }
1,294✔
1000
cmd ::= CREATE STABLE not_exists_opt(A) full_table_name(B)
1001
  NK_LP column_def_list(C) NK_RP tags_def(D) table_options(E).                    { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
1002
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
1003
  NK_LP column_def_list(C) NK_RP.                                                 { pCxt->pRootNode = createCreateVTableStmt(pCxt, A, B, C); }
120,570✔
1004
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
1005
  NK_LP specific_column_ref_list(C) NK_RP USING full_table_name(D)
1006
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, C, NULL, D, E, F); }
61,479✔
1007
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
1008
  NK_LP column_ref_list(C) NK_RP USING full_table_name(D)
1009
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, C, D, E, F); }
127,459✔
1010
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B) USING full_table_name(C)
1011
  specific_cols_opt(D) TAGS NK_LP tags_literal_list(E) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, NULL, C, D, E); }
787✔
1012
cmd ::= DROP TABLE with_opt(A) multi_drop_clause(B).                              { pCxt->pRootNode = createDropTableStmt(pCxt, A, B); }
1,966,670✔
1013
cmd ::= DROP STABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropSuperTableStmt(pCxt, A, B, C); }
75,868✔
1014
cmd ::= DROP VTABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropVirtualTableStmt(pCxt, A, B, C); }
68,749✔
1015

1016
cmd ::= ALTER TABLE alter_table_clause(A).                                        { pCxt->pRootNode = A; }
172,202,429✔
1017
cmd ::= ALTER STABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterSuperTableType(A); }
476,240✔
1018
cmd ::= ALTER VTABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterVirtualTableType(A); }
361,515✔
1019

1020

1021
alter_table_clause(A) ::= full_table_name(B) alter_table_options(C).              { A = createAlterTableModifyOptions(pCxt, B, C); }
65,900✔
1022
alter_table_clause(A) ::=
1023
  full_table_name(B) ADD COLUMN column_name(C) type_name(D) column_options(E).    { A = createAlterTableAddModifyColOptions2(pCxt, B, TSDB_ALTER_TABLE_ADD_COLUMN, &C, D, E); }
5,935,237✔
1024
alter_table_clause(A) ::= full_table_name(B) DROP COLUMN column_name(C).          { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_COLUMN, &C); }
1,547,104✔
1025
alter_table_clause(A) ::=
1026
  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,707,671✔
1027
alter_table_clause(A) ::=
1028
  full_table_name(B) MODIFY COLUMN column_name(C) column_options(D).              { A = createAlterTableAddModifyColOptions(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS, &C, D); }
105,063✔
1029
alter_table_clause(A) ::=
1030
  full_table_name(B) RENAME COLUMN column_name(C) column_name(D).                 { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &C, &D); }
68,785✔
1031
alter_table_clause(A) ::=
1032
  full_table_name(B) ADD TAG column_name(C) type_name(D).                         { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_ADD_TAG, &C, D); }
283,873✔
1033
alter_table_clause(A) ::= full_table_name(B) DROP TAG column_name(C).             { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_TAG, &C); }
106,381✔
1034
alter_table_clause(A) ::=
1035
  full_table_name(B) MODIFY TAG column_name(C) type_name(D).                      { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &C, D); }
515,324✔
1036
alter_table_clause(A) ::=
1037
  full_table_name(B) RENAME TAG column_name(C) column_name(D).                    { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
105,680✔
1038
alter_table_clause(A) ::=
1039
  full_table_name(B) ALTER COLUMN column_name(C) SET column_ref(D).
1040
                                                                                  { A = createAlterTableAlterColRef(pCxt, B, TSDB_ALTER_TABLE_ALTER_COLUMN_REF, &C, D); }
105,956✔
1041

1042
alter_table_clause(A) ::=
1043
  full_table_name(B) ALTER COLUMN column_name(C) SET NULL(D).                     { A = createAlterTableRemoveColRef(pCxt, B, TSDB_ALTER_TABLE_REMOVE_COLUMN_REF, &C, &D); }
62,086✔
1044

1045
%type column_tag_value_list                                                          { SNodeList* }
1046
%destructor column_tag_value_list                                                    { nodesDestroyList($$); }
1047
column_tag_value(A) ::= column_name(C) NK_EQ tags_literal(D).                        { A = createAlterSingleTagColumnNode(pCxt, &C, D); }
7,802,390✔
1048
column_tag_value_list(A) ::= column_tag_value(B).                                    { A = createNodeList(pCxt, B); }
1049
column_tag_value_list(A) ::= column_tag_value_list(B) NK_COMMA column_tag_value(C).  { A = addNodeToList(pCxt, B, C);}
32,028✔
1050

1051
alter_table_clause(A) ::=
1052
  full_table_name(B) SET TAG column_tag_value_list(C).                            { A = createAlterTableSetMultiTagValue(pCxt, B, C); }
7,769,106✔
1053

1054
%type multi_create_clause                                                         { SNodeList* }
1055
%destructor multi_create_clause                                                   { nodesDestroyList($$); }
1056
multi_create_clause(A) ::= create_subtable_clause(B).                             { A = createNodeList(pCxt, B); }
1057
multi_create_clause(A) ::= multi_create_clause(B) create_subtable_clause(C).      { A = addNodeToList(pCxt, B, C); }
6,123,543✔
1058

1059
create_subtable_clause(A) ::=
1060
  not_exists_opt(B) full_table_name(C) USING full_table_name(D)
1061
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP table_options(G).    { A = createCreateSubTableClause(pCxt, B, C, D, E, F, G); }
35,469,458✔
1062

1063
%type multi_drop_clause                                                           { SNodeList* }
1064
%destructor multi_drop_clause                                                     { nodesDestroyList($$); }
1065
multi_drop_clause(A) ::= drop_table_clause(B).                                    { A = createNodeList(pCxt, B); }
1066
multi_drop_clause(A) ::= multi_drop_clause(B) NK_COMMA drop_table_clause(C).      { A = addNodeToList(pCxt, B, C); }
1067

1068
drop_table_clause(A) ::= exists_opt(B) full_table_name(C).                        { A = createDropTableClause(pCxt, B, C); }
2,076,969✔
1069

1070
%type with_opt                                                                    { bool }
1071
%destructor with_opt                                                              { }
1072
with_opt(A) ::= .                                                                 { A = false; }
1073
with_opt(A) ::= WITH.                                                             { A = true; }
1074

1075
%type specific_cols_opt                                                           { SNodeList* }
1076
%destructor specific_cols_opt                                                     { nodesDestroyList($$); }
1077
specific_cols_opt(A) ::= .                                                        { A = NULL; }
1,134,818,650✔
1078
specific_cols_opt(A) ::= NK_LP col_name_list(B) NK_RP.                            { A = B; }
1,315,119✔
1079

1080
%type specific_cols_with_mask_opt                                                 { SNodeList* }
1081
%destructor specific_cols_with_mask_opt                                           { nodesDestroyList($$); }
1082
specific_cols_with_mask_opt(A) ::= .                                              { A = NULL; }
1083
specific_cols_with_mask_opt(A) ::= NK_LP col_name_ex_list(B) NK_RP.               { A = B; }
1084

1085
full_table_name(A) ::= table_name(B).                                             { A = createRealTableNode(pCxt, NULL, &B, NULL); }
42,153,758✔
1086
full_table_name(A) ::= db_name(B) NK_DOT table_name(C).                           { A = createRealTableNode(pCxt, &B, &C, NULL); }
72,756,507✔
1087

1088
%type tag_def_list                                                                { SNodeList* }
1089
%destructor tag_def_list                                                          { nodesDestroyList($$); }
1090
tag_def_list(A) ::= tag_def(B).                                                   { A = createNodeList(pCxt, B); }
1091
tag_def_list(A) ::= tag_def_list(B) NK_COMMA tag_def(C).                          { A = addNodeToList(pCxt, B, C); }
1092
tag_def(A) ::= column_name(B) type_name(C).                                       { A = createColumnDefNode(pCxt, &B, C, NULL); }
4,297,159✔
1093

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

1099
// column_def(A) ::= column_name(B) type_name(C).                                 { A = createColumnDefNode(pCxt, &B, C, NULL); }
1100
column_def(A) ::= column_name(B) type_name(C) column_options(D).                  { A = createColumnDefNode(pCxt, &B, C, D); }
360,758,250✔
1101

1102
%type specific_column_ref_list                                                               { SNodeList* }
1103
%destructor specific_column_ref_list                                                         { nodesDestroyList($$); }
1104
specific_column_ref_list(A) ::= specific_column_ref(B).                                      { A = createNodeList(pCxt, B); }
1105
specific_column_ref_list(A) ::= specific_column_ref_list(B) NK_COMMA specific_column_ref(C). { A = addNodeToList(pCxt, B, C); }
1106

1107
specific_column_ref(A) ::= column_name(B) FROM column_ref(C).                    { A = createColumnRefNodeByNode(pCxt, &B, C); }
44,835,259✔
1108

1109
%type column_ref_list                                                             { SNodeList* }
1110
%destructor column_ref_list                                                       { nodesDestroyList($$); }
1111
column_ref_list(A) ::= column_ref(B).                                             { A = createNodeList(pCxt, B); }
1112
column_ref_list(A) ::= column_ref_list(B) NK_COMMA column_ref(C).                 { A = addNodeToList(pCxt, B, C); }
1113

1114
%type type_name                                                                   { SDataType }
1115
%destructor type_name                                                             { }
1116
type_name(A) ::= BOOL.                                                            { A = createDataType(TSDB_DATA_TYPE_BOOL); }
5,254,104✔
1117
type_name(A) ::= TINYINT.                                                         { A = createDataType(TSDB_DATA_TYPE_TINYINT); }
4,695,060✔
1118
type_name(A) ::= SMALLINT.                                                        { A = createDataType(TSDB_DATA_TYPE_SMALLINT); }
5,576,433✔
1119
type_name(A) ::= INT.                                                             { A = createDataType(TSDB_DATA_TYPE_INT); }
45,884,057✔
1120
type_name(A) ::= INTEGER.                                                         { A = createDataType(TSDB_DATA_TYPE_INT); }
1121
type_name(A) ::= BIGINT.                                                          { A = createDataType(TSDB_DATA_TYPE_BIGINT); }
12,459,824✔
1122
type_name(A) ::= FLOAT.                                                           { A = createDataType(TSDB_DATA_TYPE_FLOAT); }
5,358,491✔
1123
type_name(A) ::= DOUBLE.                                                          { A = createDataType(TSDB_DATA_TYPE_DOUBLE); }
259,718,210✔
1124
type_name(A) ::= BINARY NK_LP NK_INTEGER(B) NK_RP.                                { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &B); }
79,178,431✔
1125
type_name(A) ::= TIMESTAMP.                                                       { A = createDataType(TSDB_DATA_TYPE_TIMESTAMP); }
25,056,356✔
1126
type_name(A) ::= NCHAR NK_LP NK_INTEGER(B) NK_RP.                                 { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &B); }
13,870,721✔
1127
type_name(A) ::= TINYINT UNSIGNED.                                                { A = createDataType(TSDB_DATA_TYPE_UTINYINT); }
465,781✔
1128
type_name(A) ::= SMALLINT UNSIGNED.                                               { A = createDataType(TSDB_DATA_TYPE_USMALLINT); }
460,637✔
1129
type_name(A) ::= INT UNSIGNED.                                                    { A = createDataType(TSDB_DATA_TYPE_UINT); }
518,643✔
1130
type_name(A) ::= BIGINT UNSIGNED.                                                 { A = createDataType(TSDB_DATA_TYPE_UBIGINT); }
1,173,748✔
1131
type_name(A) ::= JSON.                                                            { A = createDataType(TSDB_DATA_TYPE_JSON); }
20,401✔
1132
type_name(A) ::= VARCHAR NK_LP NK_INTEGER(B) NK_RP.                               { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &B); }
688,687✔
1133
type_name(A) ::= MEDIUMBLOB.                                                      { A = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); }
2,540✔
1134
type_name(A) ::= BLOB.                                                            { A = createDataType(TSDB_DATA_TYPE_BLOB); }
11,879✔
1135
type_name(A) ::= VARBINARY NK_LP NK_INTEGER(B) NK_RP.                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &B); }
358,891✔
1136
type_name(A) ::= GEOMETRY NK_LP NK_INTEGER(B) NK_RP.                              { A = createVarLenDataType(TSDB_DATA_TYPE_GEOMETRY, &B); }
348,954✔
1137
// type_name(A) ::= DECIMAL.                                                      { A = createDataType(TSDB_DATA_TYPE_DECIMAL); }
1138
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_RP.                               { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, NULL); }
67,151✔
1139
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_RP.        { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, &C); }
179,065✔
1140

1141
%type type_name_default_len                                                       { SDataType }
1142
%destructor type_name_default_len                                                 { }
1143
type_name_default_len(A) ::= BINARY.                                              { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, NULL); }
10,098✔
1144
type_name_default_len(A) ::= NCHAR.                                               { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, NULL); }
3,033✔
1145
type_name_default_len(A) ::= VARCHAR.                                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, NULL); }
2,987,614✔
1146
type_name_default_len(A) ::= VARBINARY.                                           { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, NULL); }
3,664✔
1147

1148
%type tags_def_opt                                                                { SNodeList* }
1149
%destructor tags_def_opt                                                          { nodesDestroyList($$); }
1150
tags_def_opt(A) ::= .                                                             { A = NULL; }
1151
tags_def_opt(A) ::= tags_def(B).                                                  { A = B; }
28,551,385✔
1152

1153
%type tags_def                                                                    { SNodeList* }
1154
%destructor tags_def                                                              { nodesDestroyList($$); }
1155
tags_def(A) ::= TAGS NK_LP tag_def_list(B) NK_RP.                                 { A = B; }
1,398,092✔
1156

1157
table_options(A) ::= .                                                            { A = createDefaultTableOptions(pCxt); }
55,124,325✔
1158
table_options(A) ::= table_options(B) COMMENT NK_STRING(C).                       { A = setTableOption(pCxt, B, TABLE_OPTION_COMMENT, &C); }
15,024✔
UNCOV
1159
table_options(A) ::= table_options(B) MAX_DELAY duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_MAXDELAY, C); }
×
UNCOV
1160
table_options(A) ::= table_options(B) WATERMARK duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_WATERMARK, C); }
×
UNCOV
1161
table_options(A) ::= table_options(B) ROLLUP NK_LP rollup_func_list(C) NK_RP.     { A = setTableOption(pCxt, B, TABLE_OPTION_ROLLUP, C); }
×
1162
table_options(A) ::= table_options(B) TTL NK_INTEGER(C).                          { A = setTableOption(pCxt, B, TABLE_OPTION_TTL, &C); }
91,956✔
1163
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP.           { A = setTableOption(pCxt, B, TABLE_OPTION_SMA, C); }
21,874✔
UNCOV
1164
table_options(A) ::= table_options(B) DELETE_MARK duration_list(C).               { A = setTableOption(pCxt, B, TABLE_OPTION_DELETE_MARK, C); }
×
1165
table_options(A) ::= table_options(B) KEEP NK_INTEGER(C).                         { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
44,849✔
1166
table_options(A) ::= table_options(B) KEEP NK_VARIABLE(C).                        { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
1167
table_options(A) ::= table_options(B) VIRTUAL NK_INTEGER(C).                      { A = setTableOption(pCxt, B, TABLE_OPTION_VIRTUAL, &C); }
28,438✔
1168

1169
alter_table_options(A) ::= alter_table_option(B).                                 { A = createAlterTableOptions(pCxt); A = setTableOption(pCxt, A, B.type, &B.val); }
65,900✔
UNCOV
1170
alter_table_options(A) ::= alter_table_options(B) alter_table_option(C).          { A = setTableOption(pCxt, B, C.type, &C.val); }
×
1171

1172
%type alter_table_option                                                          { SAlterOption }
1173
%destructor alter_table_option                                                    { }
1174
alter_table_option(A) ::= COMMENT NK_STRING(B).                                   { A.type = TABLE_OPTION_COMMENT; A.val = B; }
32,345✔
1175
alter_table_option(A) ::= TTL NK_INTEGER(B).                                      { A.type = TABLE_OPTION_TTL; A.val = B; }
8,830✔
1176
alter_table_option(A) ::= KEEP NK_INTEGER(B).                                     { A.type = TABLE_OPTION_KEEP; A.val = B; }
24,725✔
1177
alter_table_option(A) ::= KEEP NK_VARIABLE(B).                                    { A.type = TABLE_OPTION_KEEP; A.val = B; }
1178

1179

1180
%type duration_list                                                               { SNodeList* }
1181
%destructor duration_list                                                         { nodesDestroyList($$); }
1182
duration_list(A) ::= duration_literal(B).                                         { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
1183
duration_list(A) ::= duration_list(B) NK_COMMA duration_literal(C).               { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
1184

1185
%type rollup_func_list                                                            { SNodeList* }
1186
%destructor rollup_func_list                                                      { nodesDestroyList($$); }
1187
rollup_func_list(A) ::= rollup_func_name(B).                                      { A = createNodeList(pCxt, B); }
1188
rollup_func_list(A) ::= rollup_func_list(B) NK_COMMA rollup_func_name(C).         { A = addNodeToList(pCxt, B, C); }
1189

UNCOV
1190
rollup_func_name(A) ::= function_name(B).                                         { A = createFunctionNode(pCxt, &B, NULL); }
×
1191
rollup_func_name(A) ::= FIRST(B).                                                 { A = createFunctionNode(pCxt, &B, NULL); }
709✔
1192
rollup_func_name(A) ::= LAST(B).                                                  { A = createFunctionNode(pCxt, &B, NULL); }
1193

1194
%type col_name_list                                                               { SNodeList* }
1195
%destructor col_name_list                                                         { nodesDestroyList($$); }
1196
col_name_list(A) ::= col_name(B).                                                 { A = createNodeList(pCxt, B); }
1197
col_name_list(A) ::= col_name_list(B) NK_COMMA col_name(C).                       { A = addNodeToList(pCxt, B, C); }
1198

1199
%type col_name_ex_list                                                            { SNodeList* }
1200
%destructor col_name_ex_list                                                      { nodesDestroyList($$); }
1201
col_name_ex_list(A) ::= col_name(B).                                              { A = createNodeList(pCxt, B); }
1202
col_name_ex_list(A) ::= col_name_with_mask(B).                                    { A = createNodeList(pCxt, B); }
1203
col_name_ex_list(A) ::= col_name_ex_list(B) NK_COMMA col_name(C).                 { A = addNodeToList(pCxt, B, C); }
1204
col_name_ex_list(A) ::= col_name_ex_list(B) NK_COMMA col_name_with_mask(C).       { A = addNodeToList(pCxt, B, C); }
1205

1206
col_name(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
19,558,759✔
1207
col_name(A) ::= TBNAME(B).                                                        { A = createColumnNode(pCxt, NULL, &B); }
38,532,338✔
UNCOV
1208
col_name_with_mask(A) ::= MASK NK_LP column_name(B) NK_RP.                        { A = createColumnNodeExt(pCxt, NULL, &B, 1); }
×
1209

1210
/************************************************ create/drop mount ********************************************/
1211
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,232✔
1212
cmd ::= DROP MOUNT exists_opt(A) mount_name(B).                                   { pCxt->pRootNode = createDropMountStmt(pCxt, A, &B); }
448✔
1213

1214
/************************************************ show ****************************************************************/
1215
cmd ::= SHOW DNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
19,055✔
1216
cmd ::= SHOW USERS.                                                               { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
3,666✔
UNCOV
1217
cmd ::= SHOW USERS FULL.                                                          { pCxt->pRootNode = createShowStmtWithFull(pCxt, QUERY_NODE_SHOW_USERS_FULL_STMT); }
×
1218
cmd ::= SHOW USER PRIVILEGES.                                                     { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); }
2,789✔
1219
cmd ::= SHOW ROLES.                                                               { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLES_STMT); }
153✔
1220
cmd ::= SHOW ROLE PRIVILEGES.                                                     { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLE_PRIVILEGES_STMT); }
765✔
UNCOV
1221
cmd ::= SHOW ROLE COLUMN PRIVILEGES.                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ROLE_COL_PRIVILEGES_STMT); }
×
1222
cmd ::= SHOW db_kind_opt(A) DATABASES.                                            {
1223
                                                                                    pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT);
153,267✔
1224
                                                                                    (void)setShowKind(pCxt, pCxt->pRootNode, A);
153,267✔
1225
                                                                                  }
1226
cmd ::= SHOW table_kind_db_name_cond_opt(A) TABLES like_pattern_opt(B).           {
1227
                                                                                    pCxt->pRootNode = createShowTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
242,711✔
1228
                                                                                  }
1229
cmd ::= SHOW table_kind_db_name_cond_opt(A) VTABLES like_pattern_opt(B).          {
1230
                                                                                    pCxt->pRootNode = createShowVTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
56,387✔
1231
                                                                                  }
1232
cmd ::= SHOW table_kind_db_name_cond_opt(A) STABLES like_pattern_opt(B).          {
1233
                                                                                    pCxt->pRootNode = createShowSTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
200,513✔
1234
                                                                                  }
1235
cmd ::= SHOW db_name_cond_opt(A) VGROUPS.                                         { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, A, NULL, OP_TYPE_LIKE); }
247,657✔
1236
cmd ::= SHOW MNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); }
277,576✔
1237
//cmd ::= SHOW MODULES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MODULES_STMT); }
1238
cmd ::= SHOW QNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); }
1,250✔
1239
cmd ::= SHOW ANODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_STMT); }
156✔
UNCOV
1240
cmd ::= SHOW ANODES FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_FULL_STMT); }
×
1241
cmd ::= SHOW ARBGROUPS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ARBGROUPS_STMT); }
320✔
1242
cmd ::= SHOW FUNCTIONS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); }
36,599✔
1243
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,448✔
1244
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); }
632✔
1245
cmd ::= SHOW db_name_cond_opt(A) STREAMS.                                         { pCxt->pRootNode = createShowStreamsStmt(pCxt, A, QUERY_NODE_SHOW_STREAMS_STMT); }
98,848✔
1246
cmd ::= SHOW ACCOUNTS.                                                            { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
158✔
1247
cmd ::= SHOW APPS.                                                                { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); }
1,250✔
1248
cmd ::= SHOW CONNECTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
1,900✔
1249
cmd ::= SHOW LICENCES.                                                            { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
1,969✔
1250
cmd ::= SHOW GRANTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
1251
cmd ::= SHOW GRANTS FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_FULL_STMT); }
1,092✔
1252
cmd ::= SHOW GRANTS LOGS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_LOGS_STMT); }
1,092✔
UNCOV
1253
cmd ::= SHOW INSTANCES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_INSTANCES_STMT, B); }
×
1254
cmd ::= SHOW CLUSTER MACHINES.                                                    { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT); }
1,250✔
1255
cmd ::= SHOW MOUNTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MOUNTS_STMT); }
5,376✔
1256
cmd ::= SHOW CREATE DATABASE db_name(A).                                          { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
53,799✔
1257
cmd ::= SHOW CREATE TABLE full_table_name(A).                                     { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
70,998✔
1258
cmd ::= SHOW CREATE VTABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateVTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_VTABLE_STMT, A); }
2,662✔
1259
cmd ::= SHOW CREATE STABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT,
474✔
1260
A); }
1261
cmd ::= SHOW ENCRYPTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPTIONS_STMT); }
158✔
UNCOV
1262
cmd ::= SHOW ENCRYPT_ALGORITHMS.                                                  { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPT_ALGORITHMS_STMT); }
×
UNCOV
1263
cmd ::= SHOW ENCRYPT_STATUS.                                                      { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPT_STATUS_STMT); }
×
1264
cmd ::= SHOW QUERIES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
1,250✔
UNCOV
1265
cmd ::= SHOW SCORES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
×
1266
cmd ::= SHOW TOPICS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
16,539✔
1267
cmd ::= SHOW VARIABLES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
7,410✔
1268
cmd ::= SHOW CLUSTER VARIABLES like_pattern_opt(B).                               { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
1269
cmd ::= SHOW LOCAL VARIABLES like_pattern_opt(B).                                 { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT, B); }
10,066✔
1270
cmd ::= SHOW DNODE NK_INTEGER(A) VARIABLES like_pattern_opt(B).                   { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), B); }
34,419✔
1271
// cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BACKUP_NODES_STMT); }
1272
cmd ::= SHOW SNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }
53,154✔
1273
cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
51,428✔
1274
cmd ::= SHOW CLUSTER.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); }
1,566✔
1275
cmd ::= SHOW TRANSACTIONS.                                                        { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); }
375,580✔
1276
cmd ::= SHOW TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createShowTransactionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
262✔
1277
cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A).                                { pCxt->pRootNode = createShowTableDistributedStmt(pCxt, A); }
2,879✔
1278
cmd ::= SHOW CONSUMERS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
14,806✔
1279
cmd ::= SHOW SUBSCRIPTIONS.                                                       { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
21,480✔
1280
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); }
634,453✔
1281
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); }
948✔
1282
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,002✔
1283
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,636✔
1284
cmd ::= SHOW VNODES ON DNODE NK_INTEGER(A).                                       { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), NULL); }
1,647✔
1285
cmd ::= SHOW VNODES.                                                              { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, NULL); }
2,204✔
1286
// show alive
1287
cmd ::= SHOW db_name_cond_opt(A) ALIVE.                                           { pCxt->pRootNode = createShowAliveStmt(pCxt, A,    QUERY_NODE_SHOW_DB_ALIVE_STMT); }
1,400✔
1288
cmd ::= SHOW CLUSTER ALIVE.                                                       { pCxt->pRootNode = createShowAliveStmt(pCxt, NULL, QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT); }
3,242✔
1289
cmd ::= SHOW db_name_cond_opt(A) VIEWS like_pattern_opt(B).                       { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VIEWS_STMT, A, B, OP_TYPE_LIKE); }
1,916✔
UNCOV
1290
cmd ::= SHOW CREATE VIEW full_table_name(A).                                      { pCxt->pRootNode = createShowCreateViewStmt(pCxt, QUERY_NODE_SHOW_CREATE_VIEW_STMT, A); }
×
1291
cmd ::= SHOW COMPACTS.                                                            { pCxt->pRootNode = createShowCompactsStmt(pCxt, QUERY_NODE_SHOW_COMPACTS_STMT); }
339,601✔
1292
cmd ::= SHOW COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createShowCompactDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
29,936✔
1293
cmd ::= SHOW db_name_cond_opt(A) DISK_INFO.                                       { pCxt->pRootNode = createShowDiskUsageStmt(pCxt, A,    QUERY_NODE_SHOW_USAGE_STMT); }
284✔
1294
cmd ::= SHOW SCANS.                                                               { pCxt->pRootNode = createShowScansStmt(pCxt, QUERY_NODE_SHOW_SCANS_STMT); }
1,935✔
1295
cmd ::= SHOW SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createShowScanDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
1,720✔
UNCOV
1296
cmd ::= SHOW SSMIGRATES.                                                          { pCxt->pRootNode = createShowSsMigratesStmt(pCxt, QUERY_NODE_SHOW_SSMIGRATES_STMT); }
×
UNCOV
1297
cmd ::= SHOW TOKENS.                                                              { pCxt->pRootNode = createShowTokensStmt(pCxt, QUERY_NODE_SHOW_TOKENS_STMT); }
×
1298

1299
%type table_kind_db_name_cond_opt                                                 { SShowTablesOption }
1300
%destructor table_kind_db_name_cond_opt                                           { }
1301
table_kind_db_name_cond_opt(A) ::= .                                              { A.kind = SHOW_KIND_ALL; A.dbName = nil_token; }
137,086✔
1302
table_kind_db_name_cond_opt(A) ::= table_kind(B).                                 { A.kind = B; A.dbName = nil_token; }
352✔
1303
table_kind_db_name_cond_opt(A) ::= db_name(C) NK_DOT.                             { A.kind = SHOW_KIND_ALL; A.dbName = C; }
326,997✔
1304
table_kind_db_name_cond_opt(A) ::= table_kind(B) db_name(C) NK_DOT.               { A.kind = B; A.dbName = C; }
37,024✔
1305

1306
%type table_kind                                                                  { EShowKind }
1307
%destructor table_kind                                                            { }
1308
table_kind(A) ::= NORMAL.                                                         { A = SHOW_KIND_TABLES_NORMAL; }
18,704✔
1309
table_kind(A) ::= CHILD.                                                          { A = SHOW_KIND_TABLES_CHILD; }
18,076✔
1310
table_kind(A) ::= VIRTUAL.                                                        { A = SHOW_KIND_TABLES_VIRTUAL; }
596✔
1311

1312
db_name_cond_opt(A) ::= .                                                         { A = createDefaultDatabaseCondValue(pCxt); }
716,742✔
1313
db_name_cond_opt(A) ::= db_name(B) NK_DOT.                                        { A = createIdentifierValueNode(pCxt, &B); }
332,218✔
1314

1315
like_pattern_opt(A) ::= .                                                         { A = NULL; }
1316
like_pattern_opt(A) ::= LIKE NK_STRING(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
29,476✔
1317

1318
table_name_cond(A) ::= table_name(B).                                             { A = createIdentifierValueNode(pCxt, &B); }
640,903✔
1319

1320
from_db_opt(A) ::= .                                                              { A = createDefaultDatabaseCondValue(pCxt); }
1321
from_db_opt(A) ::= FROM db_name(B).                                               { A = createIdentifierValueNode(pCxt, &B); }
4,870✔
1322

1323
%type tag_list_opt                                                                { SNodeList* }
1324
%destructor tag_list_opt                                                          { nodesDestroyList($$); }
1325
tag_list_opt(A) ::= .                                                             { A = NULL; }
1326
tag_list_opt(A) ::= tag_item(B).                                                  { A = createNodeList(pCxt, B); }
1327
tag_list_opt(A) ::= tag_list_opt(B) NK_COMMA tag_item(C).                         { A = addNodeToList(pCxt, B, C); }
1328

1329
tag_item(A) ::= TBNAME(B).                                                        { A = setProjectionAlias(pCxt, createFunctionNode(pCxt, &B, NULL), &B); }
1,294✔
1330
tag_item(A) ::= QTAGS(B).                                                         { A = createFunctionNode(pCxt, &B, NULL); }
1331
tag_item(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
1332
tag_item(A) ::= column_name(B) column_alias(C).                                   { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
530✔
UNCOV
1333
tag_item(A) ::= column_name(B) AS column_alias(C).                                { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
×
1334

1335
%type db_kind_opt                                                                 { EShowKind }
1336
%destructor db_kind_opt                                                           { }
1337
db_kind_opt(A) ::= .                                                              { A = SHOW_KIND_ALL; }
152,947✔
1338
db_kind_opt(A) ::= USER.                                                          { A = SHOW_KIND_DATABASES_USER; }
160✔
1339
db_kind_opt(A) ::= SYSTEM.                                                        { A = SHOW_KIND_DATABASES_SYSTEM; }
160✔
1340

1341
/************************************************ rsma ********************************************************/
1342
cmd ::= CREATE RSMA not_exists_opt(B) rsma_name(C)
1343
  ON full_table_name(D) rsma_func_list(E)
1344
  INTERVAL NK_LP signed_duration_list(F) NK_RP.                                   { pCxt->pRootNode = createCreateRsmaStmt(pCxt, B, &C, D, E, F); }
105,641✔
1345
cmd ::= DROP RSMA exists_opt(B) full_rsma_name(C).                                { pCxt->pRootNode = createDropRsmaStmt(pCxt, B, C); }
2,127✔
1346
cmd ::= SHOW CREATE RSMA full_table_name(A).                                      { pCxt->pRootNode = createShowCreateRsmaStmt(pCxt, QUERY_NODE_SHOW_CREATE_RSMA_STMT, A); }
2,127✔
1347
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,143✔
1348
cmd ::= SHOW db_name_cond_opt(B) RSMAS.                                           { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RSMAS_STMT, B, NULL, OP_TYPE_LIKE); }
12,762✔
1349
cmd ::= SHOW db_name_cond_opt(B) RETENTIONS.                                      { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RETENTIONS_STMT, B, NULL, OP_TYPE_LIKE); }
38,286✔
1350
cmd ::= SHOW RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createShowRetentionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
2,127✔
1351
cmd ::= ROLLUP DATABASE db_name(A) start_opt(B) end_opt(C).                       { pCxt->pRootNode = createRollupStmt(pCxt, &A, B, C); }
9,217✔
1352
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,254✔
1353

1354
full_rsma_name(A) ::= rsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1355
full_rsma_name(A) ::= db_name(B) NK_DOT rsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1356

1357
%type rsma_func_list                                                              { SNodeList* }
1358
%destructor rsma_func_list                                                        { }
1359
rsma_func_list(A) ::= .                                                           { A = NULL; }
UNCOV
1360
rsma_func_list(A) ::= FUNCTION NK_LP NK_RP.                                       { A = NULL; }
×
1361
rsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = B; }
1362
/************************************************ tsma ********************************************************/
1363
cmd ::= CREATE TSMA not_exists_opt(B) tsma_name(C)
1364
  ON full_table_name(E) tsma_func_list(D)
1365
  INTERVAL NK_LP duration_literal(F) NK_RP.                                       { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, D, E, releaseRawExprNode(pCxt, F)); }
773✔
1366
cmd ::= CREATE RECURSIVE TSMA not_exists_opt(B) tsma_name(C)
UNCOV
1367
  ON full_table_name(D) INTERVAL NK_LP duration_literal(E) NK_RP.                 { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, NULL, D, releaseRawExprNode(pCxt, E)); }
×
1368
cmd ::= DROP TSMA exists_opt(B) full_tsma_name(C).                                { pCxt->pRootNode = createDropTSMAStmt(pCxt, B, C); }
×
UNCOV
1369
cmd ::= SHOW db_name_cond_opt(B) TSMAS.                                           { pCxt->pRootNode = createShowTSMASStmt(pCxt, B); }
×
1370

1371
full_tsma_name(A) ::= tsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1372
full_tsma_name(A) ::= db_name(B) NK_DOT tsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1373

1374
%type tsma_func_list                                                              { SNode* }
1375
%destructor tsma_func_list                                                        { nodesDestroyNode($$); }
×
1376
tsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = createTSMAOptions(pCxt, B); }
773✔
1377

1378
/************************************************ create index ********************************************************/
1379
cmd ::= CREATE SMA INDEX not_exists_opt(D)
UNCOV
1380
  col_name(A) ON full_table_name(B) index_options(C).                      { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, D, A, B, NULL, C); }
×
1381
cmd ::= CREATE INDEX not_exists_opt(D)
1382
  col_name(A) ON full_table_name(B) NK_LP col_name_list(C) NK_RP.          { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_NORMAL, D, A, B, C, NULL); }
11,195✔
1383
cmd ::= DROP INDEX exists_opt(B) full_index_name(A).                              { pCxt->pRootNode = createDropIndexStmt(pCxt, B, A); }
3,126✔
1384

1385
full_index_name(A) ::= index_name(B).                                             { A = createRealTableNodeForIndexName(pCxt, NULL, &B); }
2,777✔
1386
full_index_name(A) ::= db_name(B) NK_DOT index_name(C).                           { A = createRealTableNodeForIndexName(pCxt, &B, &C); }
349✔
1387

1388
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
UNCOV
1389
  NK_LP duration_literal(C) NK_RP sliding_opt(D) sma_stream_opt(E).               { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), NULL, D, E); }
×
1390
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
1391
  NK_LP duration_literal(C) NK_COMMA duration_literal(D) NK_RP sliding_opt(E)
UNCOV
1392
  sma_stream_opt(F).                                                              { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), E, F); }
×
1393

1394
%type func_list                                                                   { SNodeList* }
1395
%destructor func_list                                                             { nodesDestroyList($$); }
1396
func_list(A) ::= func(B).                                                         { A = createNodeList(pCxt, B); }
1397
func_list(A) ::= func_list(B) NK_COMMA func(C).                                   { A = addNodeToList(pCxt, B, C); }
1398

1399
func(A) ::= sma_func_name(B) NK_LP expression_list(C) NK_RP.                      { A = createFunctionNode(pCxt, &B, C); }
288,565✔
1400

1401
%type sma_func_name                                                               { SToken }
1402
%destructor sma_func_name                                                         { }
1403
sma_func_name(A) ::= function_name(B).                                            { A = B; }
58,970,071✔
1404
sma_func_name(A) ::= COUNT(B).                                                    { A = B; }
1405
sma_func_name(A) ::= FIRST(B).                                                    { A = B; }
1406
sma_func_name(A) ::= LAST(B).                                                     { A = B; }
1407
sma_func_name(A) ::= LAST_ROW(B).                                                 { A = B; }
1408

1409
sma_stream_opt(A) ::= .                                                           { A = NULL; }
1410

1411
/************************************************ create/drop topic ***************************************************/
1412
%type with_meta                                                                   { int32_t }
1413
%destructor with_meta                                                             { }
1414
with_meta(A) ::= AS.                                                              { A = 0; }
21,639✔
1415
with_meta(A) ::= WITH META AS.                                                    { A = 1; }
11,215✔
1416
with_meta(A) ::= ONLY META AS.                                                    { A = 2; }
557✔
1417

1418
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) AS query_or_subquery(C).     { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, false); }
127,086✔
1419
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(D)
1420
  DATABASE db_name(C).                                                            { pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, A, &B, &C, D); }
22,846✔
1421
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(E)
1422
  STABLE full_table_name(C) where_clause_opt(D).                                  { pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, A, &B, C, E, D); }
10,565✔
1423

UNCOV
1424
cmd ::= RELOAD TOPIC exists_opt(A) topic_name(B) AS query_or_subquery(C).         { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, true); }
×
1425
cmd ::= DROP TOPIC exists_opt(A) force_opt(C) topic_name(B).                             { pCxt->pRootNode = createDropTopicStmt(pCxt, A, &B, C); }
101,274✔
1426
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); }
780✔
1427

1428
/************************************************ desc/describe *******************************************************/
1429
cmd ::= DESC full_table_name(A).                                                  { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
488,386✔
1430
cmd ::= DESCRIBE full_table_name(A).                                              { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
1431

1432
/************************************************ reset query cache ***************************************************/
1433
cmd ::= RESET QUERY CACHE.                                                        { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); }
1,926,617✔
1434

1435
/************************************************ explain *************************************************************/
1436
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) query_or_subquery(C).           { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
12,045,665✔
1437
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) insert_query(C).                { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
1438

1439
%type analyze_opt                                                                 { bool }
1440
%destructor analyze_opt                                                           { }
1441
analyze_opt(A) ::= .                                                              { A = false; }
1442
analyze_opt(A) ::= ANALYZE.                                                       { A = true; }
1443

1444
explain_options(A) ::= .                                                          { A = createDefaultExplainOptions(pCxt); }
12,211,691✔
1445
explain_options(A) ::= explain_options(B) VERBOSE NK_BOOL(C).                     { A = setExplainVerbose(pCxt, B, &C); }
4,349,570✔
1446
explain_options(A) ::= explain_options(B) RATIO NK_FLOAT(C).                      { A = setExplainRatio(pCxt, B, &C); }
1,462,680✔
1447

1448
/************************************************ create/drop function ************************************************/
1449
cmd ::= CREATE or_replace_opt(H) agg_func_opt(A) FUNCTION not_exists_opt(F)
1450
  function_name(B) AS NK_STRING(C) OUTPUTTYPE type_name(D) bufsize_opt(E)
1451
  language_opt(G).                                                                { pCxt->pRootNode = createCreateFunctionStmt(pCxt, F, A, &B, &C, D, E, &G, H); }
46,154✔
1452
cmd ::= DROP FUNCTION exists_opt(B) function_name(A).                             { pCxt->pRootNode = createDropFunctionStmt(pCxt, B, &A); }
35,882✔
1453

1454
%type agg_func_opt                                                                { bool }
1455
%destructor agg_func_opt                                                          { }
1456
agg_func_opt(A) ::= .                                                             { A = false; }
1457
agg_func_opt(A) ::= AGGREGATE.                                                    { A = true; }
1458

1459
%type bufsize_opt                                                                 { int32_t }
1460
%destructor bufsize_opt                                                           { }
1461
bufsize_opt(A) ::= .                                                              { A = 0; }
1462
bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B).                                         { A = taosStr2Int32(B.z, NULL, 10); }
1463

1464
%type language_opt                                                                 { SToken }
1465
%destructor language_opt                                                           { }
1466
language_opt(A) ::= .                                                              { A = nil_token; }
44,965✔
1467
language_opt(A) ::= LANGUAGE NK_STRING(B).                                         { A = B; }
3,192✔
1468

1469
%type or_replace_opt                                                               { bool }
1470
%destructor or_replace_opt                                                         { }
1471
or_replace_opt(A) ::= .                                                            { A = false; }
1472
or_replace_opt(A) ::= OR REPLACE.                                                  { A = true; }
1473

1474
/************************************************ create/drop view **************************************************/
1475
cmd ::= CREATE or_replace_opt(A) VIEW full_view_name(B) AS(C) query_or_subquery(D).
1476
                                                                                  { pCxt->pRootNode = createCreateViewStmt(pCxt, A, B, &C, D); }
17,216✔
1477
cmd ::= DROP VIEW exists_opt(A) full_view_name(B).                                { pCxt->pRootNode = createDropViewStmt(pCxt, A, B); }
348✔
1478

1479
full_view_name(A) ::= view_name(B).                                               { A = createViewNode(pCxt, NULL, &B); }
16,872✔
1480
full_view_name(A) ::= db_name(B) NK_DOT view_name(C).                             { A = createViewNode(pCxt, &B, &C); }
1,040✔
1481

1482
/************************************************ create/drop stream **************************************************/
1483
cmd ::= CREATE STREAM not_exists_opt(A) full_stream_name(B) stream_trigger(C)
1484
        stream_outtable_opt(D) as_subquery_opt(E).                                { pCxt->pRootNode = createCreateStreamStmt(pCxt, A, B, C, D, E); }
244,277✔
1485
cmd ::= DROP STREAM exists_opt(A) stream_name_list(B).                            { pCxt->pRootNode = createDropStreamStmt(pCxt, A, B); }
7,756✔
1486
cmd ::= STOP STREAM exists_opt(A) full_stream_name(B).                            { pCxt->pRootNode = createPauseStreamStmt(pCxt, A, B); }
1,955✔
1487
cmd ::= START STREAM exists_opt(A) ignore_opt(C) full_stream_name(B).             { pCxt->pRootNode = createResumeStreamStmt(pCxt, A, C, B); }
1,955✔
1488
cmd ::= RECALCULATE STREAM full_stream_name(A) recalculate_range(B).              { pCxt->pRootNode = createRecalcStreamStmt(pCxt, A, B); }
10,150✔
1489

1490
/* recalculate_range(A) ::= ALL.                                                     { A = createRecalcRange(pCxt, NULL, NULL); } */
1491
recalculate_range(A) ::= FROM time_point(B).                                      { A = createRecalcRange(pCxt, B, NULL); }
8,420✔
1492
recalculate_range(A) ::= FROM time_point(B) TO time_point(C).                     { A = createRecalcRange(pCxt, B, C); }
1,730✔
1493

1494
full_stream_name(A) ::= stream_name(B).                                           { A = createStreamNode(pCxt, NULL, &B); }
91,842✔
1495
full_stream_name(A) ::= db_name(B) NK_DOT stream_name(C).                         { A = createStreamNode(pCxt, &B, &C); }
186,584✔
1496

1497
%type stream_name_list                                                            { SNodeList* }
1498
%destructor stream_name_list                                                      { nodesDestroyList($$); }
1499
stream_name_list(A) ::= full_stream_name(B).                                      { A = createNodeList(pCxt, B); }
1500
stream_name_list(A) ::= stream_name_list(B) NK_COMMA full_stream_name(C).         { A = addNodeToList(pCxt, B, C); }
1501

1502
/********** stream_outtable **********/
1503
stream_outtable_opt(A) ::= .                                                                                                { A = NULL; }
1504
stream_outtable_opt(A) ::= INTO full_table_name(B) output_subtable_opt(C) column_name_opt(D) stream_tags_def_opt(E).        { A = createStreamOutTableNode(pCxt, B, C, D, E); }
246,356✔
1505

1506
/********** stream_trigger **********/
1507
stream_trigger(A) ::= trigger_type(B) trigger_table_opt(C) stream_partition_by_opt(D)
1508
                      trigger_options_opt(E) notification_opt(F).                                                           { A = createStreamTriggerNode(pCxt, B, C, D, E, F); }
250,540✔
1509

1510
/***** trigger type *****/
1511

1512
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)); }
8,681,068✔
1513
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); }
3,275,023✔
1514
trigger_type(A) ::= interval_opt(B) SLIDING NK_LP sliding_expr(C) NK_RP.                                                    { A = createIntervalWindowNodeExt(pCxt, B, C); }
98,563✔
1515
trigger_type(A) ::= EVENT_WINDOW NK_LP START WITH search_condition(B) END WITH search_condition(C) NK_RP true_for_opt(D).   { A = createEventWindowNode(pCxt, B, C, D); }
27,568✔
1516
trigger_type(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.                                                          { A = createCountWindowNodeFromArgs(pCxt, B); }
2,895,123✔
1517
trigger_type(A) ::= PERIOD NK_LP interval_sliding_duration_literal(B) offset_opt(C) NK_RP.                                  { A = createPeriodWindowNode(pCxt, releaseRawExprNode(pCxt, B), C); }
15,190✔
1518
trigger_type(A) ::= EVENT_WINDOW NK_LP START WITH NK_LP search_condition_list(B) NK_RP
1519
                    END WITH search_condition(C) NK_RP true_for_opt(D).                                                     { A = createEventWindowNode(pCxt, createNodeListNode(pCxt, B), C, D); }
1,704✔
1520
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,704✔
1521

1522
%type search_condition_list                                                                                                 { SNodeList* }
1523
%destructor search_condition_list                                                                                           { nodesDestroyList($$); }
1524
search_condition_list(A) ::= search_condition(B) NK_COMMA search_condition(C).                                              { A = addNodeToList(pCxt, createNodeList(pCxt, B), C); }
3,408✔
1525
search_condition_list(A) ::= search_condition_list(B) NK_COMMA search_condition(C).                                         { A = addNodeToList(pCxt, B, C); }
1526

1527
interval_opt(A) ::= .                                                                                                       { A = NULL; }
1528
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C) NK_RP.                                              { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), NULL, NULL, NULL); }
75,133✔
1529
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C)
1530
                    NK_COMMA interval_sliding_duration_literal(D) NK_RP.                                                    { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), NULL, NULL); }
2,993✔
1531

1532
sliding_expr(A) ::= interval_sliding_duration_literal(B).                                                                   { A = createSlidingWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
94,270✔
1533
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,293✔
1534

1535
%type sliding_val_opt                                                             { SToken }
1536
%destructor sliding_val_opt                                                       { }
1537

1538
offset_opt(A) ::= .                                                               { A = NULL; }
1539
offset_opt(A) ::= NK_COMMA interval_sliding_duration_literal(B).                  { A = releaseRawExprNode(pCxt, B); }
20,054,519✔
1540

1541
/***** trigger_table_opt *****/
1542

1543
trigger_table_opt(A) ::= .                                                 { A = NULL; }
1544
trigger_table_opt(A) ::= FROM full_table_name(B).                          { A = B; }
1545

1546
/***** stream_partition_by_opt *****/
1547

1548
%type stream_partition_by_opt                                                                 { SNodeList* }
1549
%destructor stream_partition_by_opt                                                           { nodesDestroyList($$); }
1550
stream_partition_by_opt(A) ::= .                                                              { A = NULL; }
1551
stream_partition_by_opt(A) ::= PARTITION BY stream_partition_list(B).                         { A = B; }
177,050,085✔
1552

1553
%type stream_partition_list                                                                   { SNodeList* }
1554
%destructor stream_partition_list                                                             { nodesDestroyList($$); }
1555
stream_partition_list(A) ::= stream_partition_item(B).                                        { A = createNodeList(pCxt, B); }
1556
stream_partition_list(A) ::= stream_partition_list(B) NK_COMMA stream_partition_item(C).      { A = addNodeToList(pCxt, B, C); }
1557

1558
stream_partition_item(A) ::= expr_or_subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
754,577,011✔
1559
stream_partition_item(A) ::= expr_or_subquery(B) column_alias(C).                             { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
16,663,230✔
1560

1561
/***** trigger_options_opt *****/
1562

1563
trigger_options_opt(A) ::= .                                                              { A = NULL; }
1564
trigger_options_opt(A) ::= STREAM_OPTIONS NK_LP trigger_option_list(B) NK_RP.             { A = B; }
102,708✔
1565

1566
trigger_option_list(A) ::= trigger_option(B).                                       { A = createStreamTriggerOptions(pCxt);  A = setStreamTriggerOptions(pCxt, A, &B);  }
103,122✔
1567
trigger_option_list(A) ::= trigger_option_list(B) NK_BITOR trigger_option(C).       { A = setStreamTriggerOptions(pCxt, B, &C); }
27,504✔
1568

1569
%type trigger_option                                                               { SStreamTriggerOption }
1570
%destructor trigger_option                                                         { }
1571
trigger_option(A) ::= CALC_NOTIFY_ONLY.                                            { A.type = STREAM_TRIGGER_OPTION_CALC_NOTIFY_ONLY; A.pNode = NULL; }
1,628✔
1572
trigger_option(A) ::= DELETE_RECALC.                                               { A.type = STREAM_TRIGGER_OPTION_DELETE_RECALC; A.pNode = NULL; }
8,655✔
1573
trigger_option(A) ::= DELETE_OUTPUT_TABLE.                                         { A.type = STREAM_TRIGGER_OPTION_DELETE_OUTPUT_TABLE; A.pNode = NULL; }
234✔
1574
trigger_option(A) ::= EXPIRED_TIME NK_LP duration_literal(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_EXPIRED_TIME; A.pNode = releaseRawExprNode(pCxt, B); }
5,614✔
1575
trigger_option(A) ::= FILL_HISTORY NK_LP time_point(B) NK_RP.                      { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = B; }
15,874✔
1576
trigger_option(A) ::= FILL_HISTORY_FIRST NK_LP time_point(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = B; }
1,833✔
1577
trigger_option(A) ::= FILL_HISTORY.                                                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = NULL; }
16,807✔
1578
trigger_option(A) ::= FILL_HISTORY_FIRST.                                          { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = NULL; }
828✔
1579
trigger_option(A) ::= FORCE_OUTPUT.                                                { A.type = STREAM_TRIGGER_OPTION_FORCE_OUTPUT; A.pNode = NULL; }
3,668✔
1580
trigger_option(A) ::= IGNORE_DISORDER.                                             { A.type = STREAM_TRIGGER_OPTION_IGNORE_DISORDER; A.pNode = NULL; }
17,233✔
1581
trigger_option(A) ::= LOW_LATENCY_CALC.                                            { A.type = STREAM_TRIGGER_OPTION_LOW_LATENCY_CALC; A.pNode = NULL; }
5,942✔
1582
trigger_option(A) ::= MAX_DELAY NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_MAX_DELAY; A.pNode = releaseRawExprNode(pCxt, B); }
5,818✔
1583
trigger_option(A) ::= PRE_FILTER NK_LP search_condition(B) NK_RP.                  { A.type = STREAM_TRIGGER_OPTION_PRE_FILTER; A.pNode = B; }
15,818✔
1584
trigger_option(A) ::= WATERMARK NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_WATERMARK; A.pNode = releaseRawExprNode(pCxt, B); }
7,764✔
1585
trigger_option(A) ::= EVENT_TYPE NK_LP event_type_list(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_EVENT_TYPE; A.flag = B; A.pNode = NULL; }
5,315✔
1586
trigger_option(A) ::= IGNORE_NODATA_TRIGGER.                                       { A.type = STREAM_TRIGGER_OPTION_IGNORE_NODATA_TRIGGER; A.pNode = NULL; }
17,595✔
1587

1588
/***** notification_opt *****/
1589
notification_opt(A) ::= .                                                         { A = NULL; }
1590
notification_opt(A) ::= NOTIFY NK_LP notify_url_list(B) NK_RP
1591
                        notify_on_opt(C) where_clause_opt(D)
1592
                        notify_options_opt(E).                                    { A = createStreamNotifyOptions(pCxt, B, C, D, E); }
57,862✔
1593

1594
%type notify_url_list                                                             { SNodeList* }
1595
%destructor notify_url_list                                                       { nodesDestroyList($$); }
1596
notify_url_list(A) ::= NK_STRING(B).                                              { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
57,973✔
UNCOV
1597
notify_url_list(A) ::= notify_url_list(B) NK_COMMA NK_STRING(C).                  { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)); }
×
1598

1599
%type notify_on_opt                                                               { int64_t }
1600
%destructor notify_on_opt                                                         { }
1601
notify_on_opt(A) ::= .                                                            { A = EVENT_NONE; }
1,060✔
1602
notify_on_opt(A) ::= ON NK_LP event_type_list(B) NK_RP.                           { A = B; }
58,793✔
1603

1604
%type notify_options_opt                                                          { int64_t }
1605
%destructor notify_options_opt                                                    { }
1606
notify_options_opt(A) ::= .                                                       { A = NOTIFY_NONE; }
55,871✔
1607
notify_options_opt(A) ::= NOTIFY_OPTIONS NK_LP notify_options_list(B) NK_RP.      { A = B; }
1608

1609
%type notify_options_list                                                         { int64_t }
1610
%destructor notify_options_list                                                   { }
1611
notify_options_list(A) ::= notify_option(B).                                      { A = B; }
1,991✔
1612
notify_options_list(A) ::= notify_options_list(B) NK_BITOR notify_option(C).     { A = B | C; }
50,768✔
1613

1614
%type notify_option                                                               { int64_t }
1615
%destructor notify_option                                                         { }
1616
notify_option(A) ::= NOTIFY_HISTORY.                                              { A = NOTIFY_HISTORY; }
1,991✔
1617

1618
/***** common part *****/
1619

1620
time_point(A) ::= NK_INTEGER(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
8,547✔
1621
time_point(A) ::= NK_STRING(B).                                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1,010,383✔
1622

1623
%type column_name_list                                                            { SNodeList* }
1624
%destructor column_name_list                                                      { nodesDestroyList($$); }
1625
column_name_list(A) ::= trigger_col_name(B).                                      { A = createNodeList(pCxt, B); }
1626
column_name_list(A) ::= column_name_list(B) NK_COMMA trigger_col_name(C).         { A = addNodeToList(pCxt, B, C); }
1627

1628
trigger_col_name(A) ::= column_name(B).                                           { A = createColumnNode(pCxt, NULL, &B); }
1629
trigger_col_name(A) ::= TBNAME(B).                                                { A = createFunctionNode(pCxt, &B, NULL); }
1630

1631
%type event_type_list                                                             { int64_t }
1632
%destructor event_type_list                                                       { }
1633
event_type_list(A) ::= event_types(B).                                            { A = B;}
62,191✔
1634
event_type_list(A) ::= event_type_list(B) NK_BITOR event_types(C).                { A = B | C; }
1635

1636
%type event_types                                                                 { int64_t }
1637
%destructor event_types                                                           { }
1638
event_types(A) ::= WINDOW_OPEN.                                                   { A = EVENT_WINDOW_OPEN; }
56,521✔
1639
event_types(A) ::= WINDOW_CLOSE.                                                  { A = EVENT_WINDOW_CLOSE; }
56,438✔
1640

1641
/********** output_subtable_opt **********/
1642
output_subtable_opt(A) ::= .                                                      { A = NULL; }
1643
output_subtable_opt(A) ::= OUTPUT_SUBTABLE NK_LP expr_or_subquery(B) NK_RP.       { A = releaseRawExprNode(pCxt, B); }
1,725,083✔
1644

1645
%type column_name_opt                                                             { SNodeList* }
1646
%destructor column_name_opt                                                       { nodesDestroyList($$); }
1647
column_name_opt(A) ::= .                                                          { A = NULL; }
1648
column_name_opt(A) ::= column_name_unit(B).                                       { A = B; }
1649

1650
%type stream_tags_def_opt                                                            { SNodeList* }
1651
%destructor stream_tags_def_opt                                                      { nodesDestroyList($$); }
1652
stream_tags_def_opt(A) ::= .                                                         { A = NULL; }
1653
stream_tags_def_opt(A) ::= TAGS NK_LP stream_tags_def_list(B) NK_RP.                 { A = B; }
1654

1655
%type stream_tags_def_list                                                             { SNodeList* }
1656
%destructor stream_tags_def_list                                                       { nodesDestroyList($$); }
1657
stream_tags_def_list(A) ::= stream_tags_def(B).                                        { A = createNodeList(pCxt, B); }
1658
stream_tags_def_list(A) ::= stream_tags_def_list(B) NK_COMMA stream_tags_def(C).       { A = addNodeToList(pCxt, B, C); }
1659

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

1662
%type column_name_unit                                                                 { SNodeList* }
1663
%destructor column_name_unit                                                           { nodesDestroyList($$); }
1664
column_name_unit(A) ::= NK_LP column_stream_def_list(B) NK_RP.                         { A = B; }
1665

1666
%type column_stream_def_list                                                      { SNodeList* }
1667
%destructor column_stream_def_list                                                { nodesDestroyList($$); }
1668
column_stream_def_list(A) ::= column_stream_def(B).                               { A = createNodeList(pCxt, B); }
1669
column_stream_def_list(A) ::= column_stream_def_list(B)
1670
 NK_COMMA column_stream_def(C).                                                   { A = addNodeToList(pCxt, B, C); }
1671

1672
column_stream_def(A) ::= column_name(B) stream_col_options(C).                    { A = createColumnDefNode(pCxt, &B, createDataType(TSDB_DATA_TYPE_NULL), C); }
237,768✔
1673

1674
stream_col_options(A) ::= .                                                       { A = createDefaultColumnOptions(pCxt); }
367,049,679✔
1675
stream_col_options(A) ::= stream_col_options(B) PRIMARY KEY.                      { A = setColumnOptionsPK(pCxt, B); }
223,010✔
1676
stream_col_options(A) ::= stream_col_options(B) COMPOSITE KEY.                    { A = setColumnOptionsPK(pCxt, B); }
1677
//column_stream_def(A) ::= column_def(B).                                         { A = B; }
1678

1679
as_subquery_opt(A) ::= .                                                          { A = NULL; }
1680
as_subquery_opt(A) ::= AS query_or_subquery(B).                                   { A = B; }
1681

1682
%type ignore_opt                                                                  { bool }
1683
%destructor ignore_opt                                                            { }
1684
ignore_opt(A) ::= .                                                               { A = false; }
1685
ignore_opt(A) ::= IGNORE UNTREATED.                                               { A = true; }
1686

1687

1688
/************************************************ kill connection/query ***********************************************/
1689
cmd ::= KILL CONNECTION NK_INTEGER(A).                                            { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &A); }
156✔
1690
cmd ::= KILL QUERY NK_STRING(A).                                                  { pCxt->pRootNode = createKillQueryStmt(pCxt, &A); }
42✔
1691
cmd ::= KILL TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &A); }
260✔
1692
cmd ::= KILL COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_COMPACT_STMT, &A); }
1,418✔
UNCOV
1693
cmd ::= KILL RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_RETENTION_STMT, &A); }
×
1694
cmd ::= KILL SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SCAN_STMT, &A); }
86✔
UNCOV
1695
cmd ::= KILL SSMIGRATE NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SSMIGRATE_STMT, &A); }
×
1696

1697
/************************************************ merge/redistribute/ vgroup ******************************************/
1698
cmd ::= BALANCE VGROUP.                                                           { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); }
11,134✔
1699

1700
cmd ::= ASSIGN LEADER FORCE.                                                      { pCxt->pRootNode = createAssignLeaderStmt(pCxt); }
16✔
1701

1702
cmd ::= BALANCE VGROUP LEADER on_vgroup_id(A).                                    { pCxt->pRootNode = createBalanceVgroupLeaderStmt(pCxt, &A); }
2,003✔
1703
cmd ::= BALANCE VGROUP LEADER DATABASE db_name(A).                                { pCxt->pRootNode = createBalanceVgroupLeaderDBNameStmt(pCxt, &A); }
98✔
1704
cmd ::= ALTER VGROUP NK_INTEGER(A) SET KEEP NK_INTEGER(B).                { pCxt->pRootNode = createSetVgroupKeepVersionStmt(pCxt, &A, &B); }
1,056✔
UNCOV
1705
cmd ::= MERGE VGROUP NK_INTEGER(A) NK_INTEGER(B).                                 { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &A, &B); }
×
1706
cmd ::= REDISTRIBUTE VGROUP NK_INTEGER(A) dnode_list(B).                          { pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &A, B); }
43,321✔
1707
cmd ::= SPLIT VGROUP NK_INTEGER(A) force_opt(B).                                  { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &A, B); }
16,306✔
1708

1709
%type on_vgroup_id                                                                { SToken }
1710
%destructor on_vgroup_id                                                          { }
1711
on_vgroup_id(A) ::= .                                                             { A = nil_token; }
1712
on_vgroup_id(A) ::= ON NK_INTEGER(B).                                             { A = B; }
1713

1714
%type dnode_list                                                                  { SNodeList* }
1715
%destructor dnode_list                                                            { nodesDestroyList($$); }
1716
dnode_list(A) ::= DNODE NK_INTEGER(B).                                            { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
43,321✔
1717
dnode_list(A) ::= dnode_list(B) DNODE NK_INTEGER(C).                              { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
1718

1719
/************************************************ syncdb **************************************************************/
1720
//cmd ::= SYNCDB db_name(A) REPLICA.                                                { pCxt->pRootNode = createSyncdbStmt(pCxt, &A); }
1721

1722
/************************************************ syncdb **************************************************************/
1723
cmd ::= DELETE FROM full_table_name(A) where_clause_opt(B).                       { pCxt->pRootNode = createDeleteStmt(pCxt, A, B); }
1,661,969✔
1724

1725
/************************************************ select **************************************************************/
1726
cmd ::= query_or_subquery(A).                                                     { pCxt->pRootNode = A; }
1727

1728
/************************************************ insert **************************************************************/
1729
cmd ::= insert_query(A).                                                          { pCxt->pRootNode = A; }
1730

1731
insert_query(A) ::= INSERT INTO full_table_name(D)
1732
  NK_LP col_name_list(B) NK_RP query_or_subquery(C).                              { A = createInsertStmt(pCxt, D, B, C); }
24,429✔
1733
insert_query(A) ::= INSERT INTO full_table_name(C) query_or_subquery(B).          { A = createInsertStmt(pCxt, C, NULL, B); }
63,881✔
1734

1735
/************************************************ tags_literal *************************************************************/
1736
tags_literal(A) ::= NK_INTEGER(B).                                                { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
54,810,807✔
1737
tags_literal(A) ::= NK_INTEGER(B) NK_PLUS duration_literal(C).                    {
1738
                                                                                    SToken l = B;
19,737✔
1739
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
19,737✔
1740
                                                                                    l.n = (r.z + r.n) - l.z;
19,737✔
1741
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
19,737✔
1742
                                                                                  }
1743
tags_literal(A) ::= NK_INTEGER(B) NK_MINUS duration_literal(C).                   {
1744
                                                                                    SToken l = B;
1745
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1746
                                                                                    l.n = (r.z + r.n) - l.z;
1747
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1748
                                                                                  }
1749
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER(C).                                     {
1750
                                                                                    SToken t = B;
319,383✔
1751
                                                                                    t.n = (C.z + C.n) - B.z;
319,388✔
1752
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
319,388✔
1753
                                                                                  }
1754
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_PLUS duration_literal(C).            {
1755
                                                                                    SToken l = B;
5,117✔
1756
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
5,117✔
1757
                                                                                    l.n = (r.z + r.n) - l.z;
5,117✔
1758
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
5,117✔
1759
                                                                                  }
1760
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_MINUS duration_literal(C).           {
1761
                                                                                    SToken l = B;
1762
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1763
                                                                                    l.n = (r.z + r.n) - l.z;
1764
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1765
                                                                                  }
1766
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER(C).                                    {
1767
                                                                                    SToken t = B;
1768
                                                                                    t.n = (C.z + C.n) - B.z;
1769
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1770
                                                                                  }
1771
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_PLUS duration_literal(C).           {
1772
                                                                                    SToken l = B;
1773
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1774
                                                                                    l.n = (r.z + r.n) - l.z;
1775
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1776
                                                                                  }
1777
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_MINUS duration_literal(C).          {
1778
                                                                                    SToken l = B;
1779
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1780
                                                                                    l.n = (r.z + r.n) - l.z;
1781
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1782
                                                                                  }
1783
tags_literal(A) ::= NK_FLOAT(B).                                                  { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B, NULL); }
400,198✔
1784
tags_literal(A) ::= NK_PLUS(B) NK_FLOAT(C).                                       {
1785
                                                                                    SToken t = B;
83,340✔
1786
                                                                                    t.n = (C.z + C.n) - B.z;
83,340✔
1787
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
83,340✔
1788
                                                                                  }
1789
tags_literal(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1790
                                                                                    SToken t = B;
1791
                                                                                    t.n = (C.z + C.n) - B.z;
1792
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
1793
                                                                                  }
1794

1795
tags_literal(A) ::= NK_BIN(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1796
tags_literal(A) ::= NK_BIN(B) NK_PLUS 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_BIN(B) NK_MINUS duration_literal(C).                       {
1803
                                                                                    SToken l = B;
1804
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1805
                                                                                    l.n = (r.z + r.n) - l.z;
1806
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1807
                                                                                  }
1808
tags_literal(A) ::= NK_PLUS(B) NK_BIN(C).                                         {
1809
                                                                                    SToken t = B;
1810
                                                                                    t.n = (C.z + C.n) - B.z;
1811
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1812
                                                                                  }
1813
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_PLUS duration_literal(C).                {
1814
                                                                                    SToken l = B;
1815
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1816
                                                                                    l.n = (r.z + r.n) - l.z;
1817
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1818
                                                                                  }
1819
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_MINUS duration_literal(C).               {
1820
                                                                                    SToken l = B;
1821
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1822
                                                                                    l.n = (r.z + r.n) - l.z;
1823
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1824
                                                                                  }
1825
tags_literal(A) ::= NK_MINUS(B) NK_BIN(C).                                        {
1826
                                                                                    SToken t = B;
1827
                                                                                    t.n = (C.z + C.n) - B.z;
1828
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1829
                                                                                  }
1830
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_PLUS duration_literal(C).               {
1831
                                                                                    SToken l = B;
1832
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1833
                                                                                    l.n = (r.z + r.n) - l.z;
1834
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1835
                                                                                  }
1836
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_MINUS duration_literal(C).              {
1837
                                                                                    SToken l = B;
1838
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1839
                                                                                    l.n = (r.z + r.n) - l.z;
1840
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1841
                                                                                  }
1842
tags_literal(A) ::= NK_HEX(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1843
tags_literal(A) ::= NK_HEX(B) NK_PLUS duration_literal(C).                        {
1844
                                                                                    SToken l = B;
1845
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1846
                                                                                    l.n = (r.z + r.n) - l.z;
1847
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1848
                                                                                  }
1849
tags_literal(A) ::= NK_HEX(B) NK_MINUS 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_PLUS(B) NK_HEX(C).                                         {
1856
                                                                                    SToken t = B;
1857
                                                                                    t.n = (C.z + C.n) - B.z;
1858
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1859
                                                                                  }
1860
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_PLUS duration_literal(C).                {
1861
                                                                                    SToken l = B;
1862
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1863
                                                                                    l.n = (r.z + r.n) - l.z;
1864
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1865
                                                                                  }
1866
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_MINUS duration_literal(C).               {
1867
                                                                                    SToken l = B;
1868
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1869
                                                                                    l.n = (r.z + r.n) - l.z;
1870
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1871
                                                                                  }
1872
tags_literal(A) ::= NK_MINUS(B) NK_HEX(C).                                        {
1873
                                                                                    SToken t = B;
1874
                                                                                    t.n = (C.z + C.n) - B.z;
1875
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1876
                                                                                  }
1877
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_PLUS duration_literal(C).               {
1878
                                                                                    SToken l = B;
1879
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1880
                                                                                    l.n = (r.z + r.n) - l.z;
1881
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1882
                                                                                  }
1883
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_MINUS duration_literal(C).              {
1884
                                                                                    SToken l = B;
1885
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1886
                                                                                    l.n = (r.z + r.n) - l.z;
1887
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1888
                                                                                  }
1889

1890
tags_literal(A) ::= NK_STRING(B).                                                 { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B, NULL); }
59,556,231✔
1891
tags_literal(A) ::= NK_STRING(B) NK_PLUS duration_literal(C).                     {
1892
                                                                                    SToken l = B;
1893
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1894
                                                                                    l.n = (r.z + r.n) - l.z;
1895
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1896
                                                                                  }
1897
tags_literal(A) ::= NK_STRING(B) NK_MINUS duration_literal(C).                    {
1898
                                                                                    SToken l = B;
1899
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1900
                                                                                    l.n = (r.z + r.n) - l.z;
1901
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1902
                                                                                  }
1903
tags_literal(A) ::= NK_BOOL(B).                                                   { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B, NULL); }
1,624,110✔
1904
tags_literal(A) ::= NULL(B).                                                      { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B, NULL); }
203,707✔
1905

1906
tags_literal(A) ::= literal_func(B).                                              { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, NULL, B); }
163,511✔
1907
tags_literal(A) ::= literal_func(B) NK_PLUS duration_literal(C).                  {
1908
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
21,673✔
1909
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
21,673✔
1910
                                                                                    l.n = (r.z + r.n) - l.z;
21,673✔
1911
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
21,673✔
1912
                                                                                  }
1913
tags_literal(A) ::= literal_func(B) NK_MINUS duration_literal(C).                 {
1914
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
1915
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1916
                                                                                    l.n = (r.z + r.n) - l.z;
1917
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
1918
                                                                                  }
1919

1920
%type tags_literal_list                                                           { SNodeList* }
1921
%destructor tags_literal_list                                                     { nodesDestroyList($$); }
1922
tags_literal_list(A) ::= tags_literal(B).                                         { A = createNodeList(pCxt, B); }
1923
tags_literal_list(A) ::= tags_literal_list(B) NK_COMMA tags_literal(C).           { A = addNodeToList(pCxt, B, C); }
1924

1925
/************************************************ literal *************************************************************/
1926
literal(A) ::= NK_INTEGER(B).                                                     { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B)); }
230,309,409✔
1927
literal(A) ::= NK_FLOAT(B).                                                       { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B)); }
24,035,034✔
1928
literal(A) ::= NK_STRING(B).                                                      { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
43,848,878✔
1929
literal(A) ::= NK_BOOL(B).                                                        { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B)); }
3,037,929✔
1930
literal(A) ::= TIMESTAMP(B) NK_STRING(C).                                         { A = createRawExprNodeExt(pCxt, &B, &C, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &C)); }
1,363✔
1931
literal(A) ::= duration_literal(B).                                               { A = B; }
2,147,483,647✔
1932
literal(A) ::= NULL(B).                                                           { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B)); }
9,291,071✔
1933
literal(A) ::= NK_QUESTION(B).                                                    { A = createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B)); }
9,400✔
1934

1935
duration_literal(A) ::= NK_VARIABLE(B).                                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
54,186,100✔
1936

1937
signed_variable(A) ::= NK_VARIABLE(B).                                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
UNCOV
1938
signed_variable(A) ::= NK_PLUS NK_VARIABLE(B).                                    { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
×
1939
signed_variable(A) ::= NK_MINUS(B) NK_VARIABLE(C).                                {
1940
                                                                                    SToken t = B;
37,895✔
1941
                                                                                    t.n = (C.z + C.n) - B.z;
37,895✔
1942
                                                                                    A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &t));
37,895✔
1943
                                                                                  }
1944

1945
signed_integer(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
4,945,329✔
1946
signed_integer(A) ::= NK_PLUS NK_INTEGER(B).                                      { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
×
1947
signed_integer(A) ::= NK_MINUS(B) NK_INTEGER(C).                                  {
1948
                                                                                    SToken t = B;
234,225✔
1949
                                                                                    t.n = (C.z + C.n) - B.z;
234,225✔
1950
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t);
234,225✔
1951
                                                                                  }
1952

1953

1954
unsigned_integer(A) ::= NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
30,457,024✔
UNCOV
1955
unsigned_integer(A) ::= NK_QUESTION(B).                                           { A = releaseRawExprNode(pCxt, createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B))); }
×
1956

1957
signed_float(A) ::= NK_FLOAT(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
132,182✔
UNCOV
1958
signed_float(A) ::= NK_PLUS NK_FLOAT(B).                                          { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
×
1959
signed_float(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1960
                                                                                    SToken t = B;
83,197✔
1961
                                                                                    t.n = (C.z + C.n) - B.z;
83,197✔
1962
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t);
83,197✔
1963
                                                                                  }
1964

1965
signed(A) ::= signed_integer(B).                                                  { A = B; }
1966
signed(A) ::= signed_float(B).                                                    { A = B; }
1967

1968
signed_literal(A) ::= signed(B).                                                  { A = B; }
1969
signed_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1970
signed_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
3,357,674✔
UNCOV
1971
signed_literal(A) ::= TIMESTAMP NK_STRING(B).                                     { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
×
1972
signed_literal(A) ::= duration_literal(B).                                        { A = releaseRawExprNode(pCxt, B); }
1973
signed_literal(A) ::= NULL(B).                                                    { A = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B); }
9,109✔
1974
signed_literal(A) ::= literal_func(B).                                            { A = releaseRawExprNode(pCxt, B); }
UNCOV
1975
signed_literal(A) ::= NK_QUESTION(B).                                             { A = createPlaceholderValueNode(pCxt, &B); }
×
1976

1977

1978
%type literal_list                                                                { SNodeList* }
1979
%destructor literal_list                                                          { nodesDestroyList($$); }
1980
literal_list(A) ::= signed_literal(B).                                            { A = createNodeList(pCxt, B); }
1981
literal_list(A) ::= literal_list(B) NK_COMMA signed_literal(C).                   { A = addNodeToList(pCxt, B, C); }
1982

1983
/************************************************ names and identifiers ***********************************************/
1984
%type db_name                                                                     { SToken }
1985
%destructor db_name                                                               { }
1986
db_name(A) ::= NK_ID(B).                                                          { A = B; }
1987

1988
%type mount_name                                                                  { SToken }
1989
%destructor mount_name                                                            { }
1990
mount_name(A) ::= NK_ID(B).                                                       { A = B; }
1991

1992
%type table_name                                                                  { SToken }
1993
%destructor table_name                                                            { }
1994
table_name(A) ::= NK_ID(B).                                                       { A = B; }
1995

1996
%type column_name                                                                 { SToken }
1997
%destructor column_name                                                           { }
1998
column_name(A) ::= NK_ID(B).                                                      { A = B; }
1999

2000
%type function_name                                                               { SToken }
2001
%destructor function_name                                                         { }
2002
function_name(A) ::= NK_ID(B).                                                    { A = B; }
2003

2004
%type view_name                                                                   { SToken }
2005
%destructor view_name                                                             { }
2006
view_name(A) ::= NK_ID(B).                                                        { A = B; }
2007

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

2012
%type column_alias                                                                { SToken }
2013
%destructor column_alias                                                          { }
2014
column_alias(A) ::= NK_ID(B).                                                     { A = B; }
2015
column_alias(A) ::= NK_ALIAS(B).                                                  { A = B; }
2016

2017
%type user_name                                                                   { SToken }
2018
%destructor user_name                                                             { }
2019
user_name(A) ::= NK_ID(B).                                                        { A = B; }
2020

2021
%type role_name                                                                   { SToken }
2022
%destructor role_name                                                             { }
2023
role_name(A) ::= NK_ID(B).                                                        { A = B; }
2024

2025
%type general_name                                                                { SToken }
2026
%destructor general_name                                                          { }
UNCOV
2027
general_name(A) ::= NK_ID(B).                                                     { A = B;}
×
2028

2029
%type topic_name                                                                  { SToken }
2030
%destructor topic_name                                                            { }
2031
topic_name(A) ::= NK_ID(B).                                                       { A = B; }
2032

2033
%type stream_name                                                                 { SToken }
2034
%destructor stream_name                                                           { }
2035
stream_name(A) ::= NK_ID(B).                                                      { A = B; }
2036

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

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

2045
%type tsma_name                                                                   { SToken }
2046
%destructor tsma_name                                                             { }
2047
tsma_name(A) ::= NK_ID(B).                                                        { A = B; }
2048

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

2053
/************************************************ expression **********************************************************/
2054
expr_or_subquery(A) ::= expression(B).                                            { A = B; }
2055
expr_or_subquery(A) ::= subquery(B).                                              { A = B; }
2056

2057
expression(A) ::= literal(B).                                                     { A = B; }
2058
expression(A) ::= pseudo_column(B).                                               { A = B; (void)setRawExprNodeIsPseudoColumn(pCxt, A, true); }
72,351,499✔
2059
expression(A) ::= column_reference(B).                                            { A = B; }
2060
expression(A) ::= function_expression(B).                                         { A = B; }
2061
expression(A) ::= if_expression(B).                                               { A = B; }
2062
expression(A) ::= case_when_expression(B).                                        { A = B; }
2063
expression(A) ::= NK_LP(B) expression(C) NK_RP(D).                                { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
26,912,536✔
2064
expression(A) ::= NK_PLUS(B) expr_or_subquery(C).                                 {
UNCOV
2065
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
×
UNCOV
2066
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, releaseRawExprNode(pCxt, C));
×
2067
                                                                                  }
2068
expression(A) ::= NK_MINUS(B) expr_or_subquery(C).                                {
2069
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
26,240,621✔
2070
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, C), NULL));
26,240,540✔
2071
                                                                                  }
2072
expression(A) ::= expr_or_subquery(B) NK_PLUS expr_or_subquery(C).                {
2073
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
92,649,146✔
2074
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
92,649,146✔
2075
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
92,649,146✔
2076
                                                                                  }
2077
expression(A) ::= expr_or_subquery(B) NK_MINUS expr_or_subquery(C).               {
2078
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
4,823,006✔
2079
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
4,823,006✔
2080
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
4,823,006✔
2081
                                                                                  }
2082
expression(A) ::= expr_or_subquery(B) NK_STAR expr_or_subquery(C).                {
2083
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
10,537,178✔
2084
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
10,537,178✔
2085
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
10,537,178✔
2086
                                                                                  }
2087
expression(A) ::= expr_or_subquery(B) NK_SLASH expr_or_subquery(C).               {
2088
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
7,105,790✔
2089
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
7,105,790✔
2090
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
7,105,790✔
2091
                                                                                  }
2092
expression(A) ::= expr_or_subquery(B) NK_REM expr_or_subquery(C).                 {
2093
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
241,786✔
2094
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
241,786✔
2095
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
241,786✔
2096
                                                                                  }
2097
expression(A) ::= column_reference(B) NK_ARROW NK_STRING(C).                      {
2098
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
166,175✔
2099
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, B), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)));
166,175✔
2100
                                                                                  }
2101
expression(A) ::= expr_or_subquery(B) NK_BITAND expr_or_subquery(C).              {
2102
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
99,000✔
2103
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
99,000✔
2104
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
99,000✔
2105
                                                                                  }
2106
expression(A) ::= expr_or_subquery(B) NK_BITOR expr_or_subquery(C).               {
2107
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
19,341✔
2108
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
19,341✔
2109
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
19,341✔
2110
                                                                                  }
2111

2112
%type expression_list                                                             { SNodeList* }
2113
%destructor expression_list                                                       { nodesDestroyList($$); }
2114
expression_list(A) ::= expr_or_subquery(B).                                       { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
2115
expression_list(A) ::= expression_list(B) NK_COMMA expr_or_subquery(C).           { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
2116

2117
column_reference(A) ::= column_name(B).                                           { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
683,934,194✔
2118
column_reference(A) ::= table_name(B) NK_DOT column_name(C).                      { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
195,153,298✔
2119
column_reference(A) ::= NK_ALIAS(B).                                              { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
9,010✔
2120
column_reference(A) ::= table_name(B) NK_DOT NK_ALIAS(C).                         { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
2,650✔
2121

2122
pseudo_column(A) ::= ROWTS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
78,915,196✔
2123
pseudo_column(A) ::= TBNAME(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2124
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)))); }
992,972✔
2125
pseudo_column(A) ::= QSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2126
pseudo_column(A) ::= QEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2127
pseudo_column(A) ::= QDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2128
pseudo_column(A) ::= WSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2129
pseudo_column(A) ::= WEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2130
pseudo_column(A) ::= WDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2131
pseudo_column(A) ::= IROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2132
pseudo_column(A) ::= ISFILLED(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2133
pseudo_column(A) ::= QTAGS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2134
pseudo_column(A) ::= FLOW(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2135
pseudo_column(A) ::= FHIGH(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2136
pseudo_column(A) ::= FROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2137
pseudo_column(A) ::= IROWTS_ORIGIN(B).                                            { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2138
pseudo_column(A) ::= TPREV_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2139
pseudo_column(A) ::= TCURRENT_TS(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2140
pseudo_column(A) ::= TNEXT_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2141
pseudo_column(A) ::= TWSTART(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2142
pseudo_column(A) ::= TWEND(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2143
pseudo_column(A) ::= TWDURATION(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2144
pseudo_column(A) ::= TWROWNUM(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2145
pseudo_column(A) ::= TPREV_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2146
pseudo_column(A) ::= TNEXT_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2147
pseudo_column(A) ::= TLOCALTIME(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2148
pseudo_column(A) ::= TGRPID(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2149
pseudo_column(A) ::= NK_PH NK_INTEGER(B).                                         { A = createRawExprNode(pCxt, &B, createPlaceHolderColumnNode(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B))); }
34,604✔
2150
pseudo_column(A) ::= NK_PH TBNAME(B).                                             { A = createRawExprNode(pCxt, &B, createPHTbnameFunctionNode(pCxt, &B, NULL)); }
31,921✔
2151
pseudo_column(A) ::= IMPROWTS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2152
pseudo_column(A) ::= IMPMARK(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2153
pseudo_column(A) ::= ANOMALYMARK(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2154

2155
function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D).                        { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
282,031,517✔
2156
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)); }
2157
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)); }
2158
function_expression(A) ::=
2159
  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)); }
90,773,704✔
2160
function_expression(A) ::=
2161
  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)); }
2162
function_expression(A) ::=
2163
  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))); }
104,966✔
2164
function_expression(A) ::=
2165
  TRIM(B) NK_LP expr_or_subquery(C) NK_RP(D).                                                         { A = createRawExprNodeExt(pCxt, &B, &D, createTrimFunctionNode(pCxt, releaseRawExprNode(pCxt, C), TRIM_TYPE_BOTH)); }
17,005✔
2166
function_expression(A) ::=
2167
  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,778✔
2168
function_expression(A) ::=
2169
  TRIM(B) NK_LP expr_or_subquery(C) FROM expr_or_subquery(D) NK_RP(E).                                { A = createRawExprNodeExt(pCxt, &B, &E, createTrimFunctionNodeExt(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), TRIM_TYPE_BOTH)); }
16,668✔
2170
function_expression(A) ::=
2171
  TRIM(B) NK_LP trim_specification_type(C) expr_or_subquery(D) FROM expr_or_subquery(E) NK_RP(F).     { A = createRawExprNodeExt(pCxt, &B, &F, createTrimFunctionNodeExt(pCxt, releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E), C)); }
40,744✔
2172
function_expression(A) ::=
2173
  substr_func(B) NK_LP expression_list(C) NK_RP(D).                                                   { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2174
function_expression(A) ::=
2175
  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,798✔
2176
function_expression(A) ::=
2177
  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,452✔
2178
function_expression(A) ::= REPLACE(B) NK_LP expression_list(C) NK_RP(D).                              { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
72,281✔
2179
function_expression(A) ::= literal_func(B).                                                           { A = B; }
2180
function_expression(A) ::= rand_func(B).                                                              { A = B; }
2181

2182
literal_func(A) ::= noarg_func(B) NK_LP NK_RP(C).                                 { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
13,797,729✔
2183
literal_func(A) ::= NOW(B).                                                       { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2184
literal_func(A) ::= TODAY(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
2185

2186
rand_func(A) ::= RAND(B) NK_LP NK_RP(C).                                          { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
6,936✔
2187
rand_func(A) ::= RAND(B) NK_LP expression_list(C) NK_RP(D).                       { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
2188

2189
%type substr_func                                                                   { SToken }
2190
%destructor substr_func                                                             { }
2191
substr_func(A) ::= SUBSTR(B).                                                       { A = B; }
2192
substr_func(A) ::= SUBSTRING(B).                                                    { A = B; }
2193

2194
%type trim_specification_type ETrimType
2195
%destructor trim_specification_type                                                { }
2196
trim_specification_type(A) ::= BOTH.                                               { A = TRIM_TYPE_BOTH; }
13,890✔
2197
trim_specification_type(A) ::= TRAILING.                                           { A = TRIM_TYPE_TRAILING; }
14,816✔
2198
trim_specification_type(A) ::= LEADING.                                            { A = TRIM_TYPE_LEADING; }
14,816✔
2199

2200
%type noarg_func                                                                  { SToken }
2201
%destructor noarg_func                                                            { }
2202
noarg_func(A) ::= NOW(B).                                                         { A = B; }
2203
noarg_func(A) ::= TODAY(B).                                                       { A = B; }
2204
noarg_func(A) ::= TIMEZONE(B).                                                    { A = B; }
2205
noarg_func(A) ::= DATABASE(B).                                                    { A = B; }
2206
noarg_func(A) ::= CLIENT_VERSION(B).                                              { A = B; }
2207
noarg_func(A) ::= SERVER_VERSION(B).                                              { A = B; }
2208
noarg_func(A) ::= SERVER_STATUS(B).                                               { A = B; }
2209
noarg_func(A) ::= CURRENT_USER(B).                                                { A = B; }
2210
noarg_func(A) ::= USER(B).                                                        { A = B; }
2211
noarg_func(A) ::= PI(B).                                                          { A = B; }
2212

2213
%type star_func                                                                   { SToken }
2214
%destructor star_func                                                             { }
2215
star_func(A) ::= COUNT(B).                                                        { A = B; }
2216
star_func(A) ::= FIRST(B).                                                        { A = B; }
2217
star_func(A) ::= LAST(B).                                                         { A = B; }
2218
star_func(A) ::= LAST_ROW(B).                                                     { A = B; }
2219

2220
%type cols_func                                                                   { SToken }
2221
%destructor cols_func                                                             { }
2222
cols_func(A) ::= COLS(B).                                                         { A = B; }
2223

2224
%type cols_func_para_list                                                         { SNodeList* }
2225
%destructor cols_func_para_list                                                   { nodesDestroyList($$); }
2226
cols_func_para_list(A) ::= function_expression(B) NK_COMMA cols_func_expression_list(C).    { A = createColsFuncParamNodeList(pCxt, B, C, NULL); }
981,276✔
2227

2228
cols_func_expression(A) ::= expr_or_subquery(B).                                            { A = releaseRawExprNode(pCxt, B); }
2229
cols_func_expression(A) ::= NK_STAR(B).                                                     { A = createColumnNode(pCxt, NULL, &B); }
2230
cols_func_expression(A) ::= expr_or_subquery(B) column_alias(C).                            { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
63,140✔
2231
cols_func_expression(A) ::= expr_or_subquery(B) AS column_alias(C).                         { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
139,308✔
2232

2233
%type cols_func_expression_list                                                             { SNodeList* }
2234
%destructor cols_func_expression_list                                                       { nodesDestroyList($$); }
2235
cols_func_expression_list(A) ::= cols_func_expression(B).                                   { A = createNodeList(pCxt, B); }
2236
cols_func_expression_list(A) ::= cols_func_expression_list(B) NK_COMMA cols_func_expression(C).   { A = addNodeToList(pCxt, B, C); }
2237

2238
%type star_func_para_list                                                         { SNodeList* }
2239
%destructor star_func_para_list                                                   { nodesDestroyList($$); }
2240
star_func_para_list(A) ::= NK_STAR(B).                                            { A = createNodeList(pCxt, createColumnNode(pCxt, NULL, &B)); }
29,884,685✔
2241
star_func_para_list(A) ::= other_para_list(B).                                    { A = B; }
2242

2243
%type other_para_list                                                             { SNodeList* }
2244
%destructor other_para_list                                                       { nodesDestroyList($$); }
2245
other_para_list(A) ::= star_func_para(B).                                         { A = createNodeList(pCxt, B); }
2246
other_para_list(A) ::= other_para_list(B) NK_COMMA star_func_para(C).             { A = addNodeToList(pCxt, B, C); }
2247

2248
star_func_para(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
2249
star_func_para(A) ::= table_name(B) NK_DOT NK_STAR(C).                            { A = createColumnNode(pCxt, &B, &C); }
5,920,565✔
2250

2251
if_expression(A) ::=
2252
  IF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_COMMA common_expression(E) NK_RP(F).    { A = createRawExprNodeExt(pCxt, &B, &F, createIfNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E))); }
61,806✔
2253
if_expression(A) ::=
2254
  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))); }
7,956✔
2255
if_expression(A) ::=
2256
  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))); }
2257
if_expression(A) ::=
2258
  NVL2(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_COMMA common_expression(E) NK_RP(F).  { A = createRawExprNodeExt(pCxt, &B, &F, createNvl2Node(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E))); }
2,248✔
2259
if_expression(A) ::=
2260
  //NULLIF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).    { A = createRawExprNodeExt(pCxt, &B, &E, createNullIfNode(pCxt, C, D)); }
2261
  NULLIF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).    { A = createRawExprNodeExt(pCxt, &B, &E, createNullIfNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D))); }
2,248✔
2262
if_expression(A) ::=
2263
  COALESCE(B) NK_LP expression_list(C) NK_RP(E).                                  { A = createRawExprNodeExt(pCxt, &B, &E, createCoalesceNode(pCxt, C)); }
1,730✔
2264

2265
case_when_expression(A) ::=
2266
  CASE(E) when_then_list(C) case_when_else_opt(D) END(F).                         { A = createRawExprNodeExt(pCxt, &E, &F, createCaseWhenNode(pCxt, NULL, C, D)); }
17,503,006✔
2267
case_when_expression(A) ::=
2268
  CASE(E) common_expression(B) when_then_list(C) case_when_else_opt(D) END(F).    { A = createRawExprNodeExt(pCxt, &E, &F, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, B), C, D)); }
2,887,591✔
2269

2270
%type when_then_list                                                              { SNodeList* }
2271
%destructor when_then_list                                                        { nodesDestroyList($$); }
2272
when_then_list(A) ::= when_then_expr(B).                                          { A = createNodeList(pCxt, B); }
2273
when_then_list(A) ::= when_then_list(B) when_then_expr(C).                        { A = addNodeToList(pCxt, B, C); }
2274

2275
when_then_expr(A) ::= WHEN common_expression(B) THEN common_expression(C).        { A = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
20,708,438✔
2276

2277
case_when_else_opt(A) ::= .                                                       { A = NULL; }
2278
case_when_else_opt(A) ::= ELSE common_expression(B).                              { A = releaseRawExprNode(pCxt, B); }
2279

2280
/************************************************ predicate ***********************************************************/
2281
predicate(A) ::= expr_or_subquery(B) compare_op(C) expr_or_subquery(D).           {
2282
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
164,775,865✔
2283
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
164,774,873✔
2284
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
164,776,566✔
2285
                                                                                  }
2286
//predicate(A) ::= expression(B) compare_op sub_type expression(B).
2287
predicate(A) ::=
2288
  expr_or_subquery(B) BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).        {
2289
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
14,814,625✔
2290
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
14,814,625✔
2291
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
14,815,481✔
2292
                                                                                  }
2293
predicate(A) ::=
2294
  expr_or_subquery(B) NOT BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).    {
2295
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
3,084,691✔
2296
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
3,084,691✔
2297
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
3,084,691✔
2298
                                                                                  }
2299
predicate(A) ::= expr_or_subquery(B) IS NULL(C).                                  {
2300
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
9,639,621✔
2301
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, B), NULL));
9,639,621✔
2302
                                                                                  }
2303
predicate(A) ::= expr_or_subquery(B) IS NOT NULL(C).                              {
2304
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
21,809,128✔
2305
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, B), NULL));
21,809,128✔
2306
                                                                                  }
2307
predicate(A) ::= ISNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                    {
UNCOV
2308
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, C), NULL));
×
2309
                                                                                  }
2310
predicate(A) ::= ISNOTNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                 {
UNCOV
2311
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, C), NULL));
×
2312
                                                                                  }
2313
predicate(A) ::= expr_or_subquery(B) in_op(C) in_predicate_value(D).              {
2314
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
2315
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
2316
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
2317
                                                                                  }
2318

2319
%type compare_op                                                                  { EOperatorType }
2320
%destructor compare_op                                                            { }
2321
compare_op(A) ::= NK_LT.                                                          { A = OP_TYPE_LOWER_THAN; }
7,661,420✔
2322
compare_op(A) ::= NK_GT.                                                          { A = OP_TYPE_GREATER_THAN; }
35,205,097✔
2323
compare_op(A) ::= NK_LE.                                                          { A = OP_TYPE_LOWER_EQUAL; }
13,004,639✔
2324
compare_op(A) ::= NK_GE.                                                          { A = OP_TYPE_GREATER_EQUAL; }
11,962,911✔
2325
compare_op(A) ::= NK_NE.                                                          { A = OP_TYPE_NOT_EQUAL; }
6,181,533✔
2326
compare_op(A) ::= NK_EQ.                                                          { A = OP_TYPE_EQUAL; }
75,511,407✔
2327
compare_op(A) ::= LIKE.                                                           { A = OP_TYPE_LIKE; }
5,135,170✔
2328
compare_op(A) ::= NOT LIKE.                                                       { A = OP_TYPE_NOT_LIKE; }
31,627✔
2329
compare_op(A) ::= MATCH.                                                          { A = OP_TYPE_MATCH; }
4,016,184✔
2330
compare_op(A) ::= NMATCH.                                                         { A = OP_TYPE_NMATCH; }
1,672,697✔
2331
compare_op(A) ::= REGEXP.                                                         { A = OP_TYPE_MATCH; }
2332
compare_op(A) ::= NOT REGEXP.                                                     { A = OP_TYPE_NMATCH; }
2,648✔
2333
compare_op(A) ::= CONTAINS.                                                       { A = OP_TYPE_JSON_CONTAINS; }
7,436✔
2334

2335
%type in_op                                                                       { EOperatorType }
2336
%destructor in_op                                                                 { }
2337
in_op(A) ::= IN.                                                                  { A = OP_TYPE_IN; }
6,439,438✔
2338
in_op(A) ::= NOT IN.                                                              { A = OP_TYPE_NOT_IN; }
2,654,403✔
2339

2340
in_predicate_value(A) ::= NK_LP(C) literal_list(B) NK_RP(D).                      { A = createRawExprNodeExt(pCxt, &C, &D, createNodeListNode(pCxt, B)); }
4,428,148✔
2341

2342
/************************************************ boolean_value_expression ********************************************/
2343
boolean_value_expression(A) ::= boolean_primary(B).                               { A = B; }
2344
boolean_value_expression(A) ::= NOT(C) boolean_primary(B).                        {
2345
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, B);
138,807✔
2346
                                                                                    A = createRawExprNodeExt(pCxt, &C, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, B), NULL));
138,807✔
2347
                                                                                  }
2348
boolean_value_expression(A) ::=
2349
  boolean_value_expression(B) OR boolean_value_expression(C).                     {
2350
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
17,928,732✔
2351
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
17,928,732✔
2352
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
17,928,732✔
2353
                                                                                  }
2354
boolean_value_expression(A) ::=
2355
  boolean_value_expression(B) AND boolean_value_expression(C).                    {
2356
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
41,576,430✔
2357
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
41,576,430✔
2358
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
41,576,430✔
2359
                                                                                  }
2360

2361
boolean_primary(A) ::= predicate(B).                                              { A = B; }
2362
boolean_primary(A) ::= NK_LP(C) boolean_value_expression(B) NK_RP(D).             { A = createRawExprNodeExt(pCxt, &C, &D, releaseRawExprNode(pCxt, B)); }
2363

2364
/************************************************ common_expression ********************************************/
2365
common_expression(A) ::= expr_or_subquery(B).                                     { A = B; }
2366
common_expression(A) ::= boolean_value_expression(B).                             { A = B; }
2367

2368
/************************************************ from_clause_opt *********************************************************/
2369
from_clause_opt(A) ::= .                                                          { A = NULL; }
2370
from_clause_opt(A) ::= FROM table_reference_list(B).                              { A = B; }
2371

2372
table_reference_list(A) ::= table_reference(B).                                   { A = B; }
2373
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,152,692✔
2374

2375
/************************************************ table_reference *****************************************************/
2376
table_reference(A) ::= table_primary(B).                                          { A = B; }
2377
table_reference(A) ::= joined_table(B).                                           { A = B; }
2378

2379
table_primary(A) ::= table_name(B) alias_opt(C).                                  { A = createRealTableNode(pCxt, NULL, &B, &C); }
343,217,567✔
2380
table_primary(A) ::= db_name(B) NK_DOT table_name(C) alias_opt(D).                { A = createRealTableNode(pCxt, &B, &C, &D); }
78,302,588✔
2381
table_primary(A) ::= subquery(B) alias_opt(C).                                    { A = createTempTableNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
28,302,890✔
2382
table_primary(A) ::= parenthesized_joined_table(B).                               { A = B; }
2383
table_primary(A) ::= NK_PH TBNAME alias_opt(C).                                   { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_TBNAME, &C); }
11,055✔
2384
table_primary(A) ::= NK_PH TROWS alias_opt(C).                                    { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_ROWS, &C); }
100,497✔
2385

2386
%type alias_opt                                                                   { SToken }
2387
%destructor alias_opt                                                             { }
2388
alias_opt(A) ::= .                                                                { A = nil_token;  }
388,604,831✔
2389
alias_opt(A) ::= table_alias(B).                                                  { A = B; }
2390
alias_opt(A) ::= AS table_alias(B).                                               { A = B; }
2,558,436✔
2391

2392
parenthesized_joined_table(A) ::= NK_LP joined_table(B) NK_RP.                    { A = B; }
668✔
2393
parenthesized_joined_table(A) ::= NK_LP parenthesized_joined_table(B) NK_RP.      { A = B; }
2394

2395
/************************************************ joined_table ********************************************************/
2396
joined_table(A) ::= inner_joined(B).                                              { A = B; }
2397
joined_table(A) ::= outer_joined(B).                                              { A = B; }
2398
joined_table(A) ::= semi_joined(B).                                               { A = B; }
2399
joined_table(A) ::= anti_joined(B).                                               { A = B; }
2400
joined_table(A) ::= asof_joined(B).                                               { A = B; }
2401
joined_table(A) ::= win_joined(B).                                                { A = B; }
2402

2403
/************************************************ inner join **********************************************************/
2404
inner_joined(A) ::=
2405
  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); }
12,028,721✔
2406

2407
inner_joined(A) ::=
2408
  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,100,848✔
2409

2410
/************************************************ outer join **********************************************************/
2411
outer_joined(A) ::=
2412
  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); }
5,767,491✔
2413

2414
outer_joined(A) ::=
2415
  table_reference(B) RIGHT JOIN table_reference(E) join_on_clause(F).             { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
138,289✔
2416

2417
outer_joined(A) ::=
2418
  table_reference(B) FULL JOIN table_reference(E) join_on_clause(F).              { JOINED_TABLE_MK(JOIN_TYPE_FULL, JOIN_STYPE_OUTER, A, B, E, F, NULL, NULL); }
152,878✔
2419

2420
outer_joined(A) ::=
2421
  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); }
346✔
2422

2423
outer_joined(A) ::=
2424
  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); }
346✔
2425

2426
outer_joined(A) ::=
2427
  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); }
346✔
2428

2429
/************************************************ semi join ***********************************************************/
2430
semi_joined(A) ::=
2431
  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); }
192,267✔
2432

2433
semi_joined(A) ::=
2434
  table_reference(B) RIGHT SEMI JOIN table_reference(E) join_on_clause(F).        { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_SEMI, A, B, E, F, NULL, NULL); }
147,452✔
2435

2436
/************************************************ ansi join ***********************************************************/
2437
anti_joined(A) ::=
2438
  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); }
192,245✔
2439

2440
anti_joined(A) ::=
2441
  table_reference(B) RIGHT ANTI JOIN table_reference(E) join_on_clause(F).        { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ANTI, A, B, E, F, NULL, NULL); }
128,800✔
2442

2443
/************************************************ asof join ***********************************************************/
2444
asof_joined(A) ::=
2445
  table_reference(B) LEFT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2446
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
269,140✔
2447

2448
asof_joined(A) ::=
2449
  table_reference(B) RIGHT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2450
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
184,225✔
2451

2452
/************************************************ window join *********************************************************/
2453
win_joined(A) ::=
2454
  table_reference(B) LEFT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2455
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
301,474✔
2456

2457
win_joined(A) ::=
2458
  table_reference(B) RIGHT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2459
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
221,460✔
2460

2461
join_on_clause_opt(A) ::= . [ON]                                                  { A = NULL; }
2462
join_on_clause_opt(A) ::= join_on_clause(B).                                      { A = B; }
2463

2464
join_on_clause(A) ::= ON search_condition(B).                                     { A = B; }
2465

2466
window_offset_clause(A) ::= WINDOW_OFFSET NK_LP window_offset_literal(B)
2467
  NK_COMMA window_offset_literal(C) NK_RP.                                        { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
532,082✔
2468

2469
window_offset_literal(A) ::= NK_VARIABLE(B).                                      { A = createRawExprNode(pCxt, &B, createTimeOffsetValueNode(pCxt, &B)); }
555,082✔
2470
window_offset_literal(A) ::= NK_MINUS(B) NK_VARIABLE(C).                          {
2471
                                                                                    SToken t = B;
514,426✔
2472
                                                                                    t.n = (C.z + C.n) - B.z;
514,426✔
2473
                                                                                    A = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t));
514,426✔
2474
                                                                                  }
2475

2476
jlimit_clause_opt(A) ::= . [JLIMIT]                                               { A = NULL; }
2477
jlimit_clause_opt(A) ::= JLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
17,947,744✔
2478

2479
/************************************************ query_specification *************************************************/
2480
query_specification(A) ::=
2481
  SELECT hint_list(M) set_quantifier_opt(B) tag_mode_opt(N) select_list(C) from_clause_opt(D)
2482
  where_clause_opt(E) partition_by_clause_opt(F) range_opt(J) every_opt(K)
2483
  interp_fill_opt(L) twindow_clause_opt(G) group_by_clause_opt(H) having_clause_opt(I).  {
2484
                                                                                    A = createSelectStmt(pCxt, B, C, D, M);
426,303,582✔
2485
                                                                                    A = setSelectStmtTagMode(pCxt, A, N);
426,302,131✔
2486
                                                                                    A = addWhereClause(pCxt, A, E);
426,299,281✔
2487
                                                                                    A = addPartitionByClause(pCxt, A, F);
426,299,194✔
2488
                                                                                    A = addWindowClauseClause(pCxt, A, G);
426,297,220✔
2489
                                                                                    A = addGroupByClause(pCxt, A, H);
426,300,927✔
2490
                                                                                    A = addHavingClause(pCxt, A, I);
426,298,008✔
2491
                                                                                    A = addRangeClause(pCxt, A, J);
426,299,118✔
2492
                                                                                    A = addEveryClause(pCxt, A, K);
426,304,570✔
2493
                                                                                    A = addFillClause(pCxt, A, L);
426,298,974✔
2494
                                                                                  }
2495

2496
%type hint_list                                                                   { SNodeList* }
2497
%destructor hint_list                                                             { nodesDestroyList($$); }
2498
hint_list(A) ::= .                                                                { A = createHintNodeList(pCxt, NULL); }
427,186,396✔
2499
hint_list(A) ::= NK_HINT(B).                                                      { A = createHintNodeList(pCxt, &B); }
7,665,527✔
2500

2501
%type tag_mode_opt                                                                { bool }
2502
%destructor tag_mode_opt                                                          { }
2503
tag_mode_opt(A) ::= .                                                             { A = false; }
2504
tag_mode_opt(A) ::= TAGS.                                                         { A = true; }
2505

2506
%type set_quantifier_opt                                                          { bool }
2507
%destructor set_quantifier_opt                                                    { }
2508
set_quantifier_opt(A) ::= .                                                       { A = false; }
2509
set_quantifier_opt(A) ::= DISTINCT.                                               { A = true; }
UNCOV
2510
set_quantifier_opt(A) ::= ALL.                                                    { A = false; }
×
2511

2512
%type select_list                                                                 { SNodeList* }
2513
%destructor select_list                                                           { nodesDestroyList($$); }
2514
select_list(A) ::= select_item(B).                                                { A = createNodeList(pCxt, B); }
2515
select_list(A) ::= select_list(B) NK_COMMA select_item(C).                        { A = addNodeToList(pCxt, B, C); }
2516

2517
select_item(A) ::= NK_STAR(B).                                                    { A = createColumnNode(pCxt, NULL, &B); }
2518
select_item(A) ::= common_expression(B).                                          { A = releaseRawExprNode(pCxt, B); }
2519
select_item(A) ::= common_expression(B) column_alias(C).                          { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2520
select_item(A) ::= common_expression(B) AS column_alias(C).                       { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
61,989,534✔
2521
select_item(A) ::= table_name(B) NK_DOT NK_STAR(C).                               { A = createColumnNode(pCxt, &B, &C); }
2522

2523
where_clause_opt(A) ::= .                                                         { A = NULL; }
2524
where_clause_opt(A) ::= WHERE search_condition(B).                                { A = B; }
2525

2526
%type partition_by_clause_opt                                                     { SNodeList* }
2527
%destructor partition_by_clause_opt                                               { nodesDestroyList($$); }
2528
partition_by_clause_opt(A) ::= .                                                  { A = NULL; }
2529
partition_by_clause_opt(A) ::= PARTITION BY partition_list(B).                    { A = B; }
2530

2531
%type partition_list                                                              { SNodeList* }
2532
%destructor partition_list                                                        { nodesDestroyList($$); }
2533
partition_list(A) ::= partition_item(B).                                          { A = createNodeList(pCxt, B); }
2534
partition_list(A) ::= partition_list(B) NK_COMMA partition_item(C).               { A = addNodeToList(pCxt, B, C); }
2535

2536
partition_item(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
2537
partition_item(A) ::= expr_or_subquery(B) column_alias(C).                        { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2538
partition_item(A) ::= expr_or_subquery(B) AS column_alias(C).                     { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2539

2540
twindow_clause_opt(A) ::= .                                                       { A = NULL; }
2541
twindow_clause_opt(A) ::= SESSION NK_LP column_reference(B) NK_COMMA
2542
  interval_sliding_duration_literal(C) NK_RP.                                     { A = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
2543
twindow_clause_opt(A) ::=
2544
  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); }
2545
twindow_clause_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(B)
2546
  NK_RP sliding_opt(C) fill_opt(D).                                               { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL, C, D); }
29,595,093✔
2547
twindow_clause_opt(A) ::=
2548
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2549
  interval_sliding_duration_literal(C) NK_RP
2550
  sliding_opt(D) fill_opt(E).                                                     { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), D, E); }
153,139✔
2551
twindow_clause_opt(A) ::=
2552
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2553
  AUTO(C) NK_RP sliding_opt(D) fill_opt(E).                                       { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), createDurationValueNode(pCxt, &C), D, E); }
111,537✔
2554
twindow_clause_opt(A) ::= EVENT_WINDOW START WITH search_condition(B)
2555
  END WITH search_condition(C) true_for_opt(D).                                   { A = createEventWindowNode(pCxt, B, C, D); }
2,872,658✔
2556
twindow_clause_opt(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.          { A = createCountWindowNodeFromArgs(pCxt, B); }
2557
twindow_clause_opt(A) ::=
UNCOV
2558
  ANOMALY_WINDOW NK_LP expr_or_subquery(B) NK_RP.                                 { A = createAnomalyWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
×
2559
twindow_clause_opt(A) ::=
UNCOV
2560
  ANOMALY_WINDOW NK_LP expr_or_subquery(B) NK_COMMA NK_STRING(C) NK_RP.           { A = createAnomalyWindowNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
×
2561

2562
extend_literal(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_INT, &B); }
21,564✔
2563

2564
zeroth_literal(A) ::= signed_integer(B).                                          { A = B; }
2565
zeroth_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2566
zeroth_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
2567

2568
%type state_window_opt                                                            { SNodeList* }
2569
%destructor state_window_opt                                                      { nodesDestroyList($$); }
2570
state_window_opt(A) ::= .                                                         { A = NULL; }
2571
state_window_opt(A) ::= NK_COMMA extend_literal(B).                               { A = createNodeList(pCxt, B); }
21,209✔
UNCOV
2572
state_window_opt(A) ::= NK_COMMA extend_literal(B) NK_COMMA zeroth_literal(C).    { A = addNodeToList(pCxt, createNodeList(pCxt, B), C); }
×
2573

2574
sliding_opt(A) ::= .                                                              { A = NULL; }
2575
sliding_opt(A) ::= SLIDING NK_LP interval_sliding_duration_literal(B) NK_RP.      { A = releaseRawExprNode(pCxt, B); }
2576

2577
interval_sliding_duration_literal(A) ::= NK_VARIABLE(B).                          { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2578
interval_sliding_duration_literal(A) ::= NK_STRING(B).                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2579
interval_sliding_duration_literal(A) ::= NK_INTEGER(B).                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2580

2581
interp_fill_opt(A) ::= .                                                          { A = NULL; }
2582
interp_fill_opt(A) ::= fill_value(B).                                             { A = B; }
2583
interp_fill_opt(A) ::=
2584
  FILL NK_LP fill_position_mode_extension(B) NK_COMMA expression_list(C) NK_RP.   { A = createFillNode(pCxt, B, createNodeListNode(pCxt, C)); }
899,695✔
2585
interp_fill_opt(A) ::= FILL NK_LP interp_fill_mode(B) NK_RP.                      { A = createFillNode(pCxt, B, NULL); }
1,646,622✔
2586

2587
fill_opt(A) ::= .                                                                 { A = NULL; }
2588
fill_opt(A) ::= FILL NK_LP fill_mode(B) NK_RP.                                    { A = createFillNode(pCxt, B, NULL); }
2589
fill_opt(A) ::= fill_value(B).                                                    { A = B; }
2590

2591
fill_value(A) ::= FILL NK_LP VALUE NK_COMMA expression_list(B) NK_RP.             { A = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, B)); }
183,857✔
2592
fill_value(A) ::= FILL NK_LP VALUE_F NK_COMMA expression_list(B) NK_RP.           { A = createFillNode(pCxt, FILL_MODE_VALUE_F, createNodeListNode(pCxt, B)); }
25,029✔
2593

2594
count_window_args(A) ::= NK_INTEGER(B).                                           { A = createCountWindowArgs(pCxt, &B, NULL, NULL); }
2,857,631✔
2595
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C).                    { A = createCountWindowArgs(pCxt, &B, &C, NULL); }
6,672✔
2596
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA column_name_list(D).              { A = createCountWindowArgs(pCxt, &B, NULL, D); }
18,048✔
2597
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_COMMA column_name_list(D). { A = createCountWindowArgs(pCxt, &B, &C, D); }
12,772✔
2598

2599
%type fill_mode                                                                   { EFillMode }
2600
%destructor fill_mode                                                             { }
2601
fill_mode(A) ::= NONE.                                                            { A = FILL_MODE_NONE; }
3,336✔
2602
fill_mode(A) ::= NULL.                                                            { A = FILL_MODE_NULL; }
156,759✔
2603
fill_mode(A) ::= NULL_F.                                                          { A = FILL_MODE_NULL_F; }
35,672✔
2604
fill_mode(A) ::= LINEAR.                                                          { A = FILL_MODE_LINEAR; }
225,281✔
2605
fill_mode(A) ::= fill_position_mode(B).                                           { A = B; }
806,503✔
2606

2607
%type fill_position_mode                                                          { EFillMode }
2608
%destructor fill_position_mode                                                    { }
2609
fill_position_mode(A) ::= PREV.                                                   { A = FILL_MODE_PREV; }
247,506✔
2610
fill_position_mode(A) ::= NEXT.                                                   { A = FILL_MODE_NEXT; }
162,074✔
2611

2612
%type fill_position_mode_extension                                                { EFillMode }
2613
%destructor fill_position_mode_extension                                          { }
2614
fill_position_mode_extension(A) ::= fill_position_mode(B).                        { A = B; }
2615
fill_position_mode_extension(A) ::= NEAR.                                         { A = FILL_MODE_NEAR; }
1,722,651✔
2616

2617
%type interp_fill_mode                                                            { EFillMode }
2618
%destructor interp_fill_mode                                                      { }
2619
interp_fill_mode(A) ::= fill_mode(B).                                             { A = B; }
2620
interp_fill_mode(A) ::= NEAR.                                                     { A = FILL_MODE_NEAR; }
2621

2622
%type group_by_clause_opt                                                         { SNodeList* }
2623
%destructor group_by_clause_opt                                                   { nodesDestroyList($$); }
2624
group_by_clause_opt(A) ::= .                                                      { A = NULL; }
2625
group_by_clause_opt(A) ::= GROUP BY group_by_list(B).                             { A = B; }
2626

2627
%type group_by_list                                                               { SNodeList* }
2628
%destructor group_by_list                                                         { nodesDestroyList($$); }
2629
group_by_list(A) ::= expr_or_subquery(B).                                         { A = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, B))); }
40,458,273✔
2630
group_by_list(A) ::= group_by_list(B) NK_COMMA expr_or_subquery(C).               { A = addNodeToList(pCxt, B, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, C))); }
3,460,969✔
2631

2632
having_clause_opt(A) ::= .                                                        { A = NULL; }
2633
having_clause_opt(A) ::= HAVING search_condition(B).                              { A = B; }
2634

2635
range_opt(A) ::= .                                                                { A = NULL; }
2636
range_opt(A) ::=
2637
  RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_COMMA expr_or_subquery(D) NK_RP.              {
2638
                                                                                    A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)); }
57,663✔
2639
range_opt(A) ::=
2640
  RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_RP.             { A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), NULL); }
2,157,184✔
2641
range_opt(A) ::=
2642
  RANGE NK_LP expr_or_subquery(B) NK_RP.                                          { A = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, B)); }
40,834✔
2643

2644
every_opt(A) ::= .                                                                { A = NULL; }
2645
every_opt(A) ::= EVERY NK_LP duration_literal(B) NK_RP.                           { A = releaseRawExprNode(pCxt, B); }
2646

2647
true_for_opt(A) ::= .                                                             { A = NULL; }
2648
true_for_opt(A) ::= TRUE_FOR NK_LP interval_sliding_duration_literal(B) NK_RP.    { A = releaseRawExprNode(pCxt, B); }
2649

2650
/************************************************ query_expression ****************************************************/
2651
query_expression(A) ::= query_simple(B)
2652
  order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E).                {
2653
                                                                                    A = addOrderByClause(pCxt, B, C);
401,767,641✔
2654
                                                                                    A = addSlimitClause(pCxt, A, D);
401,763,170✔
2655
                                                                                    A = addLimitClause(pCxt, A, E);
401,764,495✔
2656
                                                                                  }
2657

2658
query_simple(A) ::= query_specification(B).                                       { A = B; }
2659
query_simple(A) ::= union_query_expression(B).                                    { A = B; }
2660

2661
union_query_expression(A) ::=
2662
  query_simple_or_subquery(B) UNION ALL query_simple_or_subquery(C).              { A = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, B, C); }
15,867,574✔
2663
union_query_expression(A) ::=
2664
  query_simple_or_subquery(B) UNION query_simple_or_subquery(C).                  { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, C); }
15,560,680✔
2665

2666
query_simple_or_subquery(A) ::= query_simple(B).                                  { A = B; }
2667
query_simple_or_subquery(A) ::= subquery(B).                                      { A = releaseRawExprNode(pCxt, B); }
2668

2669
query_or_subquery(A) ::= query_expression(B).                                     { A = B; }
2670
query_or_subquery(A) ::= subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
2671

2672
%type order_by_clause_opt                                                         { SNodeList* }
2673
%destructor order_by_clause_opt                                                   { nodesDestroyList($$); }
2674
order_by_clause_opt(A) ::= .                                                      { A = NULL; }
2675
order_by_clause_opt(A) ::= ORDER BY sort_specification_list(B).                   { A = B; }
2676

2677
slimit_clause_opt(A) ::= .                                                        { A = NULL; }
2678
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
2679
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B) SOFFSET unsigned_integer(C).  { A = createLimitNode(pCxt, B, C); }
5,747,327✔
2680
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B). { A = createLimitNode(pCxt, B, C); }
505,335✔
2681

2682
limit_clause_opt(A) ::= .                                                         { A = NULL; }
2683
limit_clause_opt(A) ::= LIMIT unsigned_integer(B).                                { A = createLimitNode(pCxt, B, NULL); }
2684
limit_clause_opt(A) ::= LIMIT unsigned_integer(B) OFFSET unsigned_integer(C).     { A = createLimitNode(pCxt, B, C); }
2685
limit_clause_opt(A) ::= LIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B).   { A = createLimitNode(pCxt, B, C); }
2686

2687
/************************************************ subquery ************************************************************/
2688
subquery(A) ::= NK_LP(B) query_expression(C) NK_RP(D).                            { A = createRawExprNodeExt(pCxt, &B, &D, C); }
233,355,055✔
2689
subquery(A) ::= NK_LP(B) subquery(C) NK_RP(D).                                    { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
2690

2691
/************************************************ search_condition ****************************************************/
2692
search_condition(A) ::= common_expression(B).                                     { A = releaseRawExprNode(pCxt, B); }
2693

2694
/************************************************ sort_specification_list *********************************************/
2695
%type sort_specification_list                                                     { SNodeList* }
2696
%destructor sort_specification_list                                               { nodesDestroyList($$); }
2697
sort_specification_list(A) ::= sort_specification(B).                             { A = createNodeList(pCxt, B); }
2698
sort_specification_list(A) ::=
2699
  sort_specification_list(B) NK_COMMA sort_specification(C).                      { A = addNodeToList(pCxt, B, C); }
2700

2701
sort_specification(A) ::=
2702
  expr_or_subquery(B) ordering_specification_opt(C) null_ordering_opt(D).         { A = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, B), C, D); }
125,765,891✔
2703

2704
%type ordering_specification_opt EOrder
2705
%destructor ordering_specification_opt                                            { }
2706
ordering_specification_opt(A) ::= .                                               { A = ORDER_ASC; }
114,347,988✔
2707
ordering_specification_opt(A) ::= ASC.                                            { A = ORDER_ASC; }
7,444,928✔
2708
ordering_specification_opt(A) ::= DESC.                                           { A = ORDER_DESC; }
3,973,346✔
2709

2710
%type null_ordering_opt ENullOrder
2711
%destructor null_ordering_opt                                                     { }
2712
null_ordering_opt(A) ::= .                                                        { A = NULL_ORDER_DEFAULT; }
125,765,081✔
2713
null_ordering_opt(A) ::= NULLS FIRST.                                             { A = NULL_ORDER_FIRST; }
1,181✔
UNCOV
2714
null_ordering_opt(A) ::= NULLS LAST.                                              { A = NULL_ORDER_LAST; }
×
2715

2716
%fallback ABORT AFTER ATTACH BEFORE BEGIN BITAND BITNOT BITOR BLOCKS CHANGE COMMA CONCAT CONFLICT COPY DEFERRED DELIMITERS DETACH DIVIDE DOT EACH END FAIL
2717
  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
2718
  STRICT STRING TIMES VALUES VARIABLE VIEW WAL.
2719

2720
column_options(A) ::= .                                                           { A = createDefaultColumnOptions(pCxt); }
2721
column_options(A) ::= column_options(B) PRIMARY KEY.                              { A = setColumnOptionsPK(pCxt, B); }
2722
column_options(A) ::= column_options(B) COMPOSITE KEY.                            { A = setColumnOptionsPK(pCxt, B); }
2723
column_options(A) ::= column_options(B) NK_ID(C) NK_STRING(D).                    { A = setColumnOptions(pCxt, B, &C, &D); }
2,059,442✔
2724
column_options(A) ::= column_options(B) FROM column_ref(C).                       { A = setColumnReference(pCxt, B, C); }
74,882,720✔
2725

2726
column_ref(A) ::= column_name_triplet(B).                                            { A = createColumnRefNodeByName(pCxt, B); }
120,458,344✔
2727

2728
%type column_name_triplet                                                            { STokenTriplet* }
2729
%destructor column_name_triplet                                                      { }
2730
column_name_triplet(A) ::= NK_ID(B).                                                 { A = createTokenTriplet(pCxt, B); }
120,458,344✔
2731
column_name_triplet(A) ::= column_name_triplet(B) NK_DOT NK_ID(C).                   { A = setColumnName(pCxt, B, C); }
120,602,925✔
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