Line data Source code
1 : /* 2 : * SPDX-License-Identifier: MPL-2.0 3 : * 4 : * This Source Code Form is subject to the terms of the Mozilla Public 5 : * License, v. 2.0. If a copy of the MPL was not distributed with this 6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. 7 : * 8 : * Copyright 2024 MonetDB Foundation; 9 : * Copyright August 2008 - 2023 MonetDB B.V.; 10 : * Copyright 1997 - July 2008 CWI. 11 : */ 12 : 13 : /* 14 : * opt_prelude 15 : * M. Kersten 16 : * These definitions are handy to have around in the optimizer 17 : */ 18 : #include "monetdb_config.h" 19 : #include "opt_prelude.h" 20 : #include "optimizer_private.h" 21 : 22 : /* ! please keep this list sorted for easier maintenance ! */ 23 : const char *affectedRowsRef; 24 : const char *aggrRef; 25 : const char *alarmRef; 26 : const char *algebraRef; 27 : const char *alter_add_range_partitionRef; 28 : const char *alter_add_tableRef; 29 : const char *alter_add_value_partitionRef; 30 : const char *alter_del_tableRef; 31 : const char *alter_seqRef; 32 : const char *alter_set_tableRef; 33 : const char *alter_tableRef; 34 : const char *alter_userRef; 35 : const char *appendBulkRef; 36 : const char *appendRef; 37 : const char *assertRef; 38 : const char *avgRef; 39 : const char *bandjoinRef; 40 : const char *batalgebraRef; 41 : const char *batcalcRef; 42 : const char *batcapiRef; 43 : const char *batmalRef; 44 : const char *batmkeyRef; 45 : const char *batmmathRef; 46 : const char *batmtimeRef; 47 : const char *batpyapi3Ref; 48 : const char *batrapiRef; 49 : const char *batRef; 50 : const char *batsqlRef; 51 : const char *batstrRef; 52 : const char *bbpRef; 53 : const char *betweenRef; 54 : const char *binddbatRef; 55 : const char *bindidxRef; 56 : const char *bindRef; 57 : const char *blockRef; 58 : const char *bstreamRef; 59 : const char *calcRef; 60 : const char *capiRef; 61 : const char *claimRef; 62 : const char *clear_tableRef; 63 : const char *columnBindRef; 64 : const char *comment_onRef; 65 : const char *compressRef; 66 : const char *connectRef; 67 : const char *containsRef; 68 : const char *copy_fromRef; 69 : const char *corrRef; 70 : const char *count_no_nilRef; 71 : const char *countRef; 72 : const char *create_functionRef; 73 : const char *create_roleRef; 74 : const char *create_schemaRef; 75 : const char *create_seqRef; 76 : const char *create_tableRef; 77 : const char *create_triggerRef; 78 : const char *create_typeRef; 79 : const char *create_userRef; 80 : const char *create_viewRef; 81 : const char *crossRef; 82 : const char *cume_distRef; 83 : const char *dataflowRef; 84 : const char *dblRef; 85 : const char *decompressRef; 86 : const char *defineRef; 87 : const char *deleteRef; 88 : const char *deltaRef; 89 : const char *dense_rankRef; 90 : const char *dependRef; 91 : const char *deregisterRef; 92 : const char *dictRef; 93 : const char *diffcandRef; 94 : const char *differenceRef; 95 : const char *disconnectRef; 96 : const char *divRef; 97 : const char *drop_constraintRef; 98 : const char *drop_functionRef; 99 : const char *drop_indexRef; 100 : const char *drop_roleRef; 101 : const char *drop_schemaRef; 102 : const char *drop_seqRef; 103 : const char *drop_tableRef; 104 : const char *drop_triggerRef; 105 : const char *drop_typeRef; 106 : const char *drop_userRef; 107 : const char *drop_viewRef; 108 : const char *emptybindidxRef; 109 : const char *emptybindRef; 110 : const char *endswithjoinRef; 111 : const char *eqRef; 112 : const char *evalRef; 113 : const char *execRef; 114 : const char *export_bin_columnRef; 115 : const char *exportOperationRef; 116 : const char *export_tableRef; 117 : const char *fetchRef; 118 : const char *findRef; 119 : const char *firstnRef; 120 : const char *first_valueRef; 121 : const char *forRef; 122 : const char *generatorRef; 123 : const char *getRef; 124 : const char *getTraceRef; 125 : const char *getVariableRef; 126 : const char *grant_functionRef; 127 : const char *grantRef; 128 : const char *grant_rolesRef; 129 : const char *groupbyRef; 130 : const char *groupdoneRef; 131 : const char *groupRef; 132 : const char *growRef; 133 : const char *hgeRef; 134 : const char *identityRef; 135 : const char *ifthenelseRef; 136 : const char *importColumnRef; 137 : const char *intersectcandRef; 138 : const char *intersectRef; 139 : const char *intRef; 140 : const char *ioRef; 141 : const char *iteratorRef; 142 : const char *joinRef; 143 : const char *jsonRef; 144 : const char *lagRef; 145 : const char *languageRef; 146 : const char *last_valueRef; 147 : const char *leadRef; 148 : const char *leftjoinRef; 149 : const char *likejoinRef; 150 : const char *likeRef; 151 : const char *likeselectRef; 152 : const char *lngRef; 153 : const char *lockRef; 154 : const char *lookupRef; 155 : const char *malRef; 156 : const char *manifoldRef; 157 : const char *mapiRef; 158 : const char *markjoinRef; 159 : const char *markselectRef; 160 : const char *maskRef; 161 : const char *matRef; 162 : const char *maxlevenshteinRef; 163 : const char *maxRef; 164 : const char *mdbRef; 165 : const char *mergecandRef; 166 : const char *mergepackRef; 167 : const char *mergetableRef; 168 : const char *minjarowinklerRef; 169 : const char *minRef; 170 : const char *minusRef; 171 : const char *mirrorRef; 172 : const char *mitosisRef; 173 : const char *mmathRef; 174 : const char *modRef; 175 : const char *mtimeRef; 176 : const char *mulRef; 177 : const char *multiplexRef; 178 : const char *mvcRef; 179 : const char *newRef; 180 : const char *nextRef; 181 : const char *not_likeRef; 182 : const char *notRef; 183 : const char *not_uniqueRef; 184 : const char *nth_valueRef; 185 : const char *ntileRef; 186 : const char *outercrossRef; 187 : const char *outerjoinRef; 188 : const char *outerselectRef; 189 : const char *packIncrementRef; 190 : const char *packRef; 191 : const char *parametersRef; 192 : const char *passRef; 193 : const char *percent_rankRef; 194 : const char *plusRef; 195 : const char *predicateRef; 196 : const char *printRef; 197 : const char *prodRef; 198 : const char *profilerRef; 199 : const char *projectdeltaRef; 200 : const char *projectionpathRef; 201 : const char *projectionRef; 202 : const char *projectRef; 203 : const char *putRef; 204 : const char *pyapi3Ref; 205 : const char *querylogRef; 206 : const char *raiseRef; 207 : const char *rangejoinRef; 208 : const char *rankRef; 209 : const char *rapiRef; 210 : const char *reconnectRef; 211 : const char *registerRef; 212 : const char *register_supervisorRef; 213 : const char *remapRef; 214 : const char *remoteRef; 215 : const char *rename_columnRef; 216 : const char *rename_schemaRef; 217 : const char *rename_tableRef; 218 : const char *rename_userRef; 219 : const char *renumberRef; 220 : const char *replaceRef; 221 : const char *resultSetRef; 222 : const char *revoke_functionRef; 223 : const char *revokeRef; 224 : const char *revoke_rolesRef; 225 : const char *row_numberRef; 226 : const char *rpcRef; 227 : const char *rsColumnRef; 228 : const char *rtreeRef; 229 : const char *sampleRef; 230 : const char *selectNotNilRef; 231 : const char *selectRef; 232 : const char *semaRef; 233 : const char *semijoinRef; 234 : const char *seriesRef; 235 : const char *setAccessRef; 236 : const char *set_protocolRef; 237 : const char *setVariableRef; 238 : const char *singleRef; 239 : const char *sliceRef; 240 : const char *sortRef; 241 : const char *sqlcatalogRef; 242 : const char *sqlRef; 243 : const char *startswithjoinRef; 244 : const char *stoptraceRef; 245 : const char *streamsRef; 246 : const char *strimpsRef; 247 : const char *strRef; 248 : const char *subavgRef; 249 : const char *subcountRef; 250 : const char *subdeltaRef; 251 : const char *subeval_aggrRef; 252 : const char *subgroupdoneRef; 253 : const char *subgroupRef; 254 : const char *submaxRef; 255 : const char *subminRef; 256 : const char *subprodRef; 257 : const char *subsliceRef; 258 : const char *subsumRef; 259 : const char *subuniformRef; 260 : const char *sumRef; 261 : const char *takeRef; 262 : const char *thetajoinRef; 263 : const char *thetaselectRef; 264 : const char *tidRef; 265 : const char *transaction_abortRef; 266 : const char *transaction_beginRef; 267 : const char *transaction_commitRef; 268 : const char *transactionRef; 269 : const char *transaction_releaseRef; 270 : const char *transaction_rollbackRef; 271 : const char *umaskRef; 272 : const char *unionfuncRef; 273 : const char *uniqueRef; 274 : const char *unlockRef; 275 : const char *updateRef; 276 : const char *userRef; 277 : const char *window_boundRef; 278 : const char *zero_or_oneRef; 279 : /* ! please keep this list sorted for easier maintenance ! */ 280 : 281 : void 282 330 : optimizerInit(void) 283 : { 284 : /* ! please keep this list sorted for easier maintenance ! */ 285 330 : affectedRowsRef = putName("affectedRows"); 286 330 : aggrRef = putName("aggr"); 287 330 : alarmRef = putName("alarm"); 288 330 : algebraRef = putName("algebra"); 289 330 : alter_add_range_partitionRef = putName("alter_add_range_partition"); 290 330 : alter_add_tableRef = putName("alter_add_table"); 291 330 : alter_add_value_partitionRef = putName("alter_add_value_partition"); 292 330 : alter_del_tableRef = putName("alter_del_table"); 293 330 : alter_seqRef = putName("alter_seq"); 294 330 : alter_set_tableRef = putName("alter_set_table"); 295 330 : alter_tableRef = putName("alter_table"); 296 330 : alter_userRef = putName("alter_user"); 297 330 : appendBulkRef = putName("appendBulk"); 298 330 : appendRef = putName("append"); 299 330 : assertRef = putName("assert"); 300 330 : avgRef = putName("avg"); 301 330 : bandjoinRef = putName("bandjoin"); 302 330 : batalgebraRef = putName("batalgebra"); 303 330 : batcalcRef = putName("batcalc"); 304 330 : batcapiRef = putName("batcapi"); 305 330 : batmalRef = putName("batmal"); 306 330 : batmkeyRef = putName("batmkey"); 307 330 : batmmathRef = putName("batmmath"); 308 330 : batmtimeRef = putName("batmtime"); 309 330 : batpyapi3Ref = putName("batpyapi3"); 310 330 : batrapiRef = putName("batrapi"); 311 330 : batRef = putName("bat"); 312 330 : batsqlRef = putName("batsql"); 313 330 : batstrRef = putName("batstr"); 314 330 : bbpRef = putName("bbp"); 315 330 : betweenRef = putName("between"); 316 330 : binddbatRef = putName("bind_dbat"); 317 330 : bindidxRef = putName("bind_idxbat"); 318 330 : bindRef = putName("bind"); 319 330 : blockRef = putName("block"); 320 330 : bstreamRef = putName("bstream"); 321 330 : calcRef = putName("calc"); 322 330 : capiRef = putName("capi"); 323 330 : claimRef = putName("claim"); 324 330 : clear_tableRef = putName("clear_table"); 325 330 : columnBindRef = putName("columnBind"); 326 330 : comment_onRef = putName("comment_on"); 327 330 : compressRef = putName("compress"); 328 330 : connectRef = putName("connect"); 329 330 : containsRef = putName("contains"); 330 330 : copy_fromRef = putName("copy_from"); 331 330 : corrRef = putName("corr"); 332 330 : count_no_nilRef = putName("count_no_nil"); 333 330 : countRef = putName("count"); 334 330 : create_functionRef = putName("create_function"); 335 330 : create_roleRef = putName("create_role"); 336 330 : create_schemaRef = putName("create_schema"); 337 330 : create_seqRef = putName("create_seq"); 338 330 : create_tableRef = putName("create_table"); 339 330 : create_triggerRef = putName("create_trigger"); 340 330 : create_typeRef = putName("create_type"); 341 330 : create_userRef = putName("create_user"); 342 330 : create_viewRef = putName("create_view"); 343 330 : crossRef = putName("crossproduct"); 344 330 : cume_distRef = putName("cume_dist"); 345 330 : dataflowRef = putName("dataflow"); 346 330 : dblRef = putName("dbl"); 347 330 : decompressRef = putName("decompress"); 348 330 : defineRef = putName("define"); 349 330 : deleteRef = putName("delete"); 350 330 : deltaRef = putName("delta"); 351 330 : dense_rankRef = putName("dense_rank"); 352 330 : dependRef = putName("depend"); 353 330 : deregisterRef = putName("deregister"); 354 330 : dictRef = putName("dict"); 355 330 : diffcandRef = putName("diffcand"); 356 330 : differenceRef = putName("difference"); 357 330 : disconnectRef = putName("disconnect"); 358 330 : divRef = putName("/"); 359 330 : drop_constraintRef = putName("drop_constraint"); 360 330 : drop_functionRef = putName("drop_function"); 361 330 : drop_indexRef = putName("drop_index"); 362 330 : drop_roleRef = putName("drop_role"); 363 330 : drop_schemaRef = putName("drop_schema"); 364 330 : drop_seqRef = putName("drop_seq"); 365 330 : drop_tableRef = putName("drop_table"); 366 330 : drop_triggerRef = putName("drop_trigger"); 367 330 : drop_typeRef = putName("drop_type"); 368 330 : drop_userRef = putName("drop_user"); 369 330 : drop_viewRef = putName("drop_view"); 370 330 : emptybindidxRef = putName("emptybindidx"); 371 330 : emptybindRef = putName("emptybind"); 372 330 : endswithjoinRef = putName("endswithjoin"); 373 330 : eqRef = putName("=="); 374 330 : evalRef = putName("eval"); 375 330 : execRef = putName("exec"); 376 330 : export_bin_columnRef = "export_bin_column"; 377 330 : exportOperationRef = putName("exportOperation"); 378 330 : export_tableRef = putName("export_table"); 379 330 : fetchRef = putName("fetch"); 380 330 : findRef = putName("find"); 381 330 : firstnRef = putName("firstn"); 382 330 : first_valueRef = putName("first_value"); 383 330 : forRef = putName("for"); 384 330 : generatorRef = putName("generator"); 385 330 : getRef = putName("get"); 386 330 : getTraceRef = putName("getTrace"); 387 330 : getVariableRef = putName("getVariable"); 388 330 : grant_functionRef = putName("grant_function"); 389 330 : grantRef = putName("grant"); 390 330 : grant_rolesRef = putName("grant_roles"); 391 330 : groupbyRef = putName("groupby"); 392 330 : groupdoneRef = putName("groupdone"); 393 330 : groupRef = putName("group"); 394 330 : growRef = putName("grow"); 395 330 : hgeRef = putName("hge"); 396 330 : identityRef = putName("identity"); 397 330 : ifthenelseRef = putName("ifthenelse"); 398 330 : importColumnRef = putName("importColumn"); 399 330 : intersectcandRef = putName("intersectcand"); 400 330 : intersectRef = putName("intersect"); 401 330 : intRef = putName("int"); 402 330 : ioRef = putName("io"); 403 330 : iteratorRef = putName("iterator"); 404 330 : joinRef = putName("join"); 405 330 : jsonRef = putName("json"); 406 330 : lagRef = putName("lag"); 407 330 : languageRef = putName("language"); 408 330 : last_valueRef = putName("last_value"); 409 330 : leadRef = putName("lead"); 410 330 : leftjoinRef = putName("leftjoin"); 411 330 : likejoinRef = putName("likejoin"); 412 330 : likeRef = putName("like"); 413 330 : likeselectRef = putName("likeselect"); 414 330 : lngRef = putName("lng"); 415 330 : lockRef = putName("lock"); 416 330 : lookupRef = putName("lookup"); 417 330 : malRef = putName("mal"); 418 330 : manifoldRef = putName("manifold"); 419 330 : mapiRef = putName("mapi"); 420 330 : markjoinRef = putName("markjoin"); 421 330 : markselectRef = putName("markselect"); 422 330 : maskRef = putName("mask"); 423 330 : matRef = putName("mat"); 424 330 : maxlevenshteinRef = putName("maxlevenshtein"); 425 330 : maxRef = putName("max"); 426 330 : mdbRef = putName("mdb"); 427 330 : mergecandRef = putName("mergecand"); 428 330 : mergepackRef = putName("mergepack"); 429 330 : mergetableRef = putName("mergetable"); 430 330 : minjarowinklerRef = putName("minjarowinkler"); 431 330 : minRef = putName("min"); 432 330 : minusRef = putName("-"); 433 330 : mirrorRef = putName("mirror"); 434 330 : mitosisRef = putName("mitosis"); 435 330 : mmathRef = putName("mmath"); 436 330 : modRef = putName("%"); 437 330 : mtimeRef = putName("mtime"); 438 330 : mulRef = putName("*"); 439 330 : multiplexRef = putName("multiplex"); 440 330 : mvcRef = putName("mvc"); 441 330 : newRef = putName("new"); 442 330 : nextRef = putName("next"); 443 330 : not_likeRef = putName("not_like"); 444 330 : notRef = putName("not"); 445 330 : not_uniqueRef = putName("not_unique"); 446 330 : nth_valueRef = putName("nth_value"); 447 330 : ntileRef = putName("ntile"); 448 330 : outercrossRef = putName("outercrossproduct"); 449 330 : outerjoinRef = putName("outerjoin"); 450 330 : outerselectRef = putName("outerselect"); 451 330 : packIncrementRef = putName("packIncrement"); 452 330 : packRef = putName("pack"); 453 330 : parametersRef = putName("parameters"); 454 330 : passRef = putName("pass"); 455 330 : percent_rankRef = putName("percent_rank"); 456 330 : plusRef = putName("+"); 457 330 : predicateRef = putName("predicate"); 458 330 : printRef = putName("print"); 459 330 : prodRef = putName("prod"); 460 330 : profilerRef = putName("profiler"); 461 330 : projectdeltaRef = putName("projectdelta"); 462 330 : projectionpathRef = putName("projectionpath"); 463 330 : projectionRef = putName("projection"); 464 330 : projectRef = putName("project"); 465 330 : putRef = putName("put"); 466 330 : pyapi3Ref = putName("pyapi3"); 467 330 : querylogRef = putName("querylog"); 468 330 : raiseRef = putName("raise"); 469 330 : rangejoinRef = putName("rangejoin"); 470 330 : rankRef = putName("rank"); 471 330 : rapiRef = putName("rapi"); 472 330 : reconnectRef = putName("reconnect"); 473 330 : registerRef = putName("register"); 474 330 : register_supervisorRef = putName("register_supervisor"); 475 330 : remapRef = putName("remap"); 476 330 : remoteRef = putName("remote"); 477 330 : rename_columnRef = putName("rename_column"); 478 330 : rename_schemaRef = putName("rename_schema"); 479 330 : rename_tableRef = putName("rename_table"); 480 330 : rename_userRef = putName("rename_user"); 481 330 : renumberRef = putName("renumber"); 482 330 : replaceRef = putName("replace"); 483 330 : resultSetRef = putName("resultSet"); 484 330 : revoke_functionRef = putName("revoke_function"); 485 330 : revokeRef = putName("revoke"); 486 330 : revoke_rolesRef = putName("revoke_roles"); 487 330 : row_numberRef = putName("row_number"); 488 330 : rpcRef = putName("rpc"); 489 330 : rsColumnRef = putName("rsColumn"); 490 330 : rtreeRef = putName("rtree"); 491 330 : sampleRef = putName("sample"); 492 330 : selectNotNilRef = putName("selectNotNil"); 493 330 : selectRef = putName("select"); 494 330 : semaRef = putName("sema"); 495 330 : semijoinRef = putName("semijoin"); 496 330 : seriesRef = putName("series"); 497 330 : setAccessRef = putName("setAccess"); 498 330 : set_protocolRef = putName("set_protocol"); 499 330 : setVariableRef = putName("setVariable"); 500 330 : singleRef = putName("single"); 501 330 : sliceRef = putName("slice"); 502 330 : sortRef = putName("sort"); 503 330 : sqlcatalogRef = putName("sqlcatalog"); 504 330 : sqlRef = putName("sql"); 505 330 : startswithjoinRef = putName("startswithjoin"); 506 330 : stoptraceRef = putName("stoptrace"); 507 330 : streamsRef = putName("streams"); 508 330 : strimpsRef = putName("strimps"); 509 330 : strRef = putName("str"); 510 330 : subavgRef = putName("subavg"); 511 330 : subcountRef = putName("subcount"); 512 330 : subdeltaRef = putName("subdelta"); 513 330 : subeval_aggrRef = putName("subeval_aggr"); 514 330 : subgroupdoneRef = putName("subgroupdone"); 515 330 : subgroupRef = putName("subgroup"); 516 330 : submaxRef = putName("submax"); 517 330 : subminRef = putName("submin"); 518 330 : subprodRef = putName("subprod"); 519 330 : subsliceRef = putName("subslice"); 520 330 : subsumRef = putName("subsum"); 521 330 : subuniformRef = putName("subuniform"); 522 330 : sumRef = putName("sum"); 523 330 : takeRef = putName("take"); 524 330 : thetajoinRef = putName("thetajoin"); 525 330 : thetaselectRef = putName("thetaselect"); 526 330 : tidRef = putName("tid"); 527 330 : transaction_abortRef = putName("transaction_abort"); 528 330 : transaction_beginRef = putName("transaction_begin"); 529 330 : transaction_commitRef = putName("transaction_commit"); 530 330 : transactionRef = putName("transaction"); 531 330 : transaction_releaseRef = putName("transaction_release"); 532 330 : transaction_rollbackRef = putName("transaction_rollback"); 533 330 : umaskRef = putName("umask"); 534 330 : unionfuncRef = putName("unionfunc"); 535 330 : uniqueRef = putName("unique"); 536 330 : unlockRef = putName("unlock"); 537 330 : updateRef = putName("update"); 538 330 : userRef = putName("user"); 539 330 : window_boundRef = putName("window_bound"); 540 330 : zero_or_oneRef = putName("zero_or_one"); 541 : /* ! please keep this list sorted for easier maintenance ! */ 542 330 : }