提交 23cbcfe0 编写于 作者: S slguan

Parameters can be out of order when creating a database

上级 139af8e4
...@@ -2331,7 +2331,8 @@ static void percentile_finalizer(SQLFunctionCtx *pCtx) { ...@@ -2331,7 +2331,8 @@ static void percentile_finalizer(SQLFunctionCtx *pCtx) {
tMemBucketDestroy((tMemBucket **)&(pCtx->intermediateBuf[1].pz)); tMemBucketDestroy((tMemBucket **)&(pCtx->intermediateBuf[1].pz));
tOrderDescDestroy(pCtx->intermediateBuf[2].pz); tOrderDescDestroy(pCtx->intermediateBuf[2].pz);
assert(pCtx->intermediateBuf[1].pz == NULL); pCtx->intermediateBuf[1].pz = NULL;
pCtx->intermediateBuf[2].pz = NULL;
} }
static bool apercentile_function(SQLFunctionCtx *pCtx) { static bool apercentile_function(SQLFunctionCtx *pCtx) {
......
...@@ -110,6 +110,7 @@ static bool hasTimestampForPointInterpQuery(SSqlCmd* pCmd); ...@@ -110,6 +110,7 @@ static bool hasTimestampForPointInterpQuery(SSqlCmd* pCmd);
static void updateTagColumnIndex(SSqlCmd* pCmd); static void updateTagColumnIndex(SSqlCmd* pCmd);
static int32_t setLimitOffsetValueInfo(SSqlObj* pSql, SQuerySQL* pQuerySql); static int32_t setLimitOffsetValueInfo(SSqlObj* pSql, SQuerySQL* pQuerySql);
static void addRequiredTagColumn(SSqlCmd* pCmd, int32_t tagColIndex); static void addRequiredTagColumn(SSqlCmd* pCmd, int32_t tagColIndex);
static int32_t parseCreateDBOptions(SCreateDBInfo* pCreateDbSql, SSqlCmd* pCmd);
static int32_t tscQueryOnlyMetricTags(SSqlCmd* pCmd, bool* queryOnMetricTags) { static int32_t tscQueryOnlyMetricTags(SSqlCmd* pCmd, bool* queryOnMetricTags) {
assert(pCmd->metricQuery == 1); assert(pCmd->metricQuery == 1);
...@@ -240,8 +241,6 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -240,8 +241,6 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
case CREATE_DATABASE: { case CREATE_DATABASE: {
char msg2[] = "name too long"; char msg2[] = "name too long";
char msg3[] = "invalid db name"; char msg3[] = "invalid db name";
char msg4[] = "invalid time precision";
int32_t STORAGE_LEVEL = 3;
if (pInfo->sqlType == ALTER_DATABASE) { if (pInfo->sqlType == ALTER_DATABASE) {
pCmd->command = TSDB_SQL_ALTER_DB; pCmd->command = TSDB_SQL_ALTER_DB;
...@@ -250,7 +249,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -250,7 +249,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
pCmd->existsCheck = (pInfo->pDCLInfo->a[0].n == 1); pCmd->existsCheck = (pInfo->pDCLInfo->a[0].n == 1);
} }
SCreateDBSQL* pCreateDB = &(pInfo->pDCLInfo->dbOpt); SCreateDBInfo* pCreateDB = &(pInfo->pDCLInfo->dbOpt);
if (tscValidateName(&pCreateDB->dbname) != TSDB_CODE_SUCCESS) { if (tscValidateName(&pCreateDB->dbname) != TSDB_CODE_SUCCESS) {
setErrMsg(pCmd, msg3, tListLen(msg3)); setErrMsg(pCmd, msg3, tListLen(msg3));
return TSDB_CODE_INVALID_SQL; return TSDB_CODE_INVALID_SQL;
...@@ -262,57 +261,10 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) { ...@@ -262,57 +261,10 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
return ret; return ret;
} }
/* in case of TSDB_SQL_ALTER_DB, other parameters will be ignore by mnode.*/ if (parseCreateDBOptions(pCreateDB, pCmd) != TSDB_CODE_SUCCESS) {
pCmd->defaultVal[0] = pCreateDB->nReplica; return TSDB_CODE_INVALID_SQL;
pCmd->defaultVal[1] = pCreateDB->nDays;
pCmd->defaultVal[3] = pCreateDB->nRowsInFileBlock;
pCmd->defaultVal[4] = pCreateDB->nCacheBlockSize;
pCmd->defaultVal[5] = pCreateDB->numOfBlocksPerTable;
pCmd->defaultVal[6] = pCreateDB->nTablesPerVnode;
pCmd->defaultVal[7] = pCreateDB->commitTime;
pCmd->defaultVal[8] = pCreateDB->commitLog;
pCmd->defaultVal[9] = pCreateDB->compressionLevel;
*(double*)&(pCmd->defaultVal[10]) = pCreateDB->nCacheNumOfBlocks;
if (pCreateDB->keep != NULL) {
pCmd->defaultVal[11] = pCreateDB->keep->nExpr;
for (int32_t i = 0; i < STORAGE_LEVEL; ++i) {
if (i < pCreateDB->keep->nExpr) {
pCmd->defaultVal[12 + i] = pCreateDB->keep->a[i].pVar.i64Key;
} else {
pCmd->defaultVal[12 + i] = pCreateDB->keep->a[0].pVar.i64Key;
}
}
} else {
for (int32_t i = 0; i < STORAGE_LEVEL; ++i) {
pCmd->defaultVal[12 + i] = -1;
}
} }
/* force to set 3 */
pCmd->defaultVal[11] = 3;
const int32_t TIME_PRECISION_INDEX = 15;
if (pCreateDB->precision.n > 0) {
if (strncmp(pCreateDB->precision.z, TSDB_TIME_PRECISION_MILLI_STR, pCreateDB->precision.n) == 0 &&
strlen(TSDB_TIME_PRECISION_MILLI_STR) == pCreateDB->precision.n) {
/*time precision for this db: million second */
pCmd->defaultVal[TIME_PRECISION_INDEX] = TSDB_TIME_PRECISION_MILLI;
} else if (strncmp(pCreateDB->precision.z, TSDB_TIME_PRECISION_MICRO_STR, pCreateDB->precision.n) == 0 &&
strlen(TSDB_TIME_PRECISION_MICRO_STR) == pCreateDB->precision.n) {
pCmd->defaultVal[TIME_PRECISION_INDEX] = TSDB_TIME_PRECISION_MICRO;
} else {
setErrMsg(pCmd, msg4, tListLen(msg4));
return TSDB_CODE_INVALID_SQL;
}
} else { // millisecond by default
pCmd->defaultVal[TIME_PRECISION_INDEX] = TSDB_TIME_PRECISION_MILLI;
}
break; break;
} }
...@@ -3967,3 +3919,72 @@ int32_t setLimitOffsetValueInfo(SSqlObj* pSql, SQuerySQL* pQuerySql) { ...@@ -3967,3 +3919,72 @@ int32_t setLimitOffsetValueInfo(SSqlObj* pSql, SQuerySQL* pQuerySql) {
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
static void setCreateDBOption(SCreateDbMsg* pMsg, SCreateDBInfo* pCreateDb) {
pMsg->precision = TSDB_TIME_PRECISION_MILLI; // millisecond by default
pMsg->daysToKeep = htonl(-1);
pMsg->daysToKeep1 = htonl(-1);
pMsg->daysToKeep2 = htonl(-1);
pMsg->blocksPerMeter = (pCreateDb->numOfBlocksPerTable == 0) ? htons(-1) : htons(pCreateDb->numOfBlocksPerTable);
pMsg->compression = (pCreateDb->compressionLevel == 0) ? -1 : pCreateDb->numOfAvgCacheBlocks;
pMsg->commitLog = (pCreateDb->commitLog == 0) ? -1 : pCreateDb->numOfAvgCacheBlocks;
pMsg->commitTime = (pCreateDb->commitTime == 0) ? htonl(-1) : htonl(pCreateDb->commitTime);
pMsg->maxSessions = (pCreateDb->tablesPerVnode == 0) ? htonl(-1) : htonl(pCreateDb->tablesPerVnode);
pMsg->cacheNumOfBlocks.fraction = (pCreateDb->numOfAvgCacheBlocks == 0) ? -1 : pCreateDb->numOfAvgCacheBlocks;
pMsg->cacheBlockSize = (pCreateDb->cacheBlockSize == 0) ? htonl(-1) : htonl(pCreateDb->cacheBlockSize);
pMsg->rowsInFileBlock = (pCreateDb->rowPerFileBlock == 0) ? htonl(-1) : htonl(pCreateDb->rowPerFileBlock);
pMsg->daysPerFile = (pCreateDb->daysPerFile == 0) ? htonl(-1) : htonl(pCreateDb->daysPerFile);
pMsg->replications = (pCreateDb->replica == 0) ? -1 : pCreateDb->replica;
}
int32_t parseCreateDBOptions(SCreateDBInfo* pCreateDbSql, SSqlCmd* pCmd) {
char msg0[] = "invalid number of options";
char msg1[] = "invalid time precision";
SCreateDbMsg *pMsg = (SCreateDbMsg *) (pCmd->payload + tsRpcHeadSize + sizeof(SMgmtHead));
setCreateDBOption(pMsg, pCreateDbSql);
if (pCreateDbSql->keep != NULL) {
switch (pCreateDbSql->keep->nExpr) {
case 1:pMsg->daysToKeep = htonl(pCreateDbSql->keep->a[0].pVar.i64Key);
break;
case 2: {
pMsg->daysToKeep = htonl(pCreateDbSql->keep->a[0].pVar.i64Key);
pMsg->daysToKeep1 = htonl(pCreateDbSql->keep->a[1].pVar.i64Key);
break;
}
case 3: {
pMsg->daysToKeep = htonl(pCreateDbSql->keep->a[0].pVar.i64Key);
pMsg->daysToKeep1 = htonl(pCreateDbSql->keep->a[1].pVar.i64Key);
pMsg->daysToKeep2 = htonl(pCreateDbSql->keep->a[2].pVar.i64Key);
break;
}
default: {
setErrMsg(pCmd, msg0, tListLen(msg0));
return TSDB_CODE_INVALID_SQL;
}
}
}
SSQLToken *pToken = &pCreateDbSql->precision;
if (pToken->n > 0) {
pToken->n = strdequote(pToken->z);
if (strncmp(pToken->z, TSDB_TIME_PRECISION_MILLI_STR, pToken->n) == 0 &&
strlen(TSDB_TIME_PRECISION_MILLI_STR) == pToken->n) {
// time precision for this db: million second
pMsg->precision = TSDB_TIME_PRECISION_MILLI;
} else if (strncmp(pToken->z, TSDB_TIME_PRECISION_MICRO_STR, pToken->n) == 0 &&
strlen(TSDB_TIME_PRECISION_MICRO_STR) == pToken->n) {
pMsg->precision = TSDB_TIME_PRECISION_MICRO;
} else {
setErrMsg(pCmd, msg1, tListLen(msg1));
return TSDB_CODE_INVALID_SQL;
}
}
return TSDB_CODE_SUCCESS;
}
\ No newline at end of file
...@@ -369,6 +369,26 @@ void tVariantListDestroy(tVariantList *pList) { ...@@ -369,6 +369,26 @@ void tVariantListDestroy(tVariantList *pList) {
free(pList); free(pList);
} }
tVariantList *tVariantListAppendToken(tVariantList *pList, SSQLToken *pAliasToken, uint8_t sortOrder) {
if (pList == NULL) {
pList = calloc(1, sizeof(tVariantList));
}
if (tVariantListExpand(pList) == NULL) {
return pList;
}
if (pAliasToken) {
tVariant t = {0};
tVariantCreate(&t, pAliasToken);
tVariantListItem *pItem = &pList->a[pList->nExpr++];
memcpy(pItem, &t, sizeof(tVariant));
pItem->sortOrder = sortOrder;
}
return pList;
}
tFieldList *tFieldListAppend(tFieldList *pList, TAOS_FIELD *pField) { tFieldList *tFieldListAppend(tFieldList *pList, TAOS_FIELD *pField) {
if (pList == NULL) pList = calloc(1, sizeof(tFieldList)); if (pList == NULL) pList = calloc(1, sizeof(tFieldList));
...@@ -650,7 +670,7 @@ void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParam, ...) { ...@@ -650,7 +670,7 @@ void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParam, ...) {
va_end(va); va_end(va);
} }
void setCreateDBSQL(SSqlInfo *pInfo, int32_t type, SSQLToken *pToken, SCreateDBSQL *pDB, SSQLToken *pIgExists) { void setCreateDBSQL(SSqlInfo *pInfo, int32_t type, SSQLToken *pToken, SCreateDBInfo *pDB, SSQLToken *pIgExists) {
pInfo->sqlType = type; pInfo->sqlType = type;
if (pInfo->pDCLInfo == NULL) { if (pInfo->pDCLInfo == NULL) {
pInfo->pDCLInfo = calloc(1, sizeof(tDCLSQL)); pInfo->pDCLInfo = calloc(1, sizeof(tDCLSQL));
......
...@@ -1362,39 +1362,6 @@ int tscBuildCreateDbMsg(SSqlObj *pSql) { ...@@ -1362,39 +1362,6 @@ int tscBuildCreateDbMsg(SSqlObj *pSql) {
pCreateDbMsg = (SCreateDbMsg *)pMsg; pCreateDbMsg = (SCreateDbMsg *)pMsg;
strcpy(pCreateDbMsg->db, pCmd->name); strcpy(pCreateDbMsg->db, pCmd->name);
pCreateDbMsg->replications = pCmd->defaultVal[0];
pCreateDbMsg->daysPerFile = htonl(pCmd->defaultVal[1]);
pCreateDbMsg->rowsInFileBlock = htonl(pCmd->defaultVal[3]);
pCreateDbMsg->cacheBlockSize = htonl(pCmd->defaultVal[4]);
pCreateDbMsg->blocksPerMeter = htons(pCmd->defaultVal[5]);
pCreateDbMsg->maxSessions = htonl(pCmd->defaultVal[6]);
pCreateDbMsg->commitTime = htonl(pCmd->defaultVal[7]);
pCreateDbMsg->commitLog = pCmd->defaultVal[8];
pCreateDbMsg->compression = pCmd->defaultVal[9];
pCreateDbMsg->cacheNumOfBlocks.fraction = *(double *)&(pCmd->defaultVal[10]);
int32_t n = pCmd->defaultVal[11];
switch (n) {
case 1:
pCreateDbMsg->daysToKeep = htonl(pCmd->defaultVal[12]);
break;
case 2: {
pCreateDbMsg->daysToKeep = htonl(pCmd->defaultVal[12]);
pCreateDbMsg->daysToKeep1 = htonl(pCmd->defaultVal[13]);
break;
}
case 3: {
pCreateDbMsg->daysToKeep = htonl(pCmd->defaultVal[12]);
pCreateDbMsg->daysToKeep1 = htonl(pCmd->defaultVal[13]);
pCreateDbMsg->daysToKeep2 = htonl(pCmd->defaultVal[14]);
break;
}
}
pCreateDbMsg->precision = pCmd->defaultVal[15];
pMsg += sizeof(SCreateDbMsg); pMsg += sizeof(SCreateDbMsg);
msgLen = pMsg - pStart; msgLen = pMsg - pStart;
......
...@@ -152,56 +152,39 @@ cmd ::= CREATE USER ids(X) PASS ids(Y). { setDCLSQLElems(pInfo, CREATE_USER, ...@@ -152,56 +152,39 @@ cmd ::= CREATE USER ids(X) PASS ids(Y). { setDCLSQLElems(pInfo, CREATE_USER,
%type keep {tVariantList*} %type keep {tVariantList*}
%destructor keep {tVariantListDestroy($$);} %destructor keep {tVariantListDestroy($$);}
keep(Y) ::= . {Y = 0; } keep(Y) ::= KEEP tagitemlist(X). { Y = X; }
keep(Y) ::= KEEP tagitemlist(X). {Y = X; }
tables(Y) ::= TABLES INTEGER(X). { Y = X; }
replica(Y) ::= . {Y.n = 0; } cache(Y) ::= CACHE INTEGER(X). { Y = X; }
replica(Y) ::= REPLICA INTEGER(X). {Y = X; } replica(Y) ::= REPLICA INTEGER(X). { Y = X; }
days(Y) ::= DAYS INTEGER(X). { Y = X; }
day(Y) ::= . {Y.n = 0; } rows(Y) ::= ROWS INTEGER(X). { Y = X; }
day(Y) ::= DAYS INTEGER(X). {Y = X; }
ablocks(Y) ::= ABLOCKS ID(X). { Y = X; }
rows(Y) ::= ROWS INTEGER(X). {Y = X; } tblocks(Y) ::= TBLOCKS INTEGER(X). { Y = X; }
rows(Y) ::= . {Y.n = 0; } ctime(Y) ::= CTIME INTEGER(X). { Y = X; }
clog(Y) ::= CLOG INTEGER(X). { Y = X; }
cache(Y) ::= CACHE INTEGER(X). {Y = X; } comp(Y) ::= COMP INTEGER(X). { Y = X; }
cache(Y) ::= . {Y.n = 0; } prec(Y) ::= PRECISION STRING(X). { Y = X; }
ablocks(Y) ::= ABLOCKS ID(X). {Y = X; }
ablocks(Y) ::= . {Y.n = 0; } %type db_optr {SCreateDBInfo}
tblocks(Y) ::= TBLOCKS INTEGER(X). {Y = X; } db_optr ::= . {}
tblocks(Y) ::= . {Y.n = 0; } db_optr(Y) ::= db_optr(Z) tables(X). { Y = Z; Y.tablesPerVnode = strtol(X.z, NULL, 10); }
tables(Y) ::= TABLES INTEGER(X). {Y = X; } db_optr(Y) ::= db_optr(Z) cache(X). { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); }
tables(Y) ::= . {Y.n = 0; } db_optr(Y) ::= db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
ctime(Y) ::= CTIME INTEGER(X). {Y = X; } db_optr(Y) ::= db_optr(Z) days(X). { Y = Z; Y.daysPerFile = strtol(X.z, NULL, 10); }
ctime(Y) ::= . {Y.n = 0; } db_optr(Y) ::= db_optr(Z) rows(X). { Y = Z; Y.rowPerFileBlock = strtol(X.z, NULL, 10); }
clog(Y) ::= CLOG INTEGER(X). {Y = X; } db_optr(Y) ::= db_optr(Z) ablocks(X). { Y = Z; Y.numOfAvgCacheBlocks = strtod(X.z, NULL); }
clog(Y) ::= . {Y.n = 0; } db_optr(Y) ::= db_optr(Z) tblocks(X). { Y = Z; Y.numOfBlocksPerTable = strtol(X.z, NULL, 10); }
comp(Y) ::= COMP INTEGER(X). {Y = X; } db_optr(Y) ::= db_optr(Z) ctime(X). { Y = Z; Y.commitTime = strtol(X.z, NULL, 10); }
comp(Y) ::= . {Y.n = 0; } db_optr(Y) ::= db_optr(Z) clog(X). { Y = Z; Y.commitLog = strtol(X.z, NULL, 10); }
prec(Y) ::= PRECISION ids(X). {Y = X; } db_optr(Y) ::= db_optr(Z) comp(X). { Y = Z; Y.compressionLevel = strtol(X.z, NULL, 10); }
prec(Y) ::= . {Y.n = 0; } 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; }
%type db_optr {SCreateDBSQL}
db_optr(Y) ::= replica(A) day(B) keep(C) rows(D) cache(E) ablocks(F) tblocks(K) tables(G) ctime(H) clog(I) comp(J) prec(L). { %type alter_db_optr {SCreateDBInfo}
Y.nReplica = (A.n > 0)? atoi(A.z):-1; alter_db_optr(Y) ::= REPLICA tagitem(A). {
Y.nDays = (B.n > 0)? atoi(B.z):-1; Y.replica = A.i64Key;
Y.nRowsInFileBlock = (D.n > 0)? atoi(D.z):-1;
Y.nCacheBlockSize = (E.n > 0)? atoi(E.z):-1;
Y.nCacheNumOfBlocks = (F.n > 0)? strtod(F.z, NULL):-1;
Y.numOfBlocksPerTable = (K.n > 0)? atoi(K.z):-1;
Y.nTablesPerVnode = (G.n > 0)? atoi(G.z):-1;
Y.commitTime = (H.n > 0)? atoi(H.z):-1;
Y.commitLog = (I.n > 0)? atoi(I.z):-1;
Y.compressionLevel = (J.n > 0)? atoi(J.z):-1;
Y.keep = C;
Y.precision = L;
}
%type alter_db_optr {SCreateDBSQL}
alter_db_optr(Y) ::= replica(A). {
Y.nReplica = (A.n > 0)? atoi(A.z):0;
} }
%type typename {TAOS_FIELD} %type typename {TAOS_FIELD}
...@@ -359,11 +342,8 @@ fill_opt(N) ::= FILL LP ID(Y) COMMA tagitemlist(X) RP. { ...@@ -359,11 +342,8 @@ fill_opt(N) ::= FILL LP ID(Y) COMMA tagitemlist(X) RP. {
} }
fill_opt(N) ::= FILL LP ID(Y) RP. { fill_opt(N) ::= FILL LP ID(Y) RP. {
tVariant A = {0};
toTSDBType(Y.type); toTSDBType(Y.type);
tVariantCreate(&A, &Y); N = tVariantListAppendToken(NULL, &Y, -1);
N = tVariantListAppend(NULL, &A, -1);
} }
%type sliding_opt {SSQLToken} %type sliding_opt {SSQLToken}
...@@ -386,13 +366,15 @@ sortlist(A) ::= sortlist(X) COMMA item(Y) sortorder(Z). { ...@@ -386,13 +366,15 @@ sortlist(A) ::= sortlist(X) COMMA item(Y) sortorder(Z). {
A = tVariantListAppend(X, &Y, Z); A = tVariantListAppend(X, &Y, Z);
} }
%type item {tVariant}
sortlist(A) ::= item(Y) sortorder(Z). { sortlist(A) ::= item(Y) sortorder(Z). {
A = tVariantListAppend(NULL, &Y, Z); A = tVariantListAppend(NULL, &Y, Z);
} }
item(A) ::= ids(X). { %type item {tVariant}
item(A) ::= ids(X) cpxName(Y). {
toTSDBType(X.type); toTSDBType(X.type);
X.n += Y.n;
tVariantCreate(&A, &X); tVariantCreate(&A, &X);
} }
...@@ -456,6 +438,7 @@ expr(A) ::= LP expr(X) RP. {A = X; } ...@@ -456,6 +438,7 @@ expr(A) ::= LP expr(X) RP. {A = X; }
expr(A) ::= ID(X). {A = tSQLExprIdValueCreate(&X, TK_ID);} expr(A) ::= ID(X). {A = tSQLExprIdValueCreate(&X, TK_ID);}
expr(A) ::= ID(X) DOT ID(Y). {X.n += (1+Y.n); A = tSQLExprIdValueCreate(&X, TK_ID);} expr(A) ::= ID(X) DOT ID(Y). {X.n += (1+Y.n); A = tSQLExprIdValueCreate(&X, TK_ID);}
expr(A) ::= ID(X) DOT STAR(Y). {X.n += (1+Y.n); A = tSQLExprIdValueCreate(&X, TK_ALL);}
expr(A) ::= INTEGER(X). {A = tSQLExprIdValueCreate(&X, TK_INTEGER);} expr(A) ::= INTEGER(X). {A = tSQLExprIdValueCreate(&X, TK_INTEGER);}
expr(A) ::= MINUS(X) INTEGER(Y). {X.n += Y.n; X.type = TK_INTEGER; A = tSQLExprIdValueCreate(&X, TK_INTEGER);} expr(A) ::= MINUS(X) INTEGER(Y). {X.n += Y.n; X.type = TK_INTEGER; A = tSQLExprIdValueCreate(&X, TK_INTEGER);}
...@@ -547,11 +530,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A). { ...@@ -547,11 +530,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
X.n += F.n; X.n += F.n;
toTSDBType(A.type); toTSDBType(A.type);
tVariantList* K = tVariantListAppendToken(NULL, &A, -1);
tVariant V;
tVariantCreate(&V, &A);
tVariantList* K = tVariantListAppend(NULL, &V, -1);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, K, ALTER_TABLE_DROP_COLUMN); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, K, ALTER_TABLE_DROP_COLUMN);
setSQLInfo(pInfo, pAlterTable, NULL, ALTER_TABLE_DROP_COLUMN); setSQLInfo(pInfo, pAlterTable, NULL, ALTER_TABLE_DROP_COLUMN);
...@@ -567,11 +546,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). { ...@@ -567,11 +546,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
X.n += Z.n; X.n += Z.n;
toTSDBType(Y.type); toTSDBType(Y.type);
tVariantList* A = tVariantListAppendToken(NULL, &Y, -1);
tVariant V;
tVariantCreate(&V, &Y);
tVariantList* A = tVariantListAppend(NULL, &V, -1);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, A, ALTER_TABLE_TAGS_DROP); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, A, ALTER_TABLE_TAGS_DROP);
setSQLInfo(pInfo, pAlterTable, NULL, ALTER_TABLE_TAGS_DROP); setSQLInfo(pInfo, pAlterTable, NULL, ALTER_TABLE_TAGS_DROP);
...@@ -580,15 +555,11 @@ cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). { ...@@ -580,15 +555,11 @@ cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). { cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
X.n += F.n; X.n += F.n;
tVariant V;
toTSDBType(Y.type); toTSDBType(Y.type);
tVariantCreate(&V, &Y); tVariantList* A = tVariantListAppendToken(NULL, &Y, -1);
tVariantList* A = tVariantListAppend(NULL, &V, -1);
toTSDBType(Z.type); toTSDBType(Z.type);
tVariantCreate(&V, &Z); A = tVariantListAppendToken(A, &Z, -1);
A = tVariantListAppend(A, &V, -1);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, A, ALTER_TABLE_TAGS_CHG); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, A, ALTER_TABLE_TAGS_CHG);
setSQLInfo(pInfo, pAlterTable, NULL, ALTER_TABLE_TAGS_CHG); setSQLInfo(pInfo, pAlterTable, NULL, ALTER_TABLE_TAGS_CHG);
...@@ -597,11 +568,8 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). { ...@@ -597,11 +568,8 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
cmd ::= ALTER TABLE ids(X) cpxName(F) SET ids(Y) EQ tagitem(Z). { cmd ::= ALTER TABLE ids(X) cpxName(F) SET ids(Y) EQ tagitem(Z). {
X.n += F.n; X.n += F.n;
tVariant V;
toTSDBType(Y.type); toTSDBType(Y.type);
tVariantCreate(&V, &Y); tVariantList* A = tVariantListAppendToken(NULL, &Y, -1);
tVariantList* A = tVariantListAppend(NULL, &V, -1);
A = tVariantListAppend(A, &Z, -1); A = tVariantListAppend(A, &Z, -1);
SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, A, ALTER_TABLE_TAGS_SET); SAlterTableSQL* pAlterTable = tAlterTableSQLElems(&X, NULL, A, ALTER_TABLE_TAGS_SET);
......
...@@ -197,23 +197,24 @@ typedef struct SInsertSQL { ...@@ -197,23 +197,24 @@ typedef struct SInsertSQL {
struct tSQLExprListList *pValue; struct tSQLExprListList *pValue;
} SInsertSQL; } SInsertSQL;
typedef struct SCreateDBSQL { typedef struct SCreateDBInfo {
SSQLToken dbname; SSQLToken dbname;
int32_t nReplica; int32_t replica;
int32_t nDays; int32_t cacheBlockSize;
int32_t tablesPerVnode;
int32_t daysPerFile;
int32_t rowPerFileBlock;
tVariantList *keep; float numOfAvgCacheBlocks;
int32_t nRowsInFileBlock; int32_t numOfBlocksPerTable;
int32_t nCacheBlockSize;
float nCacheNumOfBlocks;
int32_t numOfBlocksPerTable;
int32_t nTablesPerVnode;
int64_t commitTime; int64_t commitTime;
int32_t commitLog; int32_t commitLog;
int32_t compressionLevel; int32_t compressionLevel;
SSQLToken precision; // time precision[ms by default/us] SSQLToken precision;
} SCreateDBSQL;
tVariantList *keep;
} SCreateDBInfo;
typedef struct SCreateAcctSQL { typedef struct SCreateAcctSQL {
int32_t users; int32_t users;
...@@ -233,7 +234,7 @@ typedef struct tDCLSQL { ...@@ -233,7 +234,7 @@ typedef struct tDCLSQL {
SSQLToken *a; /* one entry for element */ SSQLToken *a; /* one entry for element */
union { union {
SCreateDBSQL dbOpt; SCreateDBInfo dbOpt;
SCreateAcctSQL acctOpt; SCreateAcctSQL acctOpt;
}; };
} tDCLSQL; } tDCLSQL;
...@@ -326,6 +327,7 @@ void Parse(void *yyp, int yymajor, ParseTOKENTYPE yyminor, SSqlInfo *); ...@@ -326,6 +327,7 @@ void Parse(void *yyp, int yymajor, ParseTOKENTYPE yyminor, SSqlInfo *);
*/ */
void ParseFree(void *p, void (*freeProc)(void *)); void ParseFree(void *p, void (*freeProc)(void *));
tVariantList *tVariantListAppendToken(tVariantList *pList, SSQLToken *pAliasToken, uint8_t sortOrder);
tVariantList *tVariantListAppend(tVariantList *pList, tVariant *pVar, uint8_t sortOrder); tVariantList *tVariantListAppend(tVariantList *pList, tVariant *pVar, uint8_t sortOrder);
tVariantList *tVariantListInsert(tVariantList *pList, tVariant *pVar, uint8_t sortOrder, int32_t index); tVariantList *tVariantListInsert(tVariantList *pList, tVariant *pVar, uint8_t sortOrder, int32_t index);
...@@ -371,7 +373,7 @@ void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParams, ...); ...@@ -371,7 +373,7 @@ void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParams, ...);
tDCLSQL *tTokenListAppend(tDCLSQL *pTokenList, SSQLToken *pToken); tDCLSQL *tTokenListAppend(tDCLSQL *pTokenList, SSQLToken *pToken);
void setCreateDBSQL(SSqlInfo *pInfo, int32_t type, SSQLToken *pToken, SCreateDBSQL *pDB, SSQLToken *pIgExists); void setCreateDBSQL(SSqlInfo *pInfo, int32_t type, SSQLToken *pToken, SCreateDBInfo *pDB, SSQLToken *pIgExists);
void setCreateAcctSQL(SSqlInfo *pInfo, int32_t type, SSQLToken *pName, SSQLToken *pPwd, SCreateAcctSQL *pAcctInfo); void setCreateAcctSQL(SSqlInfo *pInfo, int32_t type, SSQLToken *pName, SSQLToken *pPwd, SCreateAcctSQL *pAcctInfo);
......
...@@ -91,10 +91,10 @@ ...@@ -91,10 +91,10 @@
#define TK_EXISTS 73 #define TK_EXISTS 73
#define TK_CREATE 74 #define TK_CREATE 74
#define TK_KEEP 75 #define TK_KEEP 75
#define TK_REPLICA 76 #define TK_CACHE 76
#define TK_DAYS 77 #define TK_REPLICA 77
#define TK_ROWS 78 #define TK_DAYS 78
#define TK_CACHE 79 #define TK_ROWS 79
#define TK_ABLOCKS 80 #define TK_ABLOCKS 80
#define TK_TBLOCKS 81 #define TK_TBLOCKS 81
#define TK_CTIME 82 #define TK_CTIME 82
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册