sql.y 42.5 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 132 133 134 135 136 137 138 139 140 141 142
// show db.status
cmd ::= SHOW dbPrefix(X) STATUS.    {
    SStrToken token;
    tSetDbName(&token, &X);
    setShowOptions(pInfo, TSDB_MGMT_STATUS_DB, &token, 0);
}

// show cluster status
cmd ::= SHOW CLUSTER STATUS.    {
    SStrToken token;
    setShowOptions(pInfo, TSDB_MGMT_STATUS_CLUSTER, &token, 0);
}

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

D
cast  
dapan1121 已提交
794 795 796
// 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 已提交
797
// is (not) null expression
D
dapan1121 已提交
798 799
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 已提交
800 801

// relational expression
D
dapan1121 已提交
802 803 804 805 806 807
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 已提交
808

H
Haojun Liao 已提交
809
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 已提交
810

D
dapan1121 已提交
811 812
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 已提交
813 814

// binary arithmetic expression
D
dapan1121 已提交
815 816 817 818 819
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 已提交
820
expr(A) ::= expr(X) BITAND expr(Y).  {A = tSqlExprCreate(X, Y, TK_BITAND);}
X
xywang 已提交
821 822 823 824 825
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 已提交
826

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

830 831
// match expression
expr(A) ::= expr(X) MATCH expr(Y).    {A = tSqlExprCreate(X, Y, TK_MATCH);  }
832
expr(A) ::= expr(X) NMATCH expr(Y).    {A = tSqlExprCreate(X, Y, TK_NMATCH);  }
833

834 835 836
// 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 已提交
837 838

// arrow expression
wmmhello's avatar
wmmhello 已提交
839 840 841 842 843 844
%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 已提交
845

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

H
Haojun Liao 已提交
849
%type exprlist {SArray*}
D
dapan1121 已提交
850
%destructor exprlist {tSqlExprListDestroy($$);}
H
hzcheng 已提交
851

H
Haojun Liao 已提交
852
%type expritem {tSqlExpr*}
D
dapan1121 已提交
853
%destructor expritem {tSqlExprDestroy($$);}
H
hzcheng 已提交
854

dengyihao's avatar
TD-2571  
dengyihao 已提交
855 856
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 已提交
857 858
expritem(A) ::= expr(X).                       {A = X;}
expritem(A) ::= .                              {A = 0;}
H
hzcheng 已提交
859 860

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

D
dapan1121 已提交
929 930 931 932 933
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 已提交
934 935 936 937

///////////////////////////////////ALTER STABLE statement//////////////////////////////////
cmd ::= ALTER STABLE ids(X) cpxName(F) ADD COLUMN columnlist(A).     {
    X.n += F.n;
H
Haojun Liao 已提交
938
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
939 940 941 942 943 944 945
    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);
946
    SArray* K = tVariantListAppendToken(NULL, &A, -1, false);
D
dapan1121 已提交
947

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

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

D
dapan1121 已提交
958 959 960
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
cmd ::= ALTER STABLE ids(X) cpxName(Y) ADD TAG columnlist(A).        {
    X.n += Y.n;
H
Haojun Liao 已提交
961
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
962 963 964 965 966 967
    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);
968
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
D
dapan1121 已提交
969

H
Haojun Liao 已提交
970
    SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
D
dapan1121 已提交
971 972 973 974 975 976 977
    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);
978
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
D
dapan1121 已提交
979 980

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

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

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

    toTSDBType(Y.type);
991
    SArray* A = tVariantListAppendToken(NULL, &Y, -1, false);
D
dapan1121 已提交
992 993 994 995 996 997 998 999 1000 1001 1002 1003
    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 已提交
1004
////////////////////////////////////////kill statement///////////////////////////////////////
D
dapan1121 已提交
1005 1006 1007
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 已提交
1008

1009 1010 1011 1012 1013 1014 1015 1016 1017
//////////////////////////////////// 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 已提交
1018 1019
%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
1020
  LIKE MATCH NMATCH KEY OF OFFSET RAISE REPLACE RESTRICT ROW STATEMENT TRIGGER VIEW ALL
X
xywang 已提交
1021
  NOW TODAY IPTOKEN SEMI NONE PREV LINEAR IMPORT TBNAME JOIN STABLE NULL INSERT INTO VALUES FILE.