enh: add join ut

This commit is contained in:
dapan1121 2023-12-19 11:17:39 +08:00
parent e55b7c52d8
commit 279b2aa10a
8 changed files with 4301 additions and 3048 deletions

View File

@ -290,88 +290,88 @@
#define TK_OUTER 271
#define TK_SEMI 272
#define TK_ANTI 273
#define TK_ANY 274
#define TK_ASOF 275
#define TK_WINDOW 276
#define TK_WINDOW_OFFSET 277
#define TK_JLIMIT 278
#define TK_SELECT 279
#define TK_NK_HINT 280
#define TK_DISTINCT 281
#define TK_WHERE 282
#define TK_PARTITION 283
#define TK_BY 284
#define TK_SESSION 285
#define TK_STATE_WINDOW 286
#define TK_EVENT_WINDOW 287
#define TK_SLIDING 288
#define TK_FILL 289
#define TK_VALUE 290
#define TK_VALUE_F 291
#define TK_NONE 292
#define TK_PREV 293
#define TK_NULL_F 294
#define TK_LINEAR 295
#define TK_NEXT 296
#define TK_HAVING 297
#define TK_RANGE 298
#define TK_EVERY 299
#define TK_ORDER 300
#define TK_SLIMIT 301
#define TK_SOFFSET 302
#define TK_LIMIT 303
#define TK_OFFSET 304
#define TK_ASC 305
#define TK_NULLS 306
#define TK_ABORT 307
#define TK_AFTER 308
#define TK_ATTACH 309
#define TK_BEFORE 310
#define TK_BEGIN 311
#define TK_BITAND 312
#define TK_BITNOT 313
#define TK_BITOR 314
#define TK_BLOCKS 315
#define TK_CHANGE 316
#define TK_COMMA 317
#define TK_CONCAT 318
#define TK_CONFLICT 319
#define TK_COPY 320
#define TK_DEFERRED 321
#define TK_DELIMITERS 322
#define TK_DETACH 323
#define TK_DIVIDE 324
#define TK_DOT 325
#define TK_EACH 326
#define TK_FAIL 327
#define TK_FILE 328
#define TK_FOR 329
#define TK_GLOB 330
#define TK_ID 331
#define TK_IMMEDIATE 332
#define TK_IMPORT 333
#define TK_INITIALLY 334
#define TK_INSTEAD 335
#define TK_ISNULL 336
#define TK_KEY 337
#define TK_MODULES 338
#define TK_NK_BITNOT 339
#define TK_NK_SEMI 340
#define TK_NOTNULL 341
#define TK_OF 342
#define TK_PLUS 343
#define TK_PRIVILEGE 344
#define TK_RAISE 345
#define TK_RESTRICT 346
#define TK_ROW 347
#define TK_STAR 348
#define TK_STATEMENT 349
#define TK_STRICT 350
#define TK_STRING 351
#define TK_TIMES 352
#define TK_VALUES 353
#define TK_VARIABLE 354
#define TK_WAL 355
#define TK_ASOF 274
#define TK_WINDOW 275
#define TK_WINDOW_OFFSET 276
#define TK_JLIMIT 277
#define TK_SELECT 278
#define TK_NK_HINT 279
#define TK_DISTINCT 280
#define TK_WHERE 281
#define TK_PARTITION 282
#define TK_BY 283
#define TK_SESSION 284
#define TK_STATE_WINDOW 285
#define TK_EVENT_WINDOW 286
#define TK_SLIDING 287
#define TK_FILL 288
#define TK_VALUE 289
#define TK_VALUE_F 290
#define TK_NONE 291
#define TK_PREV 292
#define TK_NULL_F 293
#define TK_LINEAR 294
#define TK_NEXT 295
#define TK_HAVING 296
#define TK_RANGE 297
#define TK_EVERY 298
#define TK_ORDER 299
#define TK_SLIMIT 300
#define TK_SOFFSET 301
#define TK_LIMIT 302
#define TK_OFFSET 303
#define TK_ASC 304
#define TK_NULLS 305
#define TK_ABORT 306
#define TK_AFTER 307
#define TK_ATTACH 308
#define TK_BEFORE 309
#define TK_BEGIN 310
#define TK_BITAND 311
#define TK_BITNOT 312
#define TK_BITOR 313
#define TK_BLOCKS 314
#define TK_CHANGE 315
#define TK_COMMA 316
#define TK_CONCAT 317
#define TK_CONFLICT 318
#define TK_COPY 319
#define TK_DEFERRED 320
#define TK_DELIMITERS 321
#define TK_DETACH 322
#define TK_DIVIDE 323
#define TK_DOT 324
#define TK_EACH 325
#define TK_FAIL 326
#define TK_FILE 327
#define TK_FOR 328
#define TK_GLOB 329
#define TK_ID 330
#define TK_IMMEDIATE 331
#define TK_IMPORT 332
#define TK_INITIALLY 333
#define TK_INSTEAD 334
#define TK_ISNULL 335
#define TK_KEY 336
#define TK_MODULES 337
#define TK_NK_BITNOT 338
#define TK_NK_SEMI 339
#define TK_NOTNULL 340
#define TK_OF 341
#define TK_PLUS 342
#define TK_PRIVILEGE 343
#define TK_RAISE 344
#define TK_RESTRICT 345
#define TK_ROW 346
#define TK_STAR 347
#define TK_STATEMENT 348
#define TK_STRICT 349
#define TK_STRING 350
#define TK_TIMES 351
#define TK_VALUES 352
#define TK_VARIABLE 353
#define TK_WAL 354

View File

@ -219,7 +219,6 @@ typedef enum EJoinSubType {
JOIN_STYPE_OUTER,
JOIN_STYPE_SEMI,
JOIN_STYPE_ANTI,
JOIN_STYPE_ANY,
JOIN_STYPE_ASOF,
JOIN_STYPE_WIN,
JOIN_STYPE_MAX_VALUE

View File

@ -19,17 +19,17 @@ IF(NOT TD_DARWIN)
)
ENDIF ()
# SET(CMAKE_CXX_STANDARD 11)
# AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
SET(CMAKE_CXX_STANDARD 11)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} SOURCE_LIST)
# ADD_EXECUTABLE(tSimpleHashTest tSimpleHashTests.cpp)
# TARGET_LINK_LIBRARIES(
# tSimpleHashTest
# PRIVATE os util common executor gtest_main
# )
ADD_EXECUTABLE(joinTests joinTests.cpp)
TARGET_LINK_LIBRARIES(
joinTests
PRIVATE os util common executor gtest_main qcom
)
# TARGET_INCLUDE_DIRECTORIES(
# tSimpleHashTest
# PUBLIC "${TD_SOURCE_DIR}/include/common"
# PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../inc"
# )
TARGET_INCLUDE_DIRECTORIES(
joinTests
PUBLIC "${TD_SOURCE_DIR}/include/common"
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../inc"
)

File diff suppressed because it is too large Load Diff

View File

@ -1090,7 +1090,6 @@ join_subtype(A) ::= .
join_subtype(A) ::= OUTER. { A = JOIN_STYPE_OUTER; }
join_subtype(A) ::= SEMI. { A = JOIN_STYPE_SEMI; }
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) ::= WINDOW. { A = JOIN_STYPE_WIN; }

View File

@ -38,7 +38,7 @@ static SKeyword keywordTable[] = {
{"ANALYZE", TK_ANALYZE},
{"AND", TK_AND},
{"ANTI", TK_ANTI},
{"ANY", TK_ANY},
// {"ANY", TK_ANY},
{"APPS", TK_APPS},
{"AS", TK_AS},
{"ASC", TK_ASC},

File diff suppressed because it is too large Load Diff

View File

@ -85,6 +85,7 @@ typedef struct SJoinOptimizeOpt {
typedef bool (*FMayBeOptimized)(SLogicNode* pNode);
typedef bool (*FShouldBeOptimized)(SLogicNode* pNode, void* pInfo);
#if 0
static SJoinOptimizeOpt gJoinOpt[JOIN_TYPE_MAX_VALUE][JOIN_STYPE_MAX_VALUE] = {
/* NONE OUTER SEMI ANTI ANY ASOF WINDOW */
/*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}},
/*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) {
if (func(pNode)) {