Merge branch 'feature/query' of github.com:taosdata/TDengine into feature/query
This commit is contained in:
commit
2badb991d7
|
@ -914,8 +914,8 @@ static int32_t checkInvalidExprForTimeWindow(SSqlCmd* pCmd, SQueryInfo* pQueryIn
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pSqlNode) {
|
int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pSqlNode) {
|
||||||
|
const char* msg1 = "sliding cannot be used without interval";
|
||||||
const char* msg2 = "interval cannot be less than 10 ms";
|
const char* msg2 = "interval cannot be less than 10 ms";
|
||||||
const char* msg3 = "sliding cannot be used without interval";
|
|
||||||
|
|
||||||
SSqlCmd* pCmd = &pSql->cmd;
|
SSqlCmd* pCmd = &pSql->cmd;
|
||||||
|
|
||||||
|
@ -924,7 +924,7 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS
|
||||||
|
|
||||||
if (!TPARSER_HAS_TOKEN(pSqlNode->interval.interval)) {
|
if (!TPARSER_HAS_TOKEN(pSqlNode->interval.interval)) {
|
||||||
if (TPARSER_HAS_TOKEN(pSqlNode->sliding)) {
|
if (TPARSER_HAS_TOKEN(pSqlNode->sliding)) {
|
||||||
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg3);
|
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -945,7 +945,7 @@ int32_t validateIntervalNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pS
|
||||||
if (pQueryInfo->interval.intervalUnit != 'n' && pQueryInfo->interval.intervalUnit != 'y') {
|
if (pQueryInfo->interval.intervalUnit != 'n' && pQueryInfo->interval.intervalUnit != 'y') {
|
||||||
|
|
||||||
// interval cannot be less than 10 milliseconds
|
// interval cannot be less than 10 milliseconds
|
||||||
if (convertTimePrecision(pQueryInfo->interval.interval, tinfo.precision, TSDB_TIME_PRECISION_MILLI) < tsMinIntervalTime) {
|
if (convertTimePrecision(pQueryInfo->interval.interval, tinfo.precision, TSDB_TIME_PRECISION_MICRO) < tsMinIntervalTime) {
|
||||||
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,8 +84,8 @@ int32_t tsMaxNumOfOrderedResults = 100000;
|
||||||
// 10 ms for sliding time, the value will changed in case of time precision changed
|
// 10 ms for sliding time, the value will changed in case of time precision changed
|
||||||
int32_t tsMinSlidingTime = 10;
|
int32_t tsMinSlidingTime = 10;
|
||||||
|
|
||||||
// 10 ms for interval time range, changed accordingly
|
// 1 us for interval time range, changed accordingly
|
||||||
int32_t tsMinIntervalTime = 10;
|
int32_t tsMinIntervalTime = 1;
|
||||||
|
|
||||||
// 20sec, the maximum value of stream computing delay, changed accordingly
|
// 20sec, the maximum value of stream computing delay, changed accordingly
|
||||||
int32_t tsMaxStreamComputDelay = 20000;
|
int32_t tsMaxStreamComputDelay = 20000;
|
||||||
|
|
|
@ -348,6 +348,7 @@ int64_t convertTimePrecision(int64_t time, int32_t fromPrecision, int32_t toPrec
|
||||||
{1.0 / 1000000, 1.0 / 1000, 1.} };
|
{1.0 / 1000000, 1.0 / 1000, 1.} };
|
||||||
return (int64_t)((double)time * factors[fromPrecision][toPrecision]);
|
return (int64_t)((double)time * factors[fromPrecision][toPrecision]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t getDuration(int64_t val, char unit, int64_t* result, int32_t timePrecision) {
|
static int32_t getDuration(int64_t val, char unit, int64_t* result, int32_t timePrecision) {
|
||||||
|
|
||||||
switch (unit) {
|
switch (unit) {
|
||||||
|
|
|
@ -39,6 +39,12 @@ enum {
|
||||||
TSDB_QUERY_TYPE_LAST = 2,
|
TSDB_QUERY_TYPE_LAST = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
TSDB_CACHED_TYPE_NONE = 0,
|
||||||
|
TSDB_CACHED_TYPE_LASTROW = 1,
|
||||||
|
TSDB_CACHED_TYPE_LAST = 2,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct SQueryFilePos {
|
typedef struct SQueryFilePos {
|
||||||
int32_t fid;
|
int32_t fid;
|
||||||
int32_t slot;
|
int32_t slot;
|
||||||
|
@ -2751,10 +2757,11 @@ bool tsdbNextDataBlock(TsdbQueryHandleT pHandle) {
|
||||||
int64_t stime = taosGetTimestampUs();
|
int64_t stime = taosGetTimestampUs();
|
||||||
int64_t elapsedTime = stime;
|
int64_t elapsedTime = stime;
|
||||||
|
|
||||||
|
// TODO refactor: remove "type"
|
||||||
if (pQueryHandle->type == TSDB_QUERY_TYPE_LAST) {
|
if (pQueryHandle->type == TSDB_QUERY_TYPE_LAST) {
|
||||||
if (pQueryHandle->cachelastrow == 1) {
|
if (pQueryHandle->cachelastrow == TSDB_CACHED_TYPE_LASTROW) {
|
||||||
return loadCachedLastRow(pQueryHandle);
|
return loadCachedLastRow(pQueryHandle);
|
||||||
} else if (pQueryHandle->cachelastrow == 2) {
|
} else if (pQueryHandle->cachelastrow == TSDB_CACHED_TYPE_LAST) {
|
||||||
return loadCachedLast(pQueryHandle);
|
return loadCachedLast(pQueryHandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2960,7 +2967,7 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isTsdbCacheLastRow(TsdbQueryHandleT* pQueryHandle) {
|
bool isTsdbCacheLastRow(TsdbQueryHandleT* pQueryHandle) {
|
||||||
return ((STsdbQueryHandle *)pQueryHandle)->cachelastrow > 0;
|
return ((STsdbQueryHandle *)pQueryHandle)->cachelastrow > TSDB_CACHED_TYPE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t checkForCachedLastRow(STsdbQueryHandle* pQueryHandle, STableGroupInfo *groupList) {
|
int32_t checkForCachedLastRow(STsdbQueryHandle* pQueryHandle, STableGroupInfo *groupList) {
|
||||||
|
@ -2978,9 +2985,9 @@ int32_t checkForCachedLastRow(STsdbQueryHandle* pQueryHandle, STableGroupInfo *g
|
||||||
if (((STable*)pInfo->pTable)->lastRow) {
|
if (((STable*)pInfo->pTable)->lastRow) {
|
||||||
code = tsdbGetCachedLastRow(pInfo->pTable, NULL, &key);
|
code = tsdbGetCachedLastRow(pInfo->pTable, NULL, &key);
|
||||||
if (code != TSDB_CODE_SUCCESS) {
|
if (code != TSDB_CODE_SUCCESS) {
|
||||||
pQueryHandle->cachelastrow = 0;
|
pQueryHandle->cachelastrow = TSDB_CACHED_TYPE_NONE;
|
||||||
} else {
|
} else {
|
||||||
pQueryHandle->cachelastrow = 1;
|
pQueryHandle->cachelastrow = TSDB_CACHED_TYPE_LASTROW;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3000,12 +3007,11 @@ int32_t checkForCachedLast(STsdbQueryHandle* pQueryHandle) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
|
|
||||||
if (pQueryHandle->pTsdb && atomic_load_8(&pQueryHandle->pTsdb->hasCachedLastColumn)){
|
if (pQueryHandle->pTsdb && atomic_load_8(&pQueryHandle->pTsdb->hasCachedLastColumn)){
|
||||||
pQueryHandle->cachelastrow = 2;
|
pQueryHandle->cachelastrow = TSDB_CACHED_TYPE_LAST;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update the tsdb query time range
|
// update the tsdb query time range
|
||||||
if (pQueryHandle->cachelastrow) {
|
if (pQueryHandle->cachelastrow) {
|
||||||
pQueryHandle->window = TSWINDOW_INITIALIZER;
|
|
||||||
pQueryHandle->checkFiles = false;
|
pQueryHandle->checkFiles = false;
|
||||||
pQueryHandle->activeIndex = -1; // start from -1
|
pQueryHandle->activeIndex = -1; // start from -1
|
||||||
}
|
}
|
||||||
|
|
|
@ -959,14 +959,14 @@ endi
|
||||||
if $data31 != 9.000000000 then
|
if $data31 != 9.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data41 != null then
|
if $data41 != NULL then
|
||||||
print ===== $data41
|
print ===== $data41
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data51 != 16.000000000 then
|
if $data51 != 16.000000000 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
if $data61 != null then
|
if $data61 != NULL then
|
||||||
print ===== $data61
|
print ===== $data61
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
system sh/stop_dnodes.sh
|
system sh/stop_dnodes.sh
|
||||||
system sh/deploy.sh -n dnode1 -i 1
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
system sh/cfg.sh -n dnode1 -c walLevel -v 0
|
system sh/cfg.sh -n dnode1 -c walLevel -v 1
|
||||||
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
system sh/cfg.sh -n dnode1 -c maxtablesPerVnode -v 4
|
||||||
system sh/exec.sh -n dnode1 -s start
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ run general/parser/create_tb.sim
|
||||||
run general/parser/dbtbnameValidate.sim
|
run general/parser/dbtbnameValidate.sim
|
||||||
run general/parser/fill.sim
|
run general/parser/fill.sim
|
||||||
run general/parser/fill_stb.sim
|
run general/parser/fill_stb.sim
|
||||||
#run general/parser/fill_us.sim #
|
run general/parser/fill_us.sim
|
||||||
run general/parser/first_last.sim
|
run general/parser/first_last.sim
|
||||||
run general/parser/import_commit1.sim
|
run general/parser/import_commit1.sim
|
||||||
run general/parser/import_commit2.sim
|
run general/parser/import_commit2.sim
|
||||||
|
|
Loading…
Reference in New Issue