feat: insert using statement supports ttl and comment
This commit is contained in:
parent
1289093b02
commit
7708900f73
|
@ -786,6 +786,7 @@ static void buildCreateTbReq(SVCreateTbReq* pTbReq, const char* tname, STag* pTa
|
||||||
if (sname) pTbReq->ctb.name = strdup(sname);
|
if (sname) pTbReq->ctb.name = strdup(sname);
|
||||||
pTbReq->ctb.pTag = (uint8_t*)pTag;
|
pTbReq->ctb.pTag = (uint8_t*)pTag;
|
||||||
pTbReq->ctb.tagName = taosArrayDup(tagName);
|
pTbReq->ctb.tagName = taosArrayDup(tagName);
|
||||||
|
pTbReq->ttl = TSDB_DEFAULT_TABLE_TTL;
|
||||||
pTbReq->commentLen = -1;
|
pTbReq->commentLen = -1;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -1121,6 +1122,40 @@ static int32_t ignoreAutoCreateTableClause(SInsertParseContext* pCxt) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t parseTableOptions(SInsertParseContext* pCxt) {
|
||||||
|
do {
|
||||||
|
int32_t index = 0;
|
||||||
|
SToken sToken;
|
||||||
|
NEXT_TOKEN_KEEP_SQL(pCxt->pSql, sToken, index);
|
||||||
|
if (TK_TTL == sToken.type) {
|
||||||
|
pCxt->pSql += index;
|
||||||
|
NEXT_TOKEN(pCxt->pSql, sToken);
|
||||||
|
if (TK_NK_INTEGER != sToken.type) {
|
||||||
|
return buildSyntaxErrMsg(&pCxt->msg, "Invalid option ttl", sToken.z);
|
||||||
|
}
|
||||||
|
pCxt->createTblReq.ttl = taosStr2Int32(sToken.z, NULL, 10);
|
||||||
|
} else if (TK_COMMENT == sToken.type) {
|
||||||
|
pCxt->pSql += index;
|
||||||
|
NEXT_TOKEN(pCxt->pSql, sToken);
|
||||||
|
if (TK_NK_STRING != sToken.type) {
|
||||||
|
return buildSyntaxErrMsg(&pCxt->msg, "Invalid option comment", sToken.z);
|
||||||
|
}
|
||||||
|
if (sToken.n >= TSDB_TB_COMMENT_LEN) {
|
||||||
|
return buildSyntaxErrMsg(&pCxt->msg, "comment too long", sToken.z);
|
||||||
|
}
|
||||||
|
int32_t len = trimString(sToken.z, sToken.n, pCxt->tmpTokenBuf, TSDB_TB_COMMENT_LEN);
|
||||||
|
pCxt->createTblReq.comment = strndup(pCxt->tmpTokenBuf, len);
|
||||||
|
if (NULL == pCxt->createTblReq.comment) {
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
pCxt->createTblReq.commentLen = len;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (1);
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
|
// pSql -> stb_name [(tag1_name, ...)] TAGS (tag1_value, ...)
|
||||||
static int32_t parseUsingClause(SInsertParseContext* pCxt, int32_t tbNo, SName* name, char* tbFName) {
|
static int32_t parseUsingClause(SInsertParseContext* pCxt, int32_t tbNo, SName* name, char* tbFName) {
|
||||||
int32_t len = strlen(tbFName);
|
int32_t len = strlen(tbFName);
|
||||||
|
@ -1172,7 +1207,7 @@ static int32_t parseUsingClause(SInsertParseContext* pCxt, int32_t tbNo, SName*
|
||||||
return buildSyntaxErrMsg(&pCxt->msg, ") is expected", sToken.z);
|
return buildSyntaxErrMsg(&pCxt->msg, ") is expected", sToken.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return parseTableOptions(pCxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parseOneRow(SInsertParseContext* pCxt, STableDataBlocks* pDataBlocks, int16_t timePrec, bool* gotRow,
|
static int parseOneRow(SInsertParseContext* pCxt, STableDataBlocks* pDataBlocks, int16_t timePrec, bool* gotRow,
|
||||||
|
@ -1700,6 +1735,21 @@ static int32_t skipValuesClause(SInsertParseSyntaxCxt* pCxt) {
|
||||||
|
|
||||||
static int32_t skipTagsClause(SInsertParseSyntaxCxt* pCxt) { return skipParentheses(pCxt); }
|
static int32_t skipTagsClause(SInsertParseSyntaxCxt* pCxt) { return skipParentheses(pCxt); }
|
||||||
|
|
||||||
|
static int32_t skipTableOptions(SInsertParseSyntaxCxt* pCxt) {
|
||||||
|
do {
|
||||||
|
int32_t index = 0;
|
||||||
|
SToken sToken;
|
||||||
|
NEXT_TOKEN_KEEP_SQL(pCxt->pSql, sToken, index);
|
||||||
|
if (TK_TTL == sToken.type || TK_COMMENT == sToken.type) {
|
||||||
|
pCxt->pSql += index;
|
||||||
|
NEXT_TOKEN(pCxt->pSql, sToken);
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (1);
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
// pSql -> [(tag1_name, ...)] TAGS (tag1_value, ...)
|
// pSql -> [(tag1_name, ...)] TAGS (tag1_value, ...)
|
||||||
static int32_t skipUsingClause(SInsertParseSyntaxCxt* pCxt) {
|
static int32_t skipUsingClause(SInsertParseSyntaxCxt* pCxt) {
|
||||||
SToken sToken;
|
SToken sToken;
|
||||||
|
@ -1718,6 +1768,7 @@ static int32_t skipUsingClause(SInsertParseSyntaxCxt* pCxt) {
|
||||||
return buildSyntaxErrMsg(&pCxt->msg, "( is expected", sToken.z);
|
return buildSyntaxErrMsg(&pCxt->msg, "( is expected", sToken.z);
|
||||||
}
|
}
|
||||||
CHECK_CODE(skipTagsClause(pCxt));
|
CHECK_CODE(skipTagsClause(pCxt));
|
||||||
|
CHECK_CODE(skipTableOptions(pCxt));
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue