fix: target table has less primary keys than source

This commit is contained in:
kailixu 2024-04-02 19:49:30 +08:00
parent f6dc3205ee
commit 6e56e61ad5
1 changed files with 11 additions and 3 deletions

View File

@ -5088,7 +5088,8 @@ static int32_t translateInsertProject(STranslateContext* pCxt, SInsertStmt* pIns
SNode* pPrimaryKeyExpr = NULL;
SNode* pBoundCol = NULL;
SNode* pProj = NULL;
int16_t numOfPKs = 0;
int16_t numOfSourcePKs = 0;
int16_t numOfTargetPKs = 0;
int16_t numOfBoundPKs = 0;
FORBOTH(pBoundCol, pInsert->pCols, pProj, pProjects) {
SColumnNode* pCol = (SColumnNode*)pBoundCol;
@ -5105,7 +5106,8 @@ static int32_t translateInsertProject(STranslateContext* pCxt, SInsertStmt* pIns
snprintf(pExpr->aliasName, sizeof(pExpr->aliasName), "%s", pCol->colName);
if (PRIMARYKEY_TIMESTAMP_COL_ID == pCol->colId) {
pPrimaryKeyExpr = (SNode*)pExpr;
numOfPKs = pCol->numOfPKs;
numOfTargetPKs = pCol->numOfPKs;
numOfSourcePKs = ((SColumnNode*)pProj)->numOfPKs;
}
if (pCol->isPk) ++numOfBoundPKs;
}
@ -5115,10 +5117,16 @@ static int32_t translateInsertProject(STranslateContext* pCxt, SInsertStmt* pIns
"Primary timestamp column should not be null");
}
if (numOfBoundPKs != numOfPKs) {
if (numOfBoundPKs != numOfTargetPKs) {
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR, "Primary key column should not be none");
}
if (numOfTargetPKs < numOfSourcePKs) {
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_SYNTAX_ERROR,
"Target table has less primary keys:%" PRIi16 " than source:%" PRIi16,
numOfTargetPKs, numOfSourcePKs);
}
return addOrderByPrimaryKeyToQuery(pCxt, pPrimaryKeyExpr, pInsert->pQuery);
}