feat:[TS-4893] Add random and support use min/max on string column.
This commit is contained in:
parent
1238960c75
commit
a249bef104
|
@ -286,117 +286,118 @@
|
||||||
#define TK_FOR 268
|
#define TK_FOR 268
|
||||||
#define TK_NOW 269
|
#define TK_NOW 269
|
||||||
#define TK_TODAY 270
|
#define TK_TODAY 270
|
||||||
#define TK_SUBSTR 271
|
#define TK_RAND 271
|
||||||
#define TK_SUBSTRING 272
|
#define TK_SUBSTR 272
|
||||||
#define TK_BOTH 273
|
#define TK_SUBSTRING 273
|
||||||
#define TK_TRAILING 274
|
#define TK_BOTH 274
|
||||||
#define TK_LEADING 275
|
#define TK_TRAILING 275
|
||||||
#define TK_TIMEZONE 276
|
#define TK_LEADING 276
|
||||||
#define TK_CLIENT_VERSION 277
|
#define TK_TIMEZONE 277
|
||||||
#define TK_SERVER_VERSION 278
|
#define TK_CLIENT_VERSION 278
|
||||||
#define TK_SERVER_STATUS 279
|
#define TK_SERVER_VERSION 279
|
||||||
#define TK_CURRENT_USER 280
|
#define TK_SERVER_STATUS 280
|
||||||
#define TK_PI 281
|
#define TK_CURRENT_USER 281
|
||||||
#define TK_CASE 282
|
#define TK_PI 282
|
||||||
#define TK_WHEN 283
|
#define TK_CASE 283
|
||||||
#define TK_THEN 284
|
#define TK_WHEN 284
|
||||||
#define TK_ELSE 285
|
#define TK_THEN 285
|
||||||
#define TK_BETWEEN 286
|
#define TK_ELSE 286
|
||||||
#define TK_IS 287
|
#define TK_BETWEEN 287
|
||||||
#define TK_NK_LT 288
|
#define TK_IS 288
|
||||||
#define TK_NK_GT 289
|
#define TK_NK_LT 289
|
||||||
#define TK_NK_LE 290
|
#define TK_NK_GT 290
|
||||||
#define TK_NK_GE 291
|
#define TK_NK_LE 291
|
||||||
#define TK_NK_NE 292
|
#define TK_NK_GE 292
|
||||||
#define TK_MATCH 293
|
#define TK_NK_NE 293
|
||||||
#define TK_NMATCH 294
|
#define TK_MATCH 294
|
||||||
#define TK_CONTAINS 295
|
#define TK_NMATCH 295
|
||||||
#define TK_JOIN 296
|
#define TK_CONTAINS 296
|
||||||
#define TK_INNER 297
|
#define TK_JOIN 297
|
||||||
#define TK_LEFT 298
|
#define TK_INNER 298
|
||||||
#define TK_RIGHT 299
|
#define TK_LEFT 299
|
||||||
#define TK_OUTER 300
|
#define TK_RIGHT 300
|
||||||
#define TK_SEMI 301
|
#define TK_OUTER 301
|
||||||
#define TK_ANTI 302
|
#define TK_SEMI 302
|
||||||
#define TK_ASOF 303
|
#define TK_ANTI 303
|
||||||
#define TK_WINDOW 304
|
#define TK_ASOF 304
|
||||||
#define TK_WINDOW_OFFSET 305
|
#define TK_WINDOW 305
|
||||||
#define TK_JLIMIT 306
|
#define TK_WINDOW_OFFSET 306
|
||||||
#define TK_SELECT 307
|
#define TK_JLIMIT 307
|
||||||
#define TK_NK_HINT 308
|
#define TK_SELECT 308
|
||||||
#define TK_DISTINCT 309
|
#define TK_NK_HINT 309
|
||||||
#define TK_WHERE 310
|
#define TK_DISTINCT 310
|
||||||
#define TK_PARTITION 311
|
#define TK_WHERE 311
|
||||||
#define TK_BY 312
|
#define TK_PARTITION 312
|
||||||
#define TK_SESSION 313
|
#define TK_BY 313
|
||||||
#define TK_STATE_WINDOW 314
|
#define TK_SESSION 314
|
||||||
#define TK_EVENT_WINDOW 315
|
#define TK_STATE_WINDOW 315
|
||||||
#define TK_COUNT_WINDOW 316
|
#define TK_EVENT_WINDOW 316
|
||||||
#define TK_SLIDING 317
|
#define TK_COUNT_WINDOW 317
|
||||||
#define TK_FILL 318
|
#define TK_SLIDING 318
|
||||||
#define TK_VALUE 319
|
#define TK_FILL 319
|
||||||
#define TK_VALUE_F 320
|
#define TK_VALUE 320
|
||||||
#define TK_NONE 321
|
#define TK_VALUE_F 321
|
||||||
#define TK_PREV 322
|
#define TK_NONE 322
|
||||||
#define TK_NULL_F 323
|
#define TK_PREV 323
|
||||||
#define TK_LINEAR 324
|
#define TK_NULL_F 324
|
||||||
#define TK_NEXT 325
|
#define TK_LINEAR 325
|
||||||
#define TK_HAVING 326
|
#define TK_NEXT 326
|
||||||
#define TK_RANGE 327
|
#define TK_HAVING 327
|
||||||
#define TK_EVERY 328
|
#define TK_RANGE 328
|
||||||
#define TK_ORDER 329
|
#define TK_EVERY 329
|
||||||
#define TK_SLIMIT 330
|
#define TK_ORDER 330
|
||||||
#define TK_SOFFSET 331
|
#define TK_SLIMIT 331
|
||||||
#define TK_LIMIT 332
|
#define TK_SOFFSET 332
|
||||||
#define TK_OFFSET 333
|
#define TK_LIMIT 333
|
||||||
#define TK_ASC 334
|
#define TK_OFFSET 334
|
||||||
#define TK_NULLS 335
|
#define TK_ASC 335
|
||||||
#define TK_ABORT 336
|
#define TK_NULLS 336
|
||||||
#define TK_AFTER 337
|
#define TK_ABORT 337
|
||||||
#define TK_ATTACH 338
|
#define TK_AFTER 338
|
||||||
#define TK_BEFORE 339
|
#define TK_ATTACH 339
|
||||||
#define TK_BEGIN 340
|
#define TK_BEFORE 340
|
||||||
#define TK_BITAND 341
|
#define TK_BEGIN 341
|
||||||
#define TK_BITNOT 342
|
#define TK_BITAND 342
|
||||||
#define TK_BITOR 343
|
#define TK_BITNOT 343
|
||||||
#define TK_BLOCKS 344
|
#define TK_BITOR 344
|
||||||
#define TK_CHANGE 345
|
#define TK_BLOCKS 345
|
||||||
#define TK_COMMA 346
|
#define TK_CHANGE 346
|
||||||
#define TK_CONCAT 347
|
#define TK_COMMA 347
|
||||||
#define TK_CONFLICT 348
|
#define TK_CONCAT 348
|
||||||
#define TK_COPY 349
|
#define TK_CONFLICT 349
|
||||||
#define TK_DEFERRED 350
|
#define TK_COPY 350
|
||||||
#define TK_DELIMITERS 351
|
#define TK_DEFERRED 351
|
||||||
#define TK_DETACH 352
|
#define TK_DELIMITERS 352
|
||||||
#define TK_DIVIDE 353
|
#define TK_DETACH 353
|
||||||
#define TK_DOT 354
|
#define TK_DIVIDE 354
|
||||||
#define TK_EACH 355
|
#define TK_DOT 355
|
||||||
#define TK_FAIL 356
|
#define TK_EACH 356
|
||||||
#define TK_GLOB 357
|
#define TK_FAIL 357
|
||||||
#define TK_ID 358
|
#define TK_GLOB 358
|
||||||
#define TK_IMMEDIATE 359
|
#define TK_ID 359
|
||||||
#define TK_IMPORT 360
|
#define TK_IMMEDIATE 360
|
||||||
#define TK_INITIALLY 361
|
#define TK_IMPORT 361
|
||||||
#define TK_INSTEAD 362
|
#define TK_INITIALLY 362
|
||||||
#define TK_ISNULL 363
|
#define TK_INSTEAD 363
|
||||||
#define TK_MODULES 364
|
#define TK_ISNULL 364
|
||||||
#define TK_NK_BITNOT 365
|
#define TK_MODULES 365
|
||||||
#define TK_NK_SEMI 366
|
#define TK_NK_BITNOT 366
|
||||||
#define TK_NOTNULL 367
|
#define TK_NK_SEMI 367
|
||||||
#define TK_OF 368
|
#define TK_NOTNULL 368
|
||||||
#define TK_PLUS 369
|
#define TK_OF 369
|
||||||
#define TK_PRIVILEGE 370
|
#define TK_PLUS 370
|
||||||
#define TK_RAISE 371
|
#define TK_PRIVILEGE 371
|
||||||
#define TK_RESTRICT 372
|
#define TK_RAISE 372
|
||||||
#define TK_ROW 373
|
#define TK_RESTRICT 373
|
||||||
#define TK_STAR 374
|
#define TK_ROW 374
|
||||||
#define TK_STATEMENT 375
|
#define TK_STAR 375
|
||||||
#define TK_STRICT 376
|
#define TK_STATEMENT 376
|
||||||
#define TK_STRING 377
|
#define TK_STRICT 377
|
||||||
#define TK_TIMES 378
|
#define TK_STRING 378
|
||||||
#define TK_VALUES 379
|
#define TK_TIMES 379
|
||||||
#define TK_VARIABLE 380
|
#define TK_VALUES 380
|
||||||
#define TK_WAL 381
|
#define TK_VARIABLE 381
|
||||||
|
#define TK_WAL 382
|
||||||
|
|
||||||
#define TK_NK_SPACE 600
|
#define TK_NK_SPACE 600
|
||||||
#define TK_NK_COMMENT 601
|
#define TK_NK_COMMENT 601
|
||||||
|
|
|
@ -280,6 +280,7 @@ bool fmIsSkipScanCheckFunc(int32_t funcId);
|
||||||
bool fmIsPrimaryKeyFunc(int32_t funcId);
|
bool fmIsPrimaryKeyFunc(int32_t funcId);
|
||||||
bool fmIsProcessByRowFunc(int32_t funcId);
|
bool fmIsProcessByRowFunc(int32_t funcId);
|
||||||
bool fmisSelectGroupConstValueFunc(int32_t funcId);
|
bool fmisSelectGroupConstValueFunc(int32_t funcId);
|
||||||
|
bool fmIsCalcEachRowFunc(int32_t funcId);
|
||||||
|
|
||||||
void getLastCacheDataType(SDataType* pType, int32_t pkBytes);
|
void getLastCacheDataType(SDataType* pType, int32_t pkBytes);
|
||||||
int32_t createFunction(const char* pName, SNodeList* pParameterList, SFunctionNode** pFunc);
|
int32_t createFunction(const char* pName, SNodeList* pParameterList, SFunctionNode** pFunc);
|
||||||
|
|
|
@ -191,6 +191,7 @@ typedef struct SFunctionNode {
|
||||||
bool hasOriginalFunc;
|
bool hasOriginalFunc;
|
||||||
int32_t originalFuncId;
|
int32_t originalFuncId;
|
||||||
ETrimType trimType;
|
ETrimType trimType;
|
||||||
|
bool hasSMA;
|
||||||
} SFunctionNode;
|
} SFunctionNode;
|
||||||
|
|
||||||
typedef struct STableNode {
|
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 signFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||||
int32_t degreesFunction(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 radiansFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||||
|
int32_t randFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||||
|
|
||||||
/* String functions */
|
/* String functions */
|
||||||
int32_t lengthFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
int32_t lengthFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput);
|
||||||
|
|
|
@ -38,6 +38,7 @@ typedef struct SSumRes {
|
||||||
typedef struct SMinmaxResInfo {
|
typedef struct SMinmaxResInfo {
|
||||||
bool assign; // assign the first value or not
|
bool assign; // assign the first value or not
|
||||||
int64_t v;
|
int64_t v;
|
||||||
|
char *str;
|
||||||
STuplePos tuplePos;
|
STuplePos tuplePos;
|
||||||
|
|
||||||
STuplePos nullTuplePos;
|
STuplePos nullTuplePos;
|
||||||
|
|
|
@ -24,7 +24,7 @@ extern "C" {
|
||||||
|
|
||||||
#define FUNCTION_NAME_MAX_LENGTH 32
|
#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_AGG_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(0)
|
||||||
#define FUNC_MGT_SCALAR_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(1)
|
#define FUNC_MGT_SCALAR_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(1)
|
||||||
|
@ -58,6 +58,7 @@ extern "C" {
|
||||||
#define FUNC_MGT_TSMA_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(29)
|
#define FUNC_MGT_TSMA_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(29)
|
||||||
#define FUNC_MGT_COUNT_LIKE_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(30) // funcs that should also return 0 when no rows found
|
#define FUNC_MGT_COUNT_LIKE_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(30) // funcs that should also return 0 when no rows found
|
||||||
#define FUNC_MGT_PROCESS_BY_ROW FUNC_MGT_FUNC_CLASSIFICATION_MASK(31)
|
#define FUNC_MGT_PROCESS_BY_ROW FUNC_MGT_FUNC_CLASSIFICATION_MASK(31)
|
||||||
|
#define FUNC_MGT_CALC_EACH_ROW_FUNC FUNC_MGT_FUNC_CLASSIFICATION_MASK(32)
|
||||||
|
|
||||||
#define FUNC_MGT_TEST_MASK(val, mask) (((val) & (mask)) != 0)
|
#define FUNC_MGT_TEST_MASK(val, mask) (((val) & (mask)) != 0)
|
||||||
|
|
||||||
|
|
|
@ -299,6 +299,25 @@ static int32_t translateInOutNum(SFunctionNode* pFunc, char* pErrBuf, int32_t le
|
||||||
return TSDB_CODE_SUCCESS;
|
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
|
// 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) {
|
static int32_t translateInNumOutDou(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||||
if (1 != LIST_LENGTH(pFunc->pParameterList)) {
|
if (1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||||
|
@ -579,6 +598,23 @@ static int32_t translatePi(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||||
return TSDB_CODE_SUCCESS;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
static int32_t translateRound(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||||
if (2 != LIST_LENGTH(pFunc->pParameterList) && 1 != LIST_LENGTH(pFunc->pParameterList)) {
|
if (2 != LIST_LENGTH(pFunc->pParameterList) && 1 != LIST_LENGTH(pFunc->pParameterList)) {
|
||||||
return invaildFuncParaNumErrMsg(pErrBuf, len, pFunc->functionName);
|
return invaildFuncParaNumErrMsg(pErrBuf, len, pFunc->functionName);
|
||||||
|
@ -2904,7 +2940,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
.name = "min",
|
.name = "min",
|
||||||
.type = FUNCTION_TYPE_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,
|
.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,
|
.dataRequiredFunc = statisDataRequired,
|
||||||
.getEnvFunc = getMinmaxFuncEnv,
|
.getEnvFunc = getMinmaxFuncEnv,
|
||||||
.initFunc = minmaxFunctionSetup,
|
.initFunc = minmaxFunctionSetup,
|
||||||
|
@ -2920,7 +2956,7 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
.name = "max",
|
.name = "max",
|
||||||
.type = FUNCTION_TYPE_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,
|
.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,
|
.dataRequiredFunc = statisDataRequired,
|
||||||
.getEnvFunc = getMinmaxFuncEnv,
|
.getEnvFunc = getMinmaxFuncEnv,
|
||||||
.initFunc = minmaxFunctionSetup,
|
.initFunc = minmaxFunctionSetup,
|
||||||
|
@ -4729,6 +4765,16 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
|
||||||
.sprocessFunc = weekofyearFunction,
|
.sprocessFunc = weekofyearFunction,
|
||||||
.finalizeFunc = NULL
|
.finalizeFunc = NULL
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "rand",
|
||||||
|
.type = FUNCTION_TYPE_RAND,
|
||||||
|
.classification = FUNC_MGT_SCALAR_FUNC | FUNC_MGT_CALC_EACH_ROW_FUNC,
|
||||||
|
.translateFunc = translateRand,
|
||||||
|
.getEnvFunc = NULL,
|
||||||
|
.initFunc = NULL,
|
||||||
|
.sprocessFunc = randFunction,
|
||||||
|
.finalizeFunc = NULL
|
||||||
|
},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|
|
@ -1026,6 +1026,7 @@ int32_t minmaxFunctionSetup(SqlFunctionCtx* pCtx, SResultRowEntryInfo* pResultIn
|
||||||
|
|
||||||
buf->nullTupleSaved = false;
|
buf->nullTupleSaved = false;
|
||||||
buf->nullTuplePos.pageId = -1;
|
buf->nullTuplePos.pageId = -1;
|
||||||
|
buf->str = NULL;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1101,11 +1102,21 @@ int32_t minmaxFunctionFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
|
||||||
colDataSetFloat(pCol, currentRow, &v);
|
colDataSetFloat(pCol, currentRow, &v);
|
||||||
break;
|
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 {
|
} else {
|
||||||
colDataSetNULL(pCol, currentRow);
|
colDataSetNULL(pCol, currentRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
taosMemoryFreeClear(pRes->str);
|
||||||
if (pCtx->subsidiaries.num > 0) {
|
if (pCtx->subsidiaries.num > 0) {
|
||||||
if (pEntryInfo->numOfRes > 0) {
|
if (pEntryInfo->numOfRes > 0) {
|
||||||
code = setSelectivityValue(pCtx, pBlock, &pRes->tuplePos, currentRow);
|
code = setSelectivityValue(pCtx, pBlock, &pRes->tuplePos, currentRow);
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
#include "builtinsimpl.h"
|
#include "builtinsimpl.h"
|
||||||
#include "function.h"
|
#include "function.h"
|
||||||
|
#include "tcompare.h"
|
||||||
#include "tdatablock.h"
|
#include "tdatablock.h"
|
||||||
#include "tfunctionInt.h"
|
#include "tfunctionInt.h"
|
||||||
#include "tglobal.h"
|
#include "tglobal.h"
|
||||||
|
@ -365,10 +366,10 @@ static double doubleVectorCmpAVX(const double* pData, int32_t numOfRows, bool is
|
||||||
return v;
|
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;
|
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;
|
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)
|
__COMPARE_ACQUIRED_MIN(i, end, pCol->nullbitmap, pData, pCtx, *(double*)&(pBuf->v), &pBuf->tuplePos)
|
||||||
break;
|
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 {
|
} else {
|
||||||
switch (pCol->info.type) {
|
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)
|
__COMPARE_ACQUIRED_MAX(i, end, pCol->nullbitmap, pData, pCtx, *(double*)&(pBuf->v), &pBuf->tuplePos)
|
||||||
break;
|
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;
|
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
|
// 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;
|
numOfElems = pInput->numOfRows - pAgg->numOfNull;
|
||||||
if (numOfElems == 0) {
|
if (numOfElems == 0) {
|
||||||
|
@ -820,7 +914,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc, int32_t* nElems)
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
if (pCol->hasNull || numOfRows < threshold[pCol->info.type] || pCtx->subsidiaries.num > 0) {
|
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)) {
|
if ((i < end) && (!pBuf->assign)) {
|
||||||
char* p = pCol->pData + pCol->info.bytes * i;
|
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;
|
*(float*)&pBuf->v = *(float*)p;
|
||||||
break;
|
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:
|
default:
|
||||||
(void)memcpy(&pBuf->v, p, pCol->info.bytes);
|
(void)memcpy(&pBuf->v, p, pCol->info.bytes);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -287,6 +287,8 @@ bool fmIsProcessByRowFunc(int32_t funcId) { return isSpecificClassifyFunc(funcId
|
||||||
|
|
||||||
bool fmIsIgnoreNullFunc(int32_t funcId) { return isSpecificClassifyFunc(funcId, FUNC_MGT_IGNORE_NULL_FUNC); }
|
bool fmIsIgnoreNullFunc(int32_t funcId) { return isSpecificClassifyFunc(funcId, FUNC_MGT_IGNORE_NULL_FUNC); }
|
||||||
|
|
||||||
|
bool fmIsCalcEachRowFunc(int32_t funcId) { return isSpecificClassifyFunc(funcId, FUNC_MGT_CALC_EACH_ROW_FUNC); }
|
||||||
|
|
||||||
void fmFuncMgtDestroy() {
|
void fmFuncMgtDestroy() {
|
||||||
void* m = gFunMgtService.pFuncNameHashTable;
|
void* m = gFunMgtService.pFuncNameHashTable;
|
||||||
if (m != NULL && atomic_val_compare_exchange_ptr((void**)&gFunMgtService.pFuncNameHashTable, m, 0) == m) {
|
if (m != NULL && atomic_val_compare_exchange_ptr((void**)&gFunMgtService.pFuncNameHashTable, m, 0) == m) {
|
||||||
|
|
|
@ -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))); }
|
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) ::= 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) ::= 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) ::= 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) ::= NOW(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
|
||||||
literal_func(A) ::= TODAY(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 }
|
%type substr_func { SToken }
|
||||||
%destructor substr_func { }
|
%destructor substr_func { }
|
||||||
substr_func(A) ::= SUBSTR(B). { A = B; }
|
substr_func(A) ::= SUBSTR(B). { A = B; }
|
||||||
|
|
|
@ -206,6 +206,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"QUERIES", TK_QUERIES},
|
{"QUERIES", TK_QUERIES},
|
||||||
{"QUERY", TK_QUERY},
|
{"QUERY", TK_QUERY},
|
||||||
{"PI", TK_PI},
|
{"PI", TK_PI},
|
||||||
|
{"RAND", TK_RAND},
|
||||||
{"RANGE", TK_RANGE},
|
{"RANGE", TK_RANGE},
|
||||||
{"RATIO", TK_RATIO},
|
{"RATIO", TK_RATIO},
|
||||||
{"PAUSE", TK_PAUSE},
|
{"PAUSE", TK_PAUSE},
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -303,7 +303,8 @@ static int32_t scanPathOptGetRelatedFuncs(SScanLogicNode* pScan, SNodeList** pSd
|
||||||
FOREACH(pNode, pAllFuncs) {
|
FOREACH(pNode, pAllFuncs) {
|
||||||
SFunctionNode* pFunc = (SFunctionNode*)pNode;
|
SFunctionNode* pFunc = (SFunctionNode*)pNode;
|
||||||
int32_t code = TSDB_CODE_SUCCESS;
|
int32_t code = TSDB_CODE_SUCCESS;
|
||||||
if (scanPathOptIsSpecifiedFuncType(pFunc, fmIsSpecialDataRequiredFunc)) {
|
if (scanPathOptIsSpecifiedFuncType(pFunc, fmIsSpecialDataRequiredFunc) &&
|
||||||
|
((pFunc->funcType == FUNCTION_TYPE_MIN || pFunc->funcType == FUNCTION_TYPE_MAX) && pFunc->hasSMA)) {
|
||||||
SNode* pNew = NULL;
|
SNode* pNew = NULL;
|
||||||
code = nodesCloneNode(pNode, &pNew);
|
code = nodesCloneNode(pNode, &pNew);
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
|
|
|
@ -30,7 +30,7 @@ typedef struct SOperatorValueType {
|
||||||
|
|
||||||
typedef struct SScalarCtx {
|
typedef struct SScalarCtx {
|
||||||
int32_t code;
|
int32_t code;
|
||||||
bool dual;
|
bool dual; /* whether select stmt has from stmt */
|
||||||
SArray* pBlockList; /* element is SSDataBlock* */
|
SArray* pBlockList; /* element is SSDataBlock* */
|
||||||
SHashObj* pRes; /* element is SScalarParam */
|
SHashObj* pRes; /* element is SScalarParam */
|
||||||
void* param; // additional parameter (meta actually) for acquire value such as tbname/tags values
|
void* param; // additional parameter (meta actually) for acquire value such as tbname/tags values
|
||||||
|
|
|
@ -464,7 +464,7 @@ int32_t sclInitParam(SNode *node, SScalarParam *param, SScalarCtx *ctx, int32_t
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t sclInitParamList(SScalarParam **pParams, SNodeList *pParamList, SScalarCtx *ctx, int32_t *paramNum,
|
int32_t sclInitParamList(SScalarParam **pParams, SNodeList *pParamList, SScalarCtx *ctx, int32_t *paramNum,
|
||||||
int32_t *rowNum) {
|
int32_t *rowNum, bool needCalcForEachRow) {
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
if (NULL == pParamList) {
|
if (NULL == pParamList) {
|
||||||
if (ctx->pBlockList) {
|
if (ctx->pBlockList) {
|
||||||
|
@ -505,6 +505,13 @@ int32_t sclInitParamList(SScalarParam **pParams, SNodeList *pParamList, SScalarC
|
||||||
} else {
|
} else {
|
||||||
FOREACH(tnode, pParamList) {
|
FOREACH(tnode, pParamList) {
|
||||||
SCL_ERR_JRET(sclInitParam(tnode, ¶mList[i], ctx, rowNum));
|
SCL_ERR_JRET(sclInitParam(tnode, ¶mList[i], ctx, rowNum));
|
||||||
|
if (needCalcForEachRow) {
|
||||||
|
SSDataBlock *pBlock = taosArrayGetP(ctx->pBlockList, 0);
|
||||||
|
if (NULL == pBlock) {
|
||||||
|
SCL_ERR_RET(TSDB_CODE_OUT_OF_RANGE);
|
||||||
|
}
|
||||||
|
paramList[i].numOfRows = pBlock->info.rows;
|
||||||
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -752,7 +759,7 @@ int32_t sclExecFunction(SFunctionNode *node, SScalarCtx *ctx, SScalarParam *outp
|
||||||
int32_t rowNum = 0;
|
int32_t rowNum = 0;
|
||||||
int32_t paramNum = 0;
|
int32_t paramNum = 0;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SCL_ERR_RET(sclInitParamList(¶ms, node->pParameterList, ctx, ¶mNum, &rowNum));
|
SCL_ERR_RET(sclInitParamList(¶ms, node->pParameterList, ctx, ¶mNum, &rowNum, fmIsCalcEachRowFunc(node->funcId)));
|
||||||
|
|
||||||
if (fmIsUserDefinedFunc(node->funcId)) {
|
if (fmIsUserDefinedFunc(node->funcId)) {
|
||||||
code = callUdfScalarFunc(node->functionName, params, paramNum, output);
|
code = callUdfScalarFunc(node->functionName, params, paramNum, output);
|
||||||
|
@ -811,7 +818,7 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
|
||||||
int32_t rowNum = 0;
|
int32_t rowNum = 0;
|
||||||
int32_t paramNum = 0;
|
int32_t paramNum = 0;
|
||||||
int32_t code = 0;
|
int32_t code = 0;
|
||||||
SCL_ERR_RET(sclInitParamList(¶ms, node->pParameterList, ctx, ¶mNum, &rowNum));
|
SCL_ERR_RET(sclInitParamList(¶ms, node->pParameterList, ctx, ¶mNum, &rowNum, false));
|
||||||
if (NULL == params) {
|
if (NULL == params) {
|
||||||
output->numOfRows = 0;
|
output->numOfRows = 0;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
|
@ -1179,7 +1186,9 @@ EDealRes sclRewriteNonConstOperator(SNode **pNode, SScalarCtx *ctx) {
|
||||||
EDealRes sclRewriteFunction(SNode **pNode, SScalarCtx *ctx) {
|
EDealRes sclRewriteFunction(SNode **pNode, SScalarCtx *ctx) {
|
||||||
SFunctionNode *node = (SFunctionNode *)*pNode;
|
SFunctionNode *node = (SFunctionNode *)*pNode;
|
||||||
SNode *tnode = NULL;
|
SNode *tnode = NULL;
|
||||||
if ((!fmIsScalarFunc(node->funcId) && (!ctx->dual)) || fmIsUserDefinedFunc(node->funcId)) {
|
if ((!fmIsScalarFunc(node->funcId) && (!ctx->dual)) ||
|
||||||
|
fmIsUserDefinedFunc(node->funcId) ||
|
||||||
|
(fmIsCalcEachRowFunc(node->funcId) && (!ctx->dual))) {
|
||||||
return DEAL_RES_CONTINUE;
|
return DEAL_RES_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2887,6 +2887,20 @@ int32_t floorFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOut
|
||||||
return doScalarFunction(pInput, inputNum, pOutput, floorf, floor);
|
return doScalarFunction(pInput, inputNum, pOutput, floorf, floor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t randFunction(SScalarParam *pInput, int32_t inputNum, SScalarParam *pOutput) {
|
||||||
|
if (inputNum == 1 && !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);
|
||||||
|
}
|
||||||
|
for (int32_t i = 0; i < pInput->numOfRows; ++i) {
|
||||||
|
double random_value = (double)(taosRand() % RAND_MAX) / RAND_MAX;
|
||||||
|
colDataSetDouble(pOutput->columnData, i, &random_value);
|
||||||
|
}
|
||||||
|
pOutput->numOfRows = pInput->numOfRows;
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static double decimalFn(double val1, double val2, _double_fn fn) {
|
static double decimalFn(double val1, double val2, _double_fn fn) {
|
||||||
if (val1 > DBL_MAX || val1 < -DBL_MAX) {
|
if (val1 > DBL_MAX || val1 < -DBL_MAX) {
|
||||||
return val1;
|
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,14 @@ class TDTestCase(TBase):
|
||||||
tdSql.query("select var_pop(null) from ts_4893.meters;")
|
tdSql.query("select var_pop(null) from ts_4893.meters;")
|
||||||
tdSql.checkRows(1)
|
tdSql.checkRows(1)
|
||||||
tdSql.checkData(0, 0, None)
|
tdSql.checkData(0, 0, None)
|
||||||
|
|
||||||
def test_error(self):
|
def test_error(self):
|
||||||
tdSql.error(
|
tdSql.error(
|
||||||
"select * from (select to_iso8601(ts, timezone()), timezone() from meters order by ts desc) limit 1000;",
|
"select * from (select to_iso8601(ts, timezone()), timezone() from meters order by ts desc) limit 1000;",
|
||||||
expectErrInfo="Not supported timzone format") # TS-5340
|
expectErrInfo="Not supported timzone format") # TS-5340
|
||||||
|
def test_min(self):
|
||||||
|
self.test_normal_query("min")
|
||||||
|
def test_max(self):
|
||||||
|
self.test_normal_query("max")
|
||||||
# run
|
# run
|
||||||
def run(self):
|
def run(self):
|
||||||
tdLog.debug(f"start to excute {__file__}")
|
tdLog.debug(f"start to excute {__file__}")
|
||||||
|
@ -551,6 +553,10 @@ class TDTestCase(TBase):
|
||||||
self.test_stddev()
|
self.test_stddev()
|
||||||
self.test_varpop()
|
self.test_varpop()
|
||||||
|
|
||||||
|
# select function
|
||||||
|
self.test_min()
|
||||||
|
self.test_max()
|
||||||
|
|
||||||
# error function
|
# error function
|
||||||
self.test_error()
|
self.test_error()
|
||||||
|
|
||||||
|
|
|
@ -226,8 +226,6 @@ if $data10 != 5 then
|
||||||
endi
|
endi
|
||||||
sql_error select avg(tbcol) from $mt where tbcol1 = 1 group by tgcol
|
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 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
|
sql select first(tbcol), tgcol from $mt where tbcol1 = 1 group by tgcol order by tgcol
|
||||||
if $rows != 2 then
|
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);
|
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
|
# 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(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(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(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(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);
|
sql_error create sma index sma_index_name3 on stb function(stddev(c4)) interval(5m,10s) sliding(5m);
|
||||||
# for nchar
|
# 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(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(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(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);
|
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(now()) from {dbname}.stb_1")
|
||||||
tdSql.error(f"select min(ts) 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(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.error(f"select min(a) from {dbname}.stb_1")
|
||||||
tdSql.query(f"select min(1) 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")
|
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.checkData(0, 0, np.min(floatData))
|
||||||
tdSql.query(f"select min(col1) from {dbname}.stb_1 where col2>=5")
|
tdSql.query(f"select min(col1) from {dbname}.stb_1 where col2>=5")
|
||||||
tdSql.checkData(0,0,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(now()) from {dbname}.stb_1")
|
||||||
tdSql.error(f"select min(ts) 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(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.error(f"select min(a) from {dbname}.stb_1")
|
||||||
tdSql.query(f"select min(1) 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")
|
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.checkData(0, 0, np.min(floatData))
|
||||||
tdSql.query(f"select min(col1) from {dbname}.stb where col2>=5")
|
tdSql.query(f"select min(col1) from {dbname}.stb where col2>=5")
|
||||||
tdSql.checkData(0,0,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(now()) from {dbname}.stb_1")
|
||||||
tdSql.error(f"select min(ts) 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(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.error(f"select min(a) from {dbname}.ntb")
|
||||||
tdSql.query(f"select min(1) from {dbname}.ntb")
|
tdSql.query(f"select min(1) from {dbname}.ntb")
|
||||||
tdSql.error(f"select min(count(c1),count(c2)) 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.checkData(0, 0, np.min(floatData))
|
||||||
tdSql.query(f"select min(col1) from {dbname}.ntb where col2>=5")
|
tdSql.query(f"select min(col1) from {dbname}.ntb where col2>=5")
|
||||||
tdSql.checkData(0,0,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):
|
def stop(self):
|
||||||
|
|
|
@ -122,21 +122,27 @@ class TDTestCase:
|
||||||
tdSql.query(sql)
|
tdSql.query(sql)
|
||||||
tdSql.checkData(0,0,4)
|
tdSql.checkData(0,0,4)
|
||||||
sql = "select max(t1) from %s.stb0 where ts<now;"%(database)
|
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)
|
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)
|
sql = "select max(t_bool) from %s.stb0 where ts<now;"%(database)
|
||||||
tdSql.error(sql)
|
tdSql.error(sql)
|
||||||
sql = "select max(t_bool),ts from %s.stb0 where ts<now;"%(database)
|
sql = "select max(t_bool),ts from %s.stb0 where ts<now;"%(database)
|
||||||
tdSql.error(sql)
|
tdSql.error(sql)
|
||||||
sql = "select max(t_binary) from %s.stb0 where ts<now;"%(database)
|
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)
|
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)
|
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)
|
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)
|
sql = "select max(t_int) from %s.stb0 where ts<now;"%(database)
|
||||||
tdSql.query(sql)
|
tdSql.query(sql)
|
||||||
tdSql.checkData(0,0,4)
|
tdSql.checkData(0,0,4)
|
||||||
|
@ -220,21 +226,27 @@ class TDTestCase:
|
||||||
tdSql.query(sql)
|
tdSql.query(sql)
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
sql = "select min(t1) from %s.stb0 where ts<now;"%(database)
|
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)
|
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)
|
sql = "select min(t_bool) from %s.stb0 where ts<now;"%(database)
|
||||||
tdSql.error(sql)
|
tdSql.error(sql)
|
||||||
sql = "select min(t_bool),ts from %s.stb0 where ts<now;"%(database)
|
sql = "select min(t_bool),ts from %s.stb0 where ts<now;"%(database)
|
||||||
tdSql.error(sql)
|
tdSql.error(sql)
|
||||||
sql = "select min(t_binary) from %s.stb0 where ts<now;"%(database)
|
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)
|
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)
|
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)
|
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)
|
sql = "select min(t_int) from %s.stb0 where ts<now;"%(database)
|
||||||
tdSql.query(sql)
|
tdSql.query(sql)
|
||||||
tdSql.checkData(0,0,0)
|
tdSql.checkData(0,0,0)
|
||||||
|
|
Loading…
Reference in New Issue