[fix db/table name]

This commit is contained in:
huili 2019-07-25 14:14:38 +08:00
parent 9b5a52a3aa
commit cfc22dec75
2 changed files with 39 additions and 13 deletions

View File

@ -795,22 +795,19 @@ void tscColumnInfoReserve(SSqlCmd* pCmd, int32_t size) { _cf_ensureSpace(&pCmd->
*/ */
static int32_t validateQuoteToken(SSQLToken* pToken) { static int32_t validateQuoteToken(SSQLToken* pToken) {
strdequote(pToken->z); pToken->n = strdequote(pToken->z);
strtrim(pToken->z); strtrim(pToken->z);
pToken->n = (uint32_t)strlen(pToken->z); pToken->n = (uint32_t)strlen(pToken->z);
int32_t k = tSQLGetToken(pToken->z, &pToken->type); int32_t k = tSQLGetToken(pToken->z, &pToken->type);
if (k != pToken->n) {
if (pToken->type == TK_STRING) { if (pToken->type == TK_STRING) {
return tscValidateName(pToken); return tscValidateName(pToken);
} }
} else {
if (pToken->type != TK_ID) { if (k != pToken->n || pToken->type != TK_ID) {
return TSDB_CODE_INVALID_SQL; return TSDB_CODE_INVALID_SQL;
} }
}
return TSDB_CODE_SUCCESS; return TSDB_CODE_SUCCESS;
} }
@ -822,7 +819,20 @@ int32_t tscValidateName(SSQLToken* pToken) {
char* sep = strnchrNoquote(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 (sep == NULL) { // single part
if (pToken->type == TK_STRING) { if (pToken->type == TK_STRING) {
pToken->n = strdequote(pToken->z);
strtrim(pToken->z);
pToken->n = (uint32_t)strlen(pToken->z);
int len = tSQLGetToken(pToken->z, &pToken->type);
if (len == pToken->n){
return validateQuoteToken(pToken); return validateQuoteToken(pToken);
}
else {
sep = strnchrNoquote(pToken->z, TS_PATH_DELIMITER[0], pToken->n);
if (sep == NULL) {
return TSDB_CODE_INVALID_SQL;
}
return tscValidateName(pToken);
}
} else { } else {
if (isNumber(pToken)) { if (isNumber(pToken)) {
return TSDB_CODE_INVALID_SQL; return TSDB_CODE_INVALID_SQL;
@ -832,6 +842,11 @@ int32_t tscValidateName(SSQLToken* pToken) {
int32_t oldLen = pToken->n; int32_t oldLen = pToken->n;
char* pStr = pToken->z; char* pStr = pToken->z;
if (pToken->type == TK_SPACE) {
strtrim(pToken->z);
pToken->n = (uint32_t)strlen(pToken->z);
}
pToken->n = tSQLGetToken(pToken->z, &pToken->type); pToken->n = tSQLGetToken(pToken->z, &pToken->type);
if (pToken->z[pToken->n] != TS_PATH_DELIMITER[0]) { if (pToken->z[pToken->n] != TS_PATH_DELIMITER[0]) {
return TSDB_CODE_INVALID_SQL; return TSDB_CODE_INVALID_SQL;

View File

@ -272,6 +272,10 @@ int tSQLKeywordCode(const char* z, int n) {
} }
} }
/*
** Return the length of the token that begins at z[0].
** Store the token type in *type before returning.
*/
uint32_t tSQLGetToken(char* z, uint32_t* tokenType) { uint32_t tSQLGetToken(char* z, uint32_t* tokenType) {
int i; int i;
switch (*z) { switch (*z) {
@ -398,19 +402,26 @@ uint32_t tSQLGetToken(char* z, uint32_t* tokenType) {
case '\'': case '\'':
case '"': { case '"': {
int delim = z[0]; int delim = z[0];
bool strEnd = false;
for (i = 1; z[i]; i++) { for (i = 1; z[i]; i++) {
if (z[i] == delim) { if (z[i] == delim) {
if (z[i + 1] == delim) { if (z[i + 1] == delim) {
i++; i++;
} else { } else {
strEnd = true;
break; break;
} }
} }
} }
if (z[i]) i++; if (z[i]) i++;
if (strEnd){
*tokenType = TK_STRING; *tokenType = TK_STRING;
return i; return i;
} }
break;
}
case '.': { case '.': {
*tokenType = TK_DOT; *tokenType = TK_DOT;
return 1; return 1;