Merge pull request #27540 from taosdata/feat/TS-4893
feat:[TS-4893] Add random and support use min/max on string column.
This commit is contained in:
commit
03fde71155
|
@ -286,117 +286,118 @@
|
|||
#define TK_FOR 268
|
||||
#define TK_NOW 269
|
||||
#define TK_TODAY 270
|
||||
#define TK_SUBSTR 271
|
||||
#define TK_SUBSTRING 272
|
||||
#define TK_BOTH 273
|
||||
#define TK_TRAILING 274
|
||||
#define TK_LEADING 275
|
||||
#define TK_TIMEZONE 276
|
||||
#define TK_CLIENT_VERSION 277
|
||||
#define TK_SERVER_VERSION 278
|
||||
#define TK_SERVER_STATUS 279
|
||||
#define TK_CURRENT_USER 280
|
||||
#define TK_PI 281
|
||||
#define TK_CASE 282
|
||||
#define TK_WHEN 283
|
||||
#define TK_THEN 284
|
||||
#define TK_ELSE 285
|
||||
#define TK_BETWEEN 286
|
||||
#define TK_IS 287
|
||||
#define TK_NK_LT 288
|
||||
#define TK_NK_GT 289
|
||||
#define TK_NK_LE 290
|
||||
#define TK_NK_GE 291
|
||||
#define TK_NK_NE 292
|
||||
#define TK_MATCH 293
|
||||
#define TK_NMATCH 294
|
||||
#define TK_CONTAINS 295
|
||||
#define TK_JOIN 296
|
||||
#define TK_INNER 297
|
||||
#define TK_LEFT 298
|
||||
#define TK_RIGHT 299
|
||||
#define TK_OUTER 300
|
||||
#define TK_SEMI 301
|
||||
#define TK_ANTI 302
|
||||
#define TK_ASOF 303
|
||||
#define TK_WINDOW 304
|
||||
#define TK_WINDOW_OFFSET 305
|
||||
#define TK_JLIMIT 306
|
||||
#define TK_SELECT 307
|
||||
#define TK_NK_HINT 308
|
||||
#define TK_DISTINCT 309
|
||||
#define TK_WHERE 310
|
||||
#define TK_PARTITION 311
|
||||
#define TK_BY 312
|
||||
#define TK_SESSION 313
|
||||
#define TK_STATE_WINDOW 314
|
||||
#define TK_EVENT_WINDOW 315
|
||||
#define TK_COUNT_WINDOW 316
|
||||
#define TK_SLIDING 317
|
||||
#define TK_FILL 318
|
||||
#define TK_VALUE 319
|
||||
#define TK_VALUE_F 320
|
||||
#define TK_NONE 321
|
||||
#define TK_PREV 322
|
||||
#define TK_NULL_F 323
|
||||
#define TK_LINEAR 324
|
||||
#define TK_NEXT 325
|
||||
#define TK_HAVING 326
|
||||
#define TK_RANGE 327
|
||||
#define TK_EVERY 328
|
||||
#define TK_ORDER 329
|
||||
#define TK_SLIMIT 330
|
||||
#define TK_SOFFSET 331
|
||||
#define TK_LIMIT 332
|
||||
#define TK_OFFSET 333
|
||||
#define TK_ASC 334
|
||||
#define TK_NULLS 335
|
||||
#define TK_ABORT 336
|
||||
#define TK_AFTER 337
|
||||
#define TK_ATTACH 338
|
||||
#define TK_BEFORE 339
|
||||
#define TK_BEGIN 340
|
||||
#define TK_BITAND 341
|
||||
#define TK_BITNOT 342
|
||||
#define TK_BITOR 343
|
||||
#define TK_BLOCKS 344
|
||||
#define TK_CHANGE 345
|
||||
#define TK_COMMA 346
|
||||
#define TK_CONCAT 347
|
||||
#define TK_CONFLICT 348
|
||||
#define TK_COPY 349
|
||||
#define TK_DEFERRED 350
|
||||
#define TK_DELIMITERS 351
|
||||
#define TK_DETACH 352
|
||||
#define TK_DIVIDE 353
|
||||
#define TK_DOT 354
|
||||
#define TK_EACH 355
|
||||
#define TK_FAIL 356
|
||||
#define TK_GLOB 357
|
||||
#define TK_ID 358
|
||||
#define TK_IMMEDIATE 359
|
||||
#define TK_IMPORT 360
|
||||
#define TK_INITIALLY 361
|
||||
#define TK_INSTEAD 362
|
||||
#define TK_ISNULL 363
|
||||
#define TK_MODULES 364
|
||||
#define TK_NK_BITNOT 365
|
||||
#define TK_NK_SEMI 366
|
||||
#define TK_NOTNULL 367
|
||||
#define TK_OF 368
|
||||
#define TK_PLUS 369
|
||||
#define TK_PRIVILEGE 370
|
||||
#define TK_RAISE 371
|
||||
#define TK_RESTRICT 372
|
||||
#define TK_ROW 373
|
||||
#define TK_STAR 374
|
||||
#define TK_STATEMENT 375
|
||||
#define TK_STRICT 376
|
||||
#define TK_STRING 377
|
||||
#define TK_TIMES 378
|
||||
#define TK_VALUES 379
|
||||
#define TK_VARIABLE 380
|
||||
#define TK_WAL 381
|
||||
#define TK_RAND 271
|
||||
#define TK_SUBSTR 272
|
||||
#define TK_SUBSTRING 273
|
||||
#define TK_BOTH 274
|
||||
#define TK_TRAILING 275
|
||||
#define TK_LEADING 276
|
||||
#define TK_TIMEZONE 277
|
||||
#define TK_CLIENT_VERSION 278
|
||||
#define TK_SERVER_VERSION 279
|
||||
#define TK_SERVER_STATUS 280
|
||||
#define TK_CURRENT_USER 281
|
||||
#define TK_PI 282
|
||||
#define TK_CASE 283
|
||||
#define TK_WHEN 284
|
||||
#define TK_THEN 285
|
||||
#define TK_ELSE 286
|
||||
#define TK_BETWEEN 287
|
||||
#define TK_IS 288
|
||||
#define TK_NK_LT 289
|
||||
#define TK_NK_GT 290
|
||||
#define TK_NK_LE 291
|
||||
#define TK_NK_GE 292
|
||||
#define TK_NK_NE 293
|
||||
#define TK_MATCH 294
|
||||
#define TK_NMATCH 295
|
||||
#define TK_CONTAINS 296
|
||||
#define TK_JOIN 297
|
||||
#define TK_INNER 298
|
||||
#define TK_LEFT 299
|
||||
#define TK_RIGHT 300
|
||||
#define TK_OUTER 301
|
||||
#define TK_SEMI 302
|
||||
#define TK_ANTI 303
|
||||
#define TK_ASOF 304
|
||||
#define TK_WINDOW 305
|
||||
#define TK_WINDOW_OFFSET 306
|
||||
#define TK_JLIMIT 307
|
||||
#define TK_SELECT 308
|
||||
#define TK_NK_HINT 309
|
||||
#define TK_DISTINCT 310
|
||||
#define TK_WHERE 311
|
||||
#define TK_PARTITION 312
|
||||
#define TK_BY 313
|
||||
#define TK_SESSION 314
|
||||
#define TK_STATE_WINDOW 315
|
||||
#define TK_EVENT_WINDOW 316
|
||||
#define TK_COUNT_WINDOW 317
|
||||
#define TK_SLIDING 318
|
||||
#define TK_FILL 319
|
||||
#define TK_VALUE 320
|
||||
#define TK_VALUE_F 321
|
||||
#define TK_NONE 322
|
||||
#define TK_PREV 323
|
||||
#define TK_NULL_F 324
|
||||
#define TK_LINEAR 325
|
||||
#define TK_NEXT 326
|
||||
#define TK_HAVING 327
|
||||
#define TK_RANGE 328
|
||||
#define TK_EVERY 329
|
||||
#define TK_ORDER 330
|
||||
#define TK_SLIMIT 331
|
||||
#define TK_SOFFSET 332
|
||||
#define TK_LIMIT 333
|
||||
#define TK_OFFSET 334
|
||||
#define TK_ASC 335
|
||||
#define TK_NULLS 336
|
||||
#define TK_ABORT 337
|
||||
#define TK_AFTER 338
|
||||
#define TK_ATTACH 339
|
||||
#define TK_BEFORE 340
|
||||
#define TK_BEGIN 341
|
||||
#define TK_BITAND 342
|
||||
#define TK_BITNOT 343
|
||||
#define TK_BITOR 344
|
||||
#define TK_BLOCKS 345
|
||||
#define TK_CHANGE 346
|
||||
#define TK_COMMA 347
|
||||
#define TK_CONCAT 348
|
||||
#define TK_CONFLICT 349
|
||||
#define TK_COPY 350
|
||||
#define TK_DEFERRED 351
|
||||
#define TK_DELIMITERS 352
|
||||
#define TK_DETACH 353
|
||||
#define TK_DIVIDE 354
|
||||
#define TK_DOT 355
|
||||
#define TK_EACH 356
|
||||
#define TK_FAIL 357
|
||||
#define TK_GLOB 358
|
||||
#define TK_ID 359
|
||||
#define TK_IMMEDIATE 360
|
||||
#define TK_IMPORT 361
|
||||
#define TK_INITIALLY 362
|
||||
#define TK_INSTEAD 363
|
||||
#define TK_ISNULL 364
|
||||
#define TK_MODULES 365
|
||||
#define TK_NK_BITNOT 366
|
||||
#define TK_NK_SEMI 367
|
||||
#define TK_NOTNULL 368
|
||||
#define TK_OF 369
|
||||
#define TK_PLUS 370
|
||||
#define TK_PRIVILEGE 371
|
||||
#define TK_RAISE 372
|
||||
#define TK_RESTRICT 373
|
||||
#define TK_ROW 374
|
||||
#define TK_STAR 375
|
||||
#define TK_STATEMENT 376
|
||||
#define TK_STRICT 377
|
||||
#define TK_STRING 378
|
||||
#define TK_TIMES 379
|
||||
#define TK_VALUES 380
|
||||
#define TK_VARIABLE 381
|
||||
#define TK_WAL 382
|
||||
|
||||
#define TK_NK_SPACE 600
|
||||
#define TK_NK_COMMENT 601
|
||||
|
|
|
@ -191,6 +191,8 @@ typedef struct SFunctionNode {
|
|||
bool hasOriginalFunc;
|
||||
int32_t originalFuncId;
|
||||
ETrimType trimType;
|
||||
bool hasSMA;
|
||||
bool dual; // whether select stmt without from stmt, true for without.
|
||||
} SFunctionNode;
|
||||
|
||||
typedef struct STableNode {
|
||||
|
|
|
@ -70,6 +70,7 @@ int32_t modFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutpu
|
|||
int32_t signFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||
int32_t degreesFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||
int32_t radiansFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||
int32_t randFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||
|
||||
/* String functions */
|
||||
int32_t lengthFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||
|
|
|
@ -38,6 +38,7 @@ typedef struct SSumRes {
|
|||
typedef struct SMinmaxResInfo {
|
||||
bool assign; // assign the first value or not
|
||||
int64_t v;
|
||||
char *str;
|
||||
STuplePos tuplePos;
|
||||
|
||||
STuplePos nullTuplePos;
|
||||
|
|
|
@ -24,7 +24,7 @@ extern "C" {
|
|||
|
||||
#define FUNCTION_NAME_MAX_LENGTH 32
|
||||
|
||||
#define FUNC_MGT_FUNC_CLASSIFICATION_MASK(n) (1 << n)
|
||||
#define FUNC_MGT_FUNC_CLASSIFICATION_MASK(n) ((uint64_t)1 << n)
|
||||
|
||||
#define FUNC_MGT_AGG_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(0)
|
||||
#define FUNC_MGT_SCALAR_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(1)
|
||||
|
|
|
@ -271,6 +271,21 @@ static int32_t addUint8Param(SNodeList** pList, uint8_t param) {
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static int32_t addPseudoParam(SNodeList** pList) {
|
||||
SNode *pseudoNode = NULL;
|
||||
int32_t code = nodesMakeNode(QUERY_NODE_LEFT_VALUE, &pseudoNode);
|
||||
if (pseudoNode == NULL) {
|
||||
return code;
|
||||
}
|
||||
|
||||
code = nodesListMakeAppend(pList, pseudoNode);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
nodesDestroyNode(pseudoNode);
|
||||
return code;
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static SDataType* getSDataTypeFromNode(SNode* pNode) {
|
||||
if (pNode == NULL) return NULL;
|
||||
if (nodesIsExprNode(pNode)) {
|
||||
|
@ -299,6 +314,25 @@ static int32_t translateInOutNum(SFunctionNode* pFunc, char* pErrBuf, int32_t le
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
// There is only one parameter of numeric type, and the return type is parameter type
|
||||
static int32_t translateMinMax(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||
if (1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||
return invaildFuncParaNumErrMsg(pErrBuf, len, pFunc->functionName);
|
||||
}
|
||||
|
||||
SDataType* dataType = getSDataTypeFromNode(nodesListGetNode(pFunc->pParameterList, 0));
|
||||
uint8_t paraType = dataType->type;
|
||||
if (!IS_NUMERIC_TYPE(paraType) && !IS_NULL_TYPE(paraType) && !IS_STR_DATA_TYPE(paraType)) {
|
||||
return invaildFuncParaTypeErrMsg(pErrBuf, len, pFunc->functionName);
|
||||
} else if (IS_NULL_TYPE(paraType)) {
|
||||
paraType = TSDB_DATA_TYPE_BIGINT;
|
||||
}
|
||||
pFunc->hasSMA = !IS_VAR_DATA_TYPE(paraType);
|
||||
int32_t bytes = IS_STR_DATA_TYPE(paraType) ? dataType->bytes : tDataTypes[paraType].bytes;
|
||||
pFunc->node.resType = (SDataType){.bytes = bytes, .type = paraType};
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
// There is only one parameter of numeric type, and the return type is double type
|
||||
static int32_t translateInNumOutDou(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||
if (1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||
|
@ -579,6 +613,30 @@ static int32_t translatePi(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
|||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static int32_t translateRand(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||
if (0 != LIST_LENGTH(pFunc->pParameterList) && 1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||
return invaildFuncParaNumErrMsg(pErrBuf, len, pFunc->functionName);
|
||||
}
|
||||
|
||||
if (1 == LIST_LENGTH(pFunc->pParameterList)) {
|
||||
uint8_t paraType = getSDataTypeFromNode(nodesListGetNode(pFunc->pParameterList, 0))->type;
|
||||
if (!IS_INTEGER_TYPE(paraType) && !IS_NULL_TYPE(paraType)) {
|
||||
return invaildFuncParaTypeErrMsg(pErrBuf, len, pFunc->functionName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!pFunc->dual) {
|
||||
int32_t code = addPseudoParam(&pFunc->pParameterList);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
|
||||
pFunc->node.resType =
|
||||
(SDataType){.bytes = tDataTypes[TSDB_DATA_TYPE_DOUBLE].bytes, .type = TSDB_DATA_TYPE_DOUBLE};
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static int32_t translateRound(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||
if (2 != LIST_LENGTH(pFunc->pParameterList) && 1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||
return invaildFuncParaNumErrMsg(pErrBuf, len, pFunc->functionName);
|
||||
|
@ -2904,7 +2962,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
|||
.name = "min",
|
||||
.type = FUNCTION_TYPE_MIN,
|
||||
.classification = FUNC_MGT_AGG_FUNC | FUNC_MGT_SPECIAL_DATA_REQUIRED | FUNC_MGT_SELECT_FUNC | FUNC_MGT_IGNORE_NULL_FUNC | FUNC_MGT_TSMA_FUNC,
|
||||
.translateFunc = translateInOutNum,
|
||||
.translateFunc = translateMinMax,
|
||||
.dataRequiredFunc = statisDataRequired,
|
||||
.getEnvFunc = getMinmaxFuncEnv,
|
||||
.initFunc = minmaxFunctionSetup,
|
||||
|
@ -2920,7 +2978,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
|||
.name = "max",
|
||||
.type = FUNCTION_TYPE_MAX,
|
||||
.classification = FUNC_MGT_AGG_FUNC | FUNC_MGT_SPECIAL_DATA_REQUIRED | FUNC_MGT_SELECT_FUNC | FUNC_MGT_IGNORE_NULL_FUNC | FUNC_MGT_TSMA_FUNC,
|
||||
.translateFunc = translateInOutNum,
|
||||
.translateFunc = translateMinMax,
|
||||
.dataRequiredFunc = statisDataRequired,
|
||||
.getEnvFunc = getMinmaxFuncEnv,
|
||||
.initFunc = minmaxFunctionSetup,
|
||||
|
@ -4729,6 +4787,16 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
|||
.sprocessFunc = weekofyearFunction,
|
||||
.finalizeFunc = NULL
|
||||
},
|
||||
{
|
||||
.name = "rand",
|
||||
.type = FUNCTION_TYPE_RAND,
|
||||
.classification = FUNC_MGT_SCALAR_FUNC,
|
||||
.translateFunc = translateRand,
|
||||
.getEnvFunc = NULL,
|
||||
.initFunc = NULL,
|
||||
.sprocessFunc = randFunction,
|
||||
.finalizeFunc = NULL
|
||||
},
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
|
|
|
@ -1026,6 +1026,7 @@ int32_t minmaxFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResultIn
|
|||
|
||||
buf->nullTupleSaved = false;
|
||||
buf->nullTuplePos.pageId = -1;
|
||||
buf->str = NULL;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1101,11 +1102,21 @@ int32_t minmaxFunctionFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
|||
colDataSetFloat(pCol, currentRow, &v);
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_VARBINARY:
|
||||
case TSDB_DATA_TYPE_VARCHAR:
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
code = colDataSetVal(pCol, currentRow, pRes->str, false);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
colDataSetNULL(pCol, currentRow);
|
||||
}
|
||||
|
||||
taosMemoryFreeClear(pRes->str);
|
||||
if (pCtx->subsidiaries.num > 0) {
|
||||
if (pEntryInfo->numOfRes > 0) {
|
||||
code = setSelectivityValue(pCtx, pBlock, &pRes->tuplePos, currentRow);
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include "builtinsimpl.h"
|
||||
#include "function.h"
|
||||
#include "tcompare.h"
|
||||
#include "tdatablock.h"
|
||||
#include "tfunctionInt.h"
|
||||
#include "tglobal.h"
|
||||
|
@ -365,10 +366,10 @@ static double doubleVectorCmpAVX(const double* pData, int32_t numOfRows, bool is
|
|||
return v;
|
||||
}
|
||||
|
||||
static int32_t findFirstValPosition(const SColumnInfoData* pCol, int32_t start, int32_t numOfRows) {
|
||||
static int32_t findFirstValPosition(const SColumnInfoData* pCol, int32_t start, int32_t numOfRows, bool isStr) {
|
||||
int32_t i = start;
|
||||
|
||||
while (i < (start + numOfRows) && (colDataIsNull_f(pCol->nullbitmap, i) == true)) {
|
||||
while (i < (start + numOfRows) && (isStr ? colDataIsNull_s(pCol, i) : colDataIsNull_f(pCol->nullbitmap, i) == true)) {
|
||||
i += 1;
|
||||
}
|
||||
|
||||
|
@ -643,6 +644,52 @@ static int32_t doExtractVal(SColumnInfoData* pCol, int32_t i, int32_t end, SqlFu
|
|||
__COMPARE_ACQUIRED_MIN(i, end, pCol->nullbitmap, pData, pCtx, *(double*)&(pBuf->v), &pBuf->tuplePos)
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_VARCHAR:
|
||||
case TSDB_DATA_TYPE_VARBINARY: {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
for (; i < (end); ++i) {
|
||||
if (colDataIsNull_var(pCol, i)) {
|
||||
continue;
|
||||
}
|
||||
char *pLeft = (char *)colDataGetData(pCol, i);
|
||||
char *pRight = (char *)pBuf->str;
|
||||
|
||||
int32_t ret = compareLenBinaryVal(pLeft, pRight);
|
||||
if (ret < 0) {
|
||||
memcpy(pBuf->str, pLeft, varDataTLen(pLeft));
|
||||
if (pCtx->subsidiaries.num > 0) {
|
||||
code = updateTupleData(pCtx, i, pCtx->pSrcBlock, &pBuf->tuplePos);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
for (; i < (end); ++i) {
|
||||
if (colDataIsNull_var(pCol, i)) {
|
||||
continue;
|
||||
}
|
||||
char *pLeft = (char *)colDataGetData(pCol, i);
|
||||
char *pRight = (char *)pBuf->str;
|
||||
|
||||
int32_t ret = compareLenPrefixedWStr(pLeft, pRight);
|
||||
if (ret < 0) {
|
||||
memcpy(pBuf->str, pLeft, varDataTLen(pLeft));
|
||||
if (pCtx->subsidiaries.num > 0) {
|
||||
code = updateTupleData(pCtx, i, pCtx->pSrcBlock, &pBuf->tuplePos);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
switch (pCol->info.type) {
|
||||
|
@ -706,6 +753,53 @@ static int32_t doExtractVal(SColumnInfoData* pCol, int32_t i, int32_t end, SqlFu
|
|||
__COMPARE_ACQUIRED_MAX(i, end, pCol->nullbitmap, pData, pCtx, *(double*)&(pBuf->v), &pBuf->tuplePos)
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_VARCHAR:
|
||||
case TSDB_DATA_TYPE_VARBINARY: {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
for (; i < (end); ++i) {
|
||||
if (colDataIsNull_var(pCol, i)) {
|
||||
continue;
|
||||
}
|
||||
char *pLeft = (char *)colDataGetData(pCol, i);
|
||||
char *pRight = (char *)pBuf->str;
|
||||
|
||||
int32_t ret = compareLenBinaryVal(pLeft, pRight);
|
||||
if (ret > 0) {
|
||||
memcpy(pBuf->str, pLeft, varDataTLen(pLeft));
|
||||
if (pCtx->subsidiaries.num > 0) {
|
||||
code = updateTupleData(pCtx, i, pCtx->pSrcBlock, &pBuf->tuplePos);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
for (; i < (end); ++i) {
|
||||
if (colDataIsNull_var(pCol, i)) {
|
||||
continue;
|
||||
}
|
||||
char *pLeft = (char *)colDataGetData(pCol, i);
|
||||
char *pRight = (char *)pBuf->str;
|
||||
|
||||
int32_t ret = compareLenPrefixedWStr(pLeft, pRight);
|
||||
if (ret > 0) {
|
||||
memcpy(pBuf->str, pLeft, varDataTLen(pLeft));
|
||||
if (pCtx->subsidiaries.num > 0) {
|
||||
code = updateTupleData(pCtx, i, pCtx->pSrcBlock, &pBuf->tuplePos);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TSDB_CODE_SUCCESS;
|
||||
|
@ -743,7 +837,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
|||
}
|
||||
|
||||
// data in current data block are qualified to the query
|
||||
if (pInput->colDataSMAIsSet) {
|
||||
if (pInput->colDataSMAIsSet && !IS_STR_DATA_TYPE(type)) {
|
||||
|
||||
numOfElems = pInput->numOfRows - pAgg->numOfNull;
|
||||
if (numOfElems == 0) {
|
||||
|
@ -820,7 +914,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
|||
// clang-format on
|
||||
|
||||
if (pCol->hasNull || numOfRows < threshold[pCol->info.type] || pCtx->subsidiaries.num > 0) {
|
||||
int32_t i = findFirstValPosition(pCol, start, numOfRows);
|
||||
int32_t i = findFirstValPosition(pCol, start, numOfRows, IS_STR_DATA_TYPE(type));
|
||||
|
||||
if ((i < end) && (!pBuf->assign)) {
|
||||
char* p = pCol->pData + pCol->info.bytes * i;
|
||||
|
@ -848,6 +942,16 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
|||
*(float*)&pBuf->v = *(float*)p;
|
||||
break;
|
||||
}
|
||||
case TSDB_DATA_TYPE_VARCHAR:
|
||||
case TSDB_DATA_TYPE_VARBINARY:
|
||||
case TSDB_DATA_TYPE_NCHAR: {
|
||||
pBuf->str = taosMemoryMalloc(pCol->info.bytes);
|
||||
if (pBuf->str == NULL) {
|
||||
return TSDB_CODE_OUT_OF_MEMORY;
|
||||
}
|
||||
(void)memcpy(pBuf->str, colDataGetData(pCol, i), varDataTLen(colDataGetData(pCol, i)));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
(void)memcpy(&pBuf->v, p, pCol->info.bytes);
|
||||
break;
|
||||
|
|
|
@ -45,6 +45,7 @@ typedef struct STranslateContext {
|
|||
bool showRewrite;
|
||||
SNode* pPrevRoot;
|
||||
SNode* pPostRoot;
|
||||
bool dual; // whether select stmt without from stmt, true for without.
|
||||
} STranslateContext;
|
||||
|
||||
int32_t biRewriteToTbnameFunc(STranslateContext* pCxt, SNode** ppNode, bool* pRet);
|
||||
|
|
|
@ -1207,11 +1207,15 @@ function_expression(A) ::=
|
|||
substr_func(B) NK_LP expr_or_subquery(C) FROM expr_or_subquery(D) FOR expr_or_subquery(E) NK_RP(F). { A = createRawExprNodeExt(pCxt, &B, &F, createSubstrFunctionNodeExt(pCxt, releaseRawExprNode(pCxt, C), releaseRawExprNode(pCxt, D), releaseRawExprNode(pCxt, E))); }
|
||||
function_expression(A) ::= REPLACE(B) NK_LP expression_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
|
||||
function_expression(A) ::= literal_func(B). { A = B; }
|
||||
function_expression(A) ::= rand_func(B). { A = B; }
|
||||
|
||||
literal_func(A) ::= noarg_func(B) NK_LP NK_RP(C). { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
|
||||
literal_func(A) ::= NOW(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||
literal_func(A) ::= TODAY(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||
|
||||
rand_func(A) ::= RAND(B) NK_LP NK_RP(C). { A = createRawExprNodeExt(pCxt, &B, &C, createFunctionNode(pCxt, &B, NULL)); }
|
||||
rand_func(A) ::= RAND(B) NK_LP expression_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
|
||||
|
||||
%type substr_func { SToken }
|
||||
%destructor substr_func { }
|
||||
substr_func(A) ::= SUBSTR(B). { A = B; }
|
||||
|
|
|
@ -206,6 +206,7 @@ static SKeyword keywordTable[] = {
|
|||
{"QUERIES", TK_QUERIES},
|
||||
{"QUERY", TK_QUERY},
|
||||
{"PI", TK_PI},
|
||||
{"RAND", TK_RAND},
|
||||
{"RANGE", TK_RANGE},
|
||||
{"RATIO", TK_RATIO},
|
||||
{"PAUSE", TK_PAUSE},
|
||||
|
|
|
@ -2307,6 +2307,7 @@ static bool hasInvalidFuncNesting(SNodeList* pParameterList) {
|
|||
|
||||
static int32_t getFuncInfo(STranslateContext* pCxt, SFunctionNode* pFunc) {
|
||||
// the time precision of the function execution environment
|
||||
pFunc->dual = pCxt->dual;
|
||||
pFunc->node.resType.precision = getPrecisionFromCurrStmt(pCxt->pCurrStmt, TSDB_TIME_PRECISION_MILLI);
|
||||
int32_t code = fmGetFuncInfo(pFunc, pCxt->msgBuf.buf, pCxt->msgBuf.len);
|
||||
if (TSDB_CODE_FUNC_NOT_BUILTIN_FUNTION == code) {
|
||||
|
@ -6696,11 +6697,13 @@ static int32_t replaceOrderByAliasForSelect(STranslateContext* pCxt, SSelectStmt
|
|||
static int32_t translateSelectWithoutFrom(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||
pCxt->pCurrStmt = (SNode*)pSelect;
|
||||
pCxt->currClause = SQL_CLAUSE_SELECT;
|
||||
pCxt->dual = true;
|
||||
return translateExprList(pCxt, pSelect->pProjectionList);
|
||||
}
|
||||
|
||||
static int32_t translateSelectFrom(STranslateContext* pCxt, SSelectStmt* pSelect) {
|
||||
pCxt->pCurrStmt = (SNode*)pSelect;
|
||||
pCxt->dual = false;
|
||||
int32_t code = translateFrom(pCxt, &pSelect->pFromTable);
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
pSelect->precision = ((STableNode*)pSelect->pFromTable)->precision;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -294,6 +294,9 @@ static bool scanPathOptIsSpecifiedFuncType(const SFunctionNode* pFunc, bool (*ty
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool isMinMaxFunction(int32_t funcType) {
|
||||
return funcType == FUNCTION_TYPE_MIN || funcType == FUNCTION_TYPE_MAX;
|
||||
}
|
||||
static int32_t scanPathOptGetRelatedFuncs(SScanLogicNode* pScan, SNodeList** pSdrFuncs, SNodeList** pDsoFuncs) {
|
||||
SNodeList* pAllFuncs = scanPathOptGetAllFuncs(pScan->node.pParent);
|
||||
SNodeList* pTmpSdrFuncs = NULL;
|
||||
|
@ -303,7 +306,8 @@ static int32_t scanPathOptGetRelatedFuncs(SScanLogicNode* pScan, SNodeList** pSd
|
|||
FOREACH(pNode, pAllFuncs) {
|
||||
SFunctionNode* pFunc = (SFunctionNode*)pNode;
|
||||
int32_t code = TSDB_CODE_SUCCESS;
|
||||
if (scanPathOptIsSpecifiedFuncType(pFunc, fmIsSpecialDataRequiredFunc)) {
|
||||
if ((!isMinMaxFunction(pFunc->funcType) && scanPathOptIsSpecifiedFuncType(pFunc, fmIsSpecialDataRequiredFunc)) ||
|
||||
(isMinMaxFunction(pFunc->funcType) && pFunc->hasSMA)) {
|
||||
SNode* pNew = NULL;
|
||||
code = nodesCloneNode(pNode, &pNew);
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
|
|
|
@ -30,7 +30,7 @@ typedef struct SOperatorValueType {
|
|||
|
||||
typedef struct SScalarCtx {
|
||||
int32_t code;
|
||||
bool dual;
|
||||
bool dual; /* whether select stmt has from stmt */
|
||||
SArray* pBlockList; /* element is SSDataBlock* */
|
||||
SHashObj* pRes; /* element is SScalarParam */
|
||||
void* param; // additional parameter (meta actually) for acquire value such as tbname/tags values
|
||||
|
|
|
@ -1179,7 +1179,8 @@ EDealRes sclRewriteNonConstOperator(SNode **pNode, SScalarCtx *ctx) {
|
|||
EDealRes sclRewriteFunction(SNode **pNode, SScalarCtx *ctx) {
|
||||
SFunctionNode *node = (SFunctionNode *)*pNode;
|
||||
SNode *tnode = NULL;
|
||||
if ((!fmIsScalarFunc(node->funcId) && (!ctx->dual)) || fmIsUserDefinedFunc(node->funcId)) {
|
||||
if ((!fmIsScalarFunc(node->funcId) && (!ctx->dual)) ||
|
||||
fmIsUserDefinedFunc(node->funcId)) {
|
||||
return DEAL_RES_CONTINUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -2887,6 +2887,21 @@ int32_t floorFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOut
|
|||
return doScalarFunction(pInput, inputNum, pOutput, floorf, floor);
|
||||
}
|
||||
|
||||
int32_t randFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||
if (!IS_NULL_TYPE(GET_PARAM_TYPE(&pInput[0]))) {
|
||||
int32_t seed;
|
||||
GET_TYPED_DATA(seed, int32_t, GET_PARAM_TYPE(&pInput[0]), pInput[0].columnData->pData);
|
||||
taosSeedRand(seed);
|
||||
}
|
||||
int32_t numOfRows = inputNum == 1 ? pInput[0].numOfRows : TMAX(pInput[0].numOfRows, pInput[1].numOfRows);
|
||||
for (int32_t i = 0; i < numOfRows; ++i) {
|
||||
double random_value = (double)(taosRand() % RAND_MAX) / RAND_MAX;
|
||||
colDataSetDouble(pOutput->columnData, i, &random_value);
|
||||
}
|
||||
pOutput->numOfRows = numOfRows;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
static double decimalFn(double val1, double val2, _double_fn fn) {
|
||||
if (val1 > DBL_MAX || val1 < -DBL_MAX) {
|
||||
return val1;
|
||||
|
|
|
@ -0,0 +1,480 @@
|
|||
9999
|
||||
11.9989996
|
||||
224
|
||||
x
|
||||
一二三四五六七八九十
|
||||
四
|
||||
一二三四五六七八九十
|
||||
四
|
||||
1110
|
||||
2838
|
||||
4566
|
||||
6294
|
||||
8022
|
||||
9750
|
||||
9999
|
||||
3206
|
||||
4934
|
||||
6662
|
||||
8390
|
||||
9999
|
||||
1846
|
||||
3574
|
||||
5302
|
||||
7030
|
||||
8758
|
||||
9999
|
||||
2214
|
||||
3942
|
||||
5670
|
||||
7398
|
||||
9126
|
||||
9999
|
||||
2582
|
||||
4310
|
||||
6038
|
||||
7766
|
||||
9494
|
||||
9999
|
||||
2950
|
||||
4678
|
||||
6406
|
||||
8134
|
||||
9862
|
||||
9999
|
||||
3318
|
||||
5046
|
||||
6774
|
||||
8502
|
||||
9999
|
||||
1958
|
||||
3686
|
||||
5414
|
||||
7142
|
||||
8870
|
||||
9999
|
||||
2326
|
||||
4054
|
||||
5782
|
||||
7510
|
||||
9238
|
||||
9999
|
||||
2694
|
||||
4422
|
||||
6150
|
||||
7878
|
||||
9606
|
||||
9999
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9980001
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9980001
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9980001
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9980001
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9980001
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9980001
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9969997
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9989996
|
||||
11.9860001
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
224
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
x
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
一二三四五六七八九十
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
||||
四
|
|
|
@ -0,0 +1,480 @@
|
|||
0
|
||||
8.0000000
|
||||
215
|
||||
haha
|
||||
abc一二三abc一二三abc
|
||||
a
|
||||
abc一二三abc一二三abc
|
||||
a
|
||||
0
|
||||
1111
|
||||
2839
|
||||
4567
|
||||
6295
|
||||
8023
|
||||
0
|
||||
1479
|
||||
3207
|
||||
4935
|
||||
6663
|
||||
0
|
||||
119
|
||||
1847
|
||||
3575
|
||||
5303
|
||||
7031
|
||||
0
|
||||
487
|
||||
2215
|
||||
3943
|
||||
5671
|
||||
7399
|
||||
0
|
||||
855
|
||||
2583
|
||||
4311
|
||||
6039
|
||||
7767
|
||||
0
|
||||
1223
|
||||
2951
|
||||
4679
|
||||
6407
|
||||
8135
|
||||
0
|
||||
1591
|
||||
3319
|
||||
5047
|
||||
6775
|
||||
0
|
||||
231
|
||||
1959
|
||||
3687
|
||||
5415
|
||||
7143
|
||||
0
|
||||
599
|
||||
2327
|
||||
4055
|
||||
5783
|
||||
7511
|
||||
0
|
||||
967
|
||||
2695
|
||||
4423
|
||||
6151
|
||||
7879
|
||||
9607
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0010004
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0030003
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0030003
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0010004
|
||||
8.0089998
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0030003
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0000000
|
||||
8.0019999
|
||||
8.0010004
|
||||
8.0000000
|
||||
8.0050001
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
215
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
haha
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
abc一二三abc一二三abc
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
|
|
@ -0,0 +1,16 @@
|
|||
select MAX(id) from ts_4893.meters;
|
||||
select MAX(current) from ts_4893.meters;
|
||||
select MAX(voltage) from ts_4893.meters;
|
||||
select MAX(name) from ts_4893.meters;
|
||||
select MAX(nch1) from ts_4893.meters;
|
||||
select MAX(nch2) from ts_4893.meters;
|
||||
select MAX(var1) from ts_4893.meters;
|
||||
select MAX(var2) from ts_4893.meters;
|
||||
select MAX(id) from ts_4893.meters interval(60d);
|
||||
select MAX(current) from ts_4893.meters interval(60d);
|
||||
select MAX(voltage) from ts_4893.meters interval(60d);
|
||||
select MAX(name) from ts_4893.meters interval(60d);
|
||||
select MAX(nch1) from ts_4893.meters interval(60d);
|
||||
select MAX(nch2) from ts_4893.meters interval(60d);
|
||||
select MAX(var1) from ts_4893.meters interval(60d);
|
||||
select MAX(var2) from ts_4893.meters interval(60d);
|
|
@ -0,0 +1,16 @@
|
|||
select MIN(id) from ts_4893.meters;
|
||||
select MIN(current) from ts_4893.meters;
|
||||
select MIN(voltage) from ts_4893.meters;
|
||||
select MIN(name) from ts_4893.meters;
|
||||
select MIN(nch1) from ts_4893.meters;
|
||||
select MIN(nch2) from ts_4893.meters;
|
||||
select MIN(var1) from ts_4893.meters;
|
||||
select MIN(var2) from ts_4893.meters;
|
||||
select MIN(id) from ts_4893.meters interval(60d);
|
||||
select MIN(current) from ts_4893.meters interval(60d);
|
||||
select MIN(voltage) from ts_4893.meters interval(60d);
|
||||
select MIN(name) from ts_4893.meters interval(60d);
|
||||
select MIN(nch1) from ts_4893.meters interval(60d);
|
||||
select MIN(nch2) from ts_4893.meters interval(60d);
|
||||
select MIN(var1) from ts_4893.meters interval(60d);
|
||||
select MIN(var2) from ts_4893.meters interval(60d);
|
|
@ -505,12 +505,35 @@ class TDTestCase(TBase):
|
|||
tdSql.query("select var_pop(null) from ts_4893.meters;")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0, 0, None)
|
||||
|
||||
def test_error(self):
|
||||
tdSql.error(
|
||||
"select * from (select to_iso8601(ts, timezone()), timezone() from meters order by ts desc) limit 1000;",
|
||||
expectErrInfo="Not supported timzone format") # TS-5340
|
||||
def test_min(self):
|
||||
self.test_normal_query("min")
|
||||
|
||||
tdSql.query("select min(var1), min(id) from ts_4893.d0;")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0, 0, 'abc一二三abc一二三abc')
|
||||
tdSql.checkData(0, 1, 0)
|
||||
def test_max(self):
|
||||
self.test_normal_query("max")
|
||||
tdSql.query("select max(var1), max(id) from ts_4893.d0;")
|
||||
tdSql.checkRows(1)
|
||||
tdSql.checkData(0, 0, '一二三四五六七八九十')
|
||||
tdSql.checkData(0, 1, 9999)
|
||||
def test_rand(self):
|
||||
tdSql.query("select rand();")
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdSql.query("select rand(1);")
|
||||
tdSql.checkRows(1)
|
||||
|
||||
tdSql.query("select rand(1) from ts_4893.meters limit 10;")
|
||||
tdSql.checkRows(10)
|
||||
|
||||
tdSql.query("select rand(id) from ts_4893.d0 limit 10;")
|
||||
tdSql.checkRows(10)
|
||||
# run
|
||||
def run(self):
|
||||
tdLog.debug(f"start to excute {__file__}")
|
||||
|
@ -528,6 +551,7 @@ class TDTestCase(TBase):
|
|||
self.test_sign()
|
||||
self.test_degrees()
|
||||
self.test_radians()
|
||||
self.test_rand()
|
||||
|
||||
# char function
|
||||
self.test_char_length()
|
||||
|
@ -551,6 +575,10 @@ class TDTestCase(TBase):
|
|||
self.test_stddev()
|
||||
self.test_varpop()
|
||||
|
||||
# select function
|
||||
self.test_min()
|
||||
self.test_max()
|
||||
|
||||
# error function
|
||||
self.test_error()
|
||||
|
||||
|
|
|
@ -226,8 +226,6 @@ if $data10 != 5 then
|
|||
endi
|
||||
sql_error select avg(tbcol) from $mt where tbcol1 = 1 group by tgcol
|
||||
sql_error select sum(tbcol) from $mt where tbcol1 = 1 group by tgcol
|
||||
sql_error select min(tbcol) from $mt where tbcol1 = 1 group by tgcol
|
||||
sql_error select max(tbcol) from $mt where tbcol1 = 1 group by tgcol
|
||||
|
||||
sql select first(tbcol), tgcol from $mt where tbcol1 = 1 group by tgcol order by tgcol
|
||||
if $rows != 2 then
|
||||
|
|
|
@ -35,16 +35,12 @@ sql create sma index sma_index_name1 on stb function(max(c1),max(c2),min(c1)) in
|
|||
sql create sma index sma_index_name2 on stb function(sum(c1),first(c1), last(c1), first(c4),last(c4),count(c4),first(c5),last(c5),count(c5),apercentile(c1,80,"t-digest"), avg(c2),count(c3), spread(c3), stddev(c2), hyperloglog(c2), hyperloglog(c4), hyperloglog(c5)) interval(5m,10s) sliding(5m);
|
||||
# for varchar/binary
|
||||
sql_error create sma index sma_index_name3 on stb function(sum(c4)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(min(c4)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(max(c4)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(avg(c4)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(apercentile(c4)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(spread(c4)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(stddev(c4)) interval(5m,10s) sliding(5m);
|
||||
# for nchar
|
||||
sql_error create sma index sma_index_name3 on stb function(sum(c5)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(min(c5)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(max(c5)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(avg(c5)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(apercentile(c5)) interval(5m,10s) sliding(5m);
|
||||
sql_error create sma index sma_index_name3 on stb function(spread(c5)) interval(5m,10s) sliding(5m);
|
||||
|
|
|
@ -41,8 +41,6 @@ class TDTestCase:
|
|||
tdSql.error(f"select min(now()) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(ts) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(col7) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(col8) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(col9) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(a) from {dbname}.stb_1")
|
||||
tdSql.query(f"select min(1) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(count(c1),count(c2)) from {dbname}.stb_1")
|
||||
|
@ -69,13 +67,15 @@ class TDTestCase:
|
|||
tdSql.checkData(0, 0, np.min(floatData))
|
||||
tdSql.query(f"select min(col1) from {dbname}.stb_1 where col2>=5")
|
||||
tdSql.checkData(0,0,5)
|
||||
tdSql.query(f"select min(col8) from {dbname}.stb_1")
|
||||
tdSql.checkData(0,0,'taosdata1')
|
||||
tdSql.query(f"select min(col9) from {dbname}.stb_1")
|
||||
tdSql.checkData(0,0,'涛思数据1')
|
||||
|
||||
|
||||
tdSql.error(f"select min(now()) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(ts) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(col7) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(col8) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(col9) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(a) from {dbname}.stb_1")
|
||||
tdSql.query(f"select min(1) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(count(c1),count(c2)) from {dbname}.stb_1")
|
||||
|
@ -102,12 +102,14 @@ class TDTestCase:
|
|||
tdSql.checkData(0, 0, np.min(floatData))
|
||||
tdSql.query(f"select min(col1) from {dbname}.stb where col2>=5")
|
||||
tdSql.checkData(0,0,5)
|
||||
tdSql.query(f"select min(col8) from {dbname}.stb")
|
||||
tdSql.checkData(0,0,'taosdata1')
|
||||
tdSql.query(f"select min(col9) from {dbname}.stb")
|
||||
tdSql.checkData(0,0,'涛思数据1')
|
||||
|
||||
tdSql.error(f"select min(now()) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(ts) from {dbname}.stb_1")
|
||||
tdSql.error(f"select min(col7) from {dbname}.ntb")
|
||||
tdSql.error(f"select min(col8) from {dbname}.ntb")
|
||||
tdSql.error(f"select min(col9) from {dbname}.ntb")
|
||||
tdSql.error(f"select min(a) from {dbname}.ntb")
|
||||
tdSql.query(f"select min(1) from {dbname}.ntb")
|
||||
tdSql.error(f"select min(count(c1),count(c2)) from {dbname}.ntb")
|
||||
|
@ -134,6 +136,10 @@ class TDTestCase:
|
|||
tdSql.checkData(0, 0, np.min(floatData))
|
||||
tdSql.query(f"select min(col1) from {dbname}.ntb where col2>=5")
|
||||
tdSql.checkData(0,0,5)
|
||||
tdSql.query(f"select min(col8) from {dbname}.ntb")
|
||||
tdSql.checkData(0,0,'taosdata1')
|
||||
tdSql.query(f"select min(col9) from {dbname}.ntb")
|
||||
tdSql.checkData(0,0,'涛思数据1')
|
||||
|
||||
|
||||
def stop(self):
|
||||
|
|
|
@ -122,21 +122,27 @@ class TDTestCase:
|
|||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,4)
|
||||
sql = "select max(t1) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'varchar4')
|
||||
sql = "select max(t1),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'varchar4')
|
||||
sql = "select max(t_bool) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
sql = "select max(t_bool),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
sql = "select max(t_binary) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'binary4')
|
||||
sql = "select max(t_binary),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'binary4')
|
||||
sql = "select max(t_nchar) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'nchar4')
|
||||
sql = "select max(t_nchar),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'nchar4')
|
||||
sql = "select max(t_int) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,4)
|
||||
|
@ -220,21 +226,27 @@ class TDTestCase:
|
|||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,0)
|
||||
sql = "select min(t1) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'varchar0')
|
||||
sql = "select min(t1),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'varchar0')
|
||||
sql = "select min(t_bool) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
sql = "select min(t_bool),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
sql = "select min(t_binary) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'binary0')
|
||||
sql = "select min(t_binary),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'binary0')
|
||||
sql = "select min(t_nchar) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'nchar0')
|
||||
sql = "select min(t_nchar),ts from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.error(sql)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,'nchar0')
|
||||
sql = "select min(t_int) from %s.stb0 where ts<now;"%(database)
|
||||
tdSql.query(sql)
|
||||
tdSql.checkData(0,0,0)
|
||||
|
|
Loading…
Reference in New Issue