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

taosdata / TDengine / #4897

25 Dec 2025 10:17AM UTC coverage: 65.717% (-0.2%) from 65.929%
#4897

push

travis-ci

web-flow
fix: [6622889291] Fix invalid rowSize. (#34043)

186011 of 283047 relevant lines covered (65.72%)

113853896.64 hits per line

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

78.03
/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($$); }
17,668,720✔
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) {
9,972,648✔
40
    if(TOKEN.z) {
9,972,200✔
41
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, TOKEN.z);
9,705,305✔
42
    } else {
43
      pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INCOMPLETE_SQL);
266,928✔
44
    }
45
  } else if (TSDB_CODE_PAR_DB_NOT_SPECIFIED == pCxt->errCode && TK_NK_FLOAT == TOKEN.type) {
448✔
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); }
7,852✔
112

113
%type user_option                                                                 { SUserOptions* }
114
user_option(A) ::= TOTPSEED NK_STRING(B).                                         { A = mergeUserOptions(pCxt, NULL, NULL); setUserOptionsTotpseed(pCxt, A, &B); }
36✔
115
user_option(A) ::= TOTPSEED NULL.                                                 { A = mergeUserOptions(pCxt, NULL, NULL); setUserOptionsTotpseed(pCxt, A, NULL); }
×
116
user_option(A) ::= user_enabled(B).                                               { A = mergeUserOptions(pCxt, NULL, NULL); A->enable = B; A->hasEnable = true; }
7,852✔
117
user_option(A) ::= SYSINFO NK_INTEGER(B).                                         { A = mergeUserOptions(pCxt, NULL, NULL); A->sysinfo = taosStr2Int8(B.z, NULL, 10); A->hasSysinfo = true; }
27,109✔
118
user_option(A) ::= IS_IMPORT NK_INTEGER(B).                                       { A = mergeUserOptions(pCxt, NULL, NULL); A->isImport = taosStr2Int8(B.z, NULL, 10); A->hasIsImport = true; }
2,196✔
119
user_option(A) ::= CREATEDB NK_INTEGER(B).                                        { A = mergeUserOptions(pCxt, NULL, NULL); A->createdb = taosStr2Int8(B.z, NULL, 10); A->hasCreatedb = true; }
18,348✔
120
user_option(A) ::= CHANGEPASS NK_INTEGER(B).                                      { A = mergeUserOptions(pCxt, NULL, NULL); A->changepass = taosStr2Int8(B.z, NULL, 10); A->hasChangepass = true; }
36✔
121
user_option(A) ::= SESSION_PER_USER option_value(B).                              {
122
    A = mergeUserOptions(pCxt, NULL, NULL);
×
123
    if (B.type == TK_DEFAULT) {
×
124
      A->sessionPerUser = TSDB_USER_SESSION_PER_USER_DEFAULT;
×
125
    } else if (B.type == TK_UNLIMITED) {
×
126
      A->sessionPerUser = -1;
×
127
    } else {
128
      A->sessionPerUser = taosStr2Int32(B.z, NULL, 10);
×
129
    }
130
    A->hasSessionPerUser = true;
×
131
  }
132
user_option(A) ::= CONNECT_TIME option_value(B).                                 {
133
    A = mergeUserOptions(pCxt, NULL, NULL);
×
134
    if (B.type == TK_DEFAULT) {
×
135
      A->connectTime = TSDB_USER_CONNECT_TIME_DEFAULT;
×
136
    } else if (B.type == TK_UNLIMITED) {
×
137
      A->connectTime = -1;
×
138
    } else {
139
      A->connectTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
140
    }
141
    A->hasConnectTime = true;
×
142
  }
143
user_option(A) ::= CONNECT_IDLE_TIME option_value(B).                            {
144
    A = mergeUserOptions(pCxt, NULL, NULL);
×
145
    if (B.type == TK_DEFAULT) {
×
146
      A->connectIdleTime = TSDB_USER_CONNECT_IDLE_TIME_DEFAULT;
×
147
    } else if (B.type == TK_UNLIMITED) {
×
148
      A->connectIdleTime = -1;
×
149
    } else {
150
      A->connectIdleTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
151
    }
152
    A->hasConnectIdleTime = true;
×
153
  }
154
user_option(A) ::= CALL_PER_SESSION option_value(B).                             {
155
    A = mergeUserOptions(pCxt, NULL, NULL);
×
156
    if (B.type == TK_DEFAULT) {
×
157
      A->callPerSession = TSDB_USER_CALL_PER_SESSION_DEFAULT;
×
158
    } else if (B.type == TK_UNLIMITED) {
×
159
      A->callPerSession = -1;
×
160
    } else {
161
      A->callPerSession = taosStr2Int32(B.z, NULL, 10);
×
162
    }
163
    A->hasCallPerSession = true;
×
164
  }
165
/****** VNODE_PER_CALL is not supported for now
166
user_option(A) ::= VNODE_PER_CALL option_value(B).                               {
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 {
173
      A->vnodePerCall = taosStr2Int32(B.z, NULL, 10);
174
    }
175
    A->hasVnodePerCall = true;
176
  }
177
**********/
178
user_option(A) ::= FAILED_LOGIN_ATTEMPTS option_value(B).                        {
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 {
185
      A->failedLoginAttempts = taosStr2Int32(B.z, NULL, 10);
×
186
    }
187
    A->hasFailedLoginAttempts = true;
×
188
  }
189
user_option(A) ::= PASSWORD_LIFE_TIME option_value(B).                           {
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 {
196
      A->passwordLifeTime = taosStr2Int32(B.z, NULL, 10) * 1440 * 60; // default unit is day
×
197
    }
198
    A->hasPasswordLifeTime = true;
×
199
  }
200
user_option(A) ::= PASSWORD_REUSE_TIME option_value(B).                          {
201
    A = mergeUserOptions(pCxt, NULL, NULL);
5,111✔
202
    if (B.type == TK_DEFAULT) {
5,111✔
203
      A->passwordReuseTime = TSDB_USER_PASSWORD_REUSE_TIME_DEFAULT;
×
204
    } else if (B.type == TK_UNLIMITED) {
5,111✔
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
5,111✔
208
    }
209
    A->hasPasswordReuseTime = true;
5,111✔
210
  }
211
user_option(A) ::= PASSWORD_REUSE_MAX option_value(B).                           {
212
    A = mergeUserOptions(pCxt, NULL, NULL);
5,111✔
213
    if (B.type == TK_DEFAULT) {
5,111✔
214
      A->passwordReuseMax = TSDB_USER_PASSWORD_REUSE_MAX_DEFAULT;
×
215
    } else if (B.type == TK_UNLIMITED) {
5,111✔
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);
5,111✔
219
    }
220
    A->hasPasswordReuseMax = true;
5,111✔
221
  }
222
user_option(A) ::= PASSWORD_LOCK_TIME option_value(B).                           {
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 {
229
      A->passwordLockTime = taosStr2Int32(B.z, NULL, 10) * 60; // default unit is minute
×
230
    }
231
    A->hasPasswordLockTime = true;
×
232
  }
233
user_option(A) ::= PASSWORD_GRACE_TIME option_value(B).                          {
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 {
240
      A->passwordGraceTime = taosStr2Int32(B.z, NULL, 10) * 1440 * 60; // default unit is day
×
241
    }
242
    A->hasPasswordGraceTime = true;
×
243
  }
244
user_option(A) ::= INACTIVE_ACCOUNT_TIME option_value(B).                        {
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 {
251
      A->inactiveAccountTime = taosStr2Int32(B.z, NULL, 10) * 1440 * 60; // default unit is day
×
252
    }
253
    A->hasInactiveAccountTime = true;
×
254
  }
255
user_option(A) ::= ALLOW_TOKEN_NUM option_value(B).                              {
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 {
262
      A->allowTokenNum = taosStr2Int32(B.z, NULL, 10);
×
263
    }
264
    A->hasAllowTokenNum = true;
×
265
  }
266

267

268
%type ip_range_list                                                              { SNodeList* }
269
%destructor ip_range_list                                                        { nodesDestroyList($$); }
19,569,649✔
270
ip_range_list(A) ::= NK_STRING(B).                                               { A = createNodeList(pCxt, (SNode*)parseIpRange(pCxt, &B)); }
4,014✔
271
ip_range_list(A) ::= ip_range_list(B) NK_COMMA NK_STRING(C).                     { A = addNodeToList(pCxt, B, (SNode*)parseIpRange(pCxt, &C)); }
728✔
272

273

274
%type datetime_range_list                                                        { SNodeList* }
275
%destructor datetime_range_list                                                  { nodesDestroyList($$); }
276
datetime_range_list(A) ::= NK_STRING(B).                                         { A = createNodeList(pCxt, (SNode*)parseDateTimeRange(pCxt, &B)); }
×
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; }
3,286✔
282
create_user_option(A) ::= NOT_ALLOW_HOST ip_range_list(B).                       {
283
    SNode* pNode = NULL;
×
284
    FOREACH(pNode, B) {
×
285
      ((SIpRangeNode*)pNode)->range.neg = true;
×
286
    }
287
    A = mergeUserOptions(pCxt, NULL, NULL);
×
288
    A->pIpRanges = B;
×
289
  }
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).             {
292
    SNode* pNode = NULL;
×
293
    FOREACH(pNode, B) {
×
294
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
295
    }
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; }
117,050✔
302
create_user_options(A) ::= create_user_option(B).                                { A = B; }
303
create_user_options(A) ::= create_user_options(B) user_option(C).                { A = mergeUserOptions(pCxt, B, C); }
12,519✔
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; }
129,280✔
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); }
41,642✔
313
alter_user_option(A) ::= ADD HOST ip_range_list(B).                              { A = mergeUserOptions(pCxt, NULL, NULL); A->pIpRanges = B; }
364✔
314
alter_user_option(A) ::= ADD NOT_ALLOW_HOST ip_range_list(B).                    {
315
    SNode* pNode = NULL;
×
316
    FOREACH(pNode, B) {
×
317
      ((SIpRangeNode*)pNode)->range.neg = true;
×
318
    }
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; }
364✔
323
alter_user_option(A) ::= DROP NOT_ALLOW_HOST ip_range_list(B).                   {
324
    SNode* pNode = NULL;
×
325
    FOREACH(pNode, B) {
×
326
      ((SIpRangeNode*)pNode)->range.neg = true;
×
327
    }
328
    A = mergeUserOptions(pCxt, NULL, NULL);
×
329
    A->pDropIpRanges = B;
×
330
  }
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).          {
333
    SNode* pNode = NULL;
×
334
    FOREACH(pNode, B) {
×
335
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
336
    }
337
    A = mergeUserOptions(pCxt, NULL, NULL);
×
338
    A->pTimeRanges = B;
×
339
  }
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).         {
342
    SNode* pNode = NULL;
×
343
    FOREACH(pNode, B) {
×
344
      ((SDateTimeRangeNode*)pNode)->range.neg = true;
×
345
    }
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);
147,028✔
359
    setUserOptionsPassword(pCxt, D, &C);
147,028✔
360
    pCxt->pRootNode = createCreateUserStmt(pCxt, &B, D, A);
147,028✔
361
  }
362
cmd ::= ALTER USER user_name(A) alter_user_options(B).                           { pCxt->pRootNode = createAlterUserStmt(pCxt, &A, B); }
80,822✔
363
cmd ::= DROP USER user_name(A).                                                  { pCxt->pRootNode = createDropUserStmt(pCxt, &A); }
65,456✔
364
cmd ::= ALTER DNODES RELOAD general_name(A).                                                 { pCxt->pRootNode = createAlterAllDnodeTLSStmt(pCxt, &A);}
×
365

366

367
/************************************************ create/alter/drop token **********************************************/
368

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

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

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

383

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

394

395

396
/************************************************ grant/revoke ********************************************************/
397
cmd ::= GRANT privileges(A) ON priv_level(B) with_clause_opt(D) TO user_name(C).    { pCxt->pRootNode = createGrantStmt(pCxt, A, &B, &C, D); }
488,876✔
398
cmd ::= REVOKE privileges(A) ON priv_level(B) with_clause_opt(D) FROM user_name(C). { pCxt->pRootNode = createRevokeStmt(pCxt, A, &B, &C, D); }
442,781✔
399

400
%type privileges                                                                  { int64_t }
401
%destructor privileges                                                            { }
402
privileges(A) ::= ALL.                                                            { A = PRIVILEGE_TYPE_ALL; }
303,539✔
403
privileges(A) ::= priv_type_list(B).                                              { A = B; }
1,245,055✔
404
privileges(A) ::= SUBSCRIBE.                                                      { A = PRIVILEGE_TYPE_SUBSCRIBE; }
10,825✔
405

406
%type priv_type_list                                                              { int64_t }
407
%destructor priv_type_list                                                        { }
408
priv_type_list(A) ::= priv_type(B).                                               { A = B; }
409
priv_type_list(A) ::= priv_type_list(B) NK_COMMA priv_type(C).                    { A = B | C; }
63,944✔
410

411
%type priv_type                                                                   { int64_t }
412
%destructor priv_type                                                             { }
413
priv_type(A) ::= READ.                                                            { A = PRIVILEGE_TYPE_READ; }
315,555✔
414
priv_type(A) ::= WRITE.                                                           { A = PRIVILEGE_TYPE_WRITE; }
304,275✔
415
priv_type(A) ::= ALTER.                                                           { A = PRIVILEGE_TYPE_ALTER; }
5,103✔
416

417
%type priv_level                                                                  { STokenPair }
418
%destructor priv_level                                                            { }
419
priv_level(A) ::= NK_STAR(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; }
21,043✔
420
priv_level(A) ::= db_name(B) NK_DOT NK_STAR(C).                                   { A.first = B; A.second = C; }
42,646✔
421
priv_level(A) ::= db_name(B) NK_DOT table_name(C).                                { A.first = B; A.second = C; }
536,571✔
422
priv_level(A) ::= topic_name(B).                                                  { A.first = B; A.second = nil_token; }
333,205✔
423

424
with_clause_opt(A) ::= .                                                          { A = NULL; }
2,147,483,647✔
425
with_clause_opt(A) ::= WITH search_condition(B).                                  { A = B; }
564,351,827✔
426

427
/************************************************ create encrypt_key *********************************************/
428
cmd ::= CREATE ENCRYPT_KEY NK_STRING(A).                                          { pCxt->pRootNode = createEncryptKeyStmt(pCxt, &A); }
3,069✔
429

430
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); }
×
431

432
cmd ::= DROP ENCRYPT_ALGR NK_STRING(A).                                           { pCxt->pRootNode = createDropEncryptAlgrStmt(pCxt, &A); }
×
433
/************************************************ create drop update anode ***************************************/
434
cmd ::= CREATE ANODE NK_STRING(A).                                                { pCxt->pRootNode = createCreateAnodeStmt(pCxt, &A); }
×
435
cmd ::= UPDATE ANODE NK_INTEGER(A).                                               { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, &A, false); }
×
436
cmd ::= UPDATE ALL ANODES.                                                        { pCxt->pRootNode = createUpdateAnodeStmt(pCxt, NULL, true); }
×
437
cmd ::= DROP ANODE NK_INTEGER(A).                                                 { pCxt->pRootNode = createDropAnodeStmt(pCxt, &A); }
×
438

439
/************************************************ create/drop/alter/restore dnode *********************************************/
440
cmd ::= CREATE DNODE dnode_endpoint(A).                                           { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); }
2,730✔
441
cmd ::= CREATE DNODE dnode_endpoint(A) PORT NK_INTEGER(B).                        { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); }
212,305✔
442
cmd ::= DROP DNODE NK_INTEGER(A) force_opt(B).                                    { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
15,968✔
443
cmd ::= DROP DNODE dnode_endpoint(A) force_opt(B).                                { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B, false); }
×
444
cmd ::= DROP DNODE NK_INTEGER(A) unsafe_opt(B).                                   { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
445
cmd ::= DROP DNODE dnode_endpoint(A) unsafe_opt(B).                               { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, false, B); }
×
446
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B).                                   { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); }
31,978✔
447
cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B) NK_STRING(C).                      { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, &C); }
57,069✔
448
cmd ::= ALTER ALL DNODES NK_STRING(A).                                            { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, NULL); }
68,535✔
449
cmd ::= ALTER ALL DNODES NK_STRING(A) NK_STRING(B).                               { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, &B); }
5,262✔
450
cmd ::= RESTORE DNODE NK_INTEGER(A).                                              { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_DNODE_STMT, &A); }
1,594✔
451

452
%type dnode_endpoint                                                              { SToken }
453
%destructor dnode_endpoint                                                        { }
454
dnode_endpoint(A) ::= NK_STRING(B).                                               { A = B; }
455
dnode_endpoint(A) ::= NK_ID(B).                                                   { A = B; }
456
dnode_endpoint(A) ::= NK_IPTOKEN(B).                                              { A = B; }
457

458
%type force_opt                                                                   { bool }
459
%destructor force_opt                                                             { }
460
force_opt(A) ::= .                                                                { A = false; }
988,651,638✔
461
force_opt(A) ::= FORCE.                                                           { A = true; }
19,436,812✔
462

463
%type unsafe_opt                                                                  { bool }
464
%destructor unsafe_opt                                                            { }
465
unsafe_opt(A) ::= UNSAFE.                                                         { A = true; }
466

467
/************************************************ alter cluster *********************************************************/
468
cmd ::= ALTER CLUSTER NK_STRING(A).                                               { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, NULL); }
×
469
cmd ::= ALTER CLUSTER NK_STRING(A) NK_STRING(B).                                  { pCxt->pRootNode = createAlterClusterStmt(pCxt, &A, &B); }
756✔
470

471
/************************************************ alter local *********************************************************/
472
cmd ::= ALTER LOCAL NK_STRING(A).                                                 { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); }
14,951✔
473
cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B).                                    { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); }
238,525✔
474

475
/************************************************ create/drop/restore qnode ***************************************************/
476
cmd ::= CREATE QNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_QNODE_STMT, &A); }
11,152✔
477
cmd ::= DROP QNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_QNODE_STMT, &A); }
1,784✔
478
cmd ::= RESTORE QNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_QNODE_STMT, &A); }
1,585✔
479

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

484
/************************************************ create/drop snode ***************************************************/
485
cmd ::= CREATE SNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_SNODE_STMT, &A); }
139,101✔
486
cmd ::= DROP SNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_SNODE_STMT, &A); }
85,544✔
487

488
/************************************************ create/drop bnode ***************************************/
489
cmd ::= CREATE BNODE ON DNODE NK_INTEGER(A) bnode_options(B).                     { pCxt->pRootNode = createCreateBnodeStmt(pCxt, &A, B); }
41,219✔
490
cmd ::= DROP BNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropBnodeStmt(pCxt, &A); }
48,832✔
491

492
bnode_options(A) ::= .                                                            { A = createDefaultBnodeOptions(pCxt); }
41,219✔
493
bnode_options(A) ::= bnode_options(B) NK_ID(C) NK_STRING(D).                      { A = setBnodeOption(pCxt, B, &C, &D); }
×
494

495
/************************************************ create/drop/restore mnode ***************************************************/
496
cmd ::= CREATE MNODE ON DNODE NK_INTEGER(A).                                      { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_MNODE_STMT, &A); }
52,574✔
497
cmd ::= DROP MNODE ON DNODE NK_INTEGER(A).                                        { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &A); }
6,384✔
498
cmd ::= RESTORE MNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_MNODE_STMT, &A); }
1,590✔
499

500
/************************************************ restore vnode ***************************************************/
501
cmd ::= RESTORE VNODE ON DNODE NK_INTEGER(A).                                     { pCxt->pRootNode = createRestoreComponentNodeStmt(pCxt, QUERY_NODE_RESTORE_VNODE_STMT, &A); }
319✔
502

503
/************************************************ create/drop/use database ********************************************/
504
cmd ::= CREATE DATABASE not_exists_opt(A) db_name(B) db_options(C).               { pCxt->pRootNode = createCreateDatabaseStmt(pCxt, A, &B, C); }
1,473,421✔
505
cmd ::= DROP DATABASE exists_opt(A) db_name(B) force_opt(C).                      { pCxt->pRootNode = createDropDatabaseStmt(pCxt, A, &B, C); }
1,261,460✔
506
cmd ::= USE db_name(A).                                                           { pCxt->pRootNode = createUseDatabaseStmt(pCxt, &A); }
2,595,762✔
507
cmd ::= ALTER DATABASE db_name(A) alter_db_options(B).                            { pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &A, B); }
206,227✔
508
cmd ::= FLUSH DATABASE db_name(A).                                                { pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &A); }
2,058,256✔
509
cmd ::= TRIM DATABASE db_name(A) speed_opt(B).                                    { pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &A, B); }
8,929✔
510
cmd ::= TRIM DATABASE db_name(A) WAL.                                             { pCxt->pRootNode = createTrimDbWalStmt(pCxt, &A); }
629✔
511
cmd ::= SSMIGRATE DATABASE db_name(A).                                            { pCxt->pRootNode = createSsMigrateDatabaseStmt(pCxt, &A); }
×
512
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); }
33,483✔
513
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); }
9,450✔
514
cmd ::= SCAN DATABASE db_name(A) start_opt(B) end_opt(C).                                          { pCxt->pRootNode = createScanStmt(pCxt, &A, B, C); }
260✔
515
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); }
774✔
516

517
%type meta_only                                                                  { bool }
518
%destructor meta_only                                                            { }
519
meta_only(A) ::= .                                                                { A = false; }
520
meta_only(A) ::= META_ONLY.                                                      { A = true; }
521

522
%type not_exists_opt                                                              { bool }
523
%destructor not_exists_opt                                                        { }
524
not_exists_opt(A) ::= IF NOT EXISTS.                                              { A = true; }
18,990,571✔
525
not_exists_opt(A) ::= .                                                           { A = false; }
526

527
%type exists_opt                                                                  { bool }
528
%destructor exists_opt                                                            { }
529
exists_opt(A) ::= IF EXISTS.                                                      { A = true; }
1,658,039✔
530
exists_opt(A) ::= .                                                               { A = false; }
531

532
db_options(A) ::= .                                                               { A = createDefaultDatabaseOptions(pCxt); }
1,509,555✔
533
db_options(A) ::= db_options(B) BUFFER NK_INTEGER(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_BUFFER, &C); }
68,941✔
534
db_options(A) ::= db_options(B) CACHEMODEL NK_STRING(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHEMODEL, &C); }
53,662✔
535
db_options(A) ::= db_options(B) CACHESIZE NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_CACHESIZE, &C); }
9,401✔
536
db_options(A) ::= db_options(B) COMP NK_INTEGER(C).                               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMP, &C); }
32,127✔
537
db_options(A) ::= db_options(B) DURATION NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
338,034✔
538
db_options(A) ::= db_options(B) DURATION NK_VARIABLE(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_DAYS, &C); }
539
db_options(A) ::= db_options(B) MAXROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MAXROWS, &C); }
43,570✔
540
db_options(A) ::= db_options(B) MINROWS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_MINROWS, &C); }
37,819✔
541
db_options(A) ::= db_options(B) KEEP integer_list(C).                             { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
172,817✔
542
db_options(A) ::= db_options(B) KEEP variable_list(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP, C); }
543
db_options(A) ::= db_options(B) PAGES NK_INTEGER(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGES, &C); }
5,717✔
544
db_options(A) ::= db_options(B) PAGESIZE NK_INTEGER(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PAGESIZE, &C); }
6,152✔
545
db_options(A) ::= db_options(B) TSDB_PAGESIZE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_TSDB_PAGESIZE, &C); }
4,682✔
546
db_options(A) ::= db_options(B) PRECISION NK_STRING(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_PRECISION, &C); }
170,646✔
547
db_options(A) ::= db_options(B) REPLICAS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
560,516✔
548
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
549
//db_options(A) ::= db_options(B) STRICT NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_STRICT, &C); }
550
db_options(A) ::= db_options(B) VGROUPS NK_INTEGER(C).                            { A = setDatabaseOption(pCxt, B, DB_OPTION_VGROUPS, &C); }
542,725✔
551
db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SINGLE_STABLE, &C); }
7,465✔
552
db_options(A) ::= db_options(B) RETENTIONS retention_list(C).                     { A = setDatabaseOption(pCxt, B, DB_OPTION_RETENTIONS, C); }
×
553
db_options(A) ::= db_options(B) SCHEMALESS NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SCHEMALESS, &C); }
7,755✔
554
db_options(A) ::= db_options(B) WAL_LEVEL NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL, &C); }
31,116✔
555
db_options(A) ::= db_options(B) WAL_FSYNC_PERIOD NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_FSYNC, &C); }
20,489✔
556
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_INTEGER(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &C); }
37,639✔
557
db_options(A) ::= db_options(B) WAL_RETENTION_PERIOD NK_MINUS(D) NK_INTEGER(C).   {
558
                                                                                    SToken t = D;
1,365✔
559
                                                                                    t.n = (C.z + C.n) - D.z;
1,365✔
560
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_PERIOD, &t);
1,365✔
561
                                                                                  }
562
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_INTEGER(C).                 { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &C); }
11,145✔
563
db_options(A) ::= db_options(B) WAL_RETENTION_SIZE NK_MINUS(D) NK_INTEGER(C).     {
564
                                                                                    SToken t = D;
1,365✔
565
                                                                                    t.n = (C.z + C.n) - D.z;
1,365✔
566
                                                                                    A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_RETENTION_SIZE, &t);
1,365✔
567
                                                                                  }
568
db_options(A) ::= db_options(B) WAL_ROLL_PERIOD NK_INTEGER(C).                    { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_ROLL_PERIOD, &C); }
×
569
db_options(A) ::= db_options(B) WAL_SEGMENT_SIZE NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_WAL_SEGMENT_SIZE, &C); }
×
570
db_options(A) ::= db_options(B) STT_TRIGGER NK_INTEGER(C).                        { A = setDatabaseOption(pCxt, B, DB_OPTION_STT_TRIGGER, &C); }
36,092✔
571
db_options(A) ::= db_options(B) TABLE_PREFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_PREFIX, C); }
17,565✔
572
db_options(A) ::= db_options(B) TABLE_SUFFIX signed(C).                           { A = setDatabaseOption(pCxt, B, DB_OPTION_TABLE_SUFFIX, C); }
17,122✔
573
db_options(A) ::= db_options(B) SS_CHUNKPAGES NK_INTEGER(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_CHUNKPAGES, &C); }
4,182✔
574
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_INTEGER(C).                       { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
5,508✔
575
db_options(A) ::= db_options(B) SS_KEEPLOCAL NK_VARIABLE(C).                      { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_KEEPLOCAL, &C); }
576
db_options(A) ::= db_options(B) SS_COMPACT NK_INTEGER(C).                         { A = setDatabaseOption(pCxt, B, DB_OPTION_SS_COMPACT, &C); }
4,182✔
577
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_INTEGER(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
8,111✔
578
db_options(A) ::= db_options(B) KEEP_TIME_OFFSET NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_KEEP_TIME_OFFSET, &C); }
579
db_options(A) ::= db_options(B) ENCRYPT_ALGORITHM NK_STRING(C).                   { A = setDatabaseOption(pCxt, B, DB_OPTION_ENCRYPT_ALGORITHM, &C); }
6,073✔
580
db_options(A) ::= db_options(B) DNODES NK_STRING(C).                              { A = setDatabaseOption(pCxt, B, DB_OPTION_DNODES, &C); }
28,954✔
581
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_INTEGER (C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
22,363✔
582
db_options(A) ::= db_options(B) COMPACT_INTERVAL NK_VARIABLE(C).                  { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_INTERVAL, &C); }
583
db_options(A) ::= db_options(B) COMPACT_TIME_RANGE signed_duration_list(C).       { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_RANGE, C); }
31,548✔
584
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_INTEGER(C).                { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
20,103✔
585
db_options(A) ::= db_options(B) COMPACT_TIME_OFFSET NK_VARIABLE(C).               { A = setDatabaseOption(pCxt, B, DB_OPTION_COMPACT_TIME_OFFSET, &C); }
586
db_options(A) ::= db_options(B) IS_AUDIT NK_INTEGER(C).                          { A = setDatabaseOption(pCxt, B, DB_OPTION_IS_AUDIT, &C); }
3,678✔
587

588
alter_db_options(A) ::= alter_db_option(B).                                       { A = createAlterDatabaseOptions(pCxt); A = setAlterDatabaseOption(pCxt, A, &B); }
210,851✔
589
alter_db_options(A) ::= alter_db_options(B) alter_db_option(C).                   { A = setAlterDatabaseOption(pCxt, B, &C); }
24,661✔
590

591
%type alter_db_option                                                             { SAlterOption }
592
%destructor alter_db_option                                                       { }
593
alter_db_option(A) ::= BUFFER NK_INTEGER(B).                                      { A.type = DB_OPTION_BUFFER; A.val = B; }
9,579✔
594
alter_db_option(A) ::= CACHEMODEL NK_STRING(B).                                   { A.type = DB_OPTION_CACHEMODEL; A.val = B; }
14,807✔
595
alter_db_option(A) ::= CACHESIZE NK_INTEGER(B).                                   { A.type = DB_OPTION_CACHESIZE; A.val = B; }
4,041✔
596
alter_db_option(A) ::= WAL_FSYNC_PERIOD NK_INTEGER(B).                            { A.type = DB_OPTION_FSYNC; A.val = B; }
13,382✔
597
alter_db_option(A) ::= KEEP integer_list(B).                                      { A.type = DB_OPTION_KEEP; A.pList = B; }
40,541✔
598
alter_db_option(A) ::= KEEP variable_list(B).                                     { A.type = DB_OPTION_KEEP; A.pList = B; }
599
alter_db_option(A) ::= PAGES NK_INTEGER(B).                                       { A.type = DB_OPTION_PAGES; A.val = B; }
5,630✔
600
alter_db_option(A) ::= REPLICA NK_INTEGER(B).                                     { A.type = DB_OPTION_REPLICA; A.val = B; }
14,755✔
601
alter_db_option(A) ::= REPLICAS NK_INTEGER(B).                                    { A.type = DB_OPTION_REPLICA; A.val = B; }
602
//alter_db_option(A) ::= STRICT NK_STRING(B).                                       { A.type = DB_OPTION_STRICT; A.val = B; }
603
alter_db_option(A) ::= WAL_LEVEL NK_INTEGER(B).                                   { A.type = DB_OPTION_WAL; A.val = B; }
20,219✔
604
alter_db_option(A) ::= STT_TRIGGER NK_INTEGER(B).                                 { A.type = DB_OPTION_STT_TRIGGER; A.val = B; }
3,006✔
605
alter_db_option(A) ::= MINROWS NK_INTEGER(B).                                     { A.type = DB_OPTION_MINROWS; A.val = B; }
6,307✔
606
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_INTEGER(B).                        { A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = B; }
6,163✔
607
alter_db_option(A) ::= WAL_RETENTION_PERIOD NK_MINUS(B) NK_INTEGER(C).            {
608
                                                                                    SToken t = B;
×
609
                                                                                    t.n = (C.z + C.n) - B.z;
×
610
                                                                                    A.type = DB_OPTION_WAL_RETENTION_PERIOD; A.val = t;
×
611
                                                                                  }
612
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_INTEGER(B).                          { A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = B; }
1,597✔
613
alter_db_option(A) ::= WAL_RETENTION_SIZE NK_MINUS(B) NK_INTEGER(C).              {
614
                                                                                    SToken t = B;
×
615
                                                                                    t.n = (C.z + C.n) - B.z;
×
616
                                                                                    A.type = DB_OPTION_WAL_RETENTION_SIZE; A.val = t;
×
617
                                                                                  }
618
alter_db_option(A) ::= SS_KEEPLOCAL NK_INTEGER(B).                                { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
785✔
619
alter_db_option(A) ::= SS_KEEPLOCAL NK_VARIABLE(B).                               { A.type = DB_OPTION_SS_KEEPLOCAL; A.val = B; }
620
alter_db_option(A) ::= SS_COMPACT NK_INTEGER(B).                                  { A.type = DB_OPTION_SS_COMPACT, A.val = B; }
2,355✔
621
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_INTEGER(B).                            { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
4,792✔
622
alter_db_option(A) ::= KEEP_TIME_OFFSET NK_VARIABLE(B).                           { A.type = DB_OPTION_KEEP_TIME_OFFSET; A.val = B; }
623
alter_db_option(A) ::= ENCRYPT_ALGORITHM NK_STRING(B).                            { A.type = DB_OPTION_ENCRYPT_ALGORITHM; A.val = B; }
4,033✔
624
alter_db_option(A) ::= COMPACT_INTERVAL NK_INTEGER(B).                            { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
22,612✔
625
alter_db_option(A) ::= COMPACT_INTERVAL NK_VARIABLE(B).                           { A.type = DB_OPTION_COMPACT_INTERVAL; A.val = B; }
626
alter_db_option(A) ::= COMPACT_TIME_RANGE signed_duration_list(B).                { A.type = DB_OPTION_COMPACT_TIME_RANGE; A.pList = B; }
38,269✔
627
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_INTEGER(B).                         { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
22,639✔
628
alter_db_option(A) ::= COMPACT_TIME_OFFSET NK_VARIABLE(B).                        { A.type = DB_OPTION_COMPACT_TIME_OFFSET; A.val = B; }
629

630
%type integer_list                                                                { SNodeList* }
631
%destructor integer_list                                                          { nodesDestroyList($$); }
632
integer_list(A) ::= NK_INTEGER(B).                                                { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
172,545✔
633
integer_list(A) ::= integer_list(B) NK_COMMA NK_INTEGER(C).                       { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
134,576✔
634

635
%type variable_list                                                               { SNodeList* }
636
%destructor variable_list                                                         { nodesDestroyList($$); }
637
variable_list(A) ::= NK_VARIABLE(B).                                              { A = createNodeList(pCxt, createDurationValueNode(pCxt, &B)); }
57,613✔
638
variable_list(A) ::= variable_list(B) NK_COMMA NK_VARIABLE(C).                    { A = addNodeToList(pCxt, B, createDurationValueNode(pCxt, &C)); }
73,573✔
639

640
%type signed_duration_list                                                        { SNodeList* }
641
%destructor signed_duration_list                                                  { nodesDestroyList($$); }
642
signed_duration_list(A) ::= signed_variable(B).                                   { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
212,556,201✔
643
signed_duration_list(A) ::= signed_integer(B).                                    { A = createNodeList(pCxt, B); }
766,771,403✔
644
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_integer(C).   { A = addNodeToList(pCxt, B, C); }
780,273,413✔
645
signed_duration_list(A) ::= signed_duration_list(B) NK_COMMA signed_variable(C).  { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
106,998,207✔
646

647
%type retention_list                                                              { SNodeList* }
648
%destructor retention_list                                                        { nodesDestroyList($$); }
649
retention_list(A) ::= retention(B).                                               { A = createNodeList(pCxt, B); }
650
retention_list(A) ::= retention_list(B) NK_COMMA retention(C).                    { A = addNodeToList(pCxt, B, C); }
651

652
retention(A) ::= NK_VARIABLE(B) NK_COLON NK_VARIABLE(C).                          { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
×
653
retention(A) ::= NK_MINUS(B) NK_COLON NK_VARIABLE(C).                             { A = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &B), createDurationValueNode(pCxt, &C)); }
654

655
%type speed_opt                                                                   { int32_t }
656
%destructor speed_opt                                                             { }
657
speed_opt(A) ::= .                                                                { A = 0; }
18,479✔
658
speed_opt(A) ::= BWLIMIT NK_INTEGER(B).                                           { A = taosStr2Int32(B.z, NULL, 10); }
7,283✔
659

660
start_opt(A) ::= .                                                                { A = NULL; }
661
start_opt(A) ::= START WITH NK_INTEGER(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
×
662
start_opt(A) ::= START WITH NK_STRING(B).                                         { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2,436✔
663
start_opt(A) ::= START WITH TIMESTAMP NK_STRING(B).                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
×
664

665
end_opt(A) ::= .                                                                  { A = NULL; }
666
end_opt(A) ::= END WITH NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
667
end_opt(A) ::= END WITH NK_STRING(B).                                             { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
668
end_opt(A) ::= END WITH TIMESTAMP NK_STRING(B).                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
669

670
/************************************************ create/drop table/stable ********************************************/
671
cmd ::= CREATE TABLE not_exists_opt(A) full_table_name(B)
672
  NK_LP column_def_list(C) NK_RP tags_def_opt(D) table_options(E).                { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
21,602,698✔
673
cmd ::= CREATE TABLE multi_create_clause(A).                                      { pCxt->pRootNode = createCreateMultiTableStmt(pCxt, A); }
34,642,656✔
674
cmd ::= CREATE TABLE not_exists_opt(B) USING full_table_name(C)
675
  NK_LP tag_list_opt(D) NK_RP FILE NK_STRING(E).                                  { pCxt->pRootNode = createCreateSubTableFromFileClause(pCxt, B, C, D, &E); }
1,470✔
676
cmd ::= CREATE STABLE not_exists_opt(A) full_table_name(B)
677
  NK_LP column_def_list(C) NK_RP tags_def(D) table_options(E).                    { pCxt->pRootNode = createCreateTableStmt(pCxt, A, B, C, D, E); }
678
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
679
  NK_LP column_def_list(C) NK_RP.                                                 { pCxt->pRootNode = createCreateVTableStmt(pCxt, A, B, C); }
145,974✔
680
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
681
  NK_LP specific_column_ref_list(C) NK_RP USING full_table_name(D)
682
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, C, NULL, D, E, F); }
98,187✔
683
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B)
684
  NK_LP column_ref_list(C) NK_RP USING full_table_name(D)
685
  specific_cols_opt(E) TAGS NK_LP tags_literal_list(F) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, C, D, E, F); }
162,541✔
686
cmd ::= CREATE VTABLE not_exists_opt(A) full_table_name(B) USING full_table_name(C)
687
  specific_cols_opt(D) TAGS NK_LP tags_literal_list(E) NK_RP.                     { pCxt->pRootNode = createCreateVSubTableStmt(pCxt, A, B, NULL, NULL, C, D, E); }
4,025✔
688
cmd ::= DROP TABLE with_opt(A) multi_drop_clause(B).                              { pCxt->pRootNode = createDropTableStmt(pCxt, A, B); }
1,718,751✔
689
cmd ::= DROP STABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropSuperTableStmt(pCxt, A, B, C); }
187,934✔
690
cmd ::= DROP VTABLE with_opt(A) exists_opt(B) full_table_name(C).                 { pCxt->pRootNode = createDropVirtualTableStmt(pCxt, A, B, C); }
78,966✔
691

692
cmd ::= ALTER TABLE alter_table_clause(A).                                        { pCxt->pRootNode = A; }
185,423,023✔
693
cmd ::= ALTER STABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterSuperTableType(A); }
534,226✔
694
cmd ::= ALTER VTABLE alter_table_clause(A).                                       { pCxt->pRootNode = setAlterVirtualTableType(A); }
422,559✔
695

696

697
alter_table_clause(A) ::= full_table_name(B) alter_table_options(C).              { A = createAlterTableModifyOptions(pCxt, B, C); }
65,558✔
698
alter_table_clause(A) ::=
699
  full_table_name(B) ADD COLUMN column_name(C) type_name(D) column_options(E).    { A = createAlterTableAddModifyColOptions2(pCxt, B, TSDB_ALTER_TABLE_ADD_COLUMN, &C, D, E); }
6,992,696✔
700
alter_table_clause(A) ::= full_table_name(B) DROP COLUMN column_name(C).          { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_COLUMN, &C); }
1,730,425✔
701
alter_table_clause(A) ::=
702
  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,942,255✔
703
alter_table_clause(A) ::=
704
  full_table_name(B) MODIFY COLUMN column_name(C) column_options(D).              { A = createAlterTableAddModifyColOptions(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_COMPRESS, &C, D); }
124,596✔
705
alter_table_clause(A) ::=
706
  full_table_name(B) RENAME COLUMN column_name(C) column_name(D).                 { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &C, &D); }
75,546✔
707
alter_table_clause(A) ::=
708
  full_table_name(B) ADD TAG column_name(C) type_name(D).                         { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_ADD_TAG, &C, D); }
363,863✔
709
alter_table_clause(A) ::= full_table_name(B) DROP TAG column_name(C).             { A = createAlterTableDropCol(pCxt, B, TSDB_ALTER_TABLE_DROP_TAG, &C); }
162,188✔
710
alter_table_clause(A) ::=
711
  full_table_name(B) MODIFY TAG column_name(C) type_name(D).                      { A = createAlterTableAddModifyCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &C, D); }
586,969✔
712
alter_table_clause(A) ::=
713
  full_table_name(B) RENAME TAG column_name(C) column_name(D).                    { A = createAlterTableRenameCol(pCxt, B, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &C, &D); }
238,604✔
714
alter_table_clause(A) ::=
715
  full_table_name(B) ALTER COLUMN column_name(C) SET column_ref(D).
716
                                                                                  { A = createAlterTableAlterColRef(pCxt, B, TSDB_ALTER_TABLE_ALTER_COLUMN_REF, &C, D); }
125,430✔
717

718
alter_table_clause(A) ::=
719
  full_table_name(B) ALTER COLUMN column_name(C) SET NULL(D).                     { A = createAlterTableRemoveColRef(pCxt, B, TSDB_ALTER_TABLE_REMOVE_COLUMN_REF, &C, &D); }
72,348✔
720

721
%type column_tag_value_list                                                          { SNodeList* }
722
%destructor column_tag_value_list                                                    { nodesDestroyList($$); }
723
column_tag_value(A) ::= column_name(C) NK_EQ tags_literal(D).                        { A = createAlterSingleTagColumnNode(pCxt, &C, D); }
8,824,549✔
724
column_tag_value_list(A) ::= column_tag_value(B).                                    { A = createNodeList(pCxt, B); }
725
column_tag_value_list(A) ::= column_tag_value_list(B) NK_COMMA column_tag_value(C).  { A = addNodeToList(pCxt, B, C);}
37,077✔
726

727
alter_table_clause(A) ::=
728
  full_table_name(B) SET TAG column_tag_value_list(C).                            { A = createAlterTableSetMultiTagValue(pCxt, B, C); }
8,786,018✔
729

730
%type multi_create_clause                                                         { SNodeList* }
731
%destructor multi_create_clause                                                   { nodesDestroyList($$); }
732
multi_create_clause(A) ::= create_subtable_clause(B).                             { A = createNodeList(pCxt, B); }
733
multi_create_clause(A) ::= multi_create_clause(B) create_subtable_clause(C).      { A = addNodeToList(pCxt, B, C); }
4,869,121✔
734

735
create_subtable_clause(A) ::=
736
  not_exists_opt(B) full_table_name(C) USING full_table_name(D)
737
  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); }
39,121,800✔
738

739
%type multi_drop_clause                                                           { SNodeList* }
740
%destructor multi_drop_clause                                                     { nodesDestroyList($$); }
741
multi_drop_clause(A) ::= drop_table_clause(B).                                    { A = createNodeList(pCxt, B); }
742
multi_drop_clause(A) ::= multi_drop_clause(B) NK_COMMA drop_table_clause(C).      { A = addNodeToList(pCxt, B, C); }
743

744
drop_table_clause(A) ::= exists_opt(B) full_table_name(C).                        { A = createDropTableClause(pCxt, B, C); }
2,005,458✔
745

746
%type with_opt                                                                    { bool }
747
%destructor with_opt                                                              { }
748
with_opt(A) ::= .                                                                 { A = false; }
749
with_opt(A) ::= WITH.                                                             { A = true; }
750

751
%type specific_cols_opt                                                           { SNodeList* }
752
%destructor specific_cols_opt                                                     { nodesDestroyList($$); }
753
specific_cols_opt(A) ::= .                                                        { A = NULL; }
1,256,516,455✔
754
specific_cols_opt(A) ::= NK_LP col_name_list(B) NK_RP.                            { A = B; }
1,519,467✔
755

756
full_table_name(A) ::= table_name(B).                                             { A = createRealTableNode(pCxt, NULL, &B, NULL); }
51,155,445✔
757
full_table_name(A) ::= db_name(B) NK_DOT table_name(C).                           { A = createRealTableNode(pCxt, &B, &C, NULL); }
77,170,443✔
758

759
%type tag_def_list                                                                { SNodeList* }
760
%destructor tag_def_list                                                          { nodesDestroyList($$); }
761
tag_def_list(A) ::= tag_def(B).                                                   { A = createNodeList(pCxt, B); }
762
tag_def_list(A) ::= tag_def_list(B) NK_COMMA tag_def(C).                          { A = addNodeToList(pCxt, B, C); }
763
tag_def(A) ::= column_name(B) type_name(C).                                       { A = createColumnDefNode(pCxt, &B, C, NULL); }
4,965,023✔
764

765
%type column_def_list                                                             { SNodeList* }
766
%destructor column_def_list                                                       { nodesDestroyList($$); }
767
column_def_list(A) ::= column_def(B).                                             { A = createNodeList(pCxt, B); }
768
column_def_list(A) ::= column_def_list(B) NK_COMMA column_def(C).                 { A = addNodeToList(pCxt, B, C); }
769

770
// column_def(A) ::= column_name(B) type_name(C).                                 { A = createColumnDefNode(pCxt, &B, C, NULL); }
771
column_def(A) ::= column_name(B) type_name(C) column_options(D).                  { A = createColumnDefNode(pCxt, &B, C, D); }
411,075,344✔
772

773
%type specific_column_ref_list                                                               { SNodeList* }
774
%destructor specific_column_ref_list                                                         { nodesDestroyList($$); }
775
specific_column_ref_list(A) ::= specific_column_ref(B).                                      { A = createNodeList(pCxt, B); }
776
specific_column_ref_list(A) ::= specific_column_ref_list(B) NK_COMMA specific_column_ref(C). { A = addNodeToList(pCxt, B, C); }
777

778
specific_column_ref(A) ::= column_name(B) FROM column_ref(C).                    { A = createColumnRefNodeByNode(pCxt, &B, C); }
52,892,551✔
779

780
%type column_ref_list                                                             { SNodeList* }
781
%destructor column_ref_list                                                       { nodesDestroyList($$); }
782
column_ref_list(A) ::= column_ref(B).                                             { A = createNodeList(pCxt, B); }
783
column_ref_list(A) ::= column_ref_list(B) NK_COMMA column_ref(C).                 { A = addNodeToList(pCxt, B, C); }
784

785
%type type_name                                                                   { SDataType }
786
%destructor type_name                                                             { }
787
type_name(A) ::= BOOL.                                                            { A = createDataType(TSDB_DATA_TYPE_BOOL); }
5,627,400✔
788
type_name(A) ::= TINYINT.                                                         { A = createDataType(TSDB_DATA_TYPE_TINYINT); }
5,238,582✔
789
type_name(A) ::= SMALLINT.                                                        { A = createDataType(TSDB_DATA_TYPE_SMALLINT); }
6,031,831✔
790
type_name(A) ::= INT.                                                             { A = createDataType(TSDB_DATA_TYPE_INT); }
45,225,646✔
791
type_name(A) ::= INTEGER.                                                         { A = createDataType(TSDB_DATA_TYPE_INT); }
792
type_name(A) ::= BIGINT.                                                          { A = createDataType(TSDB_DATA_TYPE_BIGINT); }
11,574,285✔
793
type_name(A) ::= FLOAT.                                                           { A = createDataType(TSDB_DATA_TYPE_FLOAT); }
6,129,897✔
794
type_name(A) ::= DOUBLE.                                                          { A = createDataType(TSDB_DATA_TYPE_DOUBLE); }
303,592,749✔
795
type_name(A) ::= BINARY NK_LP NK_INTEGER(B) NK_RP.                                { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &B); }
99,435,171✔
796
type_name(A) ::= TIMESTAMP.                                                       { A = createDataType(TSDB_DATA_TYPE_TIMESTAMP); }
25,080,896✔
797
type_name(A) ::= NCHAR NK_LP NK_INTEGER(B) NK_RP.                                 { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &B); }
11,759,191✔
798
type_name(A) ::= TINYINT UNSIGNED.                                                { A = createDataType(TSDB_DATA_TYPE_UTINYINT); }
661,469✔
799
type_name(A) ::= SMALLINT UNSIGNED.                                               { A = createDataType(TSDB_DATA_TYPE_USMALLINT); }
641,062✔
800
type_name(A) ::= INT UNSIGNED.                                                    { A = createDataType(TSDB_DATA_TYPE_UINT); }
713,593✔
801
type_name(A) ::= BIGINT UNSIGNED.                                                 { A = createDataType(TSDB_DATA_TYPE_UBIGINT); }
929,389✔
802
type_name(A) ::= JSON.                                                            { A = createDataType(TSDB_DATA_TYPE_JSON); }
24,960✔
803
type_name(A) ::= VARCHAR NK_LP NK_INTEGER(B) NK_RP.                               { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &B); }
933,417✔
804
type_name(A) ::= MEDIUMBLOB.                                                      { A = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); }
2,920✔
805
type_name(A) ::= BLOB.                                                            { A = createDataType(TSDB_DATA_TYPE_BLOB); }
13,462✔
806
type_name(A) ::= VARBINARY NK_LP NK_INTEGER(B) NK_RP.                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &B); }
454,156✔
807
type_name(A) ::= GEOMETRY NK_LP NK_INTEGER(B) NK_RP.                              { A = createVarLenDataType(TSDB_DATA_TYPE_GEOMETRY, &B); }
440,321✔
808
// type_name(A) ::= DECIMAL.                                                      { A = createDataType(TSDB_DATA_TYPE_DECIMAL); }
809
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_RP.                               { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, NULL); }
126,304✔
810
type_name(A) ::= DECIMAL NK_LP NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_RP.        { A = createDecimalDataType(TSDB_DATA_TYPE_DECIMAL, &B, &C); }
170,262✔
811

812
%type type_name_default_len                                                       { SDataType }
813
%destructor type_name_default_len                                                 { }
814
type_name_default_len(A) ::= BINARY.                                              { A = createVarLenDataType(TSDB_DATA_TYPE_BINARY, NULL); }
12,628✔
815
type_name_default_len(A) ::= NCHAR.                                               { A = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, NULL); }
3,515✔
816
type_name_default_len(A) ::= VARCHAR.                                             { A = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, NULL); }
3,743,922✔
817
type_name_default_len(A) ::= VARBINARY.                                           { A = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, NULL); }
4,496✔
818

819
%type tags_def_opt                                                                { SNodeList* }
820
%destructor tags_def_opt                                                          { nodesDestroyList($$); }
821
tags_def_opt(A) ::= .                                                             { A = NULL; }
822
tags_def_opt(A) ::= tags_def(B).                                                  { A = B; }
19,549,676✔
823

824
%type tags_def                                                                    { SNodeList* }
825
%destructor tags_def                                                              { nodesDestroyList($$); }
826
tags_def(A) ::= TAGS NK_LP tag_def_list(B) NK_RP.                                 { A = B; }
1,858,036✔
827

828
table_options(A) ::= .                                                            { A = createDefaultTableOptions(pCxt); }
60,734,790✔
829
table_options(A) ::= table_options(B) COMMENT NK_STRING(C).                       { A = setTableOption(pCxt, B, TABLE_OPTION_COMMENT, &C); }
15,176✔
830
table_options(A) ::= table_options(B) MAX_DELAY duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_MAXDELAY, C); }
×
831
table_options(A) ::= table_options(B) WATERMARK duration_list(C).                 { A = setTableOption(pCxt, B, TABLE_OPTION_WATERMARK, C); }
×
832
table_options(A) ::= table_options(B) ROLLUP NK_LP rollup_func_list(C) NK_RP.     { A = setTableOption(pCxt, B, TABLE_OPTION_ROLLUP, C); }
×
833
table_options(A) ::= table_options(B) TTL NK_INTEGER(C).                          { A = setTableOption(pCxt, B, TABLE_OPTION_TTL, &C); }
113,291✔
834
table_options(A) ::= table_options(B) SMA NK_LP col_name_list(C) NK_RP.           { A = setTableOption(pCxt, B, TABLE_OPTION_SMA, C); }
59,245✔
835
table_options(A) ::= table_options(B) DELETE_MARK duration_list(C).               { A = setTableOption(pCxt, B, TABLE_OPTION_DELETE_MARK, C); }
×
836
table_options(A) ::= table_options(B) KEEP NK_INTEGER(C).                         { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
52,313✔
837
table_options(A) ::= table_options(B) KEEP NK_VARIABLE(C).                        { A = setTableOption(pCxt, B, TABLE_OPTION_KEEP, &C); }
838
table_options(A) ::= table_options(B) VIRTUAL NK_INTEGER(C).                      { A = setTableOption(pCxt, B, TABLE_OPTION_VIRTUAL, &C); }
41,990✔
839

840
alter_table_options(A) ::= alter_table_option(B).                                 { A = createAlterTableOptions(pCxt); A = setTableOption(pCxt, A, B.type, &B.val); }
65,558✔
841
alter_table_options(A) ::= alter_table_options(B) alter_table_option(C).          { A = setTableOption(pCxt, B, C.type, &C.val); }
×
842

843
%type alter_table_option                                                          { SAlterOption }
844
%destructor alter_table_option                                                    { }
845
alter_table_option(A) ::= COMMENT NK_STRING(B).                                   { A.type = TABLE_OPTION_COMMENT; A.val = B; }
28,212✔
846
alter_table_option(A) ::= TTL NK_INTEGER(B).                                      { A.type = TABLE_OPTION_TTL; A.val = B; }
8,555✔
847
alter_table_option(A) ::= KEEP NK_INTEGER(B).                                     { A.type = TABLE_OPTION_KEEP; A.val = B; }
28,791✔
848
alter_table_option(A) ::= KEEP NK_VARIABLE(B).                                    { A.type = TABLE_OPTION_KEEP; A.val = B; }
849

850

851
%type duration_list                                                               { SNodeList* }
852
%destructor duration_list                                                         { nodesDestroyList($$); }
853
duration_list(A) ::= duration_literal(B).                                         { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
854
duration_list(A) ::= duration_list(B) NK_COMMA duration_literal(C).               { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
855

856
%type rollup_func_list                                                            { SNodeList* }
857
%destructor rollup_func_list                                                      { nodesDestroyList($$); }
858
rollup_func_list(A) ::= rollup_func_name(B).                                      { A = createNodeList(pCxt, B); }
859
rollup_func_list(A) ::= rollup_func_list(B) NK_COMMA rollup_func_name(C).         { A = addNodeToList(pCxt, B, C); }
860

861
rollup_func_name(A) ::= function_name(B).                                         { A = createFunctionNode(pCxt, &B, NULL); }
×
862
rollup_func_name(A) ::= FIRST(B).                                                 { A = createFunctionNode(pCxt, &B, NULL); }
789✔
863
rollup_func_name(A) ::= LAST(B).                                                  { A = createFunctionNode(pCxt, &B, NULL); }
864

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

870
col_name(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
24,121,793✔
871
col_name(A) ::= TBNAME(B).                                                        { A = createColumnNode(pCxt, NULL, &B); }
36,285,239✔
872

873
/************************************************ create/drop mount ********************************************/
874
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); }
3,608✔
875
cmd ::= DROP MOUNT exists_opt(A) mount_name(B).                                   { pCxt->pRootNode = createDropMountStmt(pCxt, A, &B); }
1,312✔
876

877
/************************************************ show ****************************************************************/
878
cmd ::= SHOW DNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
31,217✔
879
cmd ::= SHOW USERS.                                                               { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
8,655✔
880
cmd ::= SHOW USERS FULL.                                                          { pCxt->pRootNode = createShowStmtWithFull(pCxt, QUERY_NODE_SHOW_USERS_FULL_STMT); }
×
881
cmd ::= SHOW USER PRIVILEGES.                                                     { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); }
5,501✔
882
cmd ::= SHOW db_kind_opt(A) DATABASES.                                            {
883
                                                                                    pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT);
206,720✔
884
                                                                                    (void)setShowKind(pCxt, pCxt->pRootNode, A);
206,720✔
885
                                                                                  }
886
cmd ::= SHOW table_kind_db_name_cond_opt(A) TABLES like_pattern_opt(B).           {
887
                                                                                    pCxt->pRootNode = createShowTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
317,456✔
888
                                                                                  }
889
cmd ::= SHOW table_kind_db_name_cond_opt(A) VTABLES like_pattern_opt(B).          {
890
                                                                                    pCxt->pRootNode = createShowVTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
63,393✔
891
                                                                                  }
892
cmd ::= SHOW table_kind_db_name_cond_opt(A) STABLES like_pattern_opt(B).          {
893
                                                                                    pCxt->pRootNode = createShowSTablesStmt(pCxt, A, B, OP_TYPE_LIKE);
280,847✔
894
                                                                                  }
895
cmd ::= SHOW db_name_cond_opt(A) VGROUPS.                                         { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, A, NULL, OP_TYPE_LIKE); }
242,439✔
896
cmd ::= SHOW MNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); }
354,496✔
897
//cmd ::= SHOW MODULES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MODULES_STMT); }
898
cmd ::= SHOW QNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); }
2,914✔
899
cmd ::= SHOW ANODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_STMT); }
364✔
900
cmd ::= SHOW ANODES FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ANODES_FULL_STMT); }
×
901
cmd ::= SHOW ARBGROUPS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ARBGROUPS_STMT); }
629✔
902
cmd ::= SHOW FUNCTIONS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); }
14,573✔
903
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); }
8,501✔
904
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); }
1,464✔
905
cmd ::= SHOW db_name_cond_opt(A) STREAMS.                                         { pCxt->pRootNode = createShowStreamsStmt(pCxt, A, QUERY_NODE_SHOW_STREAMS_STMT); }
122,863✔
906
cmd ::= SHOW ACCOUNTS.                                                            { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
366✔
907
cmd ::= SHOW APPS.                                                                { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); }
2,914✔
908
cmd ::= SHOW CONNECTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
2,914✔
909
cmd ::= SHOW LICENCES.                                                            { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
4,470✔
910
cmd ::= SHOW GRANTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
911
cmd ::= SHOW GRANTS FULL.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_FULL_STMT); }
2,548✔
912
cmd ::= SHOW GRANTS LOGS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_GRANTS_LOGS_STMT); }
2,548✔
913
cmd ::= SHOW INSTANCES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_INSTANCES_STMT, B); }
×
914
cmd ::= SHOW CLUSTER MACHINES.                                                    { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_MACHINES_STMT); }
2,914✔
915
cmd ::= SHOW MOUNTS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MOUNTS_STMT); }
15,744✔
916
cmd ::= SHOW CREATE DATABASE db_name(A).                                          { pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &A); }
97,795✔
917
cmd ::= SHOW CREATE TABLE full_table_name(A).                                     { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, A); }
128,377✔
918
cmd ::= SHOW CREATE VTABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateVTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_VTABLE_STMT, A); }
2,066✔
919
cmd ::= SHOW CREATE STABLE full_table_name(A).                                    { pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT,
1,098✔
920
A); }
921
cmd ::= SHOW ENCRYPTIONS.                                                         { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPTIONS_STMT); }
618✔
922
cmd ::= SHOW ENCRYPT_ALGORITHMS.                                                  { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_ENCRYPT_ALGORITHMS_STMT); }
×
923
cmd ::= SHOW QUERIES.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
2,914✔
924
cmd ::= SHOW SCORES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
×
925
cmd ::= SHOW TOPICS.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
25,032✔
926
cmd ::= SHOW VARIABLES like_pattern_opt(B).                                       { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
45,151✔
927
cmd ::= SHOW CLUSTER VARIABLES like_pattern_opt(B).                               { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT, B); }
928
cmd ::= SHOW LOCAL VARIABLES like_pattern_opt(B).                                 { pCxt->pRootNode = createShowStmtWithLike(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT, B); }
32,523✔
929
cmd ::= SHOW DNODE NK_INTEGER(A) VARIABLES like_pattern_opt(B).                   { pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), B); }
118,175✔
930
// cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BACKUP_NODES_STMT); }
931
cmd ::= SHOW SNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }
106,001✔
932
cmd ::= SHOW BNODES.                                                              { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
95,779✔
933
cmd ::= SHOW CLUSTER.                                                             { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); }
3,646✔
934
cmd ::= SHOW TRANSACTIONS.                                                        { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); }
465,765✔
935
cmd ::= SHOW TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createShowTransactionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
685✔
936
cmd ::= SHOW TABLE DISTRIBUTED full_table_name(A).                                { pCxt->pRootNode = createShowTableDistributedStmt(pCxt, A); }
5,335✔
937
cmd ::= SHOW CONSUMERS.                                                           { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
8,974✔
938
cmd ::= SHOW SUBSCRIPTIONS.                                                       { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
8,745✔
939
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); }
709,542✔
940
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); }
2,196✔
941
cmd ::= SHOW TABLE TAGS tag_list_opt(C) FROM table_name_cond(A) from_db_opt(B).   { pCxt->pRootNode = createShowTableTagsStmt(pCxt, A, B, C); }
6,954✔
942
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); }
2,771✔
943
cmd ::= SHOW VNODES ON DNODE NK_INTEGER(A).                                       { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A), NULL); }
1,244✔
944
cmd ::= SHOW VNODES.                                                              { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, NULL); }
1,367✔
945
// show alive
946
cmd ::= SHOW db_name_cond_opt(A) ALIVE.                                           { pCxt->pRootNode = createShowAliveStmt(pCxt, A,    QUERY_NODE_SHOW_DB_ALIVE_STMT); }
3,540✔
947
cmd ::= SHOW CLUSTER ALIVE.                                                       { pCxt->pRootNode = createShowAliveStmt(pCxt, NULL, QUERY_NODE_SHOW_CLUSTER_ALIVE_STMT); }
5,916✔
948
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); }
17,289✔
949
cmd ::= SHOW CREATE VIEW full_table_name(A).                                      { pCxt->pRootNode = createShowCreateViewStmt(pCxt, QUERY_NODE_SHOW_CREATE_VIEW_STMT, A); }
9,358✔
950
cmd ::= SHOW COMPACTS.                                                            { pCxt->pRootNode = createShowCompactsStmt(pCxt, QUERY_NODE_SHOW_COMPACTS_STMT); }
427,234✔
951
cmd ::= SHOW COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createShowCompactDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
69,666✔
952
cmd ::= SHOW db_name_cond_opt(A) DISK_INFO.                                       { pCxt->pRootNode = createShowDiskUsageStmt(pCxt, A,    QUERY_NODE_SHOW_USAGE_STMT); }
708✔
953
cmd ::= SHOW SCANS.                                                               { pCxt->pRootNode = createShowScansStmt(pCxt, QUERY_NODE_SHOW_SCANS_STMT); }
5,548✔
954
cmd ::= SHOW SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createShowScanDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
4,158✔
955
cmd ::= SHOW SSMIGRATES.                                                          { pCxt->pRootNode = createShowSsMigratesStmt(pCxt, QUERY_NODE_SHOW_SSMIGRATES_STMT); }
×
956
cmd ::= SHOW TOKENS.                                                              { pCxt->pRootNode = createShowTokensStmt(pCxt, QUERY_NODE_SHOW_TOKENS_STMT); }
×
957

958
%type table_kind_db_name_cond_opt                                                 { SShowTablesOption }
959
%destructor table_kind_db_name_cond_opt                                           { }
960
table_kind_db_name_cond_opt(A) ::= .                                              { A.kind = SHOW_KIND_ALL; A.dbName = nil_token; }
191,992✔
961
table_kind_db_name_cond_opt(A) ::= table_kind(B).                                 { A.kind = B; A.dbName = nil_token; }
850✔
962
table_kind_db_name_cond_opt(A) ::= db_name(C) NK_DOT.                             { A.kind = SHOW_KIND_ALL; A.dbName = C; }
426,080✔
963
table_kind_db_name_cond_opt(A) ::= table_kind(B) db_name(C) NK_DOT.               { A.kind = B; A.dbName = C; }
43,342✔
964

965
%type table_kind                                                                  { EShowKind }
966
%destructor table_kind                                                            { }
967
table_kind(A) ::= NORMAL.                                                         { A = SHOW_KIND_TABLES_NORMAL; }
22,154✔
968
table_kind(A) ::= CHILD.                                                          { A = SHOW_KIND_TABLES_CHILD; }
21,341✔
969
table_kind(A) ::= VIRTUAL.                                                        { A = SHOW_KIND_TABLES_VIRTUAL; }
697✔
970

971
db_name_cond_opt(A) ::= .                                                         { A = createDefaultDatabaseCondValue(pCxt); }
826,484✔
972
db_name_cond_opt(A) ::= db_name(B) NK_DOT.                                        { A = createIdentifierValueNode(pCxt, &B); }
356,846✔
973

974
like_pattern_opt(A) ::= .                                                         { A = NULL; }
975
like_pattern_opt(A) ::= LIKE NK_STRING(B).                                        { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
41,523✔
976

977
table_name_cond(A) ::= table_name(B).                                             { A = createIdentifierValueNode(pCxt, &B); }
724,997✔
978

979
from_db_opt(A) ::= .                                                              { A = createDefaultDatabaseCondValue(pCxt); }
980
from_db_opt(A) ::= FROM db_name(B).                                               { A = createIdentifierValueNode(pCxt, &B); }
11,318✔
981

982
%type tag_list_opt                                                                { SNodeList* }
983
%destructor tag_list_opt                                                          { nodesDestroyList($$); }
984
tag_list_opt(A) ::= .                                                             { A = NULL; }
985
tag_list_opt(A) ::= tag_item(B).                                                  { A = createNodeList(pCxt, B); }
986
tag_list_opt(A) ::= tag_list_opt(B) NK_COMMA tag_item(C).                         { A = addNodeToList(pCxt, B, C); }
987

988
tag_item(A) ::= TBNAME(B).                                                        { A = setProjectionAlias(pCxt, createFunctionNode(pCxt, &B, NULL), &B); }
1,470✔
989
tag_item(A) ::= QTAGS(B).                                                         { A = createFunctionNode(pCxt, &B, NULL); }
990
tag_item(A) ::= column_name(B).                                                   { A = createColumnNode(pCxt, NULL, &B); }
991
tag_item(A) ::= column_name(B) column_alias(C).                                   { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
209✔
992
tag_item(A) ::= column_name(B) AS column_alias(C).                                { A = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &B), &C); }
×
993

994
%type db_kind_opt                                                                 { EShowKind }
995
%destructor db_kind_opt                                                           { }
996
db_kind_opt(A) ::= .                                                              { A = SHOW_KIND_ALL; }
205,986✔
997
db_kind_opt(A) ::= USER.                                                          { A = SHOW_KIND_DATABASES_USER; }
367✔
998
db_kind_opt(A) ::= SYSTEM.                                                        { A = SHOW_KIND_DATABASES_SYSTEM; }
367✔
999

1000
/************************************************ rsma ********************************************************/
1001
cmd ::= CREATE RSMA not_exists_opt(B) rsma_name(C)
1002
  ON full_table_name(D) rsma_func_list(E)
1003
  INTERVAL NK_LP signed_duration_list(F) NK_RP.                                   { pCxt->pRootNode = createCreateRsmaStmt(pCxt, B, &C, D, E, F); }
120,988✔
1004
cmd ::= DROP RSMA exists_opt(B) full_rsma_name(C).                                { pCxt->pRootNode = createDropRsmaStmt(pCxt, B, C); }
2,436✔
1005
cmd ::= SHOW CREATE RSMA full_table_name(A).                                      { pCxt->pRootNode = createShowCreateRsmaStmt(pCxt, QUERY_NODE_SHOW_CREATE_RSMA_STMT, A); }
2,436✔
1006
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); }
21,924✔
1007
cmd ::= SHOW db_name_cond_opt(B) RSMAS.                                           { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RSMAS_STMT, B, NULL, OP_TYPE_LIKE); }
14,616✔
1008
cmd ::= SHOW db_name_cond_opt(B) RETENTIONS.                                      { pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_RETENTIONS_STMT, B, NULL, OP_TYPE_LIKE); }
46,284✔
1009
cmd ::= SHOW RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createShowRetentionDetailsStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &A)); }
2,436✔
1010
cmd ::= ROLLUP DATABASE db_name(A) start_opt(B) end_opt(C).                       { pCxt->pRootNode = createRollupStmt(pCxt, &A, B, C); }
10,556✔
1011
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,872✔
1012

1013
full_rsma_name(A) ::= rsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1014
full_rsma_name(A) ::= db_name(B) NK_DOT rsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1015

1016
%type rsma_func_list                                                              { SNodeList* }
1017
%destructor rsma_func_list                                                        { }
1018
rsma_func_list(A) ::= .                                                           { A = NULL; }
1019
rsma_func_list(A) ::= FUNCTION NK_LP NK_RP.                                       { A = NULL; }
×
1020
rsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = B; }
1021
/************************************************ tsma ********************************************************/
1022
cmd ::= CREATE TSMA not_exists_opt(B) tsma_name(C)
1023
  ON full_table_name(E) tsma_func_list(D)
1024
  INTERVAL NK_LP duration_literal(F) NK_RP.                                       { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, D, E, releaseRawExprNode(pCxt, F)); }
888✔
1025
cmd ::= CREATE RECURSIVE TSMA not_exists_opt(B) tsma_name(C)
1026
  ON full_table_name(D) INTERVAL NK_LP duration_literal(E) NK_RP.                 { pCxt->pRootNode = createCreateTSMAStmt(pCxt, B, &C, NULL, D, releaseRawExprNode(pCxt, E)); }
×
1027
cmd ::= DROP TSMA exists_opt(B) full_tsma_name(C).                                { pCxt->pRootNode = createDropTSMAStmt(pCxt, B, C); }
×
1028
cmd ::= SHOW db_name_cond_opt(B) TSMAS.                                           { pCxt->pRootNode = createShowTSMASStmt(pCxt, B); }
×
1029

1030
full_tsma_name(A) ::= tsma_name(B).                                               { A = createRealTableNode(pCxt, NULL, &B, NULL); }
1031
full_tsma_name(A) ::= db_name(B) NK_DOT tsma_name(C).                             { A = createRealTableNode(pCxt, &B, &C, NULL); }
1032

1033
%type tsma_func_list                                                              { SNode* }
1034
%destructor tsma_func_list                                                        { nodesDestroyNode($$); }
×
1035
tsma_func_list(A) ::= FUNCTION NK_LP func_list(B) NK_RP.                          { A = createTSMAOptions(pCxt, B); }
888✔
1036

1037
/************************************************ create index ********************************************************/
1038
cmd ::= CREATE SMA INDEX not_exists_opt(D)
1039
  col_name(A) ON full_table_name(B) index_options(C).                      { pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, D, A, B, NULL, C); }
×
1040
cmd ::= CREATE INDEX not_exists_opt(D)
1041
  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); }
16,065✔
1042
cmd ::= DROP INDEX exists_opt(B) full_index_name(A).                              { pCxt->pRootNode = createDropIndexStmt(pCxt, B, A); }
4,416✔
1043

1044
full_index_name(A) ::= index_name(B).                                             { A = createRealTableNodeForIndexName(pCxt, NULL, &B); }
3,941✔
1045
full_index_name(A) ::= db_name(B) NK_DOT index_name(C).                           { A = createRealTableNodeForIndexName(pCxt, &B, &C); }
475✔
1046

1047
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
1048
  NK_LP duration_literal(C) NK_RP sliding_opt(D) sma_stream_opt(E).               { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), NULL, D, E); }
×
1049
index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
1050
  NK_LP duration_literal(C) NK_COMMA duration_literal(D) NK_RP sliding_opt(E)
1051
  sma_stream_opt(F).                                                              { A = createIndexOption(pCxt, B, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), E, F); }
×
1052

1053
%type func_list                                                                   { SNodeList* }
1054
%destructor func_list                                                             { nodesDestroyList($$); }
1055
func_list(A) ::= func(B).                                                         { A = createNodeList(pCxt, B); }
1056
func_list(A) ::= func_list(B) NK_COMMA func(C).                                   { A = addNodeToList(pCxt, B, C); }
1057

1058
func(A) ::= sma_func_name(B) NK_LP expression_list(C) NK_RP.                      { A = createFunctionNode(pCxt, &B, C); }
330,482✔
1059

1060
%type sma_func_name                                                               { SToken }
1061
%destructor sma_func_name                                                         { }
1062
sma_func_name(A) ::= function_name(B).                                            { A = B; }
57,018,932✔
1063
sma_func_name(A) ::= COUNT(B).                                                    { A = B; }
1064
sma_func_name(A) ::= FIRST(B).                                                    { A = B; }
1065
sma_func_name(A) ::= LAST(B).                                                     { A = B; }
1066
sma_func_name(A) ::= LAST_ROW(B).                                                 { A = B; }
1067

1068
sma_stream_opt(A) ::= .                                                           { A = NULL; }
1069

1070
/************************************************ create/drop topic ***************************************************/
1071
%type with_meta                                                                   { int32_t }
1072
%destructor with_meta                                                             { }
1073
with_meta(A) ::= AS.                                                              { A = 0; }
11,683✔
1074
with_meta(A) ::= WITH META AS.                                                    { A = 1; }
3,653✔
1075
with_meta(A) ::= ONLY META AS.                                                    { A = 2; }
186✔
1076

1077
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) AS query_or_subquery(C).     { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, false); }
63,302✔
1078
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(D)
1079
  DATABASE db_name(C).                                                            { pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, A, &B, &C, D); }
8,061✔
1080
cmd ::= CREATE TOPIC not_exists_opt(A) topic_name(B) with_meta(E)
1081
  STABLE full_table_name(C) where_clause_opt(D).                                  { pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, A, &B, C, E, D); }
7,461✔
1082

1083
cmd ::= RELOAD TOPIC exists_opt(A) topic_name(B) AS query_or_subquery(C).         { pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, A, &B, C, true); }
×
1084
cmd ::= DROP TOPIC exists_opt(A) force_opt(C) topic_name(B).                             { pCxt->pRootNode = createDropTopicStmt(pCxt, A, &B, C); }
43,407✔
1085
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); }
98✔
1086

1087
/************************************************ desc/describe *******************************************************/
1088
cmd ::= DESC full_table_name(A).                                                  { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
823,288✔
1089
cmd ::= DESCRIBE full_table_name(A).                                              { pCxt->pRootNode = createDescribeStmt(pCxt, A); }
1090

1091
/************************************************ reset query cache ***************************************************/
1092
cmd ::= RESET QUERY CACHE.                                                        { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); }
2,199,641✔
1093

1094
/************************************************ explain *************************************************************/
1095
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) query_or_subquery(C).           { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
4,835,056✔
1096
cmd ::= EXPLAIN analyze_opt(A) explain_options(B) insert_query(C).                { pCxt->pRootNode = createExplainStmt(pCxt, A, B, C); }
1097

1098
%type analyze_opt                                                                 { bool }
1099
%destructor analyze_opt                                                           { }
1100
analyze_opt(A) ::= .                                                              { A = false; }
1101
analyze_opt(A) ::= ANALYZE.                                                       { A = true; }
1102

1103
explain_options(A) ::= .                                                          { A = createDefaultExplainOptions(pCxt); }
4,991,044✔
1104
explain_options(A) ::= explain_options(B) VERBOSE NK_BOOL(C).                     { A = setExplainVerbose(pCxt, B, &C); }
1,682,510✔
1105
explain_options(A) ::= explain_options(B) RATIO NK_FLOAT(C).                      { A = setExplainRatio(pCxt, B, &C); }
563,040✔
1106

1107
/************************************************ create/drop function ************************************************/
1108
cmd ::= CREATE or_replace_opt(H) agg_func_opt(A) FUNCTION not_exists_opt(F)
1109
  function_name(B) AS NK_STRING(C) OUTPUTTYPE type_name(D) bufsize_opt(E)
1110
  language_opt(G).                                                                { pCxt->pRootNode = createCreateFunctionStmt(pCxt, F, A, &B, &C, D, E, &G, H); }
16,833✔
1111
cmd ::= DROP FUNCTION exists_opt(B) function_name(A).                             { pCxt->pRootNode = createDropFunctionStmt(pCxt, B, &A); }
10,591✔
1112

1113
%type agg_func_opt                                                                { bool }
1114
%destructor agg_func_opt                                                          { }
1115
agg_func_opt(A) ::= .                                                             { A = false; }
1116
agg_func_opt(A) ::= AGGREGATE.                                                    { A = true; }
1117

1118
%type bufsize_opt                                                                 { int32_t }
1119
%destructor bufsize_opt                                                           { }
1120
bufsize_opt(A) ::= .                                                              { A = 0; }
1121
bufsize_opt(A) ::= BUFSIZE NK_INTEGER(B).                                         { A = taosStr2Int32(B.z, NULL, 10); }
1122

1123
%type language_opt                                                                 { SToken }
1124
%destructor language_opt                                                           { }
1125
language_opt(A) ::= .                                                              { A = nil_token; }
15,007✔
1126
language_opt(A) ::= LANGUAGE NK_STRING(B).                                         { A = B; }
4,160✔
1127

1128
%type or_replace_opt                                                               { bool }
1129
%destructor or_replace_opt                                                         { }
1130
or_replace_opt(A) ::= .                                                            { A = false; }
1131
or_replace_opt(A) ::= OR REPLACE.                                                  { A = true; }
1132

1133
/************************************************ create/drop view **************************************************/
1134
cmd ::= CREATE or_replace_opt(A) VIEW full_view_name(B) AS(C) query_or_subquery(D).
1135
                                                                                  { pCxt->pRootNode = createCreateViewStmt(pCxt, A, B, &C, D); }
261,509✔
1136
cmd ::= DROP VIEW exists_opt(A) full_view_name(B).                                { pCxt->pRootNode = createDropViewStmt(pCxt, A, B); }
191,056✔
1137

1138
full_view_name(A) ::= view_name(B).                                               { A = createViewNode(pCxt, NULL, &B); }
226,414✔
1139
full_view_name(A) ::= db_name(B) NK_DOT view_name(C).                             { A = createViewNode(pCxt, &B, &C); }
232,060✔
1140

1141
/************************************************ create/drop stream **************************************************/
1142
cmd ::= CREATE STREAM not_exists_opt(A) full_stream_name(B) stream_trigger(C)
1143
        stream_outtable_opt(D) as_subquery_opt(E).                                { pCxt->pRootNode = createCreateStreamStmt(pCxt, A, B, C, D, E); }
399,837✔
1144
cmd ::= DROP STREAM exists_opt(A) full_stream_name(B).                            { pCxt->pRootNode = createDropStreamStmt(pCxt, A, B); }
15,418✔
1145
cmd ::= STOP STREAM exists_opt(A) full_stream_name(B).                            { pCxt->pRootNode = createPauseStreamStmt(pCxt, A, B); }
9,405✔
1146
cmd ::= START STREAM exists_opt(A) ignore_opt(C) full_stream_name(B).             { pCxt->pRootNode = createResumeStreamStmt(pCxt, A, C, B); }
9,405✔
1147
cmd ::= RECALCULATE STREAM full_stream_name(A) recalculate_range(B).              { pCxt->pRootNode = createRecalcStreamStmt(pCxt, A, B); }
16,172✔
1148

1149
/* recalculate_range(A) ::= ALL.                                                     { A = createRecalcRange(pCxt, NULL, NULL); } */
1150
recalculate_range(A) ::= FROM time_point(B).                                      { A = createRecalcRange(pCxt, B, NULL); }
12,505✔
1151
recalculate_range(A) ::= FROM time_point(B) TO time_point(C).                     { A = createRecalcRange(pCxt, B, C); }
3,667✔
1152

1153
full_stream_name(A) ::= stream_name(B).                                           { A = createStreamNode(pCxt, NULL, &B); }
162,886✔
1154
full_stream_name(A) ::= db_name(B) NK_DOT stream_name(C).                         { A = createStreamNode(pCxt, &B, &C); }
307,265✔
1155

1156
/********** stream_outtable **********/
1157
stream_outtable_opt(A) ::= .                                                                                                { A = NULL; }
1158
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); }
406,568✔
1159

1160
/********** stream_trigger **********/
1161
stream_trigger(A) ::= trigger_type(B) trigger_table_opt(C) stream_partition_by_opt(D)
1162
                      trigger_options_opt(E) notification_opt(F).                                                           { A = createStreamTriggerNode(pCxt, B, C, D, E, F); }
412,399✔
1163

1164
/***** trigger type *****/
1165

1166
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)); }
10,613,445✔
1167
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); }
4,065,715✔
1168
trigger_type(A) ::= interval_opt(B) SLIDING NK_LP sliding_expr(C) NK_RP.                                                    { A = createIntervalWindowNodeExt(pCxt, B, C); }
185,990✔
1169
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); }
41,351✔
1170
trigger_type(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.                                                          { A = createCountWindowNodeFromArgs(pCxt, B); }
3,571,902✔
1171
trigger_type(A) ::= PERIOD NK_LP interval_sliding_duration_literal(B) offset_opt(C) NK_RP.                                  { A = createPeriodWindowNode(pCxt, releaseRawExprNode(pCxt, B), C); }
25,062✔
1172

1173
interval_opt(A) ::= .                                                                                                       { A = NULL; }
1174
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C) NK_RP.                                              { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), NULL, NULL, NULL); }
130,118✔
1175
interval_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(C)
1176
                    NK_COMMA interval_sliding_duration_literal(D) NK_RP.                                                    { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), NULL, NULL); }
3,458✔
1177

1178
sliding_expr(A) ::= interval_sliding_duration_literal(B).                                                                   { A = createSlidingWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
181,197✔
1179
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,793✔
1180

1181
%type sliding_val_opt                                                             { SToken }
1182
%destructor sliding_val_opt                                                       { }
1183

1184
offset_opt(A) ::= .                                                               { A = NULL; }
1185
offset_opt(A) ::= NK_COMMA interval_sliding_duration_literal(B).                  { A = releaseRawExprNode(pCxt, B); }
25,074,931✔
1186

1187
/***** trigger_table_opt *****/
1188

1189
trigger_table_opt(A) ::= .                                                 { A = NULL; }
1190
trigger_table_opt(A) ::= FROM full_table_name(B).                          { A = B; }
1191

1192
/***** stream_partition_by_opt *****/
1193

1194
%type stream_partition_by_opt                                                                 { SNodeList* }
1195
%destructor stream_partition_by_opt                                                           { nodesDestroyList($$); }
1196
stream_partition_by_opt(A) ::= .                                                              { A = NULL; }
1197
stream_partition_by_opt(A) ::= PARTITION BY stream_partition_list(B).                         { A = B; }
174,473,284✔
1198

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

1204
stream_partition_item(A) ::= expr_or_subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
761,909,024✔
1205
stream_partition_item(A) ::= expr_or_subquery(B) column_alias(C).                             { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
14,359,313✔
1206

1207
/***** trigger_options_opt *****/
1208

1209
trigger_options_opt(A) ::= .                                                              { A = NULL; }
1210
trigger_options_opt(A) ::= STREAM_OPTIONS NK_LP trigger_option_list(B) NK_RP.             { A = B; }
189,004✔
1211

1212
trigger_option_list(A) ::= trigger_option(B).                                       { A = createStreamTriggerOptions(pCxt);  A = setStreamTriggerOptions(pCxt, A, &B);  }
189,844✔
1213
trigger_option_list(A) ::= trigger_option_list(B) NK_BITOR trigger_option(C).       { A = setStreamTriggerOptions(pCxt, B, &C); }
49,040✔
1214

1215
%type trigger_option                                                               { SStreamTriggerOption }
1216
%destructor trigger_option                                                         { }
1217
trigger_option(A) ::= CALC_NOTIFY_ONLY.                                            { A.type = STREAM_TRIGGER_OPTION_CALC_NOTIFY_ONLY; A.pNode = NULL; }
3,288✔
1218
trigger_option(A) ::= DELETE_RECALC.                                               { A.type = STREAM_TRIGGER_OPTION_DELETE_RECALC; A.pNode = NULL; }
15,125✔
1219
trigger_option(A) ::= DELETE_OUTPUT_TABLE.                                         { A.type = STREAM_TRIGGER_OPTION_DELETE_OUTPUT_TABLE; A.pNode = NULL; }
442✔
1220
trigger_option(A) ::= EXPIRED_TIME NK_LP duration_literal(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_EXPIRED_TIME; A.pNode = releaseRawExprNode(pCxt, B); }
11,859✔
1221
trigger_option(A) ::= FILL_HISTORY NK_LP time_point(B) NK_RP.                      { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = B; }
46,529✔
1222
trigger_option(A) ::= FILL_HISTORY_FIRST NK_LP time_point(B) NK_RP.                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = B; }
3,701✔
1223
trigger_option(A) ::= FILL_HISTORY.                                                { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY; A.pNode = NULL; }
27,252✔
1224
trigger_option(A) ::= FILL_HISTORY_FIRST.                                          { A.type = STREAM_TRIGGER_OPTION_FILL_HISTORY_FIRST; A.pNode = NULL; }
1,680✔
1225
trigger_option(A) ::= FORCE_OUTPUT.                                                { A.type = STREAM_TRIGGER_OPTION_FORCE_OUTPUT; A.pNode = NULL; }
6,909✔
1226
trigger_option(A) ::= IGNORE_DISORDER.                                             { A.type = STREAM_TRIGGER_OPTION_IGNORE_DISORDER; A.pNode = NULL; }
26,313✔
1227
trigger_option(A) ::= LOW_LATENCY_CALC.                                            { A.type = STREAM_TRIGGER_OPTION_LOW_LATENCY_CALC; A.pNode = NULL; }
7,603✔
1228
trigger_option(A) ::= MAX_DELAY NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_MAX_DELAY; A.pNode = releaseRawExprNode(pCxt, B); }
11,992✔
1229
trigger_option(A) ::= PRE_FILTER NK_LP search_condition(B) NK_RP.                  { A.type = STREAM_TRIGGER_OPTION_PRE_FILTER; A.pNode = B; }
26,152✔
1230
trigger_option(A) ::= WATERMARK NK_LP duration_literal(B) NK_RP.                   { A.type = STREAM_TRIGGER_OPTION_WATERMARK; A.pNode = releaseRawExprNode(pCxt, B); }
16,008✔
1231
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; }
9,652✔
1232
trigger_option(A) ::= IGNORE_NODATA_TRIGGER.                                       { A.type = STREAM_TRIGGER_OPTION_IGNORE_NODATA_TRIGGER; A.pNode = NULL; }
24,379✔
1233

1234
/***** notification_opt *****/
1235
notification_opt(A) ::= .                                                         { A = NULL; }
1236
notification_opt(A) ::= NOTIFY NK_LP notify_url_list(B) NK_RP
1237
                        notify_on_opt(C) where_clause_opt(D)
1238
                        notify_options_opt(E).                                    { A = createStreamNotifyOptions(pCxt, B, C, D, E); }
67,466✔
1239

1240
%type notify_url_list                                                             { SNodeList* }
1241
%destructor notify_url_list                                                       { nodesDestroyList($$); }
1242
notify_url_list(A) ::= NK_STRING(B).                                              { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
67,637✔
1243
notify_url_list(A) ::= notify_url_list(B) NK_COMMA NK_STRING(C).                  { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)); }
×
1244

1245
%type notify_on_opt                                                               { int64_t }
1246
%destructor notify_on_opt                                                         { }
1247
notify_on_opt(A) ::= .                                                            { A = EVENT_NONE; }
1,428✔
1248
notify_on_opt(A) ::= ON NK_LP event_type_list(B) NK_RP.                           { A = B; }
70,003✔
1249

1250
%type notify_options_opt                                                          { int64_t }
1251
%destructor notify_options_opt                                                    { }
1252
notify_options_opt(A) ::= .                                                       { A = NOTIFY_NONE; }
63,501✔
1253
notify_options_opt(A) ::= NOTIFY_OPTIONS NK_LP notify_options_list(B) NK_RP.      { A = B; }
1254

1255
%type notify_options_list                                                         { int64_t }
1256
%destructor notify_options_list                                                   { }
1257
notify_options_list(A) ::= notify_option(B).                                      { A = B; }
1258
notify_options_list(A) ::= notify_options_list(B) NK_BITOR notify_option(C).     { A = B | C; }
1259

1260
%type notify_option                                                               { int64_t }
1261
%destructor notify_option                                                         { }
1262
notify_option(A) ::= NOTIFY_HISTORY.                                              { A = NOTIFY_HISTORY; }
3,965✔
1263

1264
/***** common part *****/
1265

1266
time_point(A) ::= NK_INTEGER(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
12,687✔
1267
time_point(A) ::= NK_STRING(B).                                                   { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1,389,291✔
1268

1269
%type column_name_list                                                            { SNodeList* }
1270
%destructor column_name_list                                                      { nodesDestroyList($$); }
1271
column_name_list(A) ::= trigger_col_name(B).                                      { A = createNodeList(pCxt, B); }
1272
column_name_list(A) ::= column_name_list(B) NK_COMMA trigger_col_name(C).         { A = addNodeToList(pCxt, B, C); }
1273

1274
trigger_col_name(A) ::= column_name(B).                                           { A = createColumnNode(pCxt, NULL, &B); }
1275
trigger_col_name(A) ::= TBNAME(B).                                                { A = createFunctionNode(pCxt, &B, NULL); }
1276

1277
%type event_type_list                                                             { int64_t }
1278
%destructor event_type_list                                                       { }
1279
event_type_list(A) ::= event_types(B).                                            { A = B;}
75,804✔
1280
event_type_list(A) ::= event_type_list(B) NK_BITOR event_types(C).                { A = B | C; }
1281

1282
%type event_types                                                                 { int64_t }
1283
%destructor event_types                                                           { }
1284
event_types(A) ::= WINDOW_OPEN.                                                   { A = EVENT_WINDOW_OPEN; }
66,017✔
1285
event_types(A) ::= WINDOW_CLOSE.                                                  { A = EVENT_WINDOW_CLOSE; }
69,343✔
1286

1287
/********** output_subtable_opt **********/
1288
output_subtable_opt(A) ::= .                                                      { A = NULL; }
1289
output_subtable_opt(A) ::= OUTPUT_SUBTABLE NK_LP expr_or_subquery(B) NK_RP.       { A = releaseRawExprNode(pCxt, B); }
1,465,008✔
1290

1291
%type column_name_opt                                                             { SNodeList* }
1292
%destructor column_name_opt                                                       { nodesDestroyList($$); }
1293
column_name_opt(A) ::= .                                                          { A = NULL; }
1294
column_name_opt(A) ::= column_name_unit(B).                                       { A = B; }
1295

1296
%type stream_tags_def_opt                                                            { SNodeList* }
1297
%destructor stream_tags_def_opt                                                      { nodesDestroyList($$); }
1298
stream_tags_def_opt(A) ::= .                                                         { A = NULL; }
1299
stream_tags_def_opt(A) ::= TAGS NK_LP stream_tags_def_list(B) NK_RP.                 { A = B; }
1300

1301
%type stream_tags_def_list                                                             { SNodeList* }
1302
%destructor stream_tags_def_list                                                       { nodesDestroyList($$); }
1303
stream_tags_def_list(A) ::= stream_tags_def(B).                                        { A = createNodeList(pCxt, B); }
1304
stream_tags_def_list(A) ::= stream_tags_def_list(B) NK_COMMA stream_tags_def(C).       { A = addNodeToList(pCxt, B, C); }
1305

1306
stream_tags_def(A) ::= column_name(B) type_name(C) AS expression(D).                   { A = createStreamTagDefNode(pCxt, &B, C, releaseRawExprNode(pCxt, D)); }
54,429✔
1307

1308
%type column_name_unit                                                                 { SNodeList* }
1309
%destructor column_name_unit                                                           { nodesDestroyList($$); }
1310
column_name_unit(A) ::= NK_LP column_stream_def_list(B) NK_RP.                         { A = B; }
1311

1312
%type column_stream_def_list                                                      { SNodeList* }
1313
%destructor column_stream_def_list                                                { nodesDestroyList($$); }
1314
column_stream_def_list(A) ::= column_stream_def(B).                               { A = createNodeList(pCxt, B); }
1315
column_stream_def_list(A) ::= column_stream_def_list(B)
1316
 NK_COMMA column_stream_def(C).                                                   { A = addNodeToList(pCxt, B, C); }
1317

1318
column_stream_def(A) ::= column_name(B) stream_col_options(C).                    { A = createColumnDefNode(pCxt, &B, createDataType(TSDB_DATA_TYPE_NULL), C); }
428,906✔
1319

1320
stream_col_options(A) ::= .                                                       { A = createDefaultColumnOptions(pCxt); }
418,637,082✔
1321
stream_col_options(A) ::= stream_col_options(B) PRIMARY KEY.                      { A = setColumnOptionsPK(pCxt, B); }
245,187✔
1322
stream_col_options(A) ::= stream_col_options(B) COMPOSITE KEY.                    { A = setColumnOptionsPK(pCxt, B); }
1323
//column_stream_def(A) ::= column_def(B).                                         { A = B; }
1324

1325
as_subquery_opt(A) ::= .                                                          { A = NULL; }
1326
as_subquery_opt(A) ::= AS query_or_subquery(B).                                   { A = B; }
1327

1328
%type ignore_opt                                                                  { bool }
1329
%destructor ignore_opt                                                            { }
1330
ignore_opt(A) ::= .                                                               { A = false; }
1331
ignore_opt(A) ::= IGNORE UNTREATED.                                               { A = true; }
1332

1333

1334
/************************************************ kill connection/query ***********************************************/
1335
cmd ::= KILL CONNECTION NK_INTEGER(A).                                            { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &A); }
364✔
1336
cmd ::= KILL QUERY NK_STRING(A).                                                  { pCxt->pRootNode = createKillQueryStmt(pCxt, &A); }
268✔
1337
cmd ::= KILL TRANSACTION NK_INTEGER(A).                                           { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &A); }
684✔
1338
cmd ::= KILL COMPACT NK_INTEGER(A).                                               { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_COMPACT_STMT, &A); }
3,150✔
1339
cmd ::= KILL RETENTION NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_RETENTION_STMT, &A); }
×
1340
cmd ::= KILL SCAN NK_INTEGER(A).                                                  { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SCAN_STMT, &A); }
260✔
1341
cmd ::= KILL SSMIGRATE NK_INTEGER(A).                                             { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_SSMIGRATE_STMT, &A); }
×
1342

1343
/************************************************ merge/redistribute/ vgroup ******************************************/
1344
cmd ::= BALANCE VGROUP.                                                           { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); }
13,151✔
1345

1346
cmd ::= ASSIGN LEADER FORCE.                                                      { pCxt->pRootNode = createAssignLeaderStmt(pCxt); }
37✔
1347

1348
cmd ::= BALANCE VGROUP LEADER on_vgroup_id(A).                                    { pCxt->pRootNode = createBalanceVgroupLeaderStmt(pCxt, &A); }
2,334✔
1349
cmd ::= BALANCE VGROUP LEADER DATABASE db_name(A).                                { pCxt->pRootNode = createBalanceVgroupLeaderDBNameStmt(pCxt, &A); }
320✔
1350
cmd ::= ALTER VGROUP NK_INTEGER(A) SET KEEP NK_INTEGER(B).                { pCxt->pRootNode = createSetVgroupKeepVersionStmt(pCxt, &A, &B); }
1,255✔
1351
cmd ::= MERGE VGROUP NK_INTEGER(A) NK_INTEGER(B).                                 { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &A, &B); }
×
1352
cmd ::= REDISTRIBUTE VGROUP NK_INTEGER(A) dnode_list(B).                          { pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &A, B); }
48,069✔
1353
cmd ::= SPLIT VGROUP NK_INTEGER(A) force_opt(B).                                  { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &A, B); }
13,358✔
1354

1355
%type on_vgroup_id                                                                { SToken }
1356
%destructor on_vgroup_id                                                          { }
1357
on_vgroup_id(A) ::= .                                                             { A = nil_token; }
1358
on_vgroup_id(A) ::= ON NK_INTEGER(B).                                             { A = B; }
1359

1360
%type dnode_list                                                                  { SNodeList* }
1361
%destructor dnode_list                                                            { nodesDestroyList($$); }
1362
dnode_list(A) ::= DNODE NK_INTEGER(B).                                            { A = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B)); }
48,069✔
1363
dnode_list(A) ::= dnode_list(B) DNODE NK_INTEGER(C).                              { A = addNodeToList(pCxt, B, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &C)); }
1364

1365
/************************************************ syncdb **************************************************************/
1366
//cmd ::= SYNCDB db_name(A) REPLICA.                                                { pCxt->pRootNode = createSyncdbStmt(pCxt, &A); }
1367

1368
/************************************************ syncdb **************************************************************/
1369
cmd ::= DELETE FROM full_table_name(A) where_clause_opt(B).                       { pCxt->pRootNode = createDeleteStmt(pCxt, A, B); }
1,868,798✔
1370

1371
/************************************************ select **************************************************************/
1372
cmd ::= query_or_subquery(A).                                                     { pCxt->pRootNode = A; }
1373

1374
/************************************************ insert **************************************************************/
1375
cmd ::= insert_query(A).                                                          { pCxt->pRootNode = A; }
1376

1377
insert_query(A) ::= INSERT INTO full_table_name(D)
1378
  NK_LP col_name_list(B) NK_RP query_or_subquery(C).                              { A = createInsertStmt(pCxt, D, B, C); }
28,690✔
1379
insert_query(A) ::= INSERT INTO full_table_name(C) query_or_subquery(B).          { A = createInsertStmt(pCxt, C, NULL, B); }
107,821✔
1380

1381
/************************************************ tags_literal *************************************************************/
1382
tags_literal(A) ::= NK_INTEGER(B).                                                { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
63,203,527✔
1383
tags_literal(A) ::= NK_INTEGER(B) NK_PLUS duration_literal(C).                    {
1384
                                                                                    SToken l = B;
21,924✔
1385
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
21,924✔
1386
                                                                                    l.n = (r.z + r.n) - l.z;
21,924✔
1387
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
21,924✔
1388
                                                                                  }
1389
tags_literal(A) ::= NK_INTEGER(B) NK_MINUS duration_literal(C).                   {
1390
                                                                                    SToken l = B;
1391
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1392
                                                                                    l.n = (r.z + r.n) - l.z;
1393
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1394
                                                                                  }
1395
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER(C).                                     {
1396
                                                                                    SToken t = B;
578,158✔
1397
                                                                                    t.n = (C.z + C.n) - B.z;
578,158✔
1398
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
578,158✔
1399
                                                                                  }
1400
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_PLUS duration_literal(C).            {
1401
                                                                                    SToken l = B;
5,684✔
1402
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
5,684✔
1403
                                                                                    l.n = (r.z + r.n) - l.z;
5,684✔
1404
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
5,684✔
1405
                                                                                  }
1406
tags_literal(A) ::= NK_PLUS(B) NK_INTEGER NK_MINUS duration_literal(C).           {
1407
                                                                                    SToken l = B;
1408
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1409
                                                                                    l.n = (r.z + r.n) - l.z;
1410
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1411
                                                                                  }
1412
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER(C).                                    {
1413
                                                                                    SToken t = B;
1414
                                                                                    t.n = (C.z + C.n) - B.z;
1415
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1416
                                                                                  }
1417
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_PLUS duration_literal(C).           {
1418
                                                                                    SToken l = B;
1419
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1420
                                                                                    l.n = (r.z + r.n) - l.z;
1421
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1422
                                                                                  }
1423
tags_literal(A) ::= NK_MINUS(B) NK_INTEGER NK_MINUS duration_literal(C).          {
1424
                                                                                    SToken l = B;
1425
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1426
                                                                                    l.n = (r.z + r.n) - l.z;
1427
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1428
                                                                                  }
1429
tags_literal(A) ::= NK_FLOAT(B).                                                  { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B, NULL); }
622,474✔
1430
tags_literal(A) ::= NK_PLUS(B) NK_FLOAT(C).                                       {
1431
                                                                                    SToken t = B;
85,592✔
1432
                                                                                    t.n = (C.z + C.n) - B.z;
85,592✔
1433
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
85,592✔
1434
                                                                                  }
1435
tags_literal(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1436
                                                                                    SToken t = B;
1437
                                                                                    t.n = (C.z + C.n) - B.z;
1438
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t, NULL);
1439
                                                                                  }
1440

1441
tags_literal(A) ::= NK_BIN(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1442
tags_literal(A) ::= NK_BIN(B) NK_PLUS duration_literal(C).                        {
1443
                                                                                    SToken l = B;
1444
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1445
                                                                                    l.n = (r.z + r.n) - l.z;
1446
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1447
                                                                                  }
1448
tags_literal(A) ::= NK_BIN(B) NK_MINUS duration_literal(C).                       {
1449
                                                                                    SToken l = B;
1450
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1451
                                                                                    l.n = (r.z + r.n) - l.z;
1452
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1453
                                                                                  }
1454
tags_literal(A) ::= NK_PLUS(B) NK_BIN(C).                                         {
1455
                                                                                    SToken t = B;
1456
                                                                                    t.n = (C.z + C.n) - B.z;
1457
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1458
                                                                                  }
1459
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_PLUS duration_literal(C).                {
1460
                                                                                    SToken l = B;
1461
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1462
                                                                                    l.n = (r.z + r.n) - l.z;
1463
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1464
                                                                                  }
1465
tags_literal(A) ::= NK_PLUS(B) NK_BIN NK_MINUS duration_literal(C).               {
1466
                                                                                    SToken l = B;
1467
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1468
                                                                                    l.n = (r.z + r.n) - l.z;
1469
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1470
                                                                                  }
1471
tags_literal(A) ::= NK_MINUS(B) NK_BIN(C).                                        {
1472
                                                                                    SToken t = B;
1473
                                                                                    t.n = (C.z + C.n) - B.z;
1474
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1475
                                                                                  }
1476
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_PLUS duration_literal(C).               {
1477
                                                                                    SToken l = B;
1478
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1479
                                                                                    l.n = (r.z + r.n) - l.z;
1480
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1481
                                                                                  }
1482
tags_literal(A) ::= NK_MINUS(B) NK_BIN NK_MINUS duration_literal(C).              {
1483
                                                                                    SToken l = B;
1484
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1485
                                                                                    l.n = (r.z + r.n) - l.z;
1486
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1487
                                                                                  }
1488
tags_literal(A) ::= NK_HEX(B).                                                    { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B, NULL); }
1489
tags_literal(A) ::= NK_HEX(B) NK_PLUS duration_literal(C).                        {
1490
                                                                                    SToken l = B;
1491
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1492
                                                                                    l.n = (r.z + r.n) - l.z;
1493
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1494
                                                                                  }
1495
tags_literal(A) ::= NK_HEX(B) NK_MINUS duration_literal(C).                       {
1496
                                                                                    SToken l = B;
1497
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1498
                                                                                    l.n = (r.z + r.n) - l.z;
1499
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1500
                                                                                  }
1501
tags_literal(A) ::= NK_PLUS(B) NK_HEX(C).                                         {
1502
                                                                                    SToken t = B;
1503
                                                                                    t.n = (C.z + C.n) - B.z;
1504
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1505
                                                                                  }
1506
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_PLUS duration_literal(C).                {
1507
                                                                                    SToken l = B;
1508
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1509
                                                                                    l.n = (r.z + r.n) - l.z;
1510
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1511
                                                                                  }
1512
tags_literal(A) ::= NK_PLUS(B) NK_HEX NK_MINUS duration_literal(C).               {
1513
                                                                                    SToken l = B;
1514
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1515
                                                                                    l.n = (r.z + r.n) - l.z;
1516
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1517
                                                                                  }
1518
tags_literal(A) ::= NK_MINUS(B) NK_HEX(C).                                        {
1519
                                                                                    SToken t = B;
1520
                                                                                    t.n = (C.z + C.n) - B.z;
1521
                                                                                    A = createRawValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &t, NULL);
1522
                                                                                  }
1523
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_PLUS duration_literal(C).               {
1524
                                                                                    SToken l = B;
1525
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1526
                                                                                    l.n = (r.z + r.n) - l.z;
1527
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1528
                                                                                  }
1529
tags_literal(A) ::= NK_MINUS(B) NK_HEX NK_MINUS duration_literal(C).              {
1530
                                                                                    SToken l = B;
1531
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1532
                                                                                    l.n = (r.z + r.n) - l.z;
1533
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1534
                                                                                  }
1535

1536
tags_literal(A) ::= NK_STRING(B).                                                 { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B, NULL); }
64,205,311✔
1537
tags_literal(A) ::= NK_STRING(B) NK_PLUS duration_literal(C).                     {
1538
                                                                                    SToken l = B;
1539
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1540
                                                                                    l.n = (r.z + r.n) - l.z;
1541
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1542
                                                                                  }
1543
tags_literal(A) ::= NK_STRING(B) NK_MINUS duration_literal(C).                    {
1544
                                                                                    SToken l = B;
1545
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1546
                                                                                    l.n = (r.z + r.n) - l.z;
1547
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, NULL, C);
1548
                                                                                  }
1549
tags_literal(A) ::= NK_BOOL(B).                                                   { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B, NULL); }
3,394,026✔
1550
tags_literal(A) ::= NULL(B).                                                      { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B, NULL); }
252,388✔
1551

1552
tags_literal(A) ::= literal_func(B).                                              { A = createRawValueNode(pCxt, TSDB_DATA_TYPE_BINARY, NULL, B); }
145,196✔
1553
tags_literal(A) ::= literal_func(B) NK_PLUS duration_literal(C).                  {
1554
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
24,868✔
1555
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
24,868✔
1556
                                                                                    l.n = (r.z + r.n) - l.z;
24,868✔
1557
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
24,868✔
1558
                                                                                  }
1559
tags_literal(A) ::= literal_func(B) NK_MINUS duration_literal(C).                 {
1560
                                                                                    SToken l = getTokenFromRawExprNode(pCxt, B);
1561
                                                                                    SToken r = getTokenFromRawExprNode(pCxt, C);
1562
                                                                                    l.n = (r.z + r.n) - l.z;
1563
                                                                                    A = createRawValueNodeExt(pCxt, TSDB_DATA_TYPE_BINARY, &l, B, C);
1564
                                                                                  }
1565

1566
%type tags_literal_list                                                           { SNodeList* }
1567
%destructor tags_literal_list                                                     { nodesDestroyList($$); }
1568
tags_literal_list(A) ::= tags_literal(B).                                         { A = createNodeList(pCxt, B); }
1569
tags_literal_list(A) ::= tags_literal_list(B) NK_COMMA tags_literal(C).           { A = addNodeToList(pCxt, B, C); }
1570

1571
/************************************************ literal *************************************************************/
1572
literal(A) ::= NK_INTEGER(B).                                                     { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B)); }
238,608,229✔
1573
literal(A) ::= NK_FLOAT(B).                                                       { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B)); }
10,360,331✔
1574
literal(A) ::= NK_STRING(B).                                                      { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B)); }
35,684,605✔
1575
literal(A) ::= NK_BOOL(B).                                                        { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B)); }
1,631,274✔
1576
literal(A) ::= TIMESTAMP(B) NK_STRING(C).                                         { A = createRawExprNodeExt(pCxt, &B, &C, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &C)); }
1,664✔
1577
literal(A) ::= duration_literal(B).                                               { A = B; }
2,147,483,647✔
1578
literal(A) ::= NULL(B).                                                           { A = createRawExprNode(pCxt, &B, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B)); }
11,591,069✔
1579
literal(A) ::= NK_QUESTION(B).                                                    { A = createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B)); }
11,435✔
1580

1581
duration_literal(A) ::= NK_VARIABLE(B).                                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
60,487,225✔
1582

1583
signed_variable(A) ::= NK_VARIABLE(B).                                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
1584
signed_variable(A) ::= NK_PLUS NK_VARIABLE(B).                                    { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
×
1585
signed_variable(A) ::= NK_MINUS(B) NK_VARIABLE(C).                                { 
1586
                                                                                    SToken t = B;
61,718✔
1587
                                                                                    t.n = (C.z + C.n) - B.z;
61,718✔
1588
                                                                                    A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &t)); 
61,718✔
1589
                                                                                  }
1590

1591
signed_integer(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
3,484,804✔
1592
signed_integer(A) ::= NK_PLUS NK_INTEGER(B).                                      { A = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &B); }
×
1593
signed_integer(A) ::= NK_MINUS(B) NK_INTEGER(C).                                  {
1594
                                                                                    SToken t = B;
180,329✔
1595
                                                                                    t.n = (C.z + C.n) - B.z;
180,329✔
1596
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t);
180,329✔
1597
                                                                                  }
1598

1599

1600
unsigned_integer(A) ::= NK_INTEGER(B).                                            { A = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B); }
23,939,373✔
1601
unsigned_integer(A) ::= NK_QUESTION(B).                                           { A = releaseRawExprNode(pCxt, createRawExprNode(pCxt, &B, createPlaceholderValueNode(pCxt, &B))); }
×
1602

1603
signed_float(A) ::= NK_FLOAT(B).                                                  { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
47,720✔
1604
signed_float(A) ::= NK_PLUS NK_FLOAT(B).                                          { A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &B); }
×
1605
signed_float(A) ::= NK_MINUS(B) NK_FLOAT(C).                                      {
1606
                                                                                    SToken t = B;
61,750✔
1607
                                                                                    t.n = (C.z + C.n) - B.z;
61,750✔
1608
                                                                                    A = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t);
61,750✔
1609
                                                                                  }
1610

1611
signed(A) ::= signed_integer(B).                                                  { A = B; }
1612
signed(A) ::= signed_float(B).                                                    { A = B; }
1613

1614
signed_literal(A) ::= signed(B).                                                  { A = B; }
1615
signed_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
1616
signed_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
1,506,038✔
1617
signed_literal(A) ::= TIMESTAMP NK_STRING(B).                                     { A = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &B); }
×
1618
signed_literal(A) ::= duration_literal(B).                                        { A = releaseRawExprNode(pCxt, B); }
1619
signed_literal(A) ::= NULL(B).                                                    { A = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &B); }
5,116✔
1620
signed_literal(A) ::= literal_func(B).                                            { A = releaseRawExprNode(pCxt, B); }
1621
signed_literal(A) ::= NK_QUESTION(B).                                             { A = createPlaceholderValueNode(pCxt, &B); }
×
1622

1623

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

1629
/************************************************ names and identifiers ***********************************************/
1630
%type db_name                                                                     { SToken }
1631
%destructor db_name                                                               { }
1632
db_name(A) ::= NK_ID(B).                                                          { A = B; }
1633

1634
%type mount_name                                                                  { SToken }
1635
%destructor mount_name                                                            { }
1636
mount_name(A) ::= NK_ID(B).                                                       { A = B; }
1637

1638
%type table_name                                                                  { SToken }
1639
%destructor table_name                                                            { }
1640
table_name(A) ::= NK_ID(B).                                                       { A = B; }
1641

1642
%type column_name                                                                 { SToken }
1643
%destructor column_name                                                           { }
1644
column_name(A) ::= NK_ID(B).                                                      { A = B; }
1645

1646
%type function_name                                                               { SToken }
1647
%destructor function_name                                                         { }
1648
function_name(A) ::= NK_ID(B).                                                    { A = B; }
1649

1650
%type view_name                                                                   { SToken }
1651
%destructor view_name                                                             { }
1652
view_name(A) ::= NK_ID(B).                                                        { A = B; }
1653

1654
%type table_alias                                                                 { SToken }
1655
%destructor table_alias                                                           { }
1656
table_alias(A) ::= NK_ID(B).                                                      { A = B; }
1657

1658
%type column_alias                                                                { SToken }
1659
%destructor column_alias                                                          { }
1660
column_alias(A) ::= NK_ID(B).                                                     { A = B; }
1661
column_alias(A) ::= NK_ALIAS(B).                                                  { A = B; }
1662

1663
%type user_name                                                                   { SToken }
1664
%destructor user_name                                                             { }
1665
user_name(A) ::= NK_ID(B).                                                        { A = B; }
1666

1667
%type general_name                                                                { SToken }
1668
%destructor general_name                                                          { }
1669
general_name(A) ::= NK_ID(B).                                                     { A = B;}
×
1670

1671
%type topic_name                                                                  { SToken }
1672
%destructor topic_name                                                            { }
1673
topic_name(A) ::= NK_ID(B).                                                       { A = B; }
1674

1675
%type stream_name                                                                 { SToken }
1676
%destructor stream_name                                                           { }
1677
stream_name(A) ::= NK_ID(B).                                                      { A = B; }
1678

1679
%type cgroup_name                                                                 { SToken }
1680
%destructor cgroup_name                                                           { }
1681
cgroup_name(A) ::= NK_ID(B).                                                      { A = B; }
1682

1683
%type index_name                                                                  { SToken }
1684
%destructor index_name                                                            { }
1685
index_name(A) ::= NK_ID(B).                                                       { A = B; }
1686

1687
%type tsma_name                                                                   { SToken }
1688
%destructor tsma_name                                                             { }
1689
tsma_name(A) ::= NK_ID(B).                                                        { A = B; }
1690

1691
%type rsma_name                                                                   { SToken }
1692
%destructor rsma_name                                                             { }
1693
rsma_name(A) ::= NK_ID(B).                                                        { A = B; }
1694

1695
/************************************************ expression **********************************************************/
1696
expr_or_subquery(A) ::= expression(B).                                            { A = B; }
1697
expr_or_subquery(A) ::= subquery(B).                                              { A = B; }
1698

1699
expression(A) ::= literal(B).                                                     { A = B; }
1700
expression(A) ::= pseudo_column(B).                                               { A = B; (void)setRawExprNodeIsPseudoColumn(pCxt, A, true); }
44,045,052✔
1701
expression(A) ::= column_reference(B).                                            { A = B; }
1702
expression(A) ::= function_expression(B).                                         { A = B; }
1703
expression(A) ::= if_expression(B).                                               { A = B; }
1704
expression(A) ::= case_when_expression(B).                                        { A = B; }
1705
expression(A) ::= NK_LP(B) expression(C) NK_RP(D).                                { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
20,775,224✔
1706
expression(A) ::= NK_PLUS(B) expr_or_subquery(C).                                 {
1707
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
×
1708
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, releaseRawExprNode(pCxt, C));
×
1709
                                                                                  }
1710
expression(A) ::= NK_MINUS(B) expr_or_subquery(C).                                {
1711
                                                                                    SToken t = getTokenFromRawExprNode(pCxt, C);
14,106,807✔
1712
                                                                                    A = createRawExprNodeExt(pCxt, &B, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, C), NULL));
14,106,807✔
1713
                                                                                  }
1714
expression(A) ::= expr_or_subquery(B) NK_PLUS expr_or_subquery(C).                {
1715
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
115,093,046✔
1716
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
115,093,046✔
1717
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
115,093,046✔
1718
                                                                                  }
1719
expression(A) ::= expr_or_subquery(B) NK_MINUS expr_or_subquery(C).               {
1720
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
4,992,993✔
1721
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
4,992,993✔
1722
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
4,992,993✔
1723
                                                                                  }
1724
expression(A) ::= expr_or_subquery(B) NK_STAR expr_or_subquery(C).                {
1725
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
7,987,778✔
1726
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
7,987,778✔
1727
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
7,987,778✔
1728
                                                                                  }
1729
expression(A) ::= expr_or_subquery(B) NK_SLASH expr_or_subquery(C).               {
1730
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
8,259,409✔
1731
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
8,259,409✔
1732
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
8,259,409✔
1733
                                                                                  }
1734
expression(A) ::= expr_or_subquery(B) NK_REM expr_or_subquery(C).                 {
1735
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
315,780✔
1736
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
315,780✔
1737
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
315,780✔
1738
                                                                                  }
1739
expression(A) ::= column_reference(B) NK_ARROW NK_STRING(C).                      {
1740
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
215,210✔
1741
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, B), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &C)));
215,210✔
1742
                                                                                  }
1743
expression(A) ::= expr_or_subquery(B) NK_BITAND expr_or_subquery(C).              {
1744
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
44,700✔
1745
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
44,700✔
1746
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
44,700✔
1747
                                                                                  }
1748
expression(A) ::= expr_or_subquery(B) NK_BITOR expr_or_subquery(C).               {
1749
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
9,970✔
1750
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
9,970✔
1751
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
9,970✔
1752
                                                                                  }
1753

1754
%type expression_list                                                             { SNodeList* }
1755
%destructor expression_list                                                       { nodesDestroyList($$); }
1756
expression_list(A) ::= expr_or_subquery(B).                                       { A = createNodeList(pCxt, releaseRawExprNode(pCxt, B)); }
1757
expression_list(A) ::= expression_list(B) NK_COMMA expr_or_subquery(C).           { A = addNodeToList(pCxt, B, releaseRawExprNode(pCxt, C)); }
1758

1759
column_reference(A) ::= column_name(B).                                           { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
704,289,144✔
1760
column_reference(A) ::= table_name(B) NK_DOT column_name(C).                      { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
152,034,689✔
1761
column_reference(A) ::= NK_ALIAS(B).                                              { A = createRawExprNode(pCxt, &B, createColumnNode(pCxt, NULL, &B)); }
3,553✔
1762
column_reference(A) ::= table_name(B) NK_DOT NK_ALIAS(C).                         { A = createRawExprNodeExt(pCxt, &B, &C, createColumnNode(pCxt, &B, &C)); }
1,045✔
1763

1764
pseudo_column(A) ::= ROWTS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
48,571,267✔
1765
pseudo_column(A) ::= TBNAME(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1766
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)))); }
462,187✔
1767
pseudo_column(A) ::= QSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1768
pseudo_column(A) ::= QEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1769
pseudo_column(A) ::= QDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1770
pseudo_column(A) ::= WSTART(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1771
pseudo_column(A) ::= WEND(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1772
pseudo_column(A) ::= WDURATION(B).                                                { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1773
pseudo_column(A) ::= IROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1774
pseudo_column(A) ::= ISFILLED(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1775
pseudo_column(A) ::= QTAGS(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1776
pseudo_column(A) ::= FLOW(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1777
pseudo_column(A) ::= FHIGH(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1778
pseudo_column(A) ::= FROWTS(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1779
pseudo_column(A) ::= IROWTS_ORIGIN(B).                                            { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1780
pseudo_column(A) ::= TPREV_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1781
pseudo_column(A) ::= TCURRENT_TS(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1782
pseudo_column(A) ::= TNEXT_TS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1783
pseudo_column(A) ::= TWSTART(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1784
pseudo_column(A) ::= TWEND(B).                                                    { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1785
pseudo_column(A) ::= TWDURATION(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1786
pseudo_column(A) ::= TWROWNUM(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1787
pseudo_column(A) ::= TPREV_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1788
pseudo_column(A) ::= TNEXT_LOCALTIME(B).                                          { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1789
pseudo_column(A) ::= TLOCALTIME(B).                                               { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1790
pseudo_column(A) ::= TGRPID(B).                                                   { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1791
pseudo_column(A) ::= NK_PH NK_INTEGER(B).                                         { A = createRawExprNode(pCxt, &B, createPlaceHolderColumnNode(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &B))); }
54,622✔
1792
pseudo_column(A) ::= NK_PH TBNAME(B).                                             { A = createRawExprNode(pCxt, &B, createPHTbnameFunctionNode(pCxt, &B, NULL)); }
81,369✔
1793
pseudo_column(A) ::= IMPROWTS(B).                                                 { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1794
pseudo_column(A) ::= IMPMARK(B).                                                  { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1795
pseudo_column(A) ::= ANOMALYMARK(B).                                              { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1796

1797
function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D).                        { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
260,933,341✔
1798
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)); }
1799
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)); }
1800
function_expression(A) ::=
1801
  CAST(B) NK_LP common_expression(C) AS type_name(D) NK_RP(E).                                         { A = createRawExprNodeExt(pCxt, &B, &E, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, C), D)); }
102,564,399✔
1802
function_expression(A) ::=
1803
  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)); }
1804
function_expression(A) ::=
1805
  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))); }
129,470✔
1806
function_expression(A) ::=
1807
  TRIM(B) NK_LP expr_or_subquery(C) NK_RP(D).                                                         { A = createRawExprNodeExt(pCxt, &B, &D, createTrimFunctionNode(pCxt, releaseRawExprNode(pCxt, C), TRIM_TYPE_BOTH)); }
20,773✔
1808
function_expression(A) ::=
1809
  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)); }
3,402✔
1810
function_expression(A) ::=
1811
  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)); }
20,412✔
1812
function_expression(A) ::=
1813
  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)); }
49,896✔
1814
function_expression(A) ::=
1815
  substr_func(B) NK_LP expression_list(C) NK_RP(D).                                                   { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
1816
function_expression(A) ::=
1817
  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))); }
12,004✔
1818
function_expression(A) ::=
1819
  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))); }
26,284✔
1820
function_expression(A) ::= REPLACE(B) NK_LP expression_list(C) NK_RP(D).                              { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
90,109✔
1821
function_expression(A) ::= literal_func(B).                                                           { A = B; }
1822
function_expression(A) ::= rand_func(B).                                                              { A = B; }
1823

1824
literal_func(A) ::= noarg_func(B) NK_LP NK_RP(C).                                 { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
8,231,223✔
1825
literal_func(A) ::= NOW(B).                                                       { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1826
literal_func(A) ::= TODAY(B).                                                     { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
1827

1828
rand_func(A) ::= RAND(B) NK_LP NK_RP(C).                                          { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
8,659✔
1829
rand_func(A) ::= RAND(B) NK_LP expression_list(C) NK_RP(D).                       { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
1830

1831
%type substr_func                                                                   { SToken }
1832
%destructor substr_func                                                             { }
1833
substr_func(A) ::= SUBSTR(B).                                                       { A = B; }
1834
substr_func(A) ::= SUBSTRING(B).                                                    { A = B; }
1835

1836
%type trim_specification_type ETrimType
1837
%destructor trim_specification_type                                                { }
1838
trim_specification_type(A) ::= BOTH.                                               { A = TRIM_TYPE_BOTH; }
17,010✔
1839
trim_specification_type(A) ::= TRAILING.                                           { A = TRIM_TYPE_TRAILING; }
18,144✔
1840
trim_specification_type(A) ::= LEADING.                                            { A = TRIM_TYPE_LEADING; }
18,144✔
1841

1842
%type noarg_func                                                                  { SToken }
1843
%destructor noarg_func                                                            { }
1844
noarg_func(A) ::= NOW(B).                                                         { A = B; }
1845
noarg_func(A) ::= TODAY(B).                                                       { A = B; }
1846
noarg_func(A) ::= TIMEZONE(B).                                                    { A = B; }
1847
noarg_func(A) ::= DATABASE(B).                                                    { A = B; }
1848
noarg_func(A) ::= CLIENT_VERSION(B).                                              { A = B; }
1849
noarg_func(A) ::= SERVER_VERSION(B).                                              { A = B; }
1850
noarg_func(A) ::= SERVER_STATUS(B).                                               { A = B; }
1851
noarg_func(A) ::= CURRENT_USER(B).                                                { A = B; }
1852
noarg_func(A) ::= USER(B).                                                        { A = B; }
1853
noarg_func(A) ::= PI(B).                                                          { A = B; }
1854

1855
%type star_func                                                                   { SToken }
1856
%destructor star_func                                                             { }
1857
star_func(A) ::= COUNT(B).                                                        { A = B; }
1858
star_func(A) ::= FIRST(B).                                                        { A = B; }
1859
star_func(A) ::= LAST(B).                                                         { A = B; }
1860
star_func(A) ::= LAST_ROW(B).                                                     { A = B; }
1861

1862
%type cols_func                                                                   { SToken }
1863
%destructor cols_func                                                             { }
1864
cols_func(A) ::= COLS(B).                                                         { A = B; }
1865

1866
%type cols_func_para_list                                                         { SNodeList* }
1867
%destructor cols_func_para_list                                                   { nodesDestroyList($$); }
1868
cols_func_para_list(A) ::= function_expression(B) NK_COMMA cols_func_expression_list(C).    { A = createColsFuncParamNodeList(pCxt, B, C, NULL); }
1,302,138✔
1869

1870
cols_func_expression(A) ::= expr_or_subquery(B).                                            { A = releaseRawExprNode(pCxt, B); }
1871
cols_func_expression(A) ::= NK_STAR(B).                                                     { A = createColumnNode(pCxt, NULL, &B); }
1872
cols_func_expression(A) ::= expr_or_subquery(B) column_alias(C).                            { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
83,750✔
1873
cols_func_expression(A) ::= expr_or_subquery(B) AS column_alias(C).                         { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C);}
184,634✔
1874

1875
%type cols_func_expression_list                                                             { SNodeList* }
1876
%destructor cols_func_expression_list                                                       { nodesDestroyList($$); }
1877
cols_func_expression_list(A) ::= cols_func_expression(B).                                   { A = createNodeList(pCxt, B); }
1878
cols_func_expression_list(A) ::= cols_func_expression_list(B) NK_COMMA cols_func_expression(C).   { A = addNodeToList(pCxt, B, C); }
1879

1880
%type star_func_para_list                                                         { SNodeList* }
1881
%destructor star_func_para_list                                                   { nodesDestroyList($$); }
1882
star_func_para_list(A) ::= NK_STAR(B).                                            { A = createNodeList(pCxt, createColumnNode(pCxt, NULL, &B)); }
30,972,931✔
1883
star_func_para_list(A) ::= other_para_list(B).                                    { A = B; }
1884

1885
%type other_para_list                                                             { SNodeList* }
1886
%destructor other_para_list                                                       { nodesDestroyList($$); }
1887
other_para_list(A) ::= star_func_para(B).                                         { A = createNodeList(pCxt, B); }
1888
other_para_list(A) ::= other_para_list(B) NK_COMMA star_func_para(C).             { A = addNodeToList(pCxt, B, C); }
1889

1890
star_func_para(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
1891
star_func_para(A) ::= table_name(B) NK_DOT NK_STAR(C).                            { A = createColumnNode(pCxt, &B, &C); }
7,211,398✔
1892

1893
if_expression(A) ::=
1894
  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))); }
80,841✔
1895
if_expression(A) ::=
1896
  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))); }
9,968✔
1897
if_expression(A) ::=
1898
  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))); }
1899
if_expression(A) ::=
1900
  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,804✔
1901
if_expression(A) ::=
1902
  //NULLIF(B) NK_LP common_expression(C) NK_COMMA common_expression(D) NK_RP(E).    { A = createRawExprNodeExt(pCxt, &B, &E, createNullIfNode(pCxt, C, D)); }
1903
  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,804✔
1904
if_expression(A) ::=
1905
  COALESCE(B) NK_LP expression_list(C) NK_RP(E).                                  { A = createRawExprNodeExt(pCxt, &B, &E, createCoalesceNode(pCxt, C)); }
2,180✔
1906

1907
case_when_expression(A) ::=
1908
  CASE(E) when_then_list(C) case_when_else_opt(D) END(F).                         { A = createRawExprNodeExt(pCxt, &E, &F, createCaseWhenNode(pCxt, NULL, C, D)); }
21,968,028✔
1909
case_when_expression(A) ::=
1910
  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)); }
3,668,510✔
1911

1912
%type when_then_list                                                              { SNodeList* }
1913
%destructor when_then_list                                                        { nodesDestroyList($$); }
1914
when_then_list(A) ::= when_then_expr(B).                                          { A = createNodeList(pCxt, B); }
1915
when_then_list(A) ::= when_then_list(B) when_then_expr(C).                        { A = addNodeToList(pCxt, B, C); }
1916

1917
when_then_expr(A) ::= WHEN common_expression(B) THEN common_expression(C).        { A = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
26,133,133✔
1918

1919
case_when_else_opt(A) ::= .                                                       { A = NULL; }
1920
case_when_else_opt(A) ::= ELSE common_expression(B).                              { A = releaseRawExprNode(pCxt, B); }
1921

1922
/************************************************ predicate ***********************************************************/
1923
predicate(A) ::= expr_or_subquery(B) compare_op(C) expr_or_subquery(D).           {
1924
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
161,424,000✔
1925
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
161,423,790✔
1926
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
161,424,049✔
1927
                                                                                  }
1928
//predicate(A) ::= expression(B) compare_op sub_type expression(B).
1929
predicate(A) ::=
1930
  expr_or_subquery(B) BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).        {
1931
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
9,854,452✔
1932
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
9,854,452✔
1933
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
9,856,440✔
1934
                                                                                  }
1935
predicate(A) ::=
1936
  expr_or_subquery(B) NOT BETWEEN expr_or_subquery(C) AND expr_or_subquery(D).    {
1937
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
1,327,383✔
1938
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
1,327,383✔
1939
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)));
1,327,383✔
1940
                                                                                  }
1941
predicate(A) ::= expr_or_subquery(B) IS NULL(C).                                  {
1942
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
11,041,877✔
1943
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, B), NULL));
11,041,877✔
1944
                                                                                  }
1945
predicate(A) ::= expr_or_subquery(B) IS NOT NULL(C).                              {
1946
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
15,482,170✔
1947
                                                                                    A = createRawExprNodeExt(pCxt, &s, &C, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, B), NULL));
15,482,170✔
1948
                                                                                  }
1949
predicate(A) ::= ISNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                    {
1950
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, C), NULL));
×
1951
                                                                                  }
1952
predicate(A) ::= ISNOTNULL(B) NK_LP expr_or_subquery(C) NK_RP(D).                 {
1953
                                                                                    A = createRawExprNodeExt(pCxt, &B, &D, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, C), NULL));
×
1954
                                                                                  }
1955
predicate(A) ::= expr_or_subquery(B) in_op(C) in_predicate_value(D).              {
1956
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
1957
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, D);
1958
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, C, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, D)));
1959
                                                                                  }
1960

1961
%type compare_op                                                                  { EOperatorType }
1962
%destructor compare_op                                                            { }
1963
compare_op(A) ::= NK_LT.                                                          { A = OP_TYPE_LOWER_THAN; }
8,842,807✔
1964
compare_op(A) ::= NK_GT.                                                          { A = OP_TYPE_GREATER_THAN; }
42,765,127✔
1965
compare_op(A) ::= NK_LE.                                                          { A = OP_TYPE_LOWER_EQUAL; }
10,416,265✔
1966
compare_op(A) ::= NK_GE.                                                          { A = OP_TYPE_GREATER_EQUAL; }
10,465,821✔
1967
compare_op(A) ::= NK_NE.                                                          { A = OP_TYPE_NOT_EQUAL; }
6,034,417✔
1968
compare_op(A) ::= NK_EQ.                                                          { A = OP_TYPE_EQUAL; }
75,452,220✔
1969
compare_op(A) ::= LIKE.                                                           { A = OP_TYPE_LIKE; }
2,397,270✔
1970
compare_op(A) ::= NOT LIKE.                                                       { A = OP_TYPE_NOT_LIKE; }
41,279✔
1971
compare_op(A) ::= MATCH.                                                          { A = OP_TYPE_MATCH; }
1,752,718✔
1972
compare_op(A) ::= NMATCH.                                                         { A = OP_TYPE_NMATCH; }
687,355✔
1973
compare_op(A) ::= REGEXP.                                                         { A = OP_TYPE_MATCH; }
1974
compare_op(A) ::= NOT REGEXP.                                                     { A = OP_TYPE_NMATCH; }
2,482✔
1975
compare_op(A) ::= CONTAINS.                                                       { A = OP_TYPE_JSON_CONTAINS; }
10,112✔
1976

1977
%type in_op                                                                       { EOperatorType }
1978
%destructor in_op                                                                 { }
1979
in_op(A) ::= IN.                                                                  { A = OP_TYPE_IN; }
5,392,377✔
1980
in_op(A) ::= NOT IN.                                                              { A = OP_TYPE_NOT_IN; }
3,067,451✔
1981

1982
in_predicate_value(A) ::= NK_LP(C) literal_list(B) NK_RP(D).                      { A = createRawExprNodeExt(pCxt, &C, &D, createNodeListNode(pCxt, B)); }
2,611,921✔
1983

1984
/************************************************ boolean_value_expression ********************************************/
1985
boolean_value_expression(A) ::= boolean_primary(B).                               { A = B; }
1986
boolean_value_expression(A) ::= NOT(C) boolean_primary(B).                        {
1987
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, B);
52,096✔
1988
                                                                                    A = createRawExprNodeExt(pCxt, &C, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, B), NULL));
52,096✔
1989
                                                                                  }
1990
boolean_value_expression(A) ::=
1991
  boolean_value_expression(B) OR boolean_value_expression(C).                     {
1992
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
11,635,717✔
1993
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
11,635,717✔
1994
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
11,635,717✔
1995
                                                                                  }
1996
boolean_value_expression(A) ::=
1997
  boolean_value_expression(B) AND boolean_value_expression(C).                    {
1998
                                                                                    SToken s = getTokenFromRawExprNode(pCxt, B);
35,611,089✔
1999
                                                                                    SToken e = getTokenFromRawExprNode(pCxt, C);
35,611,347✔
2000
                                                                                    A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)));
35,611,347✔
2001
                                                                                  }
2002

2003
boolean_primary(A) ::= predicate(B).                                              { A = B; }
2004
boolean_primary(A) ::= NK_LP(C) boolean_value_expression(B) NK_RP(D).             { A = createRawExprNodeExt(pCxt, &C, &D, releaseRawExprNode(pCxt, B)); }
2005

2006
/************************************************ common_expression ********************************************/
2007
common_expression(A) ::= expr_or_subquery(B).                                     { A = B; }
2008
common_expression(A) ::= boolean_value_expression(B).                             { A = B; }
2009

2010
/************************************************ from_clause_opt *********************************************************/
2011
from_clause_opt(A) ::= .                                                          { A = NULL; }
2012
from_clause_opt(A) ::= FROM table_reference_list(B).                              { A = B; }
2013

2014
table_reference_list(A) ::= table_reference(B).                                   { A = B; }
2015
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); }
3,883,405✔
2016

2017
/************************************************ table_reference *****************************************************/
2018
table_reference(A) ::= table_primary(B).                                          { A = B; }
2019
table_reference(A) ::= joined_table(B).                                           { A = B; }
2020

2021
table_primary(A) ::= table_name(B) alias_opt(C).                                  { A = createRealTableNode(pCxt, NULL, &B, &C); }
405,603,230✔
2022
table_primary(A) ::= db_name(B) NK_DOT table_name(C) alias_opt(D).                { A = createRealTableNode(pCxt, &B, &C, &D); }
68,000,729✔
2023
table_primary(A) ::= subquery(B) alias_opt(C).                                    { A = createTempTableNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
12,773,942✔
2024
table_primary(A) ::= parenthesized_joined_table(B).                               { A = B; }
2025
table_primary(A) ::= NK_PH TBNAME alias_opt(C).                                   { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_TBNAME, &C); }
11,833✔
2026
table_primary(A) ::= NK_PH TROWS alias_opt(C).                                    { A = createPlaceHolderTableNode(pCxt, SP_PARTITION_ROWS, &C); }
165,712✔
2027

2028
%type alias_opt                                                                   { SToken }
2029
%destructor alias_opt                                                             { }
2030
alias_opt(A) ::= .                                                                { A = nil_token;  }
426,431,760✔
2031
alias_opt(A) ::= table_alias(B).                                                  { A = B; }
2032
alias_opt(A) ::= AS table_alias(B).                                               { A = B; }
3,332,064✔
2033

2034
parenthesized_joined_table(A) ::= NK_LP joined_table(B) NK_RP.                    { A = B; }
914✔
2035
parenthesized_joined_table(A) ::= NK_LP parenthesized_joined_table(B) NK_RP.      { A = B; }
2036

2037
/************************************************ joined_table ********************************************************/
2038
joined_table(A) ::= inner_joined(B).                                              { A = B; }
2039
joined_table(A) ::= outer_joined(B).                                              { A = B; }
2040
joined_table(A) ::= semi_joined(B).                                               { A = B; }
2041
joined_table(A) ::= anti_joined(B).                                               { A = B; }
2042
joined_table(A) ::= asof_joined(B).                                               { A = B; }
2043
joined_table(A) ::= win_joined(B).                                                { A = B; }
2044

2045
/************************************************ inner join **********************************************************/
2046
inner_joined(A) ::=
2047
  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); }
15,136,358✔
2048

2049
inner_joined(A) ::=
2050
  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); }
2,163,145✔
2051

2052
/************************************************ outer join **********************************************************/
2053
outer_joined(A) ::=
2054
  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); }
7,245,275✔
2055

2056
outer_joined(A) ::=
2057
  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); }
188,719✔
2058

2059
outer_joined(A) ::=
2060
  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); }
208,789✔
2061

2062
outer_joined(A) ::=
2063
  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); }
472✔
2064

2065
outer_joined(A) ::=
2066
  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); }
472✔
2067

2068
outer_joined(A) ::=
2069
  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); }
472✔
2070

2071
/************************************************ semi join ***********************************************************/
2072
semi_joined(A) ::=
2073
  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); }
262,686✔
2074

2075
semi_joined(A) ::=
2076
  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); }
201,341✔
2077

2078
/************************************************ ansi join ***********************************************************/
2079
anti_joined(A) ::=
2080
  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); }
262,658✔
2081

2082
anti_joined(A) ::=
2083
  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); }
175,879✔
2084

2085
/************************************************ asof join ***********************************************************/
2086
asof_joined(A) ::=
2087
  table_reference(B) LEFT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2088
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
367,723✔
2089

2090
asof_joined(A) ::=
2091
  table_reference(B) RIGHT ASOF JOIN table_reference(E) join_on_clause_opt(F)
2092
  jlimit_clause_opt(H).                                                           { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_ASOF, A, B, E, F, NULL, H); }
251,490✔
2093

2094
/************************************************ window join *********************************************************/
2095
win_joined(A) ::=
2096
  table_reference(B) LEFT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2097
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_LEFT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
411,937✔
2098

2099
win_joined(A) ::=
2100
  table_reference(B) RIGHT WINDOW JOIN table_reference(E) join_on_clause_opt(F)
2101
  window_offset_clause(G) jlimit_clause_opt(H).                                   { JOINED_TABLE_MK(JOIN_TYPE_RIGHT, JOIN_STYPE_WIN, A, B, E, F, G, H); }
302,649✔
2102

2103
join_on_clause_opt(A) ::= . [ON]                                                  { A = NULL; }
2104
join_on_clause_opt(A) ::= join_on_clause(B).                                      { A = B; }
2105

2106
join_on_clause(A) ::= ON search_condition(B).                                     { A = B; }
2107

2108
window_offset_clause(A) ::= WINDOW_OFFSET NK_LP window_offset_literal(B)
2109
  NK_COMMA window_offset_literal(C) NK_RP.                                        { A = createWindowOffsetNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
726,584✔
2110

2111
window_offset_literal(A) ::= NK_VARIABLE(B).                                      { A = createRawExprNode(pCxt, &B, createTimeOffsetValueNode(pCxt, &B)); }
758,004✔
2112
window_offset_literal(A) ::= NK_MINUS(B) NK_VARIABLE(C).                          {
2113
                                                                                    SToken t = B;
702,476✔
2114
                                                                                    t.n = (C.z + C.n) - B.z;
702,476✔
2115
                                                                                    A = createRawExprNode(pCxt, &t, createTimeOffsetValueNode(pCxt, &t));
702,476✔
2116
                                                                                  }
2117

2118
jlimit_clause_opt(A) ::= . [JLIMIT]                                               { A = NULL; }
2119
jlimit_clause_opt(A) ::= JLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
17,008,723✔
2120

2121
/************************************************ query_specification *************************************************/
2122
query_specification(A) ::=
2123
  SELECT hint_list(M) set_quantifier_opt(B) tag_mode_opt(N) select_list(C) from_clause_opt(D)
2124
  where_clause_opt(E) partition_by_clause_opt(F) range_opt(J) every_opt(K)
2125
  interp_fill_opt(L) twindow_clause_opt(G) group_by_clause_opt(H) having_clause_opt(I).  {
2126
                                                                                    A = createSelectStmt(pCxt, B, C, D, M);
465,518,308✔
2127
                                                                                    A = setSelectStmtTagMode(pCxt, A, N);
465,511,900✔
2128
                                                                                    A = addWhereClause(pCxt, A, E);
465,516,311✔
2129
                                                                                    A = addPartitionByClause(pCxt, A, F);
465,515,385✔
2130
                                                                                    A = addWindowClauseClause(pCxt, A, G);
465,521,189✔
2131
                                                                                    A = addGroupByClause(pCxt, A, H);
465,505,649✔
2132
                                                                                    A = addHavingClause(pCxt, A, I);
465,506,215✔
2133
                                                                                    A = addRangeClause(pCxt, A, J);
465,504,693✔
2134
                                                                                    A = addEveryClause(pCxt, A, K);
465,519,501✔
2135
                                                                                    A = addFillClause(pCxt, A, L);
465,509,293✔
2136
                                                                                  }
2137

2138
%type hint_list                                                                   { SNodeList* }
2139
%destructor hint_list                                                             { nodesDestroyList($$); }
2140
hint_list(A) ::= .                                                                { A = createHintNodeList(pCxt, NULL); }
471,542,310✔
2141
hint_list(A) ::= NK_HINT(B).                                                      { A = createHintNodeList(pCxt, &B); }
4,715,017✔
2142

2143
%type tag_mode_opt                                                                { bool }
2144
%destructor tag_mode_opt                                                          { }
2145
tag_mode_opt(A) ::= .                                                             { A = false; }
2146
tag_mode_opt(A) ::= TAGS.                                                         { A = true; }
2147

2148
%type set_quantifier_opt                                                          { bool }
2149
%destructor set_quantifier_opt                                                    { }
2150
set_quantifier_opt(A) ::= .                                                       { A = false; }
2151
set_quantifier_opt(A) ::= DISTINCT.                                               { A = true; }
2152
set_quantifier_opt(A) ::= ALL.                                                    { A = false; }
×
2153

2154
%type select_list                                                                 { SNodeList* }
2155
%destructor select_list                                                           { nodesDestroyList($$); }
2156
select_list(A) ::= select_item(B).                                                { A = createNodeList(pCxt, B); }
2157
select_list(A) ::= select_list(B) NK_COMMA select_item(C).                        { A = addNodeToList(pCxt, B, C); }
2158

2159
select_item(A) ::= NK_STAR(B).                                                    { A = createColumnNode(pCxt, NULL, &B); }
2160
select_item(A) ::= common_expression(B).                                          { A = releaseRawExprNode(pCxt, B); }
2161
select_item(A) ::= common_expression(B) column_alias(C).                          { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2162
select_item(A) ::= common_expression(B) AS column_alias(C).                       { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
27,783,314✔
2163
select_item(A) ::= table_name(B) NK_DOT NK_STAR(C).                               { A = createColumnNode(pCxt, &B, &C); }
2164

2165
where_clause_opt(A) ::= .                                                         { A = NULL; }
2166
where_clause_opt(A) ::= WHERE search_condition(B).                                { A = B; }
2167

2168
%type partition_by_clause_opt                                                     { SNodeList* }
2169
%destructor partition_by_clause_opt                                               { nodesDestroyList($$); }
2170
partition_by_clause_opt(A) ::= .                                                  { A = NULL; }
2171
partition_by_clause_opt(A) ::= PARTITION BY partition_list(B).                    { A = B; }
2172

2173
%type partition_list                                                              { SNodeList* }
2174
%destructor partition_list                                                        { nodesDestroyList($$); }
2175
partition_list(A) ::= partition_item(B).                                          { A = createNodeList(pCxt, B); }
2176
partition_list(A) ::= partition_list(B) NK_COMMA partition_item(C).               { A = addNodeToList(pCxt, B, C); }
2177

2178
partition_item(A) ::= expr_or_subquery(B).                                        { A = releaseRawExprNode(pCxt, B); }
2179
partition_item(A) ::= expr_or_subquery(B) column_alias(C).                        { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2180
partition_item(A) ::= expr_or_subquery(B) AS column_alias(C).                     { A = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, B), &C); }
2181

2182
twindow_clause_opt(A) ::= .                                                       { A = NULL; }
2183
twindow_clause_opt(A) ::= SESSION NK_LP column_reference(B) NK_COMMA
2184
  interval_sliding_duration_literal(C) NK_RP.                                     { A = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C)); }
2185
twindow_clause_opt(A) ::=
2186
  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); }
2187
twindow_clause_opt(A) ::= INTERVAL NK_LP interval_sliding_duration_literal(B)
2188
  NK_RP sliding_opt(C) fill_opt(D).                                               { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL, C, D); }
36,231,317✔
2189
twindow_clause_opt(A) ::=
2190
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2191
  interval_sliding_duration_literal(C) NK_RP
2192
  sliding_opt(D) fill_opt(E).                                                     { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), D, E); }
67,483✔
2193
twindow_clause_opt(A) ::=
2194
  INTERVAL NK_LP interval_sliding_duration_literal(B) NK_COMMA
2195
  AUTO(C) NK_RP sliding_opt(D) fill_opt(E).                                       { A = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, B), createDurationValueNode(pCxt, &C), D, E); }
151,208✔
2196
twindow_clause_opt(A) ::= EVENT_WINDOW START WITH search_condition(B)
2197
  END WITH search_condition(C) true_for_opt(D).                                   { A = createEventWindowNode(pCxt, B, C, D); }
3,530,125✔
2198
twindow_clause_opt(A) ::= COUNT_WINDOW NK_LP count_window_args(B) NK_RP.          { A = createCountWindowNodeFromArgs(pCxt, B); }
2199
twindow_clause_opt(A) ::=
2200
  ANOMALY_WINDOW NK_LP expr_or_subquery(B) NK_RP.                                 { A = createAnomalyWindowNode(pCxt, releaseRawExprNode(pCxt, B), NULL); }
×
2201
twindow_clause_opt(A) ::=
2202
  ANOMALY_WINDOW NK_LP expr_or_subquery(B) NK_COMMA NK_STRING(C) NK_RP.           { A = createAnomalyWindowNode(pCxt, releaseRawExprNode(pCxt, B), &C); }
×
2203

2204
extend_literal(A) ::= NK_INTEGER(B).                                              { A = createValueNode(pCxt, TSDB_DATA_TYPE_INT, &B); }
37,338✔
2205

2206
zeroth_literal(A) ::= signed_integer(B).                                          { A = B; }
2207
zeroth_literal(A) ::= NK_STRING(B).                                               { A = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &B); }
2208
zeroth_literal(A) ::= NK_BOOL(B).                                                 { A = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &B); }
2209

2210
%type state_window_opt                                                            { SNodeList* }
2211
%destructor state_window_opt                                                      { nodesDestroyList($$); }
2212
state_window_opt(A) ::= .                                                         { A = NULL; }
2213
state_window_opt(A) ::= NK_COMMA extend_literal(B).                               { A = createNodeList(pCxt, B); }
29,947✔
2214
state_window_opt(A) ::= NK_COMMA extend_literal(B) NK_COMMA zeroth_literal(C).    { A = addNodeToList(pCxt, createNodeList(pCxt, B), C); }
6,063✔
2215

2216
sliding_opt(A) ::= .                                                              { A = NULL; }
2217
sliding_opt(A) ::= SLIDING NK_LP interval_sliding_duration_literal(B) NK_RP.      { A = releaseRawExprNode(pCxt, B); }
2218

2219
interval_sliding_duration_literal(A) ::= NK_VARIABLE(B).                          { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2220
interval_sliding_duration_literal(A) ::= NK_STRING(B).                            { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2221
interval_sliding_duration_literal(A) ::= NK_INTEGER(B).                           { A = createRawExprNode(pCxt, &B, createDurationValueNode(pCxt, &B)); }
2222

2223
interp_fill_opt(A) ::= .                                                          { A = NULL; }
2224
interp_fill_opt(A) ::= fill_value(B).                                             { A = B; }
2225
interp_fill_opt(A) ::=
2226
  FILL NK_LP fill_position_mode_extension(B) NK_COMMA expression_list(C) NK_RP.   { A = createFillNode(pCxt, B, createNodeListNode(pCxt, C)); }
765,381✔
2227
interp_fill_opt(A) ::= FILL NK_LP interp_fill_mode(B) NK_RP.                      { A = createFillNode(pCxt, B, NULL); }
1,348,269✔
2228

2229
fill_opt(A) ::= .                                                                 { A = NULL; }
2230
fill_opt(A) ::= FILL NK_LP fill_mode(B) NK_RP.                                    { A = createFillNode(pCxt, B, NULL); }
2231
fill_opt(A) ::= fill_value(B).                                                    { A = B; }
2232

2233
fill_value(A) ::= FILL NK_LP VALUE NK_COMMA expression_list(B) NK_RP.             { A = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, B)); }
184,389✔
2234
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)); }
5,500✔
2235

2236
count_window_args(A) ::= NK_INTEGER(B).                                           { A = createCountWindowArgs(pCxt, &B, NULL, NULL); }
3,522,991✔
2237
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C).                    { A = createCountWindowArgs(pCxt, &B, &C, NULL); }
8,920✔
2238
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA column_name_list(D).              { A = createCountWindowArgs(pCxt, &B, NULL, D); }
22,042✔
2239
count_window_args(A) ::= NK_INTEGER(B) NK_COMMA NK_INTEGER(C) NK_COMMA column_name_list(D). { A = createCountWindowArgs(pCxt, &B, &C, D); }
17,949✔
2240

2241
%type fill_mode                                                                   { EFillMode }
2242
%destructor fill_mode                                                             { }
2243
fill_mode(A) ::= NONE.                                                            { A = FILL_MODE_NONE; }
4,473✔
2244
fill_mode(A) ::= NULL.                                                            { A = FILL_MODE_NULL; }
133,235✔
2245
fill_mode(A) ::= NULL_F.                                                          { A = FILL_MODE_NULL_F; }
17,329✔
2246
fill_mode(A) ::= LINEAR.                                                          { A = FILL_MODE_LINEAR; }
174,260✔
2247
fill_mode(A) ::= fill_position_mode(B).                                           { A = B; }
661,883✔
2248

2249
%type fill_position_mode                                                          { EFillMode }
2250
%destructor fill_position_mode                                                    { }
2251
fill_position_mode(A) ::= PREV.                                                   { A = FILL_MODE_PREV; }
232,386✔
2252
fill_position_mode(A) ::= NEXT.                                                   { A = FILL_MODE_NEXT; }
124,613✔
2253

2254
%type fill_position_mode_extension                                                { EFillMode }
2255
%destructor fill_position_mode_extension                                          { }
2256
fill_position_mode_extension(A) ::= fill_position_mode(B).                        { A = B; }
2257
fill_position_mode_extension(A) ::= NEAR.                                         { A = FILL_MODE_NEAR; }
1,432,700✔
2258

2259
%type interp_fill_mode                                                            { EFillMode }
2260
%destructor interp_fill_mode                                                      { }
2261
interp_fill_mode(A) ::= fill_mode(B).                                             { A = B; }
2262
interp_fill_mode(A) ::= NEAR.                                                     { A = FILL_MODE_NEAR; }
2263

2264
%type group_by_clause_opt                                                         { SNodeList* }
2265
%destructor group_by_clause_opt                                                   { nodesDestroyList($$); }
2266
group_by_clause_opt(A) ::= .                                                      { A = NULL; }
2267
group_by_clause_opt(A) ::= GROUP BY group_by_list(B).                             { A = B; }
2268

2269
%type group_by_list                                                               { SNodeList* }
2270
%destructor group_by_list                                                         { nodesDestroyList($$); }
2271
group_by_list(A) ::= expr_or_subquery(B).                                         { A = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, B))); }
38,858,797✔
2272
group_by_list(A) ::= group_by_list(B) NK_COMMA expr_or_subquery(C).               { A = addNodeToList(pCxt, B, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, C))); }
3,606,463✔
2273

2274
having_clause_opt(A) ::= .                                                        { A = NULL; }
2275
having_clause_opt(A) ::= HAVING search_condition(B).                              { A = B; }
2276

2277
range_opt(A) ::= .                                                                { A = NULL; }
2278
range_opt(A) ::=
2279
  RANGE NK_LP expr_or_subquery(B) NK_COMMA expr_or_subquery(C) NK_COMMA expr_or_subquery(D) NK_RP.              { 
2280
                                                                                    A = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D)); }
70,004✔
2281
range_opt(A) ::=
2282
  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); }
1,713,125✔
2283
range_opt(A) ::=
2284
  RANGE NK_LP expr_or_subquery(B) NK_RP.                                          { A = createInterpTimePoint(pCxt, releaseRawExprNode(pCxt, B)); }
53,847✔
2285

2286
every_opt(A) ::= .                                                                { A = NULL; }
2287
every_opt(A) ::= EVERY NK_LP duration_literal(B) NK_RP.                           { A = releaseRawExprNode(pCxt, B); }
2288

2289
true_for_opt(A) ::= .                                                             { A = NULL; }
2290
true_for_opt(A) ::= TRUE_FOR NK_LP interval_sliding_duration_literal(B) NK_RP.    { A = releaseRawExprNode(pCxt, B); }
2291

2292
/************************************************ query_expression ****************************************************/
2293
query_expression(A) ::= query_simple(B)
2294
  order_by_clause_opt(C) slimit_clause_opt(D) limit_clause_opt(E).                {
2295
                                                                                    A = addOrderByClause(pCxt, B, C);
436,424,596✔
2296
                                                                                    A = addSlimitClause(pCxt, A, D);
436,414,250✔
2297
                                                                                    A = addLimitClause(pCxt, A, E);
436,416,990✔
2298
                                                                                  }
2299

2300
query_simple(A) ::= query_specification(B).                                       { A = B; }
2301
query_simple(A) ::= union_query_expression(B).                                    { A = B; }
2302

2303
union_query_expression(A) ::=
2304
  query_simple_or_subquery(B) UNION ALL query_simple_or_subquery(C).              { A = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, B, C); }
16,043,130✔
2305
union_query_expression(A) ::=
2306
  query_simple_or_subquery(B) UNION query_simple_or_subquery(C).                  { A = createSetOperator(pCxt, SET_OP_TYPE_UNION, B, C); }
15,839,345✔
2307

2308
query_simple_or_subquery(A) ::= query_simple(B).                                  { A = B; }
2309
query_simple_or_subquery(A) ::= subquery(B).                                      { A = releaseRawExprNode(pCxt, B); }
2310

2311
query_or_subquery(A) ::= query_expression(B).                                     { A = B; }
2312
query_or_subquery(A) ::= subquery(B).                                             { A = releaseRawExprNode(pCxt, B); }
2313

2314
%type order_by_clause_opt                                                         { SNodeList* }
2315
%destructor order_by_clause_opt                                                   { nodesDestroyList($$); }
2316
order_by_clause_opt(A) ::= .                                                      { A = NULL; }
2317
order_by_clause_opt(A) ::= ORDER BY sort_specification_list(B).                   { A = B; }
2318

2319
slimit_clause_opt(A) ::= .                                                        { A = NULL; }
2320
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B).                              { A = createLimitNode(pCxt, B, NULL); }
2321
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(B) SOFFSET unsigned_integer(C).  { A = createLimitNode(pCxt, B, C); }
3,193,174✔
2322
slimit_clause_opt(A) ::= SLIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B). { A = createLimitNode(pCxt, B, C); }
269,597✔
2323

2324
limit_clause_opt(A) ::= .                                                         { A = NULL; }
2325
limit_clause_opt(A) ::= LIMIT unsigned_integer(B).                                { A = createLimitNode(pCxt, B, NULL); }
2326
limit_clause_opt(A) ::= LIMIT unsigned_integer(B) OFFSET unsigned_integer(C).     { A = createLimitNode(pCxt, B, C); }
2327
limit_clause_opt(A) ::= LIMIT unsigned_integer(C) NK_COMMA unsigned_integer(B).   { A = createLimitNode(pCxt, B, C); }
2328

2329
/************************************************ subquery ************************************************************/
2330
subquery(A) ::= NK_LP(B) query_expression(C) NK_RP(D).                            { A = createRawExprNodeExt(pCxt, &B, &D, C); }
263,973,341✔
2331
subquery(A) ::= NK_LP(B) subquery(C) NK_RP(D).                                    { A = createRawExprNodeExt(pCxt, &B, &D, releaseRawExprNode(pCxt, C)); }
2332

2333
/************************************************ search_condition ****************************************************/
2334
search_condition(A) ::= common_expression(B).                                     { A = releaseRawExprNode(pCxt, B); }
2335

2336
/************************************************ sort_specification_list *********************************************/
2337
%type sort_specification_list                                                     { SNodeList* }
2338
%destructor sort_specification_list                                               { nodesDestroyList($$); }
2339
sort_specification_list(A) ::= sort_specification(B).                             { A = createNodeList(pCxt, B); }
2340
sort_specification_list(A) ::=
2341
  sort_specification_list(B) NK_COMMA sort_specification(C).                      { A = addNodeToList(pCxt, B, C); }
2342

2343
sort_specification(A) ::=
2344
  expr_or_subquery(B) ordering_specification_opt(C) null_ordering_opt(D).         { A = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, B), C, D); }
121,612,334✔
2345

2346
%type ordering_specification_opt EOrder
2347
%destructor ordering_specification_opt                                            { }
2348
ordering_specification_opt(A) ::= .                                               { A = ORDER_ASC; }
114,216,450✔
2349
ordering_specification_opt(A) ::= ASC.                                            { A = ORDER_ASC; }
4,388,781✔
2350
ordering_specification_opt(A) ::= DESC.                                           { A = ORDER_DESC; }
3,007,858✔
2351

2352
%type null_ordering_opt ENullOrder
2353
%destructor null_ordering_opt                                                     { }
2354
null_ordering_opt(A) ::= .                                                        { A = NULL_ORDER_DEFAULT; }
121,612,286✔
2355
null_ordering_opt(A) ::= NULLS FIRST.                                             { A = NULL_ORDER_FIRST; }
1,558✔
2356
null_ordering_opt(A) ::= NULLS LAST.                                              { A = NULL_ORDER_LAST; }
×
2357

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

2362
column_options(A) ::= .                                                           { A = createDefaultColumnOptions(pCxt); }
2363
column_options(A) ::= column_options(B) PRIMARY KEY.                              { A = setColumnOptionsPK(pCxt, B); }
2364
column_options(A) ::= column_options(B) COMPOSITE KEY.                            { A = setColumnOptionsPK(pCxt, B); }
2365
column_options(A) ::= column_options(B) NK_ID(C) NK_STRING(D).                    { A = setColumnOptions(pCxt, B, &C, &D); }
2,924,751✔
2366
column_options(A) ::= column_options(B) FROM column_ref(C).                       { A = setColumnReference(pCxt, B, C); }
88,140,301✔
2367

2368
column_ref(A) ::= column_name_triplet(B).                                            { A = createColumnRefNodeByName(pCxt, B); }
142,117,664✔
2369

2370
%type column_name_triplet                                                            { STokenTriplet* }
2371
%destructor column_name_triplet                                                      { }
2372
column_name_triplet(A) ::= NK_ID(B).                                                 { A = createTokenTriplet(pCxt, B); }
142,117,664✔
2373
column_name_triplet(A) ::= column_name_triplet(B) NK_DOT NK_ID(C).                   { A = setColumnName(pCxt, B, C); }
142,345,752✔
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