enh: add join ut
This commit is contained in:
parent
e55b7c52d8
commit
279b2aa10a
|
@ -290,88 +290,88 @@
|
||||||
#define TK_OUTER 271
|
#define TK_OUTER 271
|
||||||
#define TK_SEMI 272
|
#define TK_SEMI 272
|
||||||
#define TK_ANTI 273
|
#define TK_ANTI 273
|
||||||
#define TK_ANY 274
|
#define TK_ASOF 274
|
||||||
#define TK_ASOF 275
|
#define TK_WINDOW 275
|
||||||
#define TK_WINDOW 276
|
#define TK_WINDOW_OFFSET 276
|
||||||
#define TK_WINDOW_OFFSET 277
|
#define TK_JLIMIT 277
|
||||||
#define TK_JLIMIT 278
|
#define TK_SELECT 278
|
||||||
#define TK_SELECT 279
|
#define TK_NK_HINT 279
|
||||||
#define TK_NK_HINT 280
|
#define TK_DISTINCT 280
|
||||||
#define TK_DISTINCT 281
|
#define TK_WHERE 281
|
||||||
#define TK_WHERE 282
|
#define TK_PARTITION 282
|
||||||
#define TK_PARTITION 283
|
#define TK_BY 283
|
||||||
#define TK_BY 284
|
#define TK_SESSION 284
|
||||||
#define TK_SESSION 285
|
#define TK_STATE_WINDOW 285
|
||||||
#define TK_STATE_WINDOW 286
|
#define TK_EVENT_WINDOW 286
|
||||||
#define TK_EVENT_WINDOW 287
|
#define TK_SLIDING 287
|
||||||
#define TK_SLIDING 288
|
#define TK_FILL 288
|
||||||
#define TK_FILL 289
|
#define TK_VALUE 289
|
||||||
#define TK_VALUE 290
|
#define TK_VALUE_F 290
|
||||||
#define TK_VALUE_F 291
|
#define TK_NONE 291
|
||||||
#define TK_NONE 292
|
#define TK_PREV 292
|
||||||
#define TK_PREV 293
|
#define TK_NULL_F 293
|
||||||
#define TK_NULL_F 294
|
#define TK_LINEAR 294
|
||||||
#define TK_LINEAR 295
|
#define TK_NEXT 295
|
||||||
#define TK_NEXT 296
|
#define TK_HAVING 296
|
||||||
#define TK_HAVING 297
|
#define TK_RANGE 297
|
||||||
#define TK_RANGE 298
|
#define TK_EVERY 298
|
||||||
#define TK_EVERY 299
|
#define TK_ORDER 299
|
||||||
#define TK_ORDER 300
|
#define TK_SLIMIT 300
|
||||||
#define TK_SLIMIT 301
|
#define TK_SOFFSET 301
|
||||||
#define TK_SOFFSET 302
|
#define TK_LIMIT 302
|
||||||
#define TK_LIMIT 303
|
#define TK_OFFSET 303
|
||||||
#define TK_OFFSET 304
|
#define TK_ASC 304
|
||||||
#define TK_ASC 305
|
#define TK_NULLS 305
|
||||||
#define TK_NULLS 306
|
#define TK_ABORT 306
|
||||||
#define TK_ABORT 307
|
#define TK_AFTER 307
|
||||||
#define TK_AFTER 308
|
#define TK_ATTACH 308
|
||||||
#define TK_ATTACH 309
|
#define TK_BEFORE 309
|
||||||
#define TK_BEFORE 310
|
#define TK_BEGIN 310
|
||||||
#define TK_BEGIN 311
|
#define TK_BITAND 311
|
||||||
#define TK_BITAND 312
|
#define TK_BITNOT 312
|
||||||
#define TK_BITNOT 313
|
#define TK_BITOR 313
|
||||||
#define TK_BITOR 314
|
#define TK_BLOCKS 314
|
||||||
#define TK_BLOCKS 315
|
#define TK_CHANGE 315
|
||||||
#define TK_CHANGE 316
|
#define TK_COMMA 316
|
||||||
#define TK_COMMA 317
|
#define TK_CONCAT 317
|
||||||
#define TK_CONCAT 318
|
#define TK_CONFLICT 318
|
||||||
#define TK_CONFLICT 319
|
#define TK_COPY 319
|
||||||
#define TK_COPY 320
|
#define TK_DEFERRED 320
|
||||||
#define TK_DEFERRED 321
|
#define TK_DELIMITERS 321
|
||||||
#define TK_DELIMITERS 322
|
#define TK_DETACH 322
|
||||||
#define TK_DETACH 323
|
#define TK_DIVIDE 323
|
||||||
#define TK_DIVIDE 324
|
#define TK_DOT 324
|
||||||
#define TK_DOT 325
|
#define TK_EACH 325
|
||||||
#define TK_EACH 326
|
#define TK_FAIL 326
|
||||||
#define TK_FAIL 327
|
#define TK_FILE 327
|
||||||
#define TK_FILE 328
|
#define TK_FOR 328
|
||||||
#define TK_FOR 329
|
#define TK_GLOB 329
|
||||||
#define TK_GLOB 330
|
#define TK_ID 330
|
||||||
#define TK_ID 331
|
#define TK_IMMEDIATE 331
|
||||||
#define TK_IMMEDIATE 332
|
#define TK_IMPORT 332
|
||||||
#define TK_IMPORT 333
|
#define TK_INITIALLY 333
|
||||||
#define TK_INITIALLY 334
|
#define TK_INSTEAD 334
|
||||||
#define TK_INSTEAD 335
|
#define TK_ISNULL 335
|
||||||
#define TK_ISNULL 336
|
#define TK_KEY 336
|
||||||
#define TK_KEY 337
|
#define TK_MODULES 337
|
||||||
#define TK_MODULES 338
|
#define TK_NK_BITNOT 338
|
||||||
#define TK_NK_BITNOT 339
|
#define TK_NK_SEMI 339
|
||||||
#define TK_NK_SEMI 340
|
#define TK_NOTNULL 340
|
||||||
#define TK_NOTNULL 341
|
#define TK_OF 341
|
||||||
#define TK_OF 342
|
#define TK_PLUS 342
|
||||||
#define TK_PLUS 343
|
#define TK_PRIVILEGE 343
|
||||||
#define TK_PRIVILEGE 344
|
#define TK_RAISE 344
|
||||||
#define TK_RAISE 345
|
#define TK_RESTRICT 345
|
||||||
#define TK_RESTRICT 346
|
#define TK_ROW 346
|
||||||
#define TK_ROW 347
|
#define TK_STAR 347
|
||||||
#define TK_STAR 348
|
#define TK_STATEMENT 348
|
||||||
#define TK_STATEMENT 349
|
#define TK_STRICT 349
|
||||||
#define TK_STRICT 350
|
#define TK_STRING 350
|
||||||
#define TK_STRING 351
|
#define TK_TIMES 351
|
||||||
#define TK_TIMES 352
|
#define TK_VALUES 352
|
||||||
#define TK_VALUES 353
|
#define TK_VARIABLE 353
|
||||||
#define TK_VARIABLE 354
|
#define TK_WAL 354
|
||||||
#define TK_WAL 355
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -219,7 +219,6 @@ typedef enum EJoinSubType {
|
||||||
JOIN_STYPE_OUTER,
|
JOIN_STYPE_OUTER,
|
||||||
JOIN_STYPE_SEMI,
|
JOIN_STYPE_SEMI,
|
||||||
JOIN_STYPE_ANTI,
|
JOIN_STYPE_ANTI,
|
||||||
JOIN_STYPE_ANY,
|
|
||||||
JOIN_STYPE_ASOF,
|
JOIN_STYPE_ASOF,
|
||||||
JOIN_STYPE_WIN,
|
JOIN_STYPE_WIN,
|
||||||
JOIN_STYPE_MAX_VALUE
|
JOIN_STYPE_MAX_VALUE
|
||||||
|
|
|
@ -19,17 +19,17 @@ IF(NOT TD_DARWIN)
|
||||||
)
|
)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
# SET(CMAKE_CXX_STANDARD 11)
|
SET(CMAKE_CXX_STANDARD 11)
|
||||||
# AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
|
||||||
|
|
||||||
# ADD_EXECUTABLE(tSimpleHashTest tSimpleHashTests.cpp)
|
ADD_EXECUTABLE(joinTests joinTests.cpp)
|
||||||
# TARGET_LINK_LIBRARIES(
|
TARGET_LINK_LIBRARIES(
|
||||||
# tSimpleHashTest
|
joinTests
|
||||||
# PRIVATE os util common executor gtest_main
|
PRIVATE os util common executor gtest_main qcom
|
||||||
# )
|
)
|
||||||
|
|
||||||
# TARGET_INCLUDE_DIRECTORIES(
|
TARGET_INCLUDE_DIRECTORIES(
|
||||||
# tSimpleHashTest
|
joinTests
|
||||||
# PUBLIC "${TD_SOURCE_DIR}/include/common"
|
PUBLIC "${TD_SOURCE_DIR}/include/common"
|
||||||
# PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../inc"
|
||||||
# )
|
)
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1090,7 +1090,6 @@ join_subtype(A) ::= .
|
||||||
join_subtype(A) ::= OUTER. { A = JOIN_STYPE_OUTER; }
|
join_subtype(A) ::= OUTER. { A = JOIN_STYPE_OUTER; }
|
||||||
join_subtype(A) ::= SEMI. { A = JOIN_STYPE_SEMI; }
|
join_subtype(A) ::= SEMI. { A = JOIN_STYPE_SEMI; }
|
||||||
join_subtype(A) ::= ANTI. { A = JOIN_STYPE_ANTI; }
|
join_subtype(A) ::= ANTI. { A = JOIN_STYPE_ANTI; }
|
||||||
join_subtype(A) ::= ANY. { A = JOIN_STYPE_ANY; }
|
|
||||||
join_subtype(A) ::= ASOF. { A = JOIN_STYPE_ASOF; }
|
join_subtype(A) ::= ASOF. { A = JOIN_STYPE_ASOF; }
|
||||||
join_subtype(A) ::= WINDOW. { A = JOIN_STYPE_WIN; }
|
join_subtype(A) ::= WINDOW. { A = JOIN_STYPE_WIN; }
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ static SKeyword keywordTable[] = {
|
||||||
{"ANALYZE", TK_ANALYZE},
|
{"ANALYZE", TK_ANALYZE},
|
||||||
{"AND", TK_AND},
|
{"AND", TK_AND},
|
||||||
{"ANTI", TK_ANTI},
|
{"ANTI", TK_ANTI},
|
||||||
{"ANY", TK_ANY},
|
// {"ANY", TK_ANY},
|
||||||
{"APPS", TK_APPS},
|
{"APPS", TK_APPS},
|
||||||
{"AS", TK_AS},
|
{"AS", TK_AS},
|
||||||
{"ASC", TK_ASC},
|
{"ASC", TK_ASC},
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -85,6 +85,7 @@ typedef struct SJoinOptimizeOpt {
|
||||||
typedef bool (*FMayBeOptimized)(SLogicNode* pNode);
|
typedef bool (*FMayBeOptimized)(SLogicNode* pNode);
|
||||||
typedef bool (*FShouldBeOptimized)(SLogicNode* pNode, void* pInfo);
|
typedef bool (*FShouldBeOptimized)(SLogicNode* pNode, void* pInfo);
|
||||||
|
|
||||||
|
#if 0
|
||||||
static SJoinOptimizeOpt gJoinOpt[JOIN_TYPE_MAX_VALUE][JOIN_STYPE_MAX_VALUE] = {
|
static SJoinOptimizeOpt gJoinOpt[JOIN_TYPE_MAX_VALUE][JOIN_STYPE_MAX_VALUE] = {
|
||||||
/* NONE OUTER SEMI ANTI ANY ASOF WINDOW */
|
/* NONE OUTER SEMI ANTI ANY ASOF WINDOW */
|
||||||
/*INNER*/ {{PUSH_DOWN_ALL_COND}, {0}, {0}, {0}, {PUSH_DOWN_ALL_COND}, {0}, {0}},
|
/*INNER*/ {{PUSH_DOWN_ALL_COND}, {0}, {0}, {0}, {PUSH_DOWN_ALL_COND}, {0}, {0}},
|
||||||
|
@ -92,6 +93,16 @@ static SJoinOptimizeOpt gJoinOpt[JOIN_TYPE_MAX_VALUE][JOIN_STYPE_MAX_VALUE] = {
|
||||||
/*RIGHT*/ {{0}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_ALL_COND}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}},
|
/*RIGHT*/ {{0}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_ALL_COND}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}},
|
||||||
/*FULL*/ {{0}, {0}, {0}, {0}, {0}, {0}, {0}},
|
/*FULL*/ {{0}, {0}, {0}, {0}, {0}, {0}, {0}},
|
||||||
};
|
};
|
||||||
|
#else
|
||||||
|
static SJoinOptimizeOpt gJoinOpt[JOIN_TYPE_MAX_VALUE][JOIN_STYPE_MAX_VALUE] = {
|
||||||
|
/* NONE OUTER SEMI ANTI ASOF WINDOW */
|
||||||
|
/*INNER*/ {{PUSH_DOWN_ALL_COND}, {0}, {0}, {0}, {0}, {0}},
|
||||||
|
/*LEFT*/ {{0}, {PUSH_DOWN_LEFT_FLT}, {PUSH_DOWN_ALL_COND}, {PUSH_DOWN_LEFT_FLT}, {PUSH_DOWN_LEFT_FLT}, {PUSH_DOWN_LEFT_FLT}},
|
||||||
|
/*RIGHT*/ {{0}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_ALL_COND}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}, {PUSH_DOWN_RIGHT_FLT}},
|
||||||
|
/*FULL*/ {{0}, {0}, {0}, {0}, {0}, {0}},
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static SLogicNode* optFindPossibleNode(SLogicNode* pNode, FMayBeOptimized func) {
|
static SLogicNode* optFindPossibleNode(SLogicNode* pNode, FMayBeOptimized func) {
|
||||||
if (func(pNode)) {
|
if (func(pNode)) {
|
||||||
|
|
Loading…
Reference in New Issue