提交 9b6a1ab4 编写于 作者: H huili

[Support using capitalized by table/db name]

上级 551b590b
......@@ -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";
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册