[Support using capitalized by table/db name]

This commit is contained in:
huili 2019-07-23 19:33:28 +08:00
parent 551b590b5f
commit 9b6a1ab42f
4 changed files with 56 additions and 9 deletions

View File

@ -207,7 +207,11 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SSQLToken* pToken = &pInfo->pDCLInfo->a[0];
tscValidateName(pToken);
if (tscValidateName(pToken) != TSDB_CODE_SUCCESS) {
char msg1[] = "invalid db name";
setErrMsg(pCmd, msg1, tListLen(msg1));
return TSDB_CODE_INVALID_SQL;
}
if (pToken->n > TSDB_DB_NAME_LEN) {
setErrMsg(pCmd, msg, tListLen(msg));
@ -393,7 +397,11 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SSQLToken* pToken = &pInfo->pDCLInfo->a[0];
char msg[] = "table name is too long";
tscValidateName(pToken);
if (tscValidateName(pToken) != TSDB_CODE_SUCCESS) {
char msg1[] = "invalid table name";
setErrMsg(pCmd, msg1, tListLen(msg1));
return TSDB_CODE_INVALID_SQL;
}
if (pToken->n > TSDB_METER_NAME_LEN) {
setErrMsg(pCmd, msg, tListLen(msg));
@ -571,7 +579,10 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
// metric name, create table by using dst
SSQLToken* pToken = &(pInfo->pCreateTableInfo->usingInfo.metricName);
tscValidateName(pToken);
if (tscValidateName(pToken) != TSDB_CODE_SUCCESS) {
setErrMsg(pCmd, msg, tListLen(msg));
return TSDB_CODE_INVALID_SQL;
}
int32_t ret = setMeterID(pSql, pToken);
if (ret != TSDB_CODE_SUCCESS) {
@ -738,8 +749,12 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
setErrMsg(pCmd, msg, tListLen(msg));
return TSDB_CODE_INVALID_SQL;
}
tscValidateName(&(pQuerySql->from));
if (tscValidateName(&(pQuerySql->from)) != TSDB_CODE_SUCCESS) {
char msg[] = "invalid table name";
setErrMsg(pCmd, msg, tListLen(msg));
return TSDB_CODE_INVALID_SQL;
}
if (setMeterID(pSql, &pQuerySql->from) != TSDB_CODE_SUCCESS) {
char msg[] = "table name too long";
@ -3477,7 +3492,11 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SAlterTableSQL* pAlterSQL = pInfo->pAlterInfo;
pCmd->command = TSDB_SQL_ALTER_TABLE;
tscValidateName(&(pAlterSQL->name));
if (tscValidateName(&(pAlterSQL->name)) != TSDB_CODE_SUCCESS) {
char msg[] = "invalid table name";
setErrMsg(pCmd, msg, tListLen(msg));
return TSDB_CODE_INVALID_SQL;
}
if (setMeterID(pSql, &(pAlterSQL->name)) != TSDB_CODE_SUCCESS) {
char msg[] = "table name too long";

View File

@ -800,8 +800,15 @@ static int32_t validateQuoteToken(SSQLToken* pToken) {
pToken->n = (uint32_t)strlen(pToken->z);
int32_t k = tSQLGetToken(pToken->z, &pToken->type);
if (k != pToken->n || pToken->type != TK_ID) {
return TSDB_CODE_INVALID_SQL;
if (k != pToken->n) {
if (pToken->type == TK_STRING) {
return tscValidateName(pToken);
}
} else {
if (pToken->type != TK_ID) {
return TSDB_CODE_INVALID_SQL;
}
}
return TSDB_CODE_SUCCESS;
@ -812,7 +819,7 @@ int32_t tscValidateName(SSQLToken* pToken) {
return TSDB_CODE_INVALID_SQL;
}
char* sep = strnchr(pToken->z, TS_PATH_DELIMITER[0], pToken->n);
char* sep = strnchrNoquote(pToken->z, TS_PATH_DELIMITER[0], pToken->n);
if (sep == NULL) { // single part
if (pToken->type == TK_STRING) {
return validateQuoteToken(pToken);

View File

@ -155,6 +155,7 @@ int32_t strdequote(char *src);
void strtrim(char *src);
char *strnchr(char *haystack, char needle, int32_t len);
char *strnchrNoquote(char *haystack, char needle, int32_t len);
char **strsplit(char *src, const char *delim, int32_t *num);

View File

@ -131,6 +131,26 @@ char *strnchr(char *haystack, char needle, int32_t len) {
return NULL;
}
char *strnchrNoquote(char *haystack, char needle, int32_t len) {
for (int32_t i = 0; i < len; ++i) {
if (haystack[i] == '\'' || haystack[i] == '"') {
char quote = haystack[i++];
while(i < len && haystack[i] != quote){++i;}
if (++i >= len) {
return NULL;
}
}
if (haystack[i] == needle) {
return &haystack[i];
}
}
return NULL;
}
void strtolower(char *z, char *dst) {
int quote = 0;
char *str = z;