sql.y 42.6 KB
Newer Older
H
hzcheng 已提交
1 2 3 4
//lemon parser file to generate sql parse by using finite-state-machine code used to parse sql
//usage: lemon sql.y
%token_prefix TK_

H
Haojun Liao 已提交
5 6
%token_type {SStrToken}
%default_type {SStrToken}
H
hzcheng 已提交
7 8
%extra_argument {SSqlInfo* pInfo}

wmmhello's avatar
wmmhello 已提交
9
%fallback ID BOOL TINYINT SMALLINT INTEGER BIGINT FLOAT DOUBLE STRING TIMESTAMP BINARY NCHAR JSON.
H
hzcheng 已提交
10 11 12 13

%left OR.
%left AND.
%right NOT.
14
%left EQ NE ISNULL NOTNULL IS LIKE MATCH NMATCH CONTAINS GLOB BETWEEN IN.
H
hzcheng 已提交
15
%left GT GE LT LE.
X
xywang 已提交
16
%left BITAND BITOR BITXOR LSHIFT RSHIFT.
H
hzcheng 已提交
17 18 19 20
%left PLUS MINUS.
%left DIVIDE TIMES.
%left STAR SLASH REM.
%right UMINUS UPLUS BITNOT.
21
%right ARROW.
H
hzcheng 已提交
22 23 24 25 26 27 28

%include {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stdbool.h>
H
Haojun Liao 已提交
29 30
#include "qSqlparser.h"
#include "tcmdtype.h"
H
Haojun Liao 已提交
31
#include "ttoken.h"
H
Haojun Liao 已提交
32
#include "ttokendef.h"
H
hzcheng 已提交
33
#include "tutil.h"
H
Haojun Liao 已提交
34
#include "tvariant.h"
H
hzcheng 已提交
35 36 37
}

%syntax_error {
38
  pInfo->valid = false;
H
Haojun Liao 已提交
39
  int32_t outputBufLen = tListLen(pInfo->msg);
H
hzcheng 已提交
40 41 42 43 44 45 46 47 48
  int32_t len = 0;

  if(TOKEN.z) {
    char msg[] = "syntax error near \"%s\"";
    int32_t sqlLen = strlen(&TOKEN.z[0]);

    if (sqlLen + sizeof(msg)/sizeof(msg[0]) + 1 > outputBufLen) {
        char tmpstr[128] = {0};
        memcpy(tmpstr, &TOKEN.z[0], sizeof(tmpstr)/sizeof(tmpstr[0]) - 1);
H
Haojun Liao 已提交
49
        len = sprintf(pInfo->msg, msg, tmpstr);
H
hzcheng 已提交
50
    } else {
H
Haojun Liao 已提交
51
        len = sprintf(pInfo->msg, msg, &TOKEN.z[0]);
H
hzcheng 已提交
52 53 54
    }

  } else {
H
Haojun Liao 已提交
55
    len = sprintf(pInfo->msg, "Incomplete SQL statement");
H
hzcheng 已提交
56 57 58 59 60 61 62 63 64 65
  }

  assert(len <= outputBufLen);
}

%parse_accept       {}

program ::= cmd.    {}

//////////////////////////////////THE SHOW STATEMENT///////////////////////////////////////////
66
cmd ::= SHOW DATABASES.  { setShowOptions(pInfo, TSDB_MGMT_TABLE_DB, 0, 0);}
D
fix bug  
dapan1121 已提交
67
cmd ::= SHOW TOPICS.     { setShowOptions(pInfo, TSDB_MGMT_TABLE_TP, 0, 0);}
D
dapan1121 已提交
68
cmd ::= SHOW FUNCTIONS.  { setShowOptions(pInfo, TSDB_MGMT_TABLE_FUNCTION, 0, 0);}
69 70 71 72 73 74 75 76 77
cmd ::= SHOW MNODES.     { setShowOptions(pInfo, TSDB_MGMT_TABLE_MNODE, 0, 0);}
cmd ::= SHOW DNODES.     { setShowOptions(pInfo, TSDB_MGMT_TABLE_DNODE, 0, 0);}
cmd ::= SHOW ACCOUNTS.   { setShowOptions(pInfo, TSDB_MGMT_TABLE_ACCT, 0, 0);}
cmd ::= SHOW USERS.      { setShowOptions(pInfo, TSDB_MGMT_TABLE_USER, 0, 0);}

cmd ::= SHOW MODULES.    { setShowOptions(pInfo, TSDB_MGMT_TABLE_MODULE, 0, 0);  }
cmd ::= SHOW QUERIES.    { setShowOptions(pInfo, TSDB_MGMT_TABLE_QUERIES, 0, 0);  }
cmd ::= SHOW CONNECTIONS.{ setShowOptions(pInfo, TSDB_MGMT_TABLE_CONNS, 0, 0);}
cmd ::= SHOW STREAMS.    { setShowOptions(pInfo, TSDB_MGMT_TABLE_STREAMS, 0, 0);  }
H
Haojun Liao 已提交
78
cmd ::= SHOW VARIABLES.  { setShowOptions(pInfo, TSDB_MGMT_TABLE_VARIABLES, 0, 0);  }
79 80 81 82
cmd ::= SHOW SCORES.     { setShowOptions(pInfo, TSDB_MGMT_TABLE_SCORES, 0, 0);   }
cmd ::= SHOW GRANTS.     { setShowOptions(pInfo, TSDB_MGMT_TABLE_GRANTS, 0, 0);   }

cmd ::= SHOW VNODES.                { setShowOptions(pInfo, TSDB_MGMT_TABLE_VNODES, 0, 0); }
83
cmd ::= SHOW VNODES ids(X).     { setShowOptions(pInfo, TSDB_MGMT_TABLE_VNODES, &X, 0); }
L
lihui 已提交
84

85

H
Haojun Liao 已提交
86
%type dbPrefix {SStrToken}
87
dbPrefix(A) ::=.                   {A.n = 0; A.type = 0;}
H
hzcheng 已提交
88 89
dbPrefix(A) ::= ids(X) DOT.        {A = X;  }

H
Haojun Liao 已提交
90
%type cpxName {SStrToken}
H
hzcheng 已提交
91 92
cpxName(A) ::= .             {A.n = 0;  }
cpxName(A) ::= DOT ids(Y).   {A = Y; A.n += 1;    }
93 94
cmd ::= SHOW CREATE TABLE ids(X) cpxName(Y).    {
   X.n += Y.n;
H
Haojun Liao 已提交
95
   setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_TABLE, 1, &X);
W
wpan 已提交
96
}
97 98 99
cmd ::= SHOW CREATE STABLE ids(X) cpxName(Y).    {
   X.n += Y.n;
   setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_STABLE, 1, &X);
100
}
101 102

cmd ::= SHOW CREATE DATABASE ids(X). {
H
Haojun Liao 已提交
103
  setDCLSqlElems(pInfo, TSDB_SQL_SHOW_CREATE_DATABASE, 1, &X);
104
}
105

H
hzcheng 已提交
106
cmd ::= SHOW dbPrefix(X) TABLES.         {
107
    setShowOptions(pInfo, TSDB_MGMT_TABLE_TABLE, &X, 0);
H
hzcheng 已提交
108 109
}

110
cmd ::= SHOW dbPrefix(X) TABLES LIKE STRING(Y).         {
111
    setShowOptions(pInfo, TSDB_MGMT_TABLE_TABLE, &X, &Y);
H
hzcheng 已提交
112 113 114
}

cmd ::= SHOW dbPrefix(X) STABLES.      {
115
    setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &X, 0);
H
hzcheng 已提交
116 117
}

118
cmd ::= SHOW dbPrefix(X) STABLES LIKE STRING(Y).      {
H
Haojun Liao 已提交
119
    SStrToken token;
H
Haojun Liao 已提交
120
    tSetDbName(&token, &X);
121
    setShowOptions(pInfo, TSDB_MGMT_TABLE_METRIC, &token, &Y);
H
hzcheng 已提交
122 123 124
}

cmd ::= SHOW dbPrefix(X) VGROUPS.    {
H
Haojun Liao 已提交
125
    SStrToken token;
H
Haojun Liao 已提交
126
    tSetDbName(&token, &X);
127
    setShowOptions(pInfo, TSDB_MGMT_TABLE_VGROUP, &token, 0);
H
hzcheng 已提交
128 129
}

130 131
// show db.alive
cmd ::= SHOW dbPrefix(X) ALIVE.    {
132 133
    SStrToken token;
    tSetDbName(&token, &X);
134
    setShowOptions(pInfo, TSDB_MGMT_ALIVE_DB, &token, 0);
135 136
}

137 138
// show cluster alive
cmd ::= SHOW CLUSTER ALIVE.    {
139
    SStrToken token;
140
    setShowOptions(pInfo, TSDB_MGMT_ALIVE_CLUSTER, &token, 0);
141 142
}

H
hzcheng 已提交
143 144 145
//drop configure for tables
cmd ::= DROP TABLE ifexists(Y) ids(X) cpxName(Z).   {
    X.n += Z.n;
D
fix bug  
dapan1121 已提交
146
    setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, -1, -1);
H
hzcheng 已提交
147 148
}

D
dapan1121 已提交
149 150 151
//drop stable
cmd ::= DROP STABLE ifexists(Y) ids(X) cpxName(Z).   {
    X.n += Z.n;
D
fix bug  
dapan1121 已提交
152
    setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, -1, TSDB_SUPER_TABLE);
D
dapan1121 已提交
153 154
}

D
fix bug  
dapan1121 已提交
155 156
cmd ::= DROP DATABASE ifexists(Y) ids(X).    { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_DEFAULT, -1); }
cmd ::= DROP TOPIC ifexists(Y) ids(X).    { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_TOPIC, -1); }
D
dapan1121 已提交
157
cmd ::= DROP FUNCTION ids(X).    { setDropFuncInfo(pInfo, TSDB_SQL_DROP_FUNCTION, &X); }
D
fix bug  
dapan1121 已提交
158

H
Haojun Liao 已提交
159 160 161
cmd ::= DROP DNODE ids(X).       { setDCLSqlElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X);    }
cmd ::= DROP USER ids(X).        { setDCLSqlElems(pInfo, TSDB_SQL_DROP_USER, 1, &X);     }
cmd ::= DROP ACCOUNT ids(X).     { setDCLSqlElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X);  }
H
hzcheng 已提交
162 163

/////////////////////////////////THE USE STATEMENT//////////////////////////////////////////
H
Haojun Liao 已提交
164
cmd ::= USE ids(X).              { setDCLSqlElems(pInfo, TSDB_SQL_USE_DB, 1, &X);}
H
hzcheng 已提交
165 166 167 168

/////////////////////////////////THE DESCRIBE STATEMENT/////////////////////////////////////
cmd ::= DESCRIBE ids(X) cpxName(Y). {
    X.n += Y.n;
H
Haojun Liao 已提交
169
    setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
H
hzcheng 已提交
170
}
W
wpan 已提交
171

S
SunShine Chan 已提交
172 173 174 175
cmd ::= DESC ids(X) cpxName(Y). {
    X.n += Y.n;
    setDCLSqlElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &X);
}
H
hzcheng 已提交
176
/////////////////////////////////THE ALTER STATEMENT////////////////////////////////////////
177 178 179
cmd ::= ALTER USER ids(X) PASS ids(Y).          { setAlterUserSql(pInfo, TSDB_ALTER_USER_PASSWD,     &X, &Y,   NULL, NULL);}
cmd ::= ALTER USER ids(X) PRIVILEGE ids(Y).     { setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &X, NULL, &Y,   NULL);}
cmd ::= ALTER USER ids(X) TAGS ids(Y).          { setAlterUserSql(pInfo, TSDB_ALTER_USER_TAGS,       &X, NULL, NULL, &Y);}
H
Haojun Liao 已提交
180 181 182 183
cmd ::= ALTER DNODE ids(X) ids(Y).              { setDCLSqlElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &X, &Y);          }
cmd ::= ALTER DNODE ids(X) ids(Y) ids(Z).       { setDCLSqlElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &X, &Y, &Z);      }
cmd ::= ALTER LOCAL ids(X).                     { setDCLSqlElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X);              }
cmd ::= ALTER LOCAL ids(X) ids(Y).              { setDCLSqlElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y);          }
H
Haojun Liao 已提交
184
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SStrToken t = {0};  setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
D
fix bug  
dapan1121 已提交
185
cmd ::= ALTER TOPIC ids(X) alter_topic_optr(Y). { SStrToken t = {0};  setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
H
hzcheng 已提交
186

D
dapan1121 已提交
187 188
cmd ::= ALTER ACCOUNT ids(X) acct_optr(Z).      { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, NULL, &Z);}
cmd ::= ALTER ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).      { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, &Y, &Z);}
S
slguan 已提交
189

Y
yihaoDeng 已提交
190 191
////////////////////////////// COMPACT STATEMENT //////////////////////////////////////////////

H
Haojun Liao 已提交
192
cmd ::= COMPACT VNODES IN LP exprlist(Y) RP.    { setCompactVnodeSql(pInfo, TSDB_SQL_COMPACT_VNODE, Y);}
Y
yihaoDeng 已提交
193

H
hzcheng 已提交
194 195 196
// An IDENTIFIER can be a generic identifier, or one of several keywords.
// Any non-standard keyword can also be an identifier.
// And "ids" is an identifer-or-string.
H
Haojun Liao 已提交
197
%type ids {SStrToken}
H
hzcheng 已提交
198 199 200
ids(A) ::= ID(X).        {A = X; }
ids(A) ::= STRING(X).    {A = X; }

H
Haojun Liao 已提交
201
%type ifexists {SStrToken}
202 203
ifexists(X) ::= IF EXISTS.          { X.n = 1;}
ifexists(X) ::= .                   { X.n = 0;}
H
hzcheng 已提交
204

H
Haojun Liao 已提交
205
%type ifnotexists {SStrToken}
206 207
ifnotexists(X) ::= IF NOT EXISTS.   { X.n = 1;}
ifnotexists(X) ::= .                { X.n = 0;}
H
hzcheng 已提交
208 209

/////////////////////////////////THE CREATE STATEMENT///////////////////////////////////////
S
slguan 已提交
210
//create option for dnode/db/user/account
H
Haojun Liao 已提交
211
cmd ::= CREATE DNODE   ids(X).     { setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &X);}
S
slguan 已提交
212
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
D
dapan1121 已提交
213
                                { setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
H
Haojun Liao 已提交
214
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y).  { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
D
fix bug  
dapan1121 已提交
215
cmd ::= CREATE TOPIC ifnotexists(Z) ids(X) topic_optr(Y).  { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
D
dapan1121 已提交
216 217
cmd ::= CREATE FUNCTION ids(X) AS ids(Y) OUTPUTTYPE typename(Z) bufsize(B).   { setCreateFuncInfo(pInfo, TSDB_SQL_CREATE_FUNCTION, &X, &Y, &Z, &B, 1);}
cmd ::= CREATE AGGREGATE FUNCTION ids(X) AS ids(Y) OUTPUTTYPE typename(Z) bufsize(B).   { setCreateFuncInfo(pInfo, TSDB_SQL_CREATE_FUNCTION, &X, &Y, &Z, &B, 2);}
218 219
cmd ::= CREATE USER ids(X) PASS ids(Y).     { setCreateUserSql(pInfo, &X, &Y, NULL);}
cmd ::= CREATE USER ids(X) PASS ids(Y) TAGS ids(Z).     { setCreateUserSql(pInfo, &X, &Y, &Z);}
H
hzcheng 已提交
220

D
dapan1121 已提交
221 222 223
bufsize(Y) ::= .                                { Y.n = 0;   }
bufsize(Y) ::= BUFSIZE INTEGER(X).              { Y = X;     }

224 225
pps(Y) ::= .                                { Y.n = 0;   }
pps(Y) ::= PPS INTEGER(X).                  { Y = X;     }
S
slguan 已提交
226

227 228
tseries(Y) ::= .                            { Y.n = 0;   }
tseries(Y) ::= TSERIES INTEGER(X).          { Y = X;     }
S
slguan 已提交
229

230 231
dbs(Y) ::= .                                { Y.n = 0;   }
dbs(Y) ::= DBS INTEGER(X).                  { Y = X;     }
S
slguan 已提交
232

233 234
streams(Y) ::= .                            { Y.n = 0;   }
streams(Y) ::= STREAMS INTEGER(X).          { Y = X;     }
S
slguan 已提交
235

236 237
storage(Y) ::= .                            { Y.n = 0;   }
storage(Y) ::= STORAGE INTEGER(X).          { Y = X;     }
S
slguan 已提交
238

239 240
qtime(Y) ::= .                              { Y.n = 0;   }
qtime(Y) ::= QTIME INTEGER(X).              { Y = X;     }
S
slguan 已提交
241

242 243
users(Y) ::= .                              { Y.n = 0;   }
users(Y) ::= USERS INTEGER(X).              { Y = X;     }
S
slguan 已提交
244

245 246
conns(Y) ::= .                              { Y.n = 0;   }
conns(Y) ::= CONNS INTEGER(X).              { Y = X;     }
S
slguan 已提交
247

248 249
state(Y) ::= .                              { Y.n = 0;   }
state(Y) ::= STATE ids(X).                  { Y = X;     }
S
slguan 已提交
250

H
Haojun Liao 已提交
251
%type acct_optr {SCreateAcctInfo}
S
slguan 已提交
252
acct_optr(Y) ::= pps(C) tseries(D) storage(P) streams(F) qtime(Q) dbs(E) users(K) conns(L) state(M). {
253 254 255 256 257 258 259 260
    Y.maxUsers   = (K.n>0)?atoi(K.z):-1;
    Y.maxDbs     = (E.n>0)?atoi(E.z):-1;
    Y.maxTimeSeries = (D.n>0)?atoi(D.z):-1;
    Y.maxStreams = (F.n>0)?atoi(F.z):-1;
    Y.maxPointsPerSecond     = (C.n>0)?atoi(C.z):-1;
    Y.maxStorage = (P.n>0)?strtoll(P.z, NULL, 10):-1;
    Y.maxQueryTime   = (Q.n>0)?strtoll(Q.z, NULL, 10):-1;
    Y.maxConnections   = (L.n>0)?atoi(L.z):-1;
S
slguan 已提交
261 262 263
    Y.stat    = M;
}

D
dapan1121 已提交
264
%type intitemlist {SArray*}
265
%destructor intitemlist {taosArrayDestroy(&$$);}
D
dapan1121 已提交
266 267 268 269 270

%type intitem {tVariant}
intitemlist(A) ::= intitemlist(X) COMMA intitem(Y). { A = tVariantListAppend(X, &Y, -1);    }
intitemlist(A) ::= intitem(X).                      { A = tVariantListAppend(NULL, &X, -1); }

271
intitem(A) ::= INTEGER(X).      { toTSDBType(X.type); tVariantCreate(&A, &X); }
D
dapan1121 已提交
272

H
Haojun Liao 已提交
273
%type keep {SArray*}
274
%destructor keep {taosArrayDestroy(&$$);}
D
dapan1121 已提交
275
keep(Y)    ::= KEEP intitemlist(X).           { Y = X; }
276 277 278

cache(Y)   ::= CACHE INTEGER(X).              { Y = X; }
replica(Y) ::= REPLICA INTEGER(X).            { Y = X; }
279
quorum(Y)  ::= QUORUM INTEGER(X).             { Y = X; }
280
days(Y)    ::= DAYS INTEGER(X).               { Y = X; }
H
hjxilinx 已提交
281 282 283
minrows(Y) ::= MINROWS INTEGER(X).            { Y = X; }
maxrows(Y) ::= MAXROWS INTEGER(X).            { Y = X; }
blocks(Y)  ::= BLOCKS INTEGER(X).             { Y = X; }
284
ctime(Y)   ::= CTIME INTEGER(X).              { Y = X; }
H
hjxilinx 已提交
285
wal(Y)     ::= WAL INTEGER(X).                { Y = X; }
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
286
fsync(Y)   ::= FSYNC INTEGER(X).              { Y = X; }
287 288
comp(Y)    ::= COMP INTEGER(X).               { Y = X; }
prec(Y)    ::= PRECISION STRING(X).           { Y = X; }
289
update(Y)  ::= UPDATE INTEGER(X).             { Y = X; }
D
dapan1121 已提交
290
cachelast(Y) ::= CACHELAST INTEGER(X).        { Y = X; }
D
fix bug  
dapan1121 已提交
291
partitions(Y) ::= PARTITIONS INTEGER(X).      { Y = X; }
292

H
Haojun Liao 已提交
293
%type db_optr {SCreateDbInfo}
D
fix bug  
dapan1121 已提交
294
db_optr(Y) ::= . {setDefaultCreateDbOption(&Y); Y.dbType = TSDB_DB_TYPE_DEFAULT;}
H
hjxilinx 已提交
295

296 297
db_optr(Y) ::= db_optr(Z) cache(X).          { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) replica(X).        { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
298
db_optr(Y) ::= db_optr(Z) quorum(X).         { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
299
db_optr(Y) ::= db_optr(Z) days(X).           { Y = Z; Y.daysPerFile = strtol(X.z, NULL, 10); }
H
hjxilinx 已提交
300 301 302
db_optr(Y) ::= db_optr(Z) minrows(X).        { Y = Z; Y.minRowsPerBlock = strtod(X.z, NULL); }
db_optr(Y) ::= db_optr(Z) maxrows(X).        { Y = Z; Y.maxRowsPerBlock = strtod(X.z, NULL); }
db_optr(Y) ::= db_optr(Z) blocks(X).         { Y = Z; Y.numOfBlocks = strtol(X.z, NULL, 10); }
303
db_optr(Y) ::= db_optr(Z) ctime(X).          { Y = Z; Y.commitTime = strtol(X.z, NULL, 10); }
H
hjxilinx 已提交
304
db_optr(Y) ::= db_optr(Z) wal(X).            { Y = Z; Y.walLevel = strtol(X.z, NULL, 10); }
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
305
db_optr(Y) ::= db_optr(Z) fsync(X).          { Y = Z; Y.fsyncPeriod = strtol(X.z, NULL, 10); }
306 307 308
db_optr(Y) ::= db_optr(Z) comp(X).           { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); }
db_optr(Y) ::= db_optr(Z) prec(X).           { Y = Z; Y.precision = X; }
db_optr(Y) ::= db_optr(Z) keep(X).           { Y = Z; Y.keep = X; }
Y
yihaoDeng 已提交
309
db_optr(Y) ::= db_optr(Z) update(X).         { Y = Z; Y.update = strtol(X.z, NULL, 10); }
D
dapan1121 已提交
310
db_optr(Y) ::= db_optr(Z) cachelast(X).      { Y = Z; Y.cachelast = strtol(X.z, NULL, 10); }
311

D
fix bug  
dapan1121 已提交
312 313 314 315 316
%type topic_optr {SCreateDbInfo}

topic_optr(Y) ::= db_optr(Z).                       { Y = Z; Y.dbType = TSDB_DB_TYPE_TOPIC; }
topic_optr(Y) ::= topic_optr(Z) partitions(X).      { Y = Z; Y.partitions = strtol(X.z, NULL, 10); }

H
Haojun Liao 已提交
317
%type alter_db_optr {SCreateDbInfo}
D
fix bug  
dapan1121 已提交
318
alter_db_optr(Y) ::= . { setDefaultCreateDbOption(&Y); Y.dbType = TSDB_DB_TYPE_DEFAULT;}
S
slguan 已提交
319 320

alter_db_optr(Y) ::= alter_db_optr(Z) replica(X).     { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
321
alter_db_optr(Y) ::= alter_db_optr(Z) quorum(X).      { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
H
hjxilinx 已提交
322 323 324
alter_db_optr(Y) ::= alter_db_optr(Z) keep(X).        { Y = Z; Y.keep = X; }
alter_db_optr(Y) ::= alter_db_optr(Z) blocks(X).      { Y = Z; Y.numOfBlocks = strtol(X.z, NULL, 10); }
alter_db_optr(Y) ::= alter_db_optr(Z) comp(X).        { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); }
325
alter_db_optr(Y) ::= alter_db_optr(Z) update(X).      { Y = Z; Y.update = strtol(X.z, NULL, 10); }
D
dapan1121 已提交
326
alter_db_optr(Y) ::= alter_db_optr(Z) cachelast(X).   { Y = Z; Y.cachelast = strtol(X.z, NULL, 10); }
327
alter_db_optr(Y) ::= alter_db_optr(Z) minrows(X).     { Y = Z; Y.minRowsPerBlock = strtol(X.z, NULL, 10); }
H
hzcheng 已提交
328

329 330
// dynamically update the following two parameters are not allowed.
//alter_db_optr(Y) ::= alter_db_optr(Z) fsync(X).       { Y = Z; Y.fsyncPeriod = strtol(X.z, NULL, 10); }
H
Haojun Liao 已提交
331 332
//alter_db_optr(Y) ::= alter_db_optr(Z) wal(X).         { Y = Z; Y.walLevel = strtol(X.z, NULL, 10); } not support yet

D
fix bug  
dapan1121 已提交
333 334 335 336 337
%type alter_topic_optr {SCreateDbInfo}

alter_topic_optr(Y) ::= alter_db_optr(Z).                       { Y = Z; Y.dbType = TSDB_DB_TYPE_TOPIC; }
alter_topic_optr(Y) ::= alter_topic_optr(Z) partitions(X).      { Y = Z; Y.partitions = strtol(X.z, NULL, 10); }

H
hzcheng 已提交
338
%type typename {TAOS_FIELD}
339
typename(A) ::= ids(X). {
dengyihao's avatar
dengyihao 已提交
340
  X.type = 0;
H
Haojun Liao 已提交
341
  tSetColumnType (&A, &X);
dengyihao's avatar
dengyihao 已提交
342
}
H
hzcheng 已提交
343 344 345

//define binary type, e.g., binary(10), nchar(10)
typename(A) ::= ids(X) LP signed(Y) RP.    {
346 347
  if (Y <= 0) {
    X.type = 0;
H
Haojun Liao 已提交
348
    tSetColumnType(&A, &X);
349 350
  } else {
    X.type = -Y;  // negative value of name length
H
Haojun Liao 已提交
351
    tSetColumnType(&A, &X);
352
  }
H
hzcheng 已提交
353 354
}

355 356 357 358
// define the unsigned number type
typename(A) ::= ids(X) UNSIGNED(Z). {
  X.type = 0;
  X.n = ((Z.z + Z.n) - X.z);
H
Haojun Liao 已提交
359
  tSetColumnType (&A, &X);
360 361
}

362 363
%type signed {int64_t}
signed(A) ::= INTEGER(X).         { A = strtol(X.z, NULL, 10); }
H
hzcheng 已提交
364 365 366 367
signed(A) ::= PLUS INTEGER(X).    { A = strtol(X.z, NULL, 10); }
signed(A) ::= MINUS INTEGER(X).   { A = -strtol(X.z, NULL, 10);}

////////////////////////////////// The CREATE TABLE statement ///////////////////////////////
368 369
cmd ::= CREATE TABLE  create_table_args.  {}
cmd ::= CREATE TABLE  create_stable_args. {}
D
dapan1121 已提交
370
cmd ::= CREATE STABLE create_stable_args. {}
371 372
cmd ::= CREATE TABLE create_table_list(Z). { pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = Z;}

H
Haojun Liao 已提交
373
%type create_table_list{SCreateTableSql*}
H
Haojun Liao 已提交
374
%destructor create_table_list{destroyCreateTableSql($$);}
375
create_table_list(A) ::= create_from_stable(Z). {
H
Haojun Liao 已提交
376
  SCreateTableSql* pCreateTable = calloc(1, sizeof(SCreateTableSql));
377 378 379 380 381 382 383 384 385 386
  pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo));

  taosArrayPush(pCreateTable->childTableInfo, &Z);
  pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE;
  A = pCreateTable;
}

create_table_list(A) ::= create_table_list(X) create_from_stable(Z). {
  taosArrayPush(X->childTableInfo, &Z);
  A = X;
H
hzcheng 已提交
387 388
}

H
Haojun Liao 已提交
389
%type create_table_args{SCreateTableSql*}
390
create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP. {
H
Haojun Liao 已提交
391
  A = tSetCreateTableInfo(X, NULL, NULL, TSQL_CREATE_TABLE);
D
dapan1121 已提交
392
  setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
393 394 395

  V.n += Z.n;
  setCreatedTableName(pInfo, &V, &U);
H
hzcheng 已提交
396 397
}

398
// create super table
H
Haojun Liao 已提交
399
%type create_stable_args{SCreateTableSql*}
D
dapan1121 已提交
400
create_stable_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP TAGS LP columnlist(Y) RP. {
H
Haojun Liao 已提交
401
  A = tSetCreateTableInfo(X, Y, NULL, TSQL_CREATE_STABLE);
D
dapan1121 已提交
402
  setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
403 404 405

  V.n += Z.n;
  setCreatedTableName(pInfo, &V, &U);
H
hzcheng 已提交
406 407
}

408 409
// create table by using super table
// create table table_name using super_table_name tags(tag_values1, tag_values2)
410 411 412 413
%type create_from_stable{SCreatedTableInfo}
create_from_stable(A) ::= ifnotexists(U) ids(V) cpxName(Z) USING ids(X) cpxName(F) TAGS LP tagitemlist(Y) RP.  {
  X.n += F.n;
  V.n += Z.n;
414
  A = createNewChildTableInfo(&X, NULL, Y, &V, &U);
H
hzcheng 已提交
415 416
}

417 418 419 420 421 422 423
create_from_stable(A) ::= ifnotexists(U) ids(V) cpxName(Z) USING ids(X) cpxName(F) LP tagNamelist(P) RP TAGS LP tagitemlist(Y) RP.  {
  X.n += F.n;
  V.n += Z.n;
  A = createNewChildTableInfo(&X, P, Y, &V, &U);
}

%type tagNamelist{SArray*}
424
%destructor tagNamelist {taosArrayDestroy(&$$);}
425 426 427
tagNamelist(A) ::= tagNamelist(X) COMMA ids(Y).  {taosArrayPush(X, &Y); A = X;  }
tagNamelist(A) ::= ids(X).                      {A = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(A, &X);}

H
hzcheng 已提交
428
// create stream
429
// create table table_name as select count(*) from super_table_name interval(time)
430
create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) to_opt(E) split_opt(F) AS select(S). {
H
Haojun Liao 已提交
431
  A = tSetCreateTableInfo(NULL, NULL, S, TSQL_CREATE_STREAM);
D
dapan1121 已提交
432
  setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
433

434
  setCreatedStreamOpt(pInfo, &E, &F);
B
Bomin Zhang 已提交
435 436
  V.n += Z.n;
  setCreatedTableName(pInfo, &V, &U);
H
hzcheng 已提交
437 438
}

439 440 441 442 443 444 445 446 447 448 449 450 451
// to_opt
%type to_opt {SStrToken}
to_opt(A) ::= . {A.n = 0;}
to_opt(A) ::= TO ids(X) cpxName(Y). {
   A = X;
   A.n += Y.n;
}

// split_opt
%type to_split {SStrToken}
split_opt(A) ::= . {A.n = 0;}
split_opt(A) ::= SPLIT ids(X). { A = X;}

H
hzcheng 已提交
452
%type column{TAOS_FIELD}
H
Haojun Liao 已提交
453
%type columnlist{SArray*}
454
%destructor columnlist {taosArrayDestroy(&$$);}
H
Haojun Liao 已提交
455
columnlist(A) ::= columnlist(X) COMMA column(Y).  {taosArrayPush(X, &Y); A = X;  }
H
Haojun Liao 已提交
456
columnlist(A) ::= column(X).                      {A = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(A, &X);}
H
hzcheng 已提交
457 458 459 460

// The information used for a column is the name and type of column:
// tinyint smallint int bigint float double bool timestamp binary(x) nchar(x)
column(A) ::= ids(X) typename(Y).          {
H
Haojun Liao 已提交
461
  tSetColumnInfo(&A, &X, &Y);
H
hzcheng 已提交
462 463
}

H
Haojun Liao 已提交
464
%type tagitemlist {SArray*}
465
%destructor tagitemlist {taosArrayDestroy(&$$);}
H
hzcheng 已提交
466 467 468 469 470

%type tagitem {tVariant}
tagitemlist(A) ::= tagitemlist(X) COMMA tagitem(Y). { A = tVariantListAppend(X, &Y, -1);    }
tagitemlist(A) ::= tagitem(X).                      { A = tVariantListAppend(NULL, &X, -1); }

471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486
tagitem(A) ::= INTEGER(X).      { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= FLOAT(X).        { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= STRING(X).       { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= BOOL(X).         { toTSDBType(X.type); tVariantCreate(&A, &X); }
tagitem(A) ::= NULL(X).         { X.type = 0; tVariantCreate(&A, &X); }
tagitem(A) ::= NOW(X).          { X.type = TSDB_DATA_TYPE_TIMESTAMP; tVariantCreateExt(&A, &X, TK_NOW, true);}

tagitem(A) ::= NOW PLUS VARIABLE(X).{
    X.type = TSDB_DATA_TYPE_TIMESTAMP;
    tVariantCreateExt(&A, &X, TK_PLUS, true);
}

tagitem(A) ::= NOW MINUS VARIABLE(X).{
    X.type = TSDB_DATA_TYPE_TIMESTAMP;
    tVariantCreateExt(&A, &X, TK_MINUS, true);
}
H
hzcheng 已提交
487 488 489 490 491

tagitem(A) ::= MINUS(X) INTEGER(Y).{
    X.n += Y.n;
    X.type = Y.type;
    toTSDBType(X.type);
492
    tVariantCreate(&A, &X);
H
hzcheng 已提交
493 494 495 496 497 498
}

tagitem(A) ::= MINUS(X) FLOAT(Y).  {
    X.n += Y.n;
    X.type = Y.type;
    toTSDBType(X.type);
499
    tVariantCreate(&A, &X);
H
hzcheng 已提交
500 501
}

S
slguan 已提交
502 503 504 505
tagitem(A) ::= PLUS(X) INTEGER(Y). {
    X.n += Y.n;
    X.type = Y.type;
    toTSDBType(X.type);
506
    tVariantCreate(&A, &X);
S
slguan 已提交
507 508 509 510 511 512
}

tagitem(A) ::= PLUS(X) FLOAT(Y).  {
    X.n += Y.n;
    X.type = Y.type;
    toTSDBType(X.type);
513
    tVariantCreate(&A, &X);
S
slguan 已提交
514
}
H
hzcheng 已提交
515 516

//////////////////////// The SELECT statement /////////////////////////////////
517 518
%type select {SSqlNode*}
%destructor select {destroySqlNode($$);}
D
dapan1121 已提交
519 520
select(A) ::= SELECT(T) selcollist(W) from(X) where_opt(Y) range_option(R) interval_option(K) sliding_opt(S) session_option(H) windowstate_option(D) fill_opt(F)groupby_opt(P) having_opt(N) orderby_opt(Z) slimit_opt(G) limit_opt(L). {
  A = tSetQuerySqlNode(&T, W, X, Y, P, Z, &K, &H, &D, &S, F, &L, &G, N, &R);
H
hzcheng 已提交
521 522
}

H
Haojun Liao 已提交
523 524
select(A) ::= LP select(B) RP. {A = B;}

525 526
%type union {SArray*}
%destructor union {destroyAllSqlNode($$);}
527
union(Y) ::= select(X). { Y = setSubclause(NULL, X); }
528
union(Y) ::= union(Z) UNION ALL select(X). { Y = appendSelectClause(Z, X); }
529

D
dapan1121 已提交
530
cmd ::= union(X). { setSqlInfo(pInfo, X, NULL, TSDB_SQL_SELECT); }
531

H
hjxilinx 已提交
532
// Support for the SQL exprssion without from & where subclauses, e.g.,
533
// select database()
H
Haojun Liao 已提交
534 535 536
// select server_version()
// select client_version()
// select server_state()
H
hjxilinx 已提交
537
select(A) ::= SELECT(T) selcollist(W). {
D
dapan1121 已提交
538
  A = tSetQuerySqlNode(&T, W, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
H
hjxilinx 已提交
539 540
}

H
hzcheng 已提交
541 542 543
// selcollist is a list of expressions that are to become the return
// values of the SELECT statement.  The "*" in statements like
// "SELECT * FROM ..." is encoded as a special expression with an opcode of TK_ALL.
H
Haojun Liao 已提交
544
%type selcollist {SArray*}
D
dapan1121 已提交
545
%destructor selcollist {tSqlExprListDestroy($$);}
H
hzcheng 已提交
546

H
Haojun Liao 已提交
547
%type sclp {SArray*}
D
dapan1121 已提交
548
%destructor sclp {tSqlExprListDestroy($$);}
H
hzcheng 已提交
549 550
sclp(A) ::= selcollist(X) COMMA.             {A = X;}
sclp(A) ::= .                                {A = 0;}
dengyihao's avatar
TD-2571  
dengyihao 已提交
551 552
selcollist(A) ::= sclp(P) distinct(Z) expr(X) as(Y).     {
   A = tSqlExprListAppend(P, X,  Z.n? &Z:0, Y.n?&Y:0);
H
hzcheng 已提交
553 554 555
}

selcollist(A) ::= sclp(P) STAR. {
556
   tSqlExpr *pNode = tSqlExprCreateIdValue(pInfo, NULL, TK_ALL);
dengyihao's avatar
TD-2571  
dengyihao 已提交
557
   A = tSqlExprListAppend(P, pNode, 0, 0);
H
hzcheng 已提交
558 559 560 561
}

// An option "AS <id>" phrase that can follow one of the expressions that
// define the result set, or one of the tables in the FROM clause.
H
Haojun Liao 已提交
562
%type as {SStrToken}
H
hzcheng 已提交
563 564 565 566
as(X) ::= AS ids(Y).    { X = Y;    }
as(X) ::= ids(Y).       { X = Y;    }
as(X) ::= .             { X.n = 0;  }

dengyihao's avatar
TD-2571  
dengyihao 已提交
567 568 569 570
%type distinct {SStrToken}
distinct(X) ::= DISTINCT(Y). { X = Y;  }
distinct(X) ::= .            { X.n = 0;}

H
hzcheng 已提交
571
// A complete FROM clause.
572
%type from {SRelationInfo*}
H
Haojun Liao 已提交
573
%destructor from {destroyRelationInfo($$);}
S
slguan 已提交
574
from(A) ::= FROM tablelist(X).                 {A = X;}
H
Haojun Liao 已提交
575 576 577 578 579 580 581
from(A) ::= FROM sub(X).                       {A = X;}

%type sub {SRelationInfo*}
%destructor sub {destroyRelationInfo($$);}
sub(A)  ::= LP union(Y) RP.                    {A = addSubqueryElem(NULL, Y, NULL);}
sub(A)  ::= LP union(Y) RP ids(Z).             {A = addSubqueryElem(NULL, Y, &Z);}
sub(A)  ::= sub(X) COMMA LP union(Y) RP ids(Z).{A = addSubqueryElem(X, Y, &Z);}
S
slguan 已提交
582

583
%type tablelist {SRelationInfo*}
H
Haojun Liao 已提交
584
%destructor tablelist {destroyRelationInfo($$);}
H
Haojun Liao 已提交
585 586
tablelist(A) ::= ids(X) cpxName(Y).                     {
  X.n += Y.n;
H
Haojun Liao 已提交
587
  A = setTableNameList(NULL, &X, NULL);
H
Haojun Liao 已提交
588 589 590
}

tablelist(A) ::= ids(X) cpxName(Y) ids(Z).             {
591
  X.n += Y.n;
H
Haojun Liao 已提交
592
  A = setTableNameList(NULL, &X, &Z);
H
Haojun Liao 已提交
593 594 595 596
}

tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z).  {
  X.n += Z.n;
H
Haojun Liao 已提交
597
  A = setTableNameList(Y, &X, NULL);
H
Haojun Liao 已提交
598 599 600
}

tablelist(A) ::= tablelist(Y) COMMA ids(X) cpxName(Z) ids(F). {
601
  X.n += Z.n;
H
Haojun Liao 已提交
602
  A = setTableNameList(Y, &X, &F);
H
Haojun Liao 已提交
603
}
H
hzcheng 已提交
604 605

// The value of interval should be the form of "number+[a,s,m,h,d,n,y]" or "now"
H
Haojun Liao 已提交
606
%type tmvar {SStrToken}
H
hzcheng 已提交
607 608
tmvar(A) ::= VARIABLE(X).   {A = X;}

D
dapan1121 已提交
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624

%type timestamp {tSqlExpr*}
%destructor timestamp {tSqlExprDestroy($$);}

timestamp(A) ::= INTEGER(X).          { A = tSqlExprCreateTimestamp(&X, TK_INTEGER);}
timestamp(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateTimestamp(&X, TK_INTEGER);}
timestamp(A) ::= PLUS(X)  INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateTimestamp(&X, TK_INTEGER);}
timestamp(A) ::= STRING(X).           { A = tSqlExprCreateTimestamp(&X, TK_STRING);}
timestamp(A) ::= NOW(X).              { A = tSqlExprCreateTimestamp(&X, TK_NOW); }
timestamp(A) ::= NOW PLUS  VARIABLE(Y).   {A = tSqlExprCreateTimestamp(&Y, TK_PLUS);  }
timestamp(A) ::= NOW MINUS VARIABLE(Y).   {A = tSqlExprCreateTimestamp(&Y, TK_MINUS); }

%type range_option {SRangeVal}
range_option(N) ::= . {N.start = 0; N.end = 0;}
range_option(N) ::= RANGE LP timestamp(E) COMMA timestamp(X) RP. {N.start = E; N.end = X;}

625 626 627 628 629 630 631 632
%type interval_option {SIntervalVal}
interval_option(N) ::= intervalKey(A) LP tmvar(E) RP.                {N.interval = E; N.offset.n = 0; N.token = A;}
interval_option(N) ::= intervalKey(A) LP tmvar(E) COMMA tmvar(X) RP. {N.interval = E; N.offset = X;   N.token = A;}
interval_option(N) ::= .                                             {memset(&N, 0, sizeof(N));}

%type intervalKey {int32_t}
intervalKey(A)     ::= INTERVAL.                                     {A = TK_INTERVAL;}
intervalKey(A)     ::= EVERY.                                        {A = TK_EVERY;   }
H
hzcheng 已提交
633

634 635 636 637 638 639 640
%type session_option {SSessionWindowVal}
session_option(X) ::= .                                                  {X.col.n = 0; X.gap.n = 0;}
session_option(X) ::= SESSION LP ids(V) cpxName(Z) COMMA tmvar(Y) RP.    {
   V.n += Z.n;
   X.col = V;
   X.gap = Y;
}
641

Y
TD-2570  
yihaoDeng 已提交
642
%type windowstate_option {SWindowStateVal}
643 644
windowstate_option(X) ::= .                                                { X.col.n = 0; X.col.z = NULL;}
windowstate_option(X) ::= STATE_WINDOW LP ids(V) RP.                       { X.col = V; }
645

H
Haojun Liao 已提交
646
%type fill_opt {SArray*}
647
%destructor fill_opt {taosArrayDestroy(&$$);}
648
fill_opt(N) ::= .                                           { N = 0;     }
H
hzcheng 已提交
649 650 651
fill_opt(N) ::= FILL LP ID(Y) COMMA tagitemlist(X) RP.      {
    tVariant A = {0};
    toTSDBType(Y.type);
652
    tVariantCreate(&A, &Y);
H
hzcheng 已提交
653

H
Haojun Liao 已提交
654
    tVariantListInsert(X, &A, -1, 0);
H
hzcheng 已提交
655 656 657 658 659
    N = X;
}

fill_opt(N) ::= FILL LP ID(Y) RP.               {
    toTSDBType(Y.type);
660
    N = tVariantListAppendToken(NULL, &Y, -1, true);
H
hzcheng 已提交
661 662
}

H
Haojun Liao 已提交
663
%type sliding_opt {SStrToken}
H
hzcheng 已提交
664
sliding_opt(K) ::= SLIDING LP tmvar(E) RP.      {K = E;     }
H
hjxilinx 已提交
665
sliding_opt(K) ::= .                            {K.n = 0; K.z = NULL; K.type = 0;   }
H
hzcheng 已提交
666

H
Haojun Liao 已提交
667
%type orderby_opt {SArray*}
668
%destructor orderby_opt {taosArrayDestroy(&$$);}
H
hzcheng 已提交
669

H
Haojun Liao 已提交
670
%type sortlist {SArray*}
671
%destructor sortlist {taosArrayDestroy(&$$);}
H
hzcheng 已提交
672 673 674 675 676

orderby_opt(A) ::= .                          {A = 0;}
orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}

sortlist(A) ::= sortlist(X) COMMA item(Y) sortorder(Z). {
wmmhello's avatar
wmmhello 已提交
677 678 679 680 681
  A = commonItemAppend(X, &Y, NULL, false, Z);
}

sortlist(A) ::= sortlist(X) COMMA arrow(Y) sortorder(Z). {
  A = commonItemAppend(X, NULL, Y, true, Z);
H
hzcheng 已提交
682 683 684
}

sortlist(A) ::= item(Y) sortorder(Z). {
wmmhello's avatar
wmmhello 已提交
685 686 687 688 689
  A = commonItemAppend(NULL, &Y, NULL, false, Z);
}

sortlist(A) ::= arrow(Y) sortorder(Z). {
  A = commonItemAppend(NULL, NULL, Y, true, Z);
H
hzcheng 已提交
690 691
}

692
%type item {tVariant}
693 694
item(A) ::= ID(X).   {
  toTSDBType(X.type);
695
  tVariantCreate(&A, &X);
696
}
wmmhello's avatar
wmmhello 已提交
697
item(A) ::= ID(X) DOT ID(Y).   {
H
hzcheng 已提交
698
  toTSDBType(X.type);
699
  X.n += (1+Y.n);
700
  tVariantCreate(&A, &X);
H
hzcheng 已提交
701 702 703
}

%type sortorder {int}
704 705 706
sortorder(A) ::= ASC.           { A = TSDB_ORDER_ASC; }
sortorder(A) ::= DESC.          { A = TSDB_ORDER_DESC;}
sortorder(A) ::= .              { A = TSDB_ORDER_ASC; }  // Ascending order by default
H
hzcheng 已提交
707 708

//group by clause
H
Haojun Liao 已提交
709
%type groupby_opt {SArray*}
710
%destructor groupby_opt {taosArrayDestroy(&$$);}
H
Haojun Liao 已提交
711
%type grouplist {SArray*}
712
%destructor grouplist {taosArrayDestroy(&$$);}
H
hzcheng 已提交
713

714 715
groupby_opt(A) ::= .                       { A = 0;}
groupby_opt(A) ::= GROUP BY grouplist(X).  { A = X;}
H
hzcheng 已提交
716 717

grouplist(A) ::= grouplist(X) COMMA item(Y).    {
wmmhello's avatar
wmmhello 已提交
718 719 720 721 722
  A = commonItemAppend(X, &Y, NULL, false, -1);
}

grouplist(A) ::= grouplist(X) COMMA arrow(Y).    {
  A = commonItemAppend(X, NULL, Y, true, -1);
H
hzcheng 已提交
723 724 725
}

grouplist(A) ::= item(X).                       {
wmmhello's avatar
wmmhello 已提交
726 727 728 729 730
  A = commonItemAppend(NULL, &X, NULL, false, -1);
}

grouplist(A) ::= arrow(X).                       {
  A = commonItemAppend(NULL, NULL, X, true, -1);
H
hzcheng 已提交
731 732 733
}

//having clause, ignore the input condition in having
H
Haojun Liao 已提交
734
%type having_opt {tSqlExpr*}
D
dapan1121 已提交
735
%destructor having_opt {tSqlExprDestroy($$);}
H
hzcheng 已提交
736 737 738 739 740 741
having_opt(A) ::=.                  {A = 0;}
having_opt(A) ::= HAVING expr(X).   {A = X;}

//limit-offset subclause
%type limit_opt {SLimitVal}
limit_opt(A) ::= .                     {A.limit = -1; A.offset = 0;}
742
limit_opt(A) ::= LIMIT signed(X).      {A.limit = X;  A.offset = 0;}
H
hzcheng 已提交
743
limit_opt(A) ::= LIMIT signed(X) OFFSET signed(Y).
744
                                       { A.limit = X;  A.offset = Y;}
H
hzcheng 已提交
745
limit_opt(A) ::= LIMIT signed(X) COMMA signed(Y).
746
                                       { A.limit = Y;  A.offset = X;}
H
hzcheng 已提交
747 748 749 750 751 752 753

%type slimit_opt {SLimitVal}
slimit_opt(A) ::= .                    {A.limit = -1; A.offset = 0;}
slimit_opt(A) ::= SLIMIT signed(X).    {A.limit = X;  A.offset = 0;}
slimit_opt(A) ::= SLIMIT signed(X) SOFFSET signed(Y).
                                       {A.limit = X;  A.offset = Y;}
slimit_opt(A) ::= SLIMIT signed(X) COMMA  signed(Y).
S
slguan 已提交
754
                                       {A.limit = Y;  A.offset = X;}
H
hzcheng 已提交
755

H
Haojun Liao 已提交
756
%type where_opt {tSqlExpr*}
D
dapan1121 已提交
757
%destructor where_opt {tSqlExprDestroy($$);}
H
hzcheng 已提交
758 759 760 761 762 763

where_opt(A) ::= .                    {A = 0;}
where_opt(A) ::= WHERE expr(X).       {A = X;}

/////////////////////////// Expression Processing /////////////////////////////
//
H
Haojun Liao 已提交
764
%type expr {tSqlExpr*}
D
dapan1121 已提交
765
%destructor expr {tSqlExprDestroy($$);}
H
hzcheng 已提交
766

H
Haojun Liao 已提交
767
expr(A) ::= LP(X) expr(Y) RP(Z).       {A = Y; A->exprToken.z = X.z; A->exprToken.n = (Z.z - X.z + 1);}
H
hzcheng 已提交
768

769 770 771 772 773 774 775 776 777 778 779 780
expr(A) ::= ID(X).               { A = tSqlExprCreateIdValue(pInfo, &X, TK_ID);}
expr(A) ::= ID(X) DOT ID(Y).     { X.n += (1+Y.n); A = tSqlExprCreateIdValue(pInfo, &X, TK_ID);}
expr(A) ::= ID(X) DOT STAR(Y).   { X.n += (1+Y.n); A = tSqlExprCreateIdValue(pInfo, &X, TK_ALL);}

expr(A) ::= INTEGER(X).          { A = tSqlExprCreateIdValue(pInfo, &X, TK_INTEGER);}
expr(A) ::= MINUS(X) INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(pInfo, &X, TK_INTEGER);}
expr(A) ::= PLUS(X)  INTEGER(Y). { X.n += Y.n; X.type = TK_INTEGER; A = tSqlExprCreateIdValue(pInfo, &X, TK_INTEGER);}
expr(A) ::= FLOAT(X).            { A = tSqlExprCreateIdValue(pInfo, &X, TK_FLOAT);}
expr(A) ::= MINUS(X) FLOAT(Y).   { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(pInfo, &X, TK_FLOAT);}
expr(A) ::= PLUS(X) FLOAT(Y).    { X.n += Y.n; X.type = TK_FLOAT; A = tSqlExprCreateIdValue(pInfo, &X, TK_FLOAT);}
expr(A) ::= STRING(X).           { A = tSqlExprCreateIdValue(pInfo, &X, TK_STRING);}
expr(A) ::= NOW(X).              { A = tSqlExprCreateIdValue(pInfo, &X, TK_NOW); }
781
expr(A) ::= TODAY(X).            { A = tSqlExprCreateIdValue(pInfo, &X, TK_TODAY); }
782 783 784 785 786
expr(A) ::= VARIABLE(X).         { A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);}
expr(A) ::= PLUS(X) VARIABLE(Y).   { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);}
expr(A) ::= MINUS(X) VARIABLE(Y).  { X.n += Y.n; X.type = TK_VARIABLE; A = tSqlExprCreateIdValue(pInfo, &X, TK_VARIABLE);}
expr(A) ::= BOOL(X).             { A = tSqlExprCreateIdValue(pInfo, &X, TK_BOOL);}
expr(A) ::= NULL(X).             { A = tSqlExprCreateIdValue(pInfo, &X, TK_NULL);}
H
Haojun Liao 已提交
787 788

// ordinary functions: min(x), max(x), top(k, 20)
D
dapan1121 已提交
789
expr(A) ::= ID(X) LP exprlist(Y) RP(E). { tStrTokenAppend(pInfo->funcs, &X); A = tSqlExprCreateFunction(Y, &X, &E, X.type); }
H
Haojun Liao 已提交
790 791

// for parsing sql functions with wildcard for parameters. e.g., count(*)/first(*)/last(*) operation
D
dapan1121 已提交
792
expr(A) ::= ID(X) LP STAR RP(Y).     { tStrTokenAppend(pInfo->funcs, &X); A = tSqlExprCreateFunction(NULL, &X, &Y, X.type); }
H
Haojun Liao 已提交
793

794 795 796
// for parsing sql functions without parameters
expr(A) ::= ID(X) LP RP(Y).     { tStrTokenAppend(pInfo->funcs, &X); A = tSqlExprCreateFunction(tSqlExprListAppend(0, 0, 0, 0), &X, &Y, X.type); }

D
cast  
dapan1121 已提交
797 798 799
// for parsing sql function CAST(column as typename) 
expr(A) ::= ID(X) LP expr(B) AS typename(C) RP(Y).     { tStrTokenAppend(pInfo->funcs, &X); A = tSqlExprCreateFuncWithParams(pInfo, B, &C, &X, &Y, X.type); }

H
Haojun Liao 已提交
800
// is (not) null expression
D
dapan1121 已提交
801 802
expr(A) ::= expr(X) IS NULL.           {A = tSqlExprCreate(X, NULL, TK_ISNULL);}
expr(A) ::= expr(X) IS NOT NULL.       {A = tSqlExprCreate(X, NULL, TK_NOTNULL);}
H
Haojun Liao 已提交
803 804

// relational expression
D
dapan1121 已提交
805 806 807 808 809 810
expr(A) ::= expr(X) LT expr(Y).      {A = tSqlExprCreate(X, Y, TK_LT);}
expr(A) ::= expr(X) GT expr(Y).      {A = tSqlExprCreate(X, Y, TK_GT);}
expr(A) ::= expr(X) LE expr(Y).      {A = tSqlExprCreate(X, Y, TK_LE);}
expr(A) ::= expr(X) GE expr(Y).      {A = tSqlExprCreate(X, Y, TK_GE);}
expr(A) ::= expr(X) NE expr(Y).      {A = tSqlExprCreate(X, Y, TK_NE);}
expr(A) ::= expr(X) EQ expr(Y).      {A = tSqlExprCreate(X, Y, TK_EQ);}
H
Haojun Liao 已提交
811

H
Haojun Liao 已提交
812
expr(A) ::= expr(X) BETWEEN expr(Y) AND expr(Z).      { tSqlExpr* X2 = tSqlExprClone(X); A = tSqlExprCreate(tSqlExprCreate(X, Y, TK_GE), tSqlExprCreate(X2, Z, TK_LE), TK_AND);}
D
dapan1121 已提交
813

D
dapan1121 已提交
814 815
expr(A) ::= expr(X) AND expr(Y).     {A = tSqlExprCreate(X, Y, TK_AND);}
expr(A) ::= expr(X) OR  expr(Y).     {A = tSqlExprCreate(X, Y, TK_OR); }
H
Haojun Liao 已提交
816 817

// binary arithmetic expression
D
dapan1121 已提交
818 819 820 821 822
expr(A) ::= expr(X) PLUS  expr(Y).   {A = tSqlExprCreate(X, Y, TK_PLUS);  }
expr(A) ::= expr(X) MINUS expr(Y).   {A = tSqlExprCreate(X, Y, TK_MINUS); }
expr(A) ::= expr(X) STAR  expr(Y).   {A = tSqlExprCreate(X, Y, TK_STAR);  }
expr(A) ::= expr(X) SLASH expr(Y).   {A = tSqlExprCreate(X, Y, TK_DIVIDE);}
expr(A) ::= expr(X) REM   expr(Y).   {A = tSqlExprCreate(X, Y, TK_REM);   }
X
xywang 已提交
823
expr(A) ::= expr(X) BITAND expr(Y).  {A = tSqlExprCreate(X, Y, TK_BITAND);}
X
xywang 已提交
824 825 826 827 828
expr(A) ::= expr(X) BITOR expr(Y).   {A = tSqlExprCreate(X, Y, TK_BITOR); }
expr(A) ::= expr(X) BITXOR expr(Y).  {A = tSqlExprCreate(X, Y, TK_BITXOR);}
expr(A) ::= BITNOT expr(X).          {A = tSqlExprCreate(X, NULL, TK_BITNOT);}
expr(A) ::= expr(X) LSHIFT expr(Y).  {A = tSqlExprCreate(X, Y, TK_LSHIFT);}
expr(A) ::= expr(X) RSHIFT expr(Y).  {A = tSqlExprCreate(X, Y, TK_RSHIFT);}
H
hzcheng 已提交
829

H
Haojun Liao 已提交
830
// like expression
D
dapan1121 已提交
831
expr(A) ::= expr(X) LIKE expr(Y).    {A = tSqlExprCreate(X, Y, TK_LIKE);  }
H
hzcheng 已提交
832

833 834
// match expression
expr(A) ::= expr(X) MATCH expr(Y).    {A = tSqlExprCreate(X, Y, TK_MATCH);  }
835
expr(A) ::= expr(X) NMATCH expr(Y).    {A = tSqlExprCreate(X, Y, TK_NMATCH);  }
836

837 838 839
// contains expression
expr(A) ::= ID(X) CONTAINS STRING(Y).    { tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &X, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &Y, TK_STRING); A = tSqlExprCreate(S, M, TK_CONTAINS);  }
expr(A) ::= ID(X) DOT ID(Y) CONTAINS STRING(Z).    { X.n += (1+Y.n); tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &X, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &Z, TK_STRING); A = tSqlExprCreate(S, M, TK_CONTAINS);  }
wmmhello's avatar
wmmhello 已提交
840 841

// arrow expression
wmmhello's avatar
wmmhello 已提交
842 843 844 845 846 847
%type arrow {tSqlExpr*}
%destructor arrow {tSqlExprDestroy($$);}
arrow(A) ::= ID(X) ARROW STRING(Y).    {tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &X, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &Y, TK_STRING); A = tSqlExprCreate(S, M, TK_ARROW);  }
arrow(A) ::= ID(X) DOT ID(Y) ARROW STRING(Z).    {X.n += (1+Y.n); tSqlExpr* S = tSqlExprCreateIdValue(pInfo, &X, TK_ID); tSqlExpr* M = tSqlExprCreateIdValue(pInfo, &Z, TK_STRING); A = tSqlExprCreate(S, M, TK_ARROW);  }

expr(A) ::= arrow(X). {A = X;}
wmmhello's avatar
wmmhello 已提交
848

H
hzcheng 已提交
849
//in expression
H
Haojun Liao 已提交
850
expr(A) ::= expr(X) IN LP exprlist(Y) RP.   {A = tSqlExprCreate(X, (tSqlExpr*)Y, TK_IN); }
H
hzcheng 已提交
851

H
Haojun Liao 已提交
852
%type exprlist {SArray*}
D
dapan1121 已提交
853
%destructor exprlist {tSqlExprListDestroy($$);}
H
hzcheng 已提交
854

H
Haojun Liao 已提交
855
%type expritem {tSqlExpr*}
D
dapan1121 已提交
856
%destructor expritem {tSqlExprDestroy($$);}
H
hzcheng 已提交
857

dengyihao's avatar
TD-2571  
dengyihao 已提交
858 859
exprlist(A) ::= exprlist(X) COMMA expritem(Y). {A = tSqlExprListAppend(X,Y,0, 0);}
exprlist(A) ::= expritem(X).                   {A = tSqlExprListAppend(0,X,0, 0);}
H
Haojun Liao 已提交
860
expritem(A) ::= expr(X).                       {A = X;}
H
hzcheng 已提交
861 862

///////////////////////////////////reset query cache//////////////////////////////////////
H
Haojun Liao 已提交
863
cmd ::= RESET QUERY CACHE.  { setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
H
hzcheng 已提交
864

865 866 867
///////////////////////////////////sync replica database//////////////////////////////////
cmd ::= SYNCDB ids(X) REPLICA.{ setDCLSqlElems(pInfo, TSDB_SQL_SYNC_DB_REPLICA, 1, &X);}

H
hzcheng 已提交
868 869 870
///////////////////////////////////ALTER TABLE statement//////////////////////////////////
cmd ::= ALTER TABLE ids(X) cpxName(F) ADD COLUMN columnlist(A).     {
    X.n += F.n;
H
Haojun Liao 已提交
871
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
D
dapan1121 已提交
872
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
H
hzcheng 已提交
873 874 875 876 877 878
}

cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A).     {
    X.n += F.n;

    toTSDBType(A.type);
879
    SArray* K = tVariantListAppendToken(NULL, &A, -1, false);
H
hzcheng 已提交
880

H
Haojun Liao 已提交
881
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
D
dapan1121 已提交
882
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
H
hzcheng 已提交
883 884
}

D
dapan1121 已提交
885
cmd ::= ALTER TABLE ids(X) cpxName(F) MODIFY COLUMN columnlist(A).     {
D
dapan1121 已提交
886
    X.n += F.n;
D
dapan1121 已提交
887
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_CHANGE_COLUMN, -1);
D
dapan1121 已提交
888 889 890
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

H
hzcheng 已提交
891 892 893
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
cmd ::= ALTER TABLE ids(X) cpxName(Y) ADD TAG columnlist(A).        {
    X.n += Y.n;
H
Haojun Liao 已提交
894
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
D
dapan1121 已提交
895
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
H
hzcheng 已提交
896 897 898 899 900
}
cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y).          {
    X.n += Z.n;

    toTSDBType(Y.type);
901
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
H
hzcheng 已提交
902

H
Haojun Liao 已提交
903
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, -1);
D
dapan1121 已提交
904
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
H
hzcheng 已提交
905 906 907 908 909 910
}

cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
    X.n += F.n;

    toTSDBType(Y.type);
911
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
H
hzcheng 已提交
912 913

    toTSDBType(Z.type);
914
    A = tVariantListAppendToken(A, &Z, -1, false);
H
hzcheng 已提交
915

H
Haojun Liao 已提交
916
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, -1);
D
dapan1121 已提交
917
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
H
hzcheng 已提交
918 919
}

920
cmd ::= ALTER TABLE ids(X) cpxName(F) SET TAG ids(Y) EQ tagitem(Z).     {
H
hzcheng 已提交
921 922 923
    X.n += F.n;

    toTSDBType(Y.type);
924
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
H
hzcheng 已提交
925 926
    A = tVariantListAppend(A, &Z, -1);

H
Haojun Liao 已提交
927
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1);
D
dapan1121 已提交
928 929 930
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

D
dapan1121 已提交
931 932 933 934 935
cmd ::= ALTER TABLE ids(X) cpxName(F) MODIFY TAG columnlist(A).     {
    X.n += F.n;
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN, -1);
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
D
dapan1121 已提交
936 937 938 939

///////////////////////////////////ALTER STABLE statement//////////////////////////////////
cmd ::= ALTER STABLE ids(X) cpxName(F) ADD COLUMN columnlist(A).     {
    X.n += F.n;
H
Haojun Liao 已提交
940
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
941 942 943 944 945 946 947
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

cmd ::= ALTER STABLE ids(X) cpxName(F) DROP COLUMN ids(A).     {
    X.n += F.n;

    toTSDBType(A.type);
948
    SArray* K = tVariantListAppendToken(NULL, &A, -1, false);
D
dapan1121 已提交
949

H
Haojun Liao 已提交
950
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
951 952 953
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

D
dapan1121 已提交
954
cmd ::= ALTER STABLE ids(X) cpxName(F) MODIFY COLUMN columnlist(A).     {
D
dapan1121 已提交
955
    X.n += F.n;
D
dapan1121 已提交
956
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_CHANGE_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
957 958 959
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

D
dapan1121 已提交
960 961 962
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
cmd ::= ALTER STABLE ids(X) cpxName(Y) ADD TAG columnlist(A).        {
    X.n += Y.n;
H
Haojun Liao 已提交
963
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
964 965 966 967 968 969
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
cmd ::= ALTER STABLE ids(X) cpxName(Z) DROP TAG ids(Y).          {
    X.n += Z.n;

    toTSDBType(Y.type);
970
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
D
dapan1121 已提交
971

H
Haojun Liao 已提交
972
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
973 974 975 976 977 978 979
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

cmd ::= ALTER STABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
    X.n += F.n;

    toTSDBType(Y.type);
980
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
D
dapan1121 已提交
981 982

    toTSDBType(Z.type);
983
    A = tVariantListAppendToken(A, &Z, -1, false);
D
dapan1121 已提交
984

H
Haojun Liao 已提交
985
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
986
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
H
hzcheng 已提交
987 988
}

D
dapan1121 已提交
989 990 991 992
cmd ::= ALTER STABLE ids(X) cpxName(F) SET TAG ids(Y) EQ tagitem(Z).     {
    X.n += F.n;

    toTSDBType(Y.type);
993
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
D
dapan1121 已提交
994 995 996 997 998 999 1000 1001 1002 1003 1004 1005
    A = tVariantListAppend(A, &Z, -1);

    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, TSDB_SUPER_TABLE);
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

cmd ::= ALTER STABLE ids(X) cpxName(F) MODIFY TAG columnlist(A).     {
    X.n += F.n;
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_MODIFY_TAG_COLUMN, TSDB_SUPER_TABLE);
    setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}

H
hzcheng 已提交
1006
////////////////////////////////////////kill statement///////////////////////////////////////
D
dapan1121 已提交
1007 1008 1009
cmd ::= KILL CONNECTION INTEGER(Y).   {setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &Y);}
cmd ::= KILL STREAM INTEGER(X) COLON(Z) INTEGER(Y).       {X.n += (Z.n + Y.n); setKillSql(pInfo, TSDB_SQL_KILL_STREAM, &X);}
cmd ::= KILL QUERY INTEGER(X) COLON(Z) INTEGER(Y).        {X.n += (Z.n + Y.n); setKillSql(pInfo, TSDB_SQL_KILL_QUERY, &X);}
H
hzcheng 已提交
1010

1011 1012 1013 1014 1015 1016 1017 1018 1019
//////////////////////////////////// DEL TRUNCATE TABLE /////////////////////////////////////

//1 DELETE FROM TBNAME/STBNAME WHERE TS AND TAG CONDICTION
cmd ::= DELETE FROM ifexists(Y) ids(X) cpxName(Z) where_opt(W). {
  X.n += Z.n; 
  SDelData * pDelData = tGetDelData(&X, &Y, W);
  setSqlInfo(pInfo, pDelData, NULL, TSDB_SQL_DELETE_DATA);
}

H
hzcheng 已提交
1020 1021
%fallback ID ABORT AFTER ASC ATTACH BEFORE BEGIN CASCADE CLUSTER CONFLICT COPY DATABASE DEFERRED
  DELIMITERS DESC DETACH EACH END EXPLAIN FAIL FOR GLOB IGNORE IMMEDIATE INITIALLY INSTEAD
1022
  LIKE MATCH NMATCH KEY OF OFFSET RAISE REPLACE RESTRICT ROW STATEMENT TRIGGER VIEW ALL
X
xywang 已提交
1023
  NOW TODAY IPTOKEN SEMI NONE PREV LINEAR IMPORT TBNAME JOIN STABLE NULL INSERT INTO VALUES FILE.