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_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

View File

@ -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

View File

@ -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

View File

@ -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; }

View File

@ -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

View File

@ -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)) {