提交 ee5e9a71 编写于 作者: D dapan1121

query interval with client tz

上级 eaaa2514
......@@ -385,7 +385,7 @@ void tscCreateLocalReducer(tExtMemBuffer **pMemBuffer, int32_t numOfBuffer, tOrd
SFillColInfo* pFillCol = createFillColInfo(pQueryInfo);
pReducer->pFillInfo = taosInitFillInfo(pQueryInfo->order.order, revisedSTime, pQueryInfo->groupbyExpr.numOfGroupCols,
4096, (int32_t)pQueryInfo->fieldsInfo.numOfOutput, pQueryInfo->interval.sliding, pQueryInfo->interval.slidingUnit,
tinfo.precision, pQueryInfo->fillType, pFillCol, pSql);
tinfo.precision, pQueryInfo->fillType, pFillCol, pSql, timezone);
}
}
......
......@@ -776,6 +776,8 @@ int32_t parseIntervalClause(SSqlObj* pSql, SQueryInfo* pQueryInfo, SQuerySQL* pQ
return TSDB_CODE_TSC_INVALID_SQL;
}
pQueryInfo->interval.tz = timezone;
return TSDB_CODE_SUCCESS;
}
......
......@@ -728,6 +728,7 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pQueryMsg->limit = htobe64(pQueryInfo->limit.limit);
pQueryMsg->offset = htobe64(pQueryInfo->limit.offset);
pQueryMsg->numOfCols = htons((int16_t)taosArrayGetSize(pQueryInfo->colList));
pQueryMsg->interval.tz = htobe64(timezone);
pQueryMsg->interval.interval = htobe64(pQueryInfo->interval.interval);
pQueryMsg->interval.sliding = htobe64(pQueryInfo->interval.sliding);
pQueryMsg->interval.offset = htobe64(pQueryInfo->interval.offset);
......
......@@ -2292,8 +2292,8 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
}
}
tscError("%p Async insertion completed, total inserted:%d rows, numOfFailed:%d, numOfTotal:%d", pParentObj,
pParentObj->res.numOfRows, numOfFailed, numOfSub);
tscError("%p Async insertion completed, total inserted:%d rows, numOfFailed:%d, numOfTotal:%d, code:%d", pParentObj,
pParentObj->res.numOfRows, numOfFailed, numOfSub, pParentObj->res.code);
tscDebug("%p cleanup %d tableMeta in hashTable", pParentObj, pParentObj->cmd.numOfTables);
for(int32_t i = 0; i < pParentObj->cmd.numOfTables; ++i) {
......
......@@ -63,7 +63,7 @@ static FORCE_INLINE int64_t taosGetTimestamp(int32_t precision) {
typedef struct SInterval {
int32_t tz; // query client timezone
int64_t tz; // query client timezone
char intervalUnit;
char slidingUnit;
char offsetUnit;
......
......@@ -479,6 +479,15 @@ int64_t taosTimeTruncate(int64_t t, const SInterval* pInterval, int32_t precisio
}
start = (int64_t)(mktime(&tm) * TSDB_TICK_PER_SECOND(precision));
#if defined(WINDOWS) && _MSC_VER >= 1900
// see https://docs.microsoft.com/en-us/cpp/c-runtime-library/daylight-dstbias-timezone-and-tzname?view=vs-2019
int64_t timezone = _timezone;
int32_t daylight = _daylight;
char** tzname = _tzname;
#endif
assert(pInterval->tz % 3600 == 0);
start -= (timezone - pInterval->tz) * TSDB_TICK_PER_SECOND(precision);
} else {
int64_t delta = t - pInterval->interval;
int32_t factor = (delta >= 0) ? 1 : -1;
......@@ -497,8 +506,9 @@ int64_t taosTimeTruncate(int64_t t, const SInterval* pInterval, int32_t precisio
int32_t daylight = _daylight;
char** tzname = _tzname;
#endif
assert(pInterval->tz % 3600 == 0);
start += (int64_t)(timezone * TSDB_TICK_PER_SECOND(precision));
start += (int64_t)(pInterval->tz * TSDB_TICK_PER_SECOND(precision));
}
int64_t end = 0;
......
......@@ -70,7 +70,7 @@ typedef struct SPoint {
SFillInfo* taosInitFillInfo(int32_t order, TSKEY skey, int32_t numOfTags, int32_t capacity, int32_t numOfCols,
int64_t slidingTime, int8_t slidingUnit, int8_t precision, int32_t fillType,
SFillColInfo* pFillCol, void* handle);
SFillColInfo* pFillCol, void* handle, int64_t tz);
void taosResetFillInfo(SFillInfo* pFillInfo, TSKEY startTimestamp);
......
......@@ -4761,7 +4761,7 @@ int32_t doInitQInfo(SQInfo *pQInfo, STSBuf *pTsBuf, void *tsdb, int32_t vgId, bo
int32_t numOfCols = getNumOfFinalResCol(pQuery);
pRuntimeEnv->pFillInfo = taosInitFillInfo(pQuery->order.order, w.skey, 0, (int32_t)pQuery->rec.capacity, numOfCols,
pQuery->interval.sliding, pQuery->interval.slidingUnit, (int8_t)pQuery->precision,
pQuery->fillType, pColInfo, pQInfo);
pQuery->fillType, pColInfo, pQInfo, pQuery->interval.tz);
}
setQueryStatus(pQuery, QUERY_NOT_COMPLETED);
......@@ -5987,6 +5987,7 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
pQueryMsg->window.skey = htobe64(pQueryMsg->window.skey);
pQueryMsg->window.ekey = htobe64(pQueryMsg->window.ekey);
pQueryMsg->interval.tz = htobe64(pQueryMsg->interval.tz);
pQueryMsg->interval.interval = htobe64(pQueryMsg->interval.interval);
pQueryMsg->interval.sliding = htobe64(pQueryMsg->interval.sliding);
pQueryMsg->interval.offset = htobe64(pQueryMsg->interval.offset);
......
......@@ -323,7 +323,7 @@ static int32_t taosNumOfRemainRows(SFillInfo* pFillInfo) {
SFillInfo* taosInitFillInfo(int32_t order, TSKEY skey, int32_t numOfTags, int32_t capacity, int32_t numOfCols,
int64_t slidingTime, int8_t slidingUnit, int8_t precision, int32_t fillType,
SFillColInfo* pCol, void* handle) {
SFillColInfo* pCol, void* handle, int64_t tz) {
if (fillType == TSDB_FILL_NONE) {
return NULL;
}
......@@ -345,6 +345,8 @@ SFillInfo* taosInitFillInfo(int32_t order, TSKEY skey, int32_t numOfTags, int32_
pFillInfo->interval.sliding = slidingTime;
pFillInfo->interval.slidingUnit = slidingUnit;
pFillInfo->interval.tz = tz;
pFillInfo->pData = malloc(POINTER_BYTES * numOfCols);
if (numOfTags > 0) {
pFillInfo->pTags = calloc(pFillInfo->numOfTags, sizeof(SFillTagColInfo));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册