[td-4520]<enhance>: support the tbname column alias name.
This commit is contained in:
parent
0d7a58f0ca
commit
d09d9a2e56
|
@ -1931,8 +1931,10 @@ int32_t addProjectionExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, t
|
|||
}
|
||||
|
||||
if (index.columnIndex == TSDB_TBNAME_COLUMN_INDEX) {
|
||||
SSchema* colSchema = tGetTbnameColumnSchema();
|
||||
tscAddFuncInSelectClause(pQueryInfo, startPos, TSDB_FUNC_TAGPRJ, &index, colSchema, TSDB_COL_TAG, getNewResColId(pCmd));
|
||||
SSchema colSchema = *tGetTbnameColumnSchema();
|
||||
getColumnName(pItem, colSchema.name, colSchema.name, sizeof(colSchema.name) - 1);
|
||||
|
||||
/*SExprInfo* pExpr = */tscAddFuncInSelectClause(pQueryInfo, startPos, TSDB_FUNC_TAGPRJ, &index, &colSchema, TSDB_COL_TAG, getNewResColId(pCmd));
|
||||
} else {
|
||||
STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
|
||||
STableMeta* pTableMeta = pTableMetaInfo->pTableMeta;
|
||||
|
@ -3887,7 +3889,8 @@ static int32_t handleExprInQueryCond(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, tSql
|
|||
return code;
|
||||
}
|
||||
|
||||
if (index.columnIndex == PRIMARYKEY_TIMESTAMP_COL_INDEX) { // query on time range
|
||||
SSchema* pSchema = tscGetTableColumnSchema(pTableMeta, index.columnIndex);
|
||||
if (pSchema->colId == PRIMARYKEY_TIMESTAMP_COL_INDEX) { // query on time range
|
||||
if (!validateJoinExprNode(pCmd, pQueryInfo, *pExpr, &index)) {
|
||||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||
}
|
||||
|
@ -6754,6 +6757,7 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
|
|||
const char* msg5 = "sql too long"; // todo ADD support
|
||||
const char* msg6 = "from missing in subclause";
|
||||
const char* msg7 = "time interval is required";
|
||||
const char* msg8 = "the first column should be primary timestamp column";
|
||||
|
||||
SSqlCmd* pCmd = &pSql->cmd;
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfo(pCmd);
|
||||
|
@ -6807,13 +6811,19 @@ int32_t doCheckForStream(SSqlObj* pSql, SSqlInfo* pInfo) {
|
|||
return TSDB_CODE_TSC_INVALID_OPERATION;
|
||||
}
|
||||
|
||||
|
||||
if (isTimeWindowQuery(pQueryInfo) && (validateFunctionsInIntervalOrGroupbyQuery(pCmd, pQueryInfo) != TSDB_CODE_SUCCESS)) {
|
||||
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||
}
|
||||
|
||||
if (!tscIsProjectionQuery(pQueryInfo) && pQueryInfo->interval.interval == 0) {
|
||||
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg7);
|
||||
if (tscIsProjectionQuery(pQueryInfo)) {
|
||||
SExprInfo* pExpr = tscExprGet(pQueryInfo, 0);
|
||||
if (pExpr->base.colInfo.colId != PRIMARYKEY_TIMESTAMP_COL_INDEX) {
|
||||
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg8);
|
||||
}
|
||||
} else {
|
||||
if (pQueryInfo->interval.interval == 0) {
|
||||
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg7);
|
||||
}
|
||||
}
|
||||
|
||||
// set the created table[stream] name
|
||||
|
|
|
@ -4481,7 +4481,7 @@ static void ts_comp_finalize(SQLFunctionCtx *pCtx) {
|
|||
static double do_calc_rate(const SRateInfo* pRateInfo, int64_t tickPerSec) {
|
||||
if ((INT64_MIN == pRateInfo->lastKey) || (INT64_MIN == pRateInfo->firstKey) ||
|
||||
(pRateInfo->firstKey >= pRateInfo->lastKey)) {
|
||||
return 0;
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
double diff = 0;
|
||||
|
@ -4504,7 +4504,7 @@ static double do_calc_rate(const SRateInfo* pRateInfo, int64_t tickPerSec) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
return (duration > 0)? ((double)diff) / (duration/((double) tickPerSec)):0;
|
||||
return (duration > 0)? ((double)diff) / (duration/((double) tickPerSec)):0.0;
|
||||
}
|
||||
|
||||
static bool rate_function_setup(SQLFunctionCtx *pCtx) {
|
||||
|
@ -4545,7 +4545,7 @@ static void rate_function(SQLFunctionCtx *pCtx) {
|
|||
notNullElems++;
|
||||
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pCtx->inputType, pData);
|
||||
GET_TYPED_DATA(v, double, pCtx->inputType, pData);
|
||||
|
||||
if ((INT64_MIN == pRateInfo->firstValue) || (INT64_MIN == pRateInfo->firstKey)) {
|
||||
pRateInfo->firstValue = v;
|
||||
|
@ -4592,7 +4592,7 @@ static void rate_function_f(SQLFunctionCtx *pCtx, int32_t index) {
|
|||
TSKEY *primaryKey = GET_TS_LIST(pCtx);
|
||||
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pCtx->inputType, pData);
|
||||
GET_TYPED_DATA(v, double, pCtx->inputType, pData);
|
||||
|
||||
if ((INT64_MIN == pRateInfo->firstValue) || (INT64_MIN == pRateInfo->firstKey)) {
|
||||
pRateInfo->firstValue = v;
|
||||
|
@ -4637,7 +4637,7 @@ static void rate_finalizer(SQLFunctionCtx *pCtx) {
|
|||
return;
|
||||
}
|
||||
|
||||
*(double*)pCtx->pOutput = do_calc_rate(pRateInfo, TSDB_TICK_PER_SECOND(pCtx->param[0].i64));
|
||||
*(double*) pCtx->pOutput = do_calc_rate(pRateInfo, TSDB_TICK_PER_SECOND(pCtx->param[0].i64));
|
||||
|
||||
// cannot set the numOfIteratedElems again since it is set during previous iteration
|
||||
pResInfo->numOfRes = 1;
|
||||
|
@ -4702,7 +4702,7 @@ static void irate_function_f(SQLFunctionCtx *pCtx, int32_t index) {
|
|||
TSKEY *primaryKey = GET_TS_LIST(pCtx);
|
||||
|
||||
int64_t v = 0;
|
||||
GET_TYPED_DATA(v, int64_t, pCtx->inputType, pData);
|
||||
GET_TYPED_DATA(v, double, pCtx->inputType, pData);
|
||||
|
||||
pRateInfo->firstKey = pRateInfo->lastKey;
|
||||
pRateInfo->firstValue = pRateInfo->lastValue;
|
||||
|
|
|
@ -124,6 +124,12 @@ if $rows != 2 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select * from (select count(*) a from nest_mt0 group by tbname) t where t.a<0
|
||||
if $rows != 0 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
|
||||
|
||||
print ===================> nest query interval
|
||||
|
||||
|
|
Loading…
Reference in New Issue