diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b287112..6020300 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - - uses: cachix/install-nix-action@v18 + - uses: cachix/install-nix-action@v22 with: nix_path: nixpkgs=channel:nixos-unstable - uses: cachix/cachix-action@v12 diff --git a/Cargo.lock b/Cargo.lock index f833bf2..47e8672 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,29 +4,18 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.19" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] [[package]] name = "anyhow" -version = "1.0.64" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9a8f622bcf6ff3df478e9deba3e03e4e04b300f8e6a139e192c05fa3490afc7" - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "autocfg" @@ -36,17 +25,17 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "bimap" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bindgen" -version = "0.60.1" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", @@ -57,6 +46,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", + "syn 1.0.109", ] [[package]] @@ -65,6 +55,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "bitmaps" version = "3.2.0" @@ -88,42 +84,19 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clang-sys" -version = "1.3.3" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", "libloading", ] -[[package]] -name = "cosette-prover" -version = "0.1.0" -dependencies = [ - "anyhow", - "crossbeam", - "env_logger", - "imbl", - "indenter", - "isoperm", - "itertools", - "log", - "num", - "paste", - "permutation", - "scopeguard", - "serde", - "serde_json", - "walkdir", - "z3", -] - [[package]] name = "crossbeam" version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +source = "git+https://github.com/crossbeam-rs/crossbeam?branch=master#5fd21b032388c2e418c7306ba6149e1881943c31" dependencies = [ "cfg-if", "crossbeam-channel", @@ -135,9 +108,8 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +version = "0.5.8" +source = "git+https://github.com/crossbeam-rs/crossbeam?branch=master#5fd21b032388c2e418c7306ba6149e1881943c31" dependencies = [ "cfg-if", "crossbeam-utils", @@ -145,9 +117,8 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +version = "0.8.3" +source = "git+https://github.com/crossbeam-rs/crossbeam?branch=master#5fd21b032388c2e418c7306ba6149e1881943c31" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -156,23 +127,20 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" +version = "0.9.15" +source = "git+https://github.com/crossbeam-rs/crossbeam?branch=master#5fd21b032388c2e418c7306ba6149e1881943c31" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", "memoffset", - "once_cell", "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" +version = "0.3.8" +source = "git+https://github.com/crossbeam-rs/crossbeam?branch=master#5fd21b032388c2e418c7306ba6149e1881943c31" dependencies = [ "cfg-if", "crossbeam-utils", @@ -180,47 +148,92 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" +version = "0.8.16" +source = "git+https://github.com/crossbeam-rs/crossbeam?branch=master#5fd21b032388c2e418c7306ba6149e1881943c31" dependencies = [ "cfg-if", - "once_cell", +] + +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", ] [[package]] name = "either" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "env_logger" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", "humantime", + "is-terminal", "log", "regex", "termcolor", ] +[[package]] +name = "errno" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" [[package]] name = "humantime" @@ -228,10 +241,17 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "imbl" -version = "2.0.1" -source = "git+https://github.com/jneem/imbl?branch=main#8756e765d8f76688da333b751db14287ae862c20" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978d142c8028edf52095703af2fad11d6f611af1246685725d6b850634647085" dependencies = [ "bitmaps", "imbl-sized-chunks", @@ -255,6 +275,17 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix", + "windows-sys", +] + [[package]] name = "isoperm" version = "0.1.2" @@ -266,18 +297,18 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.3" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "lazy_static" @@ -293,40 +324,43 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.132" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "libloading" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", "winapi", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" + [[package]] name = "log" -version = "0.4.17" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" -version = "0.6.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] @@ -339,9 +373,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", @@ -349,9 +383,9 @@ dependencies = [ [[package]] name = "num" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" dependencies = [ "num-bigint", "num-complex", @@ -363,9 +397,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ "autocfg", "num-integer", @@ -374,9 +408,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" dependencies = [ "num-traits", ] @@ -416,24 +450,18 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", ] -[[package]] -name = "once_cell" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" - [[package]] name = "paste" -version = "1.0.9" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "peeking_take_while" @@ -449,27 +477,50 @@ checksum = "d9978962f8a4b158e97447a6d09d2d75e206d2994eff056c894019f362b27142" [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] +[[package]] +name = "qed-prover" +version = "0.1.0" +dependencies = [ + "anyhow", + "crossbeam", + "env_logger", + "imbl", + "indenter", + "isoperm", + "itertools", + "log", + "num", + "paste", + "permutation", + "scopeguard", + "serde", + "serde-enum-str", + "serde_json", + "walkdir", + "z3", +] + [[package]] name = "quote" -version = "1.0.21" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" [[package]] name = "rand_xoshiro" @@ -482,9 +533,21 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", @@ -493,9 +556,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rustc-hash" @@ -503,11 +566,24 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustix" +version = "0.38.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -520,35 +596,65 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.144" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-attributes" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eb8ec7724e4e524b2492b510e66957fe1a2c76c26a6975ec80823f2439da685" +dependencies = [ + "darling_core", + "serde-rename-rule", + "syn 1.0.109", +] + +[[package]] +name = "serde-enum-str" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d862bd95a79912e4f0e3312720a3d89348b314095aa3f20751ca2e483ae68b20" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "serde-attributes", + "syn 1.0.109", +] + +[[package]] +name = "serde-rename-rule" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794e44574226fc701e3be5c651feb7939038fc67fb73f6f4dd5c4ba90fd3be70" + [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -557,15 +663,26 @@ dependencies = [ [[package]] name = "shlex" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" [[package]] name = "syn" -version = "1.0.99" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", @@ -574,18 +691,18 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" dependencies = [ "winapi-util", ] [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "version_check" @@ -595,12 +712,11 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -622,9 +738,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] @@ -635,10 +751,76 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "z3" version = "0.11.2" -source = "git+https://github.com/wsx-ucb/z3.rs?branch=add-binding#5c0c18f778db015dc6c7f2219bb2fee617f24747" +source = "git+https://github.com/wsx-ucb/z3.rs?branch=add-binding#255189446ce4ac65627229ce3bd5e97d7d781cec" dependencies = [ "log", "z3-sys", @@ -647,7 +829,7 @@ dependencies = [ [[package]] name = "z3-sys" version = "0.7.1" -source = "git+https://github.com/wsx-ucb/z3.rs?branch=add-binding#5c0c18f778db015dc6c7f2219bb2fee617f24747" +source = "git+https://github.com/wsx-ucb/z3.rs?branch=add-binding#255189446ce4ac65627229ce3bd5e97d7d781cec" dependencies = [ "bindgen", ] diff --git a/Cargo.toml b/Cargo.toml index 863e03a..11b05d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "cosette-prover" +name = "qed-prover" version = "0.1.0" authors = ["Shuxian Wang "] edition = "2018" @@ -9,6 +9,7 @@ edition = "2018" [dependencies] walkdir = "2" serde = { version = "1.0", features = ["derive"] } +serde-enum-str = "0.3" serde_json = "1.0" z3 = { git = "https://github.com/wsx-ucb/z3.rs", branch = "add-binding" } scopeguard = "1.1" @@ -17,9 +18,9 @@ permutation = "0.2" paste = "1.0" indenter = "0.3" log = "0.4" -env_logger = "0.9" -imbl = { git = "https://github.com/jneem/imbl", branch = "main" } +env_logger = "0.10" +imbl = "2.0" anyhow = "1.0" num = "0.4" -crossbeam = "0.8" +crossbeam = { git = "https://github.com/crossbeam-rs/crossbeam", branch = "master" } isoperm = { git = "https://github.com/Sicheng-Pan/isoperm", branch = "master" } diff --git a/LICENSE b/LICENSE index 985b15a..7c17874 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 The Cosette Team +Copyright (c) 2021 The QED Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 61154d9..fd32238 100644 --- a/README.md +++ b/README.md @@ -1,44 +1,66 @@ -# The Cosette Prover +# The QED Prover -This is a reimplementation of the Cosette prover in Rust aiming for high performance and better SQL feature coverage. -The theory behind the prover is described in [this paper](https://www.vldb.org/pvldb/vol11/p1482-chu.pdf). -It currently expect input generated from [this parser](https://github.com/cosette-solver/cosette-parser). +This is a SQL query equivalence prover in Rust aiming for high performance and wide SQL feature coverage. +The project starts as a successor of the Cosette prover, which is described in [this paper](https://www.vldb.org/pvldb/vol11/p1482-chu.pdf). -## Usage +## Install + +### Build from source manually -After downloading the source, build the source with +The project relies on a nightly Rust compiler toolchain, +and additionally, `libclang` and header files for `z3` are needed as build-time dependencies. +Build the prover with ```sh cargo build --release ``` -Currently the build-time dependency are `libclang` and header files for `z3`. -Also, a nightly Rust compiler toolchain is required. -The build should produce an executable in `target/release/`, or you can use `cargo` to run: +would produce an executable `./target/release/qed-prover`. +The current setup of the prover has the Z3 *and* CVC5 solver as a runtime dependency, +so you need to have both the `z3` *and* `cvc5` executable in the `PATH` when running `qed-solver`. + +### Build with Nix + +Alternatively, if one has Nix and Nix flake in their environment, this project contains a flake for easy reproducibility. +Simply use ```sh -cargo run --release -- +nix run github:qed-solver/prover -- ``` -where the `` are paths to input files or directories containing the files. -The current setup of the solver has the Z3 *and* CVC5 solver as a runtime dependency, -so you need to have both the `z3` *and* `cvc5` executable in the `PATH` when running Cosette. -The results will be simply printed out, with the name of each file and their result (provable/not provable). -You can set the environment variable to `RUST_LOG=info` when running and get a (very) verbose output. +to run the prover with arguments ``. + +To have a development environment with all the build-time and runtime dependencies, run `nix shell .` in the project's root. +For `direnv` users, a `.envrc` file is also prepared, so simply `cd` into the project directory, and `direnv` will try to reproduce the development environment. +(NOTICE: For first-time use, you need to explicitly trust the `.envrc` file, by executing `direnv allow .`) + +## Usage + +Normally, one invoke the parser as +```sh +qed-prover [input-path]... +``` +where every `input-path` is a JSON file that represents a case to prove, or a directory containing such files. +Currently one can generate conforming JSON files using [this parser](https://github.com/qed-solver/parser) by passing in SQL statements. + +During execution, the results will simply be printed out, with the names of every files followed by their result (provable/not provable). +One can use the environment variable `QED_SMT_TIMEOUT` to set a timeout for each SMT request the prover makes in milliseconds, which is defaulted to 10,000. +Setting the environment variable `RUST_LOG=info` when running would give a (very) verbose output. This is useful for debugging as it prints out how expressions are simplified in the solver at various stages. -Then input files should be generated by the parser. -They are all in JSON format. -The directory `tests/RelOptRulesTest/` contains such files that are directly extracted from the [Calcite](https://calcite.apache.org/) project. +### Test cases + +For convience, the directory `tests/calcite/` contains JSON files representing the query rewrite pairs use in the optimizer test suite of the [Calcite](https://calcite.apache.org/) project. You may try out running these inputs by ```sh -cargo run --release -- tests/RelOptRulesTest/ +qed-prover tests/calcite/ ``` -WARNING: many test cases in this folder contain features that we haven't support yet. -Now ~200 out of all ~380 cases are actually provable. +WARNING: some test cases in this folder contain features that we haven't support yet. +Now ~290 out of all ~440 cases are actually provable. ## Feature coverage ### Supported features + - Basic `SELECT-FROM-WHERE` queries -- Set operations (`UNION`, `UNION ALL`, `EXCEPT`, and `EXCEPT ALL`) -- Joins (`INNER JOIN`, `LEFT`/`RIGHT`/`FULL` `OUTER JOIN`, `SEMI`/`ANTI` `JOIN`, and correlated join) +- Set operations (`UNION`, `UNION ALL`, `INTERSECT` (but not `INTERSECT ALL`), `EXCEPT`, and `EXCEPT ALL`) +- Joins (`INNER JOIN`, `LEFT`/`RIGHT`/`FULL` `OUTER JOIN`, `SEMI`/`ANTI` `JOIN`, and lateral/correlated join) - `DISTINCT` - `VALUES` - Aggretation (as uninterpreted functions) @@ -48,55 +70,11 @@ Now ~200 out of all ~380 cases are actually provable. - Arbitrary `CHECK` constraints ### Planned features + - Foreign key constraint - Law of excluded middle ($A + \neg A = 1$) -- `INTERSECT` (but not `INTERSECT ALL`) ### Unsupported features + - Semantics of aggretations, such as understanding them as algebras over a monad - Semantics of `ORDER BY` and `LIMIT` (requires temporarily modelling a table as list?) - -## Reproducible environment - -### With Nix - -The project contains a Nix flake for easy reproducibility. -Simply use `nix run . -- ` to run the prover. -For `direnv` user, create the `.envrc` file in the project root directory with the content -``` -use flake -``` -(NOTICE: For first-time use, you need to explicitly trust the `.envrc` file, and execute `direnv allow .` to proceed with the build) -Now simply `cd` into the project directory, and `direnv` will try to reproduce the development environment. - -### With GNU Guix - -All the development dependencies are declared in `manifest.scm`, with packages drawn from `channels.scm`. -The `channels.lock` file is then derived from `channels.scm` to pin down channels to their exact Git commit hashes. -Finally, one can use `direnv` to automatically reproduce the declared environment after entering the project directory. - -To run with this setup, add the following to `~/.config/direnv/direnvrc`. -```bash -use_guix-shell() { - local profile=./.profile - local channels=./channels.lock - [ -L $profile ] && rm $profile - if [ -f $channels ]; then - eval "$(guix time-machine -C "$channels" -- shell -r "$profile" "$@" --search-paths)" - else - eval "$(guix shell -r "$profile" "$@" --search-paths)" - fi -} -``` -And create the `.envrc` file under the project root directory with content -``` -use guix-shell -``` -(NOTICE: For first-time use, you need to explicitly trust the `.envrc` file, and execute `direnv allow .` to proceed with the build) -Now simply `cd` into the project directory, and `direnv` will try to reproduce the development environment. - -Within the development envrionment created by `direnv`, one can then use the convensional -``` -cargo run --release -- -``` -to run the Cosette prover. diff --git a/flake.lock b/flake.lock index f332542..f794a4d 100644 --- a/flake.lock +++ b/flake.lock @@ -2,21 +2,16 @@ "nodes": { "crane": { "inputs": { - "flake-compat": "flake-compat", - "flake-utils": [ - "flake-utils" - ], "nixpkgs": [ "nixpkgs" - ], - "rust-overlay": "rust-overlay" + ] }, "locked": { - "lastModified": 1672804365, - "narHash": "sha256-1Bh6//eesTHQRDWlzA+PjVPfwsFoftGHTYgZekIzZLg=", + "lastModified": 1698166613, + "narHash": "sha256-y4rdN4flxRiROqNi1waMYIZj/Fs7L2OrszFk/1ry9vU=", "owner": "ipetkov", "repo": "crane", - "rev": "cc20f29b4ae0d4c6e13e01f08b2d9072b09b04e7", + "rev": "b7db46f0f1751f7b1d1911f6be7daf568ad5bc65", "type": "github" }, "original": { @@ -33,11 +28,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1672726921, - "narHash": "sha256-KgH9AbM+eTC0GfVT5vfL9smNHSY858m8j4c9J1NOYfM=", + "lastModified": 1698646935, + "narHash": "sha256-FgHpELKq1AxZRkL3BzLgfCBMJ4kxAjHCuPwj/uh83d0=", "owner": "nix-community", "repo": "fenix", - "rev": "54cb27afc034071551f239975fd58a68fc55c953", + "rev": "53f0f31a978f1e056763d6d465b0f44af2454a7b", "type": "github" }, "original": { @@ -46,29 +41,16 @@ "type": "github" } }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1668681692, - "narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "009399224d5e398d03b22badca40a37ac85412a1", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", "owner": "numtide", "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", "type": "github" }, "original": { @@ -79,11 +61,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1672756850, - "narHash": "sha256-Smbq3+fitwA13qsTMeaaurv09/KVbZfW7m7lINwzDGA=", + "lastModified": 1698553279, + "narHash": "sha256-T/9P8yBSLcqo/v+FTOBK+0rjzjPMctVymZydbvR/Fak=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "298add347c2bbce14020fcb54051f517c391196b", + "rev": "90e85bc7c1a6fc0760a94ace129d3a1c61c3d035", "type": "github" }, "original": { @@ -98,17 +80,18 @@ "crane": "crane", "fenix": "fenix", "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "z3": "z3" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1672697831, - "narHash": "sha256-ocCIR907dCzSpLLLQwB8yVbmK7IFT2aJsndQovoGI1Y=", + "lastModified": 1698474035, + "narHash": "sha256-IaufRsz2ATI7vSnnqQxMlcREPFpBDyQqqPFvKp+FjMA=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "e75e2f83689d1591749b032b79c682c6d15c2424", + "rev": "f493207744da98b31295b02e6ed95b26a927056c", "type": "github" }, "original": { @@ -118,28 +101,34 @@ "type": "github" } }, - "rust-overlay": { - "inputs": { - "flake-utils": [ - "crane", - "flake-utils" - ], - "nixpkgs": [ - "crane", - "nixpkgs" - ] + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "z3": { + "flake": false, "locked": { - "lastModified": 1670034122, - "narHash": "sha256-EqmuOKucPWtMvCZtHraHr3Q3bgVszq1x2PoZtQkUuEk=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "a0d5773275ecd4f141d792d3a0376277c0fc0b65", + "lastModified": 1700100528, + "narHash": "sha256-+WcLC+byeKlnBfHXC6/JpAKEddFcG2k6Sck3m/Md76w=", + "owner": "Z3Prover", + "repo": "z3", + "rev": "5b9fdcf46234ea241156c8450ba2c49674918444", "type": "github" }, "original": { - "owner": "oxalica", - "repo": "rust-overlay", + "owner": "Z3Prover", + "repo": "z3", "type": "github" } } diff --git a/flake.nix b/flake.nix index e436e3b..609743f 100644 --- a/flake.nix +++ b/flake.nix @@ -4,40 +4,43 @@ flake-utils.url = "github:numtide/flake-utils"; crane = { url = "github:ipetkov/crane"; - inputs = { - nixpkgs.follows = "nixpkgs"; - flake-utils.follows = "flake-utils"; - }; + inputs.nixpkgs.follows = "nixpkgs"; }; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; + z3 = { + url = "github:Z3Prover/z3"; + flake = false; + }; }; - outputs = { self, nixpkgs, flake-utils, crane, fenix }: + outputs = { self, nixpkgs, flake-utils, crane, fenix, z3 }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; # Switch to nightly toolchain - craneLib = crane.lib.${system}.overrideToolchain fenix.packages.${system}.minimal.toolchain; + craneLib = crane.lib.${system}.overrideToolchain fenix.packages.${system}.complete.toolchain; + z3_4_12 = pkgs.z3_4_12.overrideAttrs (prev: { src = z3; }); packageDef = with pkgs; { src = craneLib.cleanCargoSource ./.; - buildInputs = with pkgs; [ z3 ]; + buildInputs = with pkgs; [ z3_4_12 cvc5 ]; nativeBuildInputs = with pkgs; [ rustPlatform.bindgenHook makeWrapper ] ++ lib.optionals stdenv.isDarwin [ libiconv ]; }; cargoArtifacts = craneLib.buildDepsOnly packageDef; - cosette-prover = craneLib.buildPackage (packageDef // { + qed-prover = craneLib.buildPackage (packageDef // { inherit cargoArtifacts; - postInstall = with pkgs; "wrapProgram $out/bin/cosette-prover --prefix PATH : ${cvc5}/bin"; + doNotLinkInheritedArtifacts = true; + postInstall = with pkgs; "wrapProgram $out/bin/qed-prover --set PATH ${lib.makeBinPath [ cvc5 z3_4_12 ]}"; }); in { - packages.default = cosette-prover; + packages.default = qed-prover; devShells.default = pkgs.mkShell { - inputsFrom = [ cosette-prover ]; - packages = with pkgs; [ rust-analyzer ]; + inputsFrom = [ qed-prover ]; + packages = with pkgs; [ rust-analyzer julia-bin jless ] ++ lib.optionals stdenv.isLinux [ linuxPackages.perf ]; }; }); diff --git a/src/main.rs b/src/main.rs index af0e997..9e38c2f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,6 @@ #![feature(slice_as_chunks)] +#![feature(if_let_guard)] +#![feature(let_chains)] use std::any::Any; use std::collections::BTreeMap; use std::fs::File; @@ -12,11 +14,9 @@ use env_logger::{Builder, Env, Target}; use itertools::Itertools; use walkdir::WalkDir; -use crate::pipeline::relation::Input; -use crate::solver::Payload; +use crate::pipeline::{unify, Input}; mod pipeline; -mod solver; fn visit>(dir: P, mut cb: impl FnMut(usize, &Path)) -> io::Result<()> { WalkDir::new(dir) @@ -47,7 +47,7 @@ fn main() -> io::Result<()> { for arg in std::env::args() { visit(arg, |i, path| { use CosetteResult::*; - let file = File::open(&path).unwrap(); + let file = File::open(path).unwrap(); let mut buf_reader = BufReader::new(file); let mut contents = String::new(); println!("#{}: {}", i, path.to_string_lossy().as_ref()); @@ -56,8 +56,7 @@ fn main() -> io::Result<()> { let result = std::panic::catch_unwind(|| match serde_json::from_str::(&contents) { Ok(rel) => { - let payload = Payload::from(rel); - let provable = payload.check(); + let provable = unify(rel); println!( "Equivalence is {}provable for {}", if provable { "" } else { "not " }, @@ -88,7 +87,8 @@ fn main() -> io::Result<()> { "{}\n{}", matches!(result, CosetteResult::Provable), duration.as_secs_f32() - ); + ) + .unwrap(); stats.insert(path.to_string_lossy().to_string(), result); })?; } diff --git a/src/pipeline.rs b/src/pipeline.rs index 55b8b60..26309a6 100644 --- a/src/pipeline.rs +++ b/src/pipeline.rs @@ -2,7 +2,8 @@ use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; -use imbl::{vector, Vector}; +use imbl::vector; +use serde::{Deserialize, Serialize}; use z3::{Config, Context, Solver}; use crate::pipeline::normal::Z3Env; @@ -20,34 +21,63 @@ pub mod syntax; mod tests; pub mod unify; -pub fn evaluate(rel: syntax::Relation, schemas: &Vector) -> normal::Relation { - log::info!("Syntax:\n{}", rel); - let prt: partial::Relation = (&partial::Env::default()).eval(rel); - let nom_env = &normal::Env(vector![], schemas.clone()); - let nom = nom_env.eval(prt); - log::info!("Normal:\n{}", nom); - let mut config = Config::new(); - config.set_timeout_msec(2000); +#[derive(Serialize, Deserialize)] +pub struct Input { + schemas: Vec, + queries: (relation::Relation, relation::Relation), + #[serde(default)] + help: (String, String), +} + +pub fn unify(Input { schemas, queries: (rel1, rel2), help }: Input) -> bool { + let subst = vector![]; + let env = relation::Env(&schemas, &subst, 0); + log::info!("Schemas:\n{:?}", schemas); + log::info!("Input:\n{}\n{}", help.0, help.1); + if rel1 == rel2 { + println!("Trivially true!"); + return true; + } + let rel1 = env.eval(rel1); + let rel2 = env.eval(rel2); + if rel1 == rel2 { + return true; + } + log::info!("Syntax left:\n{}", rel1); + log::info!("Syntax right:\n{}", rel2); + let nom_env = &vector![]; + let eval_nom = |rel: syntax::Relation| -> normal::Relation { + let rel = (&partial::Env::default()).eval(rel); + nom_env.eval(rel) + }; + let rel1 = eval_nom(rel1); + let rel2 = eval_nom(rel2); + log::info!("Normal left:\n{}", rel1); + log::info!("Normal right:\n{}", rel2); + if rel1 == rel2 { + return true; + } + let config = Config::new(); let z3_ctx = &Context::new(&config); let ctx = Rc::new(Ctx::new(Solver::new(z3_ctx))); - let uexpr_subst = vector![]; - let z3_subst = vector![]; let h_ops = Rc::new(RefCell::new(HashMap::new())); + let agg_ops = Rc::new(RefCell::new(HashMap::new())); let rel_h_ops = Rc::new(RefCell::new(HashMap::new())); - let env = &stable::Env(uexpr_subst, 0, Z3Env(ctx, z3_subst, h_ops, rel_h_ops)); - let stb = env.eval(nom); - let nom = nom_env.eval(stb); - log::info!("Stable:\n{}", nom); - nom -} - -pub fn unify(rel1: normal::Relation, rel2: normal::Relation) -> bool { - let mut config = Config::new(); - config.set_timeout_msec(4000); - let z3_ctx = Context::new(&config); - let ctx = Rc::new(Ctx::new(Solver::new(&z3_ctx))); - let subst1 = vector![]; - let subst2 = vector![]; - let env = UnifyEnv(ctx, subst1, subst2); + let eval_stb = |nom: normal::Relation| -> normal::Relation { + let env = &stable::Env(vector![], { + let subst = vector![]; + Z3Env(ctx.clone(), subst, h_ops.clone(), agg_ops.clone(), rel_h_ops.clone()) + }); + let stb = env.eval(nom); + nom_env.eval(stb) + }; + let rel1 = eval_stb(rel1); + let rel2 = eval_stb(rel2); + log::info!("Stable left:\n{}", rel1); + log::info!("Stable right:\n{}", rel2); + if rel1 == rel2 { + return true; + } + let env = UnifyEnv(ctx, vector![], vector![]); env.unify(&rel1, &rel2) } diff --git a/src/pipeline/normal.rs b/src/pipeline/normal.rs index 4501fc9..4deb59d 100644 --- a/src/pipeline/normal.rs +++ b/src/pipeline/normal.rs @@ -7,64 +7,86 @@ use std::rc::Rc; use anyhow::bail; use imbl::{vector, HashSet, Vector}; use indenter::indented; -use itertools::{Either, Itertools}; +use itertools::Itertools; use num::ToPrimitive; use z3::ast::{exists_const, Ast, Bool, Dynamic, Int, Real as Re, String as Str}; use z3::{Config, Context, Solver}; -use super::shared::{Ctx, Lambda}; -use super::stable; +use super::shared::{Ctx, Lambda, Sigma, Typed}; +use super::stable::{self, stablize}; use super::unify::{Unify, UnifyEnv}; -use crate::pipeline::shared::{DataType, Eval, Head, Schema, Terms, VL}; +use crate::pipeline::relation::num_op; +use crate::pipeline::shared::{DataType, Eval, Neutral as Neut, Terms, VL}; use crate::pipeline::{partial, shared}; pub type Relation = Lambda; -pub type Expr = shared::Expr; -pub type Neutral = shared::Neutral; -#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)] -pub struct LogicRel(pub Vector, pub Box); -pub type Logic = shared::Logic; +pub type Expr = shared::Expr; +pub type Neutral = shared::Neutral; +pub type Head = shared::Head; +pub type Logic = shared::Logic; +pub type Term = Sigma; pub type UExpr = Terms; impl UExpr { pub fn under(scope: Vector, terms: UExpr) -> Self { - terms.into_iter().map(|term| Term { scope: scope.clone() + term.scope, ..term }).collect() + terms.into_iter().map(|term| Sigma(scope.clone() + term.0, term.1)).collect() + } +} + +#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)] +pub struct Aggr(pub String, pub Vector, pub Box, pub Box); + +impl Display for Aggr { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let Aggr(name, scope, uexpr, expr) = self; + write!(f, "⨿{} {:?} {{", name, scope)?; + writeln!(indented(f).with_str("\t"), "{},", uexpr)?; + writeln!(indented(f).with_str("\t"), "{}", expr)?; + write!(f, "}}") + } +} + +impl Typed for Aggr { + fn ty(&self) -> DataType { + self.3.ty() + } +} + +impl Aggr { + pub fn under(scope: Vector, aggs: Vector) -> Vector { + aggs.into_iter().map(|Aggr(op, scp, u, e)| Aggr(op, scope.clone() + scp, u, e)).collect() } } #[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)] -pub struct Term { - pub scope: Vector, +pub struct Inner { pub logic: Logic, pub apps: Vector, } -impl Term { - pub fn app(app: Neutral) -> Self { - Term { scope: vector![], logic: Logic::And(vector![]), apps: vector![app] } +impl Display for Inner { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "⟦{}⟧ × ({})", self.logic, self.apps.iter().format(" × ")) } } -impl Display for LogicRel { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - writeln!(f, "{:?} {{", self.0)?; - writeln!(indented(f).with_str("\t"), "{}", self.1)?; - write!(f, "}}") +impl Inner { + pub(crate) fn in_scope(&self, lvl: usize) -> bool { + self.logic.in_scope(lvl) && self.apps.iter().all(|app| app.in_scope(lvl)) } } -impl Display for Term { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - writeln!(f, "∑ {:?} {{", self.scope)?; - writeln!( - indented(f).with_str("\t"), - "⟦{}⟧ × {}", - self.logic, - self.apps.iter().format(" × ") - )?; - write!(f, "}}") +impl Aggr { + pub(crate) fn deps(&self, vars: &Range) -> HashSet { + let Aggr(_, _, u, e) = self; + e.deps(vars) + u.logic.deps(vars) + HashSet::unions(u.apps.iter().map(|app| app.deps(vars))) + } + + pub(crate) fn in_scope(&self, lvl: usize) -> bool { + let Aggr(_, scope, u, e) = self; + u.in_scope(lvl + scope.len()) && e.in_scope(lvl + scope.len()) } } @@ -73,6 +95,8 @@ impl Expr { match self { Expr::Var(v, _) if vars.contains(&v.0) => HashSet::unit(*v), Expr::Var(_, _) => HashSet::new(), + Expr::Log(l) => l.deps(vars), + Expr::Agg(agg) => agg.deps(vars), Expr::Op(_, args, _) => HashSet::unions(args.iter().map(|arg| arg.deps(vars))), Expr::HOp(_, args, rel, _) => { HashSet::unions(args.iter().map(|arg| arg.deps(vars))) + rel.deps(vars) @@ -83,53 +107,110 @@ impl Expr { pub(crate) fn in_scope(&self, lvl: usize) -> bool { match self { Expr::Var(VL(l), _) => *l < lvl, + Expr::Log(l) => l.in_scope(lvl), + Expr::Agg(agg) => agg.in_scope(lvl), Expr::Op(_, args, _) => args.iter().all(|arg| arg.in_scope(lvl)), Expr::HOp(_, args, rel, _) => { args.iter().all(|arg| arg.in_scope(lvl)) && rel.in_scope(lvl) }, } } + + fn exprs(&self) -> Vector<&Expr> { + match self { + Expr::Log(l) => l.exprs(), + Expr::Op(op, es, ty) + if matches!( + op.as_str(), + "=" | "EQ" | "<=" | "LE" | "<" | "LT" | ">=" | "GE" | ">" | "GT" + ) && es.len() == 2 && ty == &DataType::Boolean => + { + es.iter().collect() + }, + Expr::Op(_, es, _) | Expr::HOp(_, es, _, _) => { + es.iter().flat_map(Expr::exprs).collect() + }, + _ => vector![], + } + } +} + +impl UExpr { + fn deps(&self, vars: &Range) -> HashSet { + HashSet::unions(self.iter().map(|t| t.deps(vars))) + } + + fn in_scope(&self, lvl: usize) -> bool { + self.iter().all(|t| t.in_scope(lvl)) + } + + fn exprs(&self) -> Vector<&Expr> { + self.iter().flat_map(Term::exprs).collect() + } } impl Relation { fn deps(&self, vars: &Range) -> HashSet { - HashSet::unions(self.1.iter().map(|t| t.deps(vars))) + self.1.deps(vars) } fn in_scope(&self, lvl: usize) -> bool { let Lambda(scope, body) = self; - body.iter().all(|t| t.in_scope(lvl + scope.len())) + body.in_scope(lvl + scope.len()) + } + + fn exprs(&self) -> Vector<&Expr> { + self.1.exprs() } } impl Term { fn deps(&self, vars: &Range) -> HashSet { - self.logic.deps(vars) + HashSet::unions(self.apps.iter().map(|app| app.deps(vars))) + let Sigma(_, Inner { logic, apps }) = self; + logic.deps(vars) + HashSet::unions(apps.iter().map(|app| app.deps(vars))) } fn in_scope(&self, lvl: usize) -> bool { - let lvl = lvl + self.scope.len(); - self.logic.in_scope(lvl) && self.apps.iter().all(|app| app.in_scope(lvl)) + let Sigma(scope, Inner { logic, apps }) = self; + let lvl = lvl + scope.len(); + logic.in_scope(lvl) && apps.iter().all(|app| app.in_scope(lvl)) + } + + fn exprs(&self) -> Vector<&Expr> { + let Sigma(_, Inner { logic, apps }) = self; + logic.exprs() + apps.iter().flat_map(Neutral::exprs).collect() } } impl Neutral { fn deps(&self, vars: &Range) -> HashSet { - (match &self.head { + let Neut(head, args) = self; + (match &head { Head::Var(_) => HashSet::new(), Head::HOp(_, args, rel) => { rel.deps(vars) + HashSet::unions(args.iter().map(|arg| arg.deps(vars))) }, - }) + HashSet::unions(self.args.iter().map(|arg| arg.deps(vars))) + }) + HashSet::unions(args.iter().map(|arg| arg.deps(vars))) } fn in_scope(&self, lvl: usize) -> bool { - (match &self.head { + let Neut(head, args) = self; + (match &head { Head::Var(_) => true, Head::HOp(_, args, rel) => { args.iter().all(|arg| arg.in_scope(lvl)) && rel.in_scope(lvl) }, - }) && self.args.iter().all(|arg| arg.in_scope(lvl)) + }) && args.iter().all(|arg| arg.in_scope(lvl)) + } + + fn exprs(&self) -> Vector<&Expr> { + let Neut(head, args) = self; + (match &head { + Head::Var(_) => vector![], + Head::HOp(_, args, rel) => { + args.iter().flat_map(Expr::exprs).chain(rel.exprs()).collect() + }, + }) + args.iter().flat_map(Expr::exprs).collect() } } @@ -142,8 +223,7 @@ impl Logic { Pred(_, args) => HashSet::unions(args.iter().map(|arg| arg.deps(vars))), Neg(l) => l.deps(vars), And(ls) | Or(ls) => HashSet::unions(ls.iter().map(|l| l.deps(vars))), - App(app) => app.deps(vars), - Exists(LogicRel(_, l)) => l.deps(vars), + Squash(u) => u.deps(vars), } } @@ -155,122 +235,76 @@ impl Logic { Pred(_, args) => args.iter().all(|arg| arg.in_scope(lvl)), Neg(l) => l.in_scope(lvl), And(ls) | Or(ls) => ls.iter().all(|l| l.in_scope(lvl)), - App(app) => app.in_scope(lvl), - Exists(LogicRel(scope, l)) => l.in_scope(lvl + scope.len()), - } - } - - fn is_tt(&self) -> bool { - use shared::Logic::*; - match self { - Eq(e1, e2) if e1 == e2 => true, - And(ls) if ls.is_empty() => true, - Neg(l) if l.is_ff() => true, - _ => false, + Squash(u) => u.in_scope(lvl), } } - fn is_ff(&self) -> bool { + fn simpl(self) -> Self { use shared::Logic::*; match self { - Or(ls) if ls.is_empty() => true, - Neg(l) if l.is_tt() => true, - _ => false, - } - } - - fn norm(self) -> Logic { - use shared::Logic::*; - match self { - l if l.is_tt() => Logic::tt(), - l if l.is_ff() => Logic::ff(), - And(ls) => { - let ls = ls.into_iter().flat_map(|l| match l { + Eq(e1, e2) if e1 == e2 => Logic::tt(), + Bool(Expr::Op(p, es, _)) if p == "=" && es.len() == 2 && es[0] == es[1] => { + !es[0].clone().is_null() + }, + And(ls) => And(ls + .into_iter() + .flat_map(|l| match l.simpl() { And(ls) => ls, l => vector![l], - }); - And(ls.collect()) - }, - Or(ls) => { - let ls = ls.into_iter().flat_map(|l| match l { + }) + .collect()), + Or(ls) => Or(ls + .into_iter() + .flat_map(|l| match l.simpl() { Or(ls) => ls, l => vector![l], - }); - Or(ls.collect()) - }, + }) + .collect()), + Neg(l) => Neg(l.simpl().into()), l => l, } } + + pub(crate) fn exprs(&self) -> Vector<&Expr> { + use shared::Logic::*; + match self { + Bool(e) => e.exprs(), + Pred(_, es) => es.iter().flat_map(Expr::exprs).collect(), + Eq(e1, e2) => vector![e1, e2] + e1.exprs() + e2.exprs(), + Neg(l) => l.exprs(), + And(ls) => ls.iter().flat_map(Logic::exprs).collect(), + Or(ls) => ls.iter().flat_map(Logic::exprs).collect(), + Squash(u) => u.exprs(), + } + } } -#[derive(Clone)] -pub struct Env(pub Vector, pub Vector); +pub type Env = Vector; -impl Env { - pub fn extend(&self, scope: Vector) -> Env { - Env(self.0.clone() + scope, self.1.clone()) +impl Eval for &Env { + fn eval(self, agg: partial::Aggr) -> Expr { + use shared::Expr::*; + let op = agg.0.clone(); + let ty = agg.ty(); + let es = Agg(agg).split(&op, self).into_iter().map(|(scp, l, apps, e)| { + let env = &(self + &scp); + let inner = Inner { logic: env.eval(l), apps: env.eval(apps) }; + Agg(Aggr(op.clone(), scp, Box::new(inner), Box::new(env.eval(e)))) + }); + Op(op.clone(), es.collect(), ty) } } impl Eval for &Env { fn eval(self, source: partial::UExpr) -> UExpr { - source.into_iter().flat_map(|t| helper(self, t, vector![])).collect() - } -} - -fn helper(env: &Env, mut term: partial::Term, apps: Vector) -> UExpr { - let Env(context, schemas) = env; - if let Some(summand) = term.sums.pop_front() { - let scope = summand.scope(schemas); - let vars = shared::Expr::vars(context.len(), scope.clone()); - let env = &env.extend(scope.clone()); - let body = (summand.app(vars) * term) + source .into_iter() - .flat_map(|t| helper(env, t, apps.clone())) - .collect(); - UExpr::under(scope, body) - } else if let Some(app) = term.apps.pop_front() { - match app.head.app(app.args, env) { - Either::Left(app) => helper(env, term, apps + vector![app]), - Either::Right(uexpr) => { - (uexpr * term).into_iter().flat_map(|t| helper(env, t, apps.clone())).collect() - }, - } - } else { - UExpr::term(Term { scope: vector![], logic: env.eval(term.logic), apps: env.eval(apps) }) - } -} - -impl Eval for &Env { - fn eval(self, app: partial::Neutral) -> Logic { - match app.head.app_logic(app.args, self) { - Either::Left(app) => Logic::App(self.eval(app)), - Either::Right(logic) => self.eval(logic), - } - } -} - -impl Eval for &Env { - fn eval(self, source: partial::LogicRel) -> LogicRel { - use partial::LogicRel::*; - let Env(context, schemas) = self; - let scope = source.scope(schemas); - let env = &self.extend(scope.clone()); - let vars = shared::Expr::vars(context.len(), scope.clone()); - LogicRel( - scope, - Box::new(match source { - Rigid(head) => match head.app_logic(vars, env) { - Either::Left(app) => env.eval(app), - Either::Right(logic) => env.eval(logic), - }, - Lam(scope, clos_env, body) => { - let vars = shared::Expr::vars(context.len(), scope.clone()); - let body: partial::Logic = (&clos_env.append(vars)).eval(body); - env.eval(body) - }, - }), - ) + .flat_map(|t| t.split(self)) + .map(|(scp, l, apps)| { + let env = &(self + &scp); + Sigma(scp, Inner { logic: env.eval(l), apps: env.eval(apps) }) + }) + .collect() } } @@ -282,89 +316,67 @@ impl Eval<(VL, DataType), Expr> for &Env { impl Eval for &Env { fn eval(self, source: partial::Relation) -> Relation { - use partial::Relation::*; - let Env(context, schemas) = self; - let scope = source.scope(schemas); - let env = &self.extend(scope.clone()); - let vars = shared::Expr::vars(context.len(), scope.clone()); - Lambda(scope, match source { - Rigid(head) => match head.app(vars, env) { - Either::Left(app) => UExpr::term(Term::app(env.eval(app))), - Either::Right(uexpr) => env.eval(uexpr), - }, - Lam(scope, clos_env, body) => { - let vars = shared::Expr::vars(context.len(), scope.clone()); - let body: partial::UExpr = (&clos_env.append(vars)).eval(body); - env.eval(body) - }, - }) + let partial::Relation(scope, clos_env, body) = source; + let env = &(self + &scope); + let vars = shared::Expr::vars(self.len(), scope.clone()); + let body: partial::UExpr = (&clos_env.append(vars)).eval(body); + Lambda(scope, env.eval(body)) } } impl<'c> Eval, Relation> for &Env { fn eval(self, stable::Relation(scope, env, body): stable::Relation<'c>) -> Relation { - let lvl = self.0.len(); - let body = (&env.extend(lvl, scope.clone())).eval(body); - Lambda(scope.clone(), (&self.extend(scope)).eval(body)) + let body = (&env.extend(self.len(), scope.clone())).eval(body); + Lambda(scope.clone(), (&(self + &scope)).eval(body)) } } impl<'c> Eval, UExpr> for &Env { fn eval(self, source: stable::UExpr<'c>) -> UExpr { - source.into_iter().map(|t| self.eval(t)).collect() - } -} - -impl<'c> Eval, Term> for &Env { - fn eval(self, source: stable::Term<'c>) -> Term { - let scope = source.scope; - let env = &self.extend(scope.clone()); - let logic = env.eval(source.logic); - let apps = env.eval(source.apps); - Term { scope, logic, apps } + source.into_iter().filter_map(|t| self.eval(t)).collect() } } -impl<'c> Eval, Logic> for &Env { - fn eval(self, source: stable::Logic<'c>) -> Logic { - use shared::Logic::*; - match source { - Bool(e) => Bool(self.eval(e)), - Eq(e1, e2) => Eq(self.eval(e1), self.eval(e2)), - Pred(p, args) => Pred(p, self.eval(args)), - Neg(l) => Neg(self.eval(l)), - And(ls) => And(self.eval(ls)), - Or(ls) => Or(self.eval(ls)), - App(app) => self.eval(app), - Exists(stable::LogicRel(scope, env, body)) => { - let body = (&env.extend(self.0.len(), scope.clone())).eval(body); - Exists(LogicRel(scope.clone(), Box::new((&self.extend(scope)).eval(body)))) - }, - } - .norm() +impl<'c> Eval, Option> for &Env { + fn eval(self, stable::Term(scope, clos_env, inner): stable::Term<'c>) -> Option { + let (new_scope, new_subst) = stablize(&clos_env, scope.clone(), self, inner.logic.clone())?; + let stable::Env(subst, z3_env) = clos_env; + let clos_env = &stable::Env(subst + new_subst, z3_env.extend(&scope)); + let env = &(self + &new_scope); + let logic = env.eval(clos_env.eval(inner.logic)).simpl(); + let apps = env.eval(clos_env.eval(inner.apps)); + Some(Sigma(new_scope, Inner { logic, apps })) } } -impl<'c> Eval, Logic> for &Env { - fn eval(self, source: stable::Neutral<'c>) -> Logic { - Logic::App(self.eval(source)) +impl<'c> Eval, Expr> for &Env { + fn eval(self, agg: stable::Aggr<'c>) -> Expr { + use shared::Expr::*; + let op = agg.0.clone(); + let ty = agg.ty(); + let es = Agg(agg).split(&op, self).into_iter().map(|(scp, l, apps, e)| { + let env = &(self + &scp); + let inner = Inner { logic: env.eval(l), apps: env.eval(apps) }; + Agg(Aggr(op.clone(), scp, Box::new(inner), Box::new(env.eval(e)))) + }); + Op(op.clone(), es.collect(), ty) } } -impl Unify for &Env { - fn unify(self, t1: partial::UExpr, t2: partial::UExpr) -> bool { - let Env(context, _) = self; - let t1: UExpr = self.eval(t1); - let t2: UExpr = self.eval(t2); +impl Unify for Env { + fn unify(&self, t1: &partial::UExpr, t2: &partial::UExpr) -> bool { + let t1: UExpr = self.eval(t1.clone()); + let t2: UExpr = self.eval(t2.clone()); let config = Config::new(); let z3_ctx = Context::new(&config); let ctx = Rc::new(Ctx::new(Solver::new(&z3_ctx))); let h_ops = Rc::new(RefCell::new(HashMap::new())); + let agg_ops = Rc::new(RefCell::new(HashMap::new())); let rel_h_ops = Rc::new(RefCell::new(HashMap::new())); - let uexpr_subst = shared::Expr::vars(0, context.clone()).into_iter().map(Some).collect(); - let z3_subst: Vector<_> = context.iter().map(|ty| ctx.var(ty, "v")).collect(); + let subst = shared::Expr::vars(0, self.clone()).into_iter().map(Some).collect(); + let z3_subst: Vector<_> = self.iter().map(|ty| ctx.var(ty, "v")).collect(); let env = - &stable::Env(uexpr_subst, 0, Z3Env(ctx.clone(), z3_subst.clone(), h_ops, rel_h_ops)); + &stable::Env(subst, Z3Env(ctx.clone(), z3_subst.clone(), h_ops, agg_ops, rel_h_ops)); let t1 = env.eval(t1); let t2 = env.eval(t2); let t1: UExpr = self.eval(t1); @@ -379,49 +391,92 @@ pub type HOpMap<'c> = HashMap<(String, Vec, Relation, Vector>) pub type RelHOpMap<'c> = HashMap<(String, Vec, Relation, Vector>, bool), (String, Vec)>; +pub type AggMap<'c> = + HashMap<(String, Lambda<(Inner, Vec)>, Vector>), Dynamic<'c>>; + #[derive(Clone)] pub struct Z3Env<'c>( pub Rc>, pub Vector>, pub Rc>>, + pub Rc>>, pub Rc>>, ); impl<'c> Z3Env<'c> { pub fn extend(&self, scope: &Vector) -> Self { let vars = scope.into_iter().map(|ty| self.0.var(ty, "v")).collect(); - Z3Env(self.0.clone(), self.1.clone() + vars, self.2.clone(), self.3.clone()) + Z3Env(self.0.clone(), self.1.clone() + vars, self.2.clone(), self.3.clone(), self.4.clone()) + } + + pub fn extend_vals(&self, vals: &Vector>) -> Self { + Z3Env(self.0.clone(), &self.1 + vals, self.2.clone(), self.3.clone(), self.4.clone()) } pub fn extend_vars(&self, scope: &Vector) -> (Z3Env<'c>, Vector>) { let vars = scope.into_iter().map(|ty| self.0.var(ty, "v")).collect(); - (Z3Env(self.0.clone(), &self.1 + &vars, self.2.clone(), self.3.clone()), vars) + ( + Z3Env(self.0.clone(), &self.1 + &vars, self.2.clone(), self.3.clone(), self.4.clone()), + vars, + ) } } impl<'c> Eval<&Logic, Bool<'c>> for &Z3Env<'c> { fn eval(self, source: &Logic) -> Bool<'c> { use shared::Logic::*; - let Z3Env(ctx, _, _, _) = self; + let Z3Env(ctx, _, _, _, _) = self; let z3_ctx = ctx.z3_ctx(); match source { - Bool(e) => self.0.bool_is_true(&self.eval(e)), - Eq(e1, e2) => self.eval(e1)._eq(&self.eval(e2)), + Bool(e) => ctx.bool_is_true(&self.eval(e)), + Eq(e1, e2) => { + assert_eq!(e1.ty(), e2.ty(), "{} and {} have different types", e1, e2); + self.eval(e1)._eq(&self.eval(e2)) + }, Pred(p, args) => { let args = args.iter().map(|arg| self.eval(arg)).collect_vec(); let args = args.iter().collect_vec(); - self.0.app(p, &args, &DataType::Boolean, false).as_bool().unwrap() + ctx.app(p, &args, &DataType::Boolean, false).as_bool().unwrap() }, Neg(l) => self.eval(l.as_ref()).not(), And(ls) => z3::ast::Bool::and(z3_ctx, &self.eval(ls).iter().collect_vec()), Or(ls) => z3::ast::Bool::or(z3_ctx, &self.eval(ls).iter().collect_vec()), - App(app) => self.eval(app), - Exists(LogicRel(scope, l)) => { - let (ref env, vars) = self.clone().extend_vars(&scope); - let bounds = vars.iter().map(|v| v as &dyn Ast).collect_vec(); - let body = env.eval(l.as_ref()); - exists_const(z3_ctx, &bounds, &[], &body) - }, + Squash(u) => self.eval(u.as_ref()), + } + } +} + +impl<'c> Eval<&UExpr, Bool<'c>> for &Z3Env<'c> { + fn eval(self, source: &UExpr) -> Bool<'c> { + let terms = source.iter().map(|t| self.eval(t)).collect_vec(); + Bool::or(self.0.z3_ctx(), &terms.iter().collect_vec()) + } +} + +impl<'c> Eval<&Term, Bool<'c>> for &Z3Env<'c> { + fn eval(self, source: &Term) -> Bool<'c> { + let z3_ctx = self.0.z3_ctx(); + let Sigma(scope, body) = source; + let (ref env, vars) = self.extend_vars(scope); + let bounds = vars.iter().map(|v| v as &dyn Ast).collect_vec(); + exists_const(z3_ctx, &bounds, &[], &env.eval(body)) + } +} + +impl<'c> Eval<&Inner, Bool<'c>> for &Z3Env<'c> { + fn eval(self, source: &Inner) -> Bool<'c> { + Bool::and(self.0.z3_ctx(), &[&self.eval(&source.logic), &self.eval(&source.apps)]) + } +} + +impl<'c> Eval<&Vector, Bool<'c>> for &Z3Env<'c> { + fn eval(self, source: &Vector) -> Bool<'c> { + let apps: Vector<_> = self.eval(source); + let z3_ctx = self.0.z3_ctx(); + if apps.is_empty() { + Bool::from_bool(z3_ctx, true) + } else { + Bool::and(z3_ctx, &apps.iter().collect_vec()) } } } @@ -438,8 +493,8 @@ impl<'c> Eval<&Vector, Int<'c>> for &Z3Env<'c> { } } -fn table_name(head: &Head, env: &Z3Env, squashed: bool, domain: Vec) -> String { - let Z3Env(_, subst, _, map) = env; +fn table_name(head: &Head, env: &Z3Env, squashed: bool, domain: Vec) -> String { + let Z3Env(_, subst, _, _, map) = env; match head { Head::Var(VL(l)) => format!("r{}!{}", if squashed { "p" } else { "" }, l), Head::HOp(op, args, rel) => { @@ -455,29 +510,24 @@ fn table_name(head: &Head, env: &Z3Env, squashed: bool, domain: Vec Eval<&Neutral, Bool<'c>> for &Z3Env<'c> { - fn eval(self, source: &Neutral) -> Bool<'c> { - let domain = source.args.iter().map(|a| a.ty()).collect(); - let args = source.args.iter().map(|v| self.eval(v)).collect_vec(); + fn eval(self, shared::Neutral(head, args): &Neutral) -> Bool<'c> { + let domain = args.iter().map(|a| a.ty()).collect(); + let args = args.iter().map(|v| self.eval(v)).collect_vec(); let args = args.iter().collect_vec(); self.0 - .app( - &(table_name(&source.head, self, true, domain) + "p"), - &args, - &DataType::Boolean, - false, - ) + .app(&(table_name(&head, self, true, domain) + "p"), &args, &DataType::Boolean, false) .as_bool() .unwrap() } } impl<'c> Eval<&Neutral, Int<'c>> for &Z3Env<'c> { - fn eval(self, source: &Neutral) -> Int<'c> { - let domain = source.args.iter().map(|a| a.ty()).collect(); - let args = source.args.iter().map(|v| self.eval(v)).collect_vec(); + fn eval(self, shared::Neutral(head, args): &Neutral) -> Int<'c> { + let domain = args.iter().map(|a| a.ty()).collect(); + let args = args.iter().map(|v| self.eval(v)).collect_vec(); let args = args.iter().collect_vec(); self.0 - .app(&table_name(&source.head, self, false, domain), &args, &DataType::Integer, false) + .app(&table_name(&head, self, false, domain), &args, &DataType::Integer, false) .as_int() .unwrap() } @@ -486,7 +536,7 @@ impl<'c> Eval<&Neutral, Int<'c>> for &Z3Env<'c> { impl<'c> Eval<&Expr, Dynamic<'c>> for &Z3Env<'c> { fn eval(self, source: &Expr) -> Dynamic<'c> { use DataType::*; - let Z3Env(ctx, subst, h_ops, _) = self; + let Z3Env(ctx, subst, h_ops, agg_ops, _) = self; let parse = |ctx: &Ctx<'c>, input: &str, ty: &DataType| -> anyhow::Result> { if input.to_lowercase() == "null" { let null = match ty { @@ -516,73 +566,156 @@ impl<'c> Eval<&Expr, Dynamic<'c>> for &Z3Env<'c> { }) }; match source { - Expr::Var(v, _) => subst[v.0].clone(), - Expr::Op(op, args, ty) if args.is_empty() => parse(ctx.as_ref(), op, ty).unwrap(), + Expr::Var(VL(l), _) => subst[*l].clone(), + Expr::Log(l) => ctx.bool_some(self.eval(l.as_ref())), + Expr::Op(op, args, ty) if args.is_empty() && let Ok(exp) = parse(ctx.as_ref(), op, ty) => exp, Expr::Op(op, expr_args, ty) => { let args = expr_args.iter().map(|a| self.eval(a)).collect_vec(); let args = args.iter().collect_vec(); match op.as_str() { - num_op @ ("+" | "-" | "*" | "/" | "%" /*| "POWER" */) if ty == &Integer => { - match num_op { - "+" => ctx.int_add_v(&args), - "-" => ctx.int_sub_v(&args), - "*" => ctx.int_mul_v(&args), - "/" => ctx.int_div(args[0], args[1]), - "%" => ctx.int_modulo(args[0], args[1]), - // "POWER" => ctx.int_power(args[0], args[1]), - _ => unreachable!(), - } + op if num_op(op) && ty == &Integer => match op { + "+" | "PLUS" | "UNARY PLUS" => ctx.int_add_v(&args), + "-" | "MINUS" | "UNARY MINUS" => ctx.int_sub_v(&args), + "*" | "MULT" => ctx.int_mul_v(&args), + "/" | "DIV" => ctx.int_div(args[0], args[1]), + "%" => ctx.int_modulo(args[0], args[1]), + // "POWER" => ctx.int_power(args[0], args[1]), + _ => unreachable!(), }, - num_op @ ("+" | "-" | "*" | "/" /*| "POWER" */) if ty == &Real => match num_op { - "+" => ctx.real_add_v(&args), - "-" => ctx.real_sub_v(&args), - "*" => ctx.real_mul_v(&args), - "/" => ctx.real_div(args[0], args[1]), + op if num_op(op) && ty == &Real => match op { + "+" | "PLUS" | "UNARY PLUS" => ctx.real_add_v(&args), + "-" | "MINUS" | "UNARY MINUS" => ctx.real_sub_v(&args), + "*" | "MULT" => ctx.real_mul_v(&args), + "/" | "DIV" => ctx.real_div(args[0], args[1]), // "POWER" => ctx.real_power(args[0], args[1]), _ => unreachable!(), }, - cmp @ (">" | "<" | ">=" | "<=") if expr_args[0].ty() == Integer => match cmp { - ">" => ctx.int_gt(args[0], args[1]), - "<" => ctx.int_lt(args[0], args[1]), - ">=" => ctx.int_ge(args[0], args[1]), - "<=" => ctx.int_le(args[0], args[1]), - _ => unreachable!(), + cmp @ (">" | "GT" | "<" | "LT" | ">=" | "GE" | "<=" | "LE") + if expr_args[0].ty() == Integer => + { + match cmp { + ">" | "GT" => ctx.int_gt(args[0], args[1]), + "<" | "LT" => ctx.int_lt(args[0], args[1]), + ">=" | "GE" => ctx.int_ge(args[0], args[1]), + "<=" | "LE" => ctx.int_le(args[0], args[1]), + _ => unreachable!(), + } }, - cmp @ (">" | "<" | ">=" | "<=") if expr_args[0].ty() == Real => match cmp { - ">" => ctx.real_gt(args[0], args[1]), - "<" => ctx.real_lt(args[0], args[1]), - ">=" => ctx.real_ge(args[0], args[1]), - "<=" => ctx.real_le(args[0], args[1]), - _ => unreachable!(), + cmp @ (">" | "GT" | "<" | "LT" | ">=" | "GE" | "<=" | "LE") + if expr_args[0].ty() == Real => + { + match cmp { + ">" | "GT" => ctx.real_gt(args[0], args[1]), + "<" | "LT" => ctx.real_lt(args[0], args[1]), + ">=" | "GE" => ctx.real_ge(args[0], args[1]), + "<=" | "LE" => ctx.real_le(args[0], args[1]), + _ => unreachable!(), + } + }, + cmp @ (">" | "GT" | "<" | "LT" | ">=" | "GE" | "<=" | "LE") + if expr_args[0].ty() == String => + { + match cmp { + ">" | "GT" => ctx.string_gt(args[0], args[1]), + "<" | "LT" => ctx.string_lt(args[0], args[1]), + ">=" | "GE" => ctx.string_ge(args[0], args[1]), + "<=" | "LE" => ctx.string_le(args[0], args[1]), + _ => unreachable!(), + } + }, + cmp @ ("=" | "EQ" | "<>" | "!=" | "NE") => { + let (a1, a2) = (args[0], args[1]); + assert_eq!( + a1.get_sort(), + a2.get_sort(), + "{} and {} have different types.", + expr_args[0], + expr_args[1] + ); + let eq = match expr_args[0].ty() { + Integer => ctx.int__eq(a1, a2), + Real => ctx.real__eq(a1, a2), + Boolean => ctx.bool__eq(a1, a2), + String => ctx.string__eq(a1, a2), + Custom(ty) => ctx.generic_eq(ty, a1, a2), + }; + if cmp == "=" || cmp == "EQ" { + eq + } else { + ctx.bool_not(&eq) + } }, - "=" => ctx.bool_some(args[0]._eq(args[1])), - "<>" => ctx.bool_some(args[0]._eq(args[1]).not()), + "NOT" if args.len() == 1 => ctx.bool_not(args[0]), + "AND" => ctx.bool_and_v(&args), + "OR" => ctx.bool_or_v(&args), "CASE" if args.len() % 2 == 1 => { let (chunks, remainder) = args.as_chunks(); chunks.iter().rfold(remainder[0].clone(), |rem, [cond, body]| { ctx.bool_is_true(cond).ite(body, &rem) }) }, - "IS NULL" => { - ctx.bool_some(ctx.none(&expr_args[0].ty()).unwrap()._eq(args[0])) - }, - "IS NOT NULL" => { - ctx.bool_some(ctx.none(&expr_args[0].ty()).unwrap()._eq(args[0]).not()) - }, - "CAST" if ty == &expr_args[0].ty() => { - args[0].clone() + "CASE" if args.len() >= 2 && args.len() % 2 == 0 => { + let input = args[0].clone(); + let (chunks, remainder) = args[1..].as_chunks(); + chunks.iter().rfold(remainder[0].clone(), |rem, [val, body]| { + input._eq(val).ite(body, &rem) + }) }, + "CAST" if ty == &expr_args[0].ty() => args[0].clone(), "CAST" if ty == &Real && expr_args[0].ty() == Integer => { ctx.int_to_real(args[0]) }, - op => ctx.app(&format!("f!{}", op), &args, ty, true), + "CAST" if let Expr::Op(op, args, _) = &expr_args[0] && args.is_empty() + && let Ok(exp) = parse(ctx.as_ref(), op, ty) => exp, + "COUNT" | "SUM" | "MIN" | "MAX" => { + if args.len() == 1 { + args[0].clone() + } else { + ctx.app(&format!("f{}!{}", args.len(), op), &args, ty, true) + } + }, + op => ctx.app(&format!("f!{}", op.replace("'", "\"")), &args, ty, true), } }, + Expr::HOp(f, args, rel, DataType::Boolean) if f == "IN" => { + let z3_ctx = ctx.z3_ctx(); + let (is_nulls, args, nulls): (Vec<_>, _, _) = args + .iter() + .map(|a| { + let null = ctx.none(&a.ty()).unwrap(); + let a = self.eval(a); + (null._eq(&a), a, null) + }) + .multiunzip(); + let Lambda(_, uexpr) = *rel.clone(); + let any_null = Bool::or(z3_ctx, &is_nulls.iter().collect_vec()); + any_null.ite( + &ctx.bool_none(), + &(&self.extend_vals(&args)).eval(&uexpr).ite( + &ctx.bool_some(Bool::from_bool(z3_ctx, true)), + &(&self.extend_vals(&nulls)) + .eval(&uexpr) + .ite(&ctx.bool_none(), &ctx.bool_some(Bool::from_bool(z3_ctx, false))), + ), + ) + }, Expr::HOp(f, args, rel, ty) => h_ops .borrow_mut() .entry((f.clone(), args.clone(), *rel.clone(), subst.clone())) .or_insert_with(|| self.0.var(ty, "h")) .clone(), + Expr::Agg(agg) => { + let Aggr(f, scope, inner, expr) = agg; + agg_ops + .borrow_mut() + .entry(( + f.clone(), + Lambda(scope.clone(), (*inner.clone(), vec![*expr.clone()])), + subst.clone(), + )) + .or_insert_with(|| self.0.var(&expr.ty(), "h")) + .clone() + }, } } } diff --git a/src/pipeline/null.rs b/src/pipeline/null.rs index 5bbbac5..83f4900 100644 --- a/src/pipeline/null.rs +++ b/src/pipeline/null.rs @@ -59,7 +59,10 @@ macro_rules! optional_op { macro_rules! optional_fn { ($ilsort:ident $olsort:ident $name:ident ($($v:ident),* $(,)*)) => { - paste!(pub fn [<$ilsort _ $name>] (&self, $($v: &Dynamic<'c>),*) -> Dynamic<'c> { + paste!( + #[allow(non_snake_case)] + #[allow(dead_code)] + pub fn [<$ilsort _ $name>] (&self, $($v: &Dynamic<'c>),*) -> Dynamic<'c> { let input_sort = &self.$ilsort.sort; let output_sort = &self.$olsort.sort; let func = FuncDecl::new( @@ -121,6 +124,7 @@ ctx_impl!( le(x, y) -> Bool; gt(x, y) -> Bool; ge(x, y) -> Bool; + _eq(x, y) -> Bool; }; Int { add[a, b] -> Int; @@ -135,18 +139,23 @@ ctx_impl!( le(x, y) -> Bool; gt(x, y) -> Bool; ge(x, y) -> Bool; + _eq(x, y) -> Bool; to_real(x) -> Real; }; Bool { not(x) -> Bool; - and[x, y] -> Bool; - or[x, y] -> Bool; + _eq(x, y) -> Bool; }; String { concat[x, y] -> String; contains(x, y) -> Bool; prefix(x, y) -> Bool; suffix(x, y) -> Bool; + lt(x, y) -> Bool; + le(x, y) -> Bool; + gt(x, y) -> Bool; + ge(x, y) -> Bool; + _eq(x, y) -> Bool; }; ); @@ -160,7 +169,7 @@ impl<'c> Ctx<'c> { pub fn int_sub_v(&self, args: &[&Dynamic<'c>]) -> Dynamic<'c> { match *args { [] => self.int_some(Int::from_i64(self.solver.get_context(), 0)), - [arg] => arg.clone(), + [arg] => self.int_unary_minus(arg), [arg, ref args @ ..] => args.iter().fold(arg.clone(), |a, b| self.int_sub(&a, b)), } } @@ -181,7 +190,7 @@ impl<'c> Ctx<'c> { pub fn real_sub_v(&self, args: &[&Dynamic<'c>]) -> Dynamic<'c> { match *args { [] => self.real_some(Real::from_real(self.solver.get_context(), 0, 1)), - [arg] => arg.clone(), + [arg] => self.real_unary_minus(arg), [arg, ref args @ ..] => args.iter().fold(arg.clone(), |a, b| self.real_sub(&a, b)), } } @@ -197,9 +206,87 @@ impl<'c> Ctx<'c> { let ctx = self.solver.get_context(); self.bool.variants[0].tester.apply(&[expr]).as_bool().unwrap().ite( &Bool::from_bool(ctx, false), - &self.bool.variants[1].accessors[0] - .apply(&[expr]) - ._eq(&Bool::from_bool(ctx, true).into()), + &self.bool.variants[1].accessors[0].apply(&[expr]).as_bool().unwrap(), + ) + } + + pub fn bool_and_v(&self, args: &[&Dynamic<'c>]) -> Dynamic<'c> { + args.iter() + .fold(self.bool_some(Bool::from_bool(self.solver.get_context(), true)), |a, b| { + self.bool_and(&a, b) + }) + } + + pub fn bool_or_v(&self, args: &[&Dynamic<'c>]) -> Dynamic<'c> { + args.iter() + .fold(self.bool_some(Bool::from_bool(self.solver.get_context(), false)), |a, b| { + self.bool_or(&a, b) + }) + } + + pub fn bool_and(&self, e1: &Dynamic<'c>, e2: &Dynamic<'c>) -> Dynamic<'c> { + let ctx = self.solver.get_context(); + self.bool.variants[0].tester.apply(&[e1]).as_bool().unwrap().ite( + // NULL, b + &self.bool.variants[0].tester.apply(&[e2]).as_bool().unwrap().ite( + // NULL, NULL + e2, + // NULL, Some(b) + &self.bool.variants[1].accessors[0].apply(&[e2]).as_bool().unwrap().ite( + // NULL, Some(True) + &self.bool_none(), + // NULL, Some(False) + e2, + ), + ), + // Some(a), b + &self.bool.variants[1].accessors[0].apply(&[e1]).as_bool().unwrap().ite( + // Some(True), b + e2, + // Some(False), b + &self.bool_some(Bool::from_bool(ctx, false)), + ), + ) + } + + pub fn bool_or(&self, e1: &Dynamic<'c>, e2: &Dynamic<'c>) -> Dynamic<'c> { + let ctx = self.solver.get_context(); + self.bool.variants[0].tester.apply(&[e1]).as_bool().unwrap().ite( + // NULL, b + &self.bool.variants[0].tester.apply(&[e2]).as_bool().unwrap().ite( + // NULL, NULL + e2, + // NULL, Some(b) + &self.bool.variants[1].accessors[0].apply(&[e2]).as_bool().unwrap().ite( + // NULL, Some(True) + e2, + // NULL, Some(False) + &self.bool_none(), + ), + ), + // Some(a), b + &self.bool.variants[1].accessors[0].apply(&[e1]).as_bool().unwrap().ite( + // Some(True), b + &self.bool_some(Bool::from_bool(ctx, true)), + // Some(False), b + e2, + ), + ) + } + + pub fn generic_none(&self, ty: impl ToString) -> Dynamic<'c> { + Dynamic::new_const( + self.solver.get_context(), + format!("null!{}", ty.to_string()), + &self.generic_sort(ty), + ) + } + + pub fn generic_eq(&self, ty: impl ToString, e1: &Dynamic<'c>, e2: &Dynamic<'c>) -> Dynamic<'c> { + let none = self.generic_none(ty); + none._eq(e1).ite( + &self.bool_none(), + &none._eq(e2).ite(&self.bool_none(), &self.bool_some(e1._eq(e2))), ) } } diff --git a/src/pipeline/partial.rs b/src/pipeline/partial.rs index 22cf1e3..27bedf4 100644 --- a/src/pipeline/partial.rs +++ b/src/pipeline/partial.rs @@ -1,108 +1,36 @@ use std::ops::Mul; use imbl::{vector, Vector}; -use itertools::Either; -use super::shared::Schema; -use crate::pipeline::shared::{DataType, Eval, Terms, VL}; +use super::shared::{Lambda, Schema}; +use crate::pipeline::shared::{DataType, Eval, Neutral as Neut, Terms, Typed, VL}; use crate::pipeline::unify::Unify; use crate::pipeline::{normal, shared, syntax}; -pub type Expr = shared::Expr; -pub type Head = shared::Head; -pub type Neutral = shared::Neutral; -pub type Logic = shared::Logic; - -impl Head { - pub fn app(self, args: Vector, env: &normal::Env) -> Either { - use shared::Head::*; - match self { - HOp(op, args, _) if op == "limit" && args[0] == 0u32.into() => { - Either::Right(UExpr::zero()) - }, - HOp(op, h_args, rel) - if ((op == "limit" && h_args[0] == 1u32.into()) && rel.degen(env)) - || (op == "offset" && h_args[0] == 0u32.into()) => - { - Either::Right(rel.app(args)) - }, - _ => Either::Left(Neutral::new(self, args)), - } - } - - pub fn app_logic(self, args: Vector, env: &normal::Env) -> Either { - use shared::Head::*; - match self { - HOp(op, args, _) if op == "limit" && args[0] == 0u32.into() => { - Either::Right(Logic::ff()) - }, - HOp(op, h_args, rel) - if ((op == "limit" && h_args[0] == 1u32.into()) && rel.degen(env)) - || (op == "offset" && h_args[0] == 0u32.into()) => - { - Either::Right(rel.app_logic(args)) - }, - _ => Either::Left(Neutral::new(self, args)), - } - } -} - #[derive(Debug, Clone, Eq, PartialEq)] -pub enum Relation { - Rigid(Head), - Lam(Vector, Env, syntax::UExpr), -} - +pub struct Relation(pub Vector, pub Env, pub syntax::UExpr); #[derive(Debug, Clone, Eq, PartialEq)] -pub enum LogicRel { - Rigid(Head), - Lam(Vector, Env, syntax::Logic), -} +pub struct Aggr(pub String, pub Vector, pub Env, pub syntax::UExpr, pub syntax::Expr); +pub type Expr = shared::Expr; +pub type Logic = shared::Logic; +pub type Head = shared::Head; +pub type Neutral = shared::Neutral; -impl LogicRel { - pub fn scope(&self, schemas: &Vector) -> Vector { - use LogicRel::*; - match self { - Rigid(Head::Var(l)) => schemas[l.0].types.clone().into(), - Rigid(Head::HOp(_, _, rel)) => rel.scope(schemas), - Lam(scopes, _, _) => scopes.clone(), - } +impl Typed for Aggr { + fn ty(&self) -> DataType { + self.4.ty() } } impl Relation { pub fn app(self, args: Vector) -> UExpr { - use Relation::*; - match self { - Rigid(head) => UExpr::apply(head, args), - Lam(_, env, body) => (&env.append(args)).eval(body), - } + let Relation(_, env, body) = self; + (&env.append(args)).eval(body) } - pub fn app_logic(self, args: Vector) -> Logic { - use Relation::*; - match self { - Rigid(head) => Logic::App(Neutral::new(head, args)), - Lam(_, env, body) => (&env.append(args)).eval(body.as_logic()), - } - } - - pub fn scope(&self, schemas: &Vector) -> Vector { - use Relation::*; - match self { - Rigid(Head::Var(l)) => schemas[l.0].types.clone().into(), - Rigid(Head::HOp(_, _, rel)) => rel.scope(schemas), - Lam(scopes, _, _) => scopes.clone(), - } - } - - fn degen(&self, env: &normal::Env) -> bool { - use Relation::*; - let lrel = match self.clone() { - Rigid(head) => LogicRel::Rigid(head), - Lam(scope, env, body) => LogicRel::Lam(scope, env, body.as_logic()), - }; - env.unify(UExpr::sum(self.clone()), UExpr::logic(Logic::Exists(lrel))) + pub fn degen(&self, env: &normal::Env) -> bool { + let sum = UExpr::sum(self.clone()); + env.unify(&sum.clone(), &UExpr::logic(Logic::squash(sum))) } } @@ -118,8 +46,8 @@ impl UExpr { UExpr::term(Term { sums: vector![summand], ..Term::default() }) } - pub fn apply(head: Head, args: Vector) -> Self { - UExpr::term(Term { apps: vector![Neutral { head, args }], ..Term::default() }) + pub fn neutral(head: Head, args: Vector) -> Self { + UExpr::term(Term { apps: vector![Neut(head, args)], ..Term::default() }) } } @@ -147,6 +75,82 @@ impl Mul for Term { } } +pub type NormAgg = (Vector, Logic, Vector, Expr); + +impl Expr { + pub fn split(self, aop: &str, context: &Vector) -> Vector { + match self { + Expr::Op(op, args, _) if op == aop => { + args.into_iter().flat_map(|arg| arg.split(aop, context)).collect() + }, + Expr::Agg(Aggr(op, scope, env, u, e)) if op == aop => { + let vars = shared::Expr::vars(context.len(), scope.clone()); + let env = &env.append(vars); + let e = env.eval(e); + let context = &(context + &scope); + env.eval(u) + .into_iter() + .flat_map(|t| t.split(context)) + .flat_map(|(scp1, l1, apps1)| { + let scope = &scope; + e.clone().split(aop, &(context + &scp1)).into_iter().map( + move |(scp2, l2, apps2, e)| { + ( + scope + &scp1 + scp2, + Logic::And(vector![l1.clone(), l2]), + &apps1 + &apps2, + e, + ) + }, + ) + }) + .collect() + }, + _ => vector![(vector![], Logic::tt(), vector![], self)], + } + } +} + +pub type NormTerm = (Vector, Logic, Vector); + +impl Term { + pub fn split(self, context: &Vector) -> Vector { + self.splitter(context, vector![]) + } + + fn splitter(mut self, context: &Vector, apps: Vector) -> Vector { + if let Some(app) = self.apps.pop_front() { + match app.0 { + Head::HOp(op, args, _) if op == "limit" && args[0] == 0u32.into() => vector![], + Head::HOp(op, h_args, rel) + if ((op == "limit" && h_args[0] == 1u32.into()) && rel.degen(&context)) + || (op == "offset" && h_args[0] == 0u32.into()) => + { + (rel.app(app.1.clone()) * self) + .into_iter() + .flat_map(|t| t.splitter(context, apps.clone())) + .collect() + }, + _ => self.splitter(context, apps + vector![app]), + } + } else if let Some(summand) = self.sums.pop_front() { + let scope = summand.0.clone(); + let vars = shared::Expr::vars(context.len(), scope.clone()); + let context = &(context + &scope); + (summand.app(vars) * self) + .into_iter() + .flat_map(|t| { + t.splitter(context, apps.clone()) + .into_iter() + .map(|(s, l, a)| (&scope + &s, l, a)) + }) + .collect() + } else { + vector![(vector![], self.logic, apps)] + } + } +} + #[derive(Clone, Debug, Default, Eq, PartialEq)] pub struct Env(Vector, Vector); @@ -166,28 +170,12 @@ impl Eval for &Env { match source { Add(us) => us.into_iter().flat_map(|u| self.eval(u)).collect(), Mul(us) => us.into_iter().map(|u| self.eval(u)).fold(UExpr::one(), UExpr::mul), - u @ (Squash(_) | Not(_)) => UExpr::logic(self.eval(u.as_logic())), - Sum(scopes, body) => UExpr::sum(Relation::Lam(scopes, self.clone(), *body)), - Pred(logic) => UExpr::logic(self.eval(logic)), - App(table, args) => { - let rel: Relation = self.eval(table); - rel.app(self.eval(args)) - }, - } - } -} - -impl Eval for &Env { - fn eval(self, syntax::Application(table, args): syntax::Application) -> Logic { - use syntax::Relation::*; - let args = self.eval(args); - match table { - Var(l) => Logic::App(Neutral::new(Head::Var(l), args)), - Lam(_, body) => (&self.append(args)).eval(body.as_logic()), - HOp(op, hop_args, rel) => { - let head = Head::HOp(op, self.eval(hop_args), self.eval(rel)); - Logic::App(Neutral::new(head, args)) - }, + Squash(u) => UExpr::logic(Logic::squash(self.eval(*u))), + Not(u) => UExpr::logic(!Logic::squash(self.eval(*u))), + Sum(scope, body) => UExpr::sum(Relation(scope, self.clone(), *body)), + Pred(logic) => UExpr::logic(self.eval(*logic)), + App(table, args) => self.eval(*table).app(self.eval(args)), + Neu(Neut(head, args)) => UExpr::neutral(self.eval(head), self.eval(args)), } } } @@ -199,28 +187,14 @@ impl Eval<(VL, DataType), Expr> for &Env { } } -impl Eval for &Env { - fn eval(self, source: syntax::Relation) -> Relation { - use syntax::Relation::*; - match source { - Var(t) => Relation::Rigid(Head::Var(t)), - HOp(name, args, rel) => { - Relation::Rigid(Head::HOp(name, self.eval(args), self.eval(rel))) - }, - Lam(scopes, body) => Relation::Lam(scopes, self.clone(), *body), - } +impl Eval for &Env { + fn eval(self, syntax::Aggr(op, scope, u, e): syntax::Aggr) -> Expr { + Expr::Agg(Aggr(op, scope, self.clone(), u, *e)) } } -impl Eval for &Env { - fn eval(self, source: syntax::Relation) -> LogicRel { - use syntax::Relation::*; - match source { - Var(t) => LogicRel::Rigid(Head::Var(t)), - HOp(name, args, rel) => { - LogicRel::Rigid(Head::HOp(name, self.eval(args), self.eval(rel))) - }, - Lam(scopes, body) => LogicRel::Lam(scopes, self.clone(), body.as_logic()), - } +impl Eval for &Env { + fn eval(self, Lambda(scope, body): syntax::Relation) -> Relation { + Relation(scope, self.clone(), body) } } diff --git a/src/pipeline/relation.rs b/src/pipeline/relation.rs index ad02456..a68086d 100644 --- a/src/pipeline/relation.rs +++ b/src/pipeline/relation.rs @@ -5,31 +5,13 @@ use imbl::{vector, Vector}; use itertools::{Either, Itertools}; use serde::{Deserialize, Serialize}; -use crate::pipeline::shared::{DataType, Eval, Schema, VL}; +use super::syntax::Aggr; +use crate::pipeline::shared::{DataType, Eval, Head, Lambda, Neutral, Schema, Typed, VL}; use crate::pipeline::syntax::{Logic, UExpr}; use crate::pipeline::{shared, syntax}; -use crate::solver::Payload; - -#[derive(Serialize, Deserialize)] -pub struct Input { - schemas: Vec, - queries: (Relation, Relation), - help: (String, String), -} - -impl From for Payload { - fn from(input: Input) -> Self { - let Input { schemas, queries: (r1, r2), help } = input; - let subst = vector![]; - let env = Env(&schemas, &subst, 0); - log::info!("Schemas:\n{:?}", schemas); - log::info!("Input:\n{}\n{}", help.0, help.1); - Payload(schemas.clone(), env.eval(r1), env.eval(r2)) - } -} #[derive(Copy, Clone)] -struct Env<'e>(&'e [Schema], &'e Vector, usize); +pub struct Env<'e>(pub &'e [Schema], pub &'e Vector, pub usize); fn vars(level: usize, types: Vector) -> Vector { types.into_iter().enumerate().map(|(i, ty)| syntax::Expr::Var(VL(level + i), ty)).collect() @@ -55,10 +37,15 @@ pub enum Relation { right: Box, kind: JoinKind, }, - Correlate(Box, Box), - Union(Box, Box), + Correlate { + // TODO: Add condition? + left: Box, + right: Box, + kind: JoinKind, + }, + Union(Vec), + Intersect(Vec), Except(Box, Box), - Intersect(Box, Box), Distinct(Box), Values { schema: Vec, @@ -69,6 +56,12 @@ pub enum Relation { columns: Vec, source: Box, }, + Group { + keys: Vec, + #[serde(alias = "function")] + columns: Vec, + source: Box, + }, Sort { collation: Vec<(usize, DataType, String)>, offset: Option, @@ -79,22 +72,27 @@ pub enum Relation { impl Relation { fn scope(&self, schemas: &[Schema]) -> Vector { + use JoinKind::*; use Relation::*; match self { Singleton => Vector::new(), Scan(table) => schemas[table.0].types.clone().into(), Filter { source, .. } => source.scope(schemas), - Project { columns, .. } => { - columns.iter().map(|expr| expr.ty()).collect() + Project { columns, .. } => columns.iter().map(|expr| expr.ty()).collect(), + Aggregate { columns, .. } => columns.iter().map(|agg| agg.ty.clone()).collect(), + Group { columns, keys: key, .. } => key + .iter() + .map(|expr| expr.ty()) + .chain(columns.iter().map(|agg| agg.ty.clone())) + .collect(), + Join { left, kind: Semi | Anti, .. } | Correlate { left, kind: Semi | Anti, .. } => { + left.scope(schemas) }, - Aggregate { columns, .. } => { - columns.iter().map(|agg| agg.ty.clone()).collect() - } - Join { left, kind: JoinKind::Semi | JoinKind::Anti, .. } => left.scope(schemas), - Join { left, right, .. } | Correlate(left, right) => { + Join { left, right, .. } | Correlate { left, right, .. } => { left.scope(schemas) + right.scope(schemas) }, - Union(rel1, _) | Except(rel1, _) | Intersect(rel1, _) => rel1.scope(schemas), + Union(rels) | Intersect(rels) => rels[0].scope(schemas), + Except(rel1, _) => rel1.scope(schemas), Distinct(rel) => rel.scope(schemas), Values { schema, .. } => schema.clone().into(), Sort { source, .. } => source.scope(schemas), @@ -104,30 +102,30 @@ impl Relation { impl Eval for Env<'_> { fn eval(self, source: Relation) -> syntax::Relation { - use syntax::Relation as Rel; use syntax::UExpr::*; + use JoinKind::*; use Relation::*; let Env(schemas, subst, lvl) = self; - let scopes = source.scope(schemas); + let scope = source.scope(schemas); match source { - Singleton => Rel::lam(vector![], UExpr::one()), + Singleton => Lambda(vector![], UExpr::one()), Scan(VL(t)) => { - let vars = vars(lvl, scopes.clone()); + let vars = vars(lvl, scope.clone()); let schema = &schemas[t]; - let conds = schema - .guaranteed - .iter() - .map(|cond| Pred(Env(schemas, &vars, lvl + scopes.len()).eval(cond.clone()))); + let conds = schema.guaranteed.iter().map(|cond| { + UExpr::pred(Env(schemas, &vars, lvl + scope.len()).eval(cond.clone())) + }); let constraints = schema.nullabilities.iter().zip(vars.clone()).map(|(nullable, v)| { if !*nullable { - Pred(!Logic::is_null(v)) + UExpr::pred(!v.is_null()) } else { UExpr::one() } }); let app = if schema.primary.is_empty() { - App(Rel::Var(VL(t)), vars.clone()) + let app = UExpr::Neu(Neutral(Head::Var(VL(t)), vars.clone())); + app.clone() * UExpr::squash(app) } else { let key_constraints = schema.primary.iter().enumerate().flat_map(|(j, cols)| { @@ -148,55 +146,56 @@ impl Eval for Env<'_> { }); pa.chain(once(pk)) }); - Pred(Logic::And(key_constraints.collect())) + UExpr::pred(Logic::And(key_constraints.collect())) }; - Rel::lam(scopes.clone(), app * Mul(constraints.collect()) * Mul(conds.collect())) + Lambda(scope.clone(), app * Mul(constraints.collect()) * Mul(conds.collect())) }, // Filter R(x, y) by P[x, y] // λ x, y. [P[x, y]] × R(x, y) Filter { condition, source } => { - let vars = vars(lvl, scopes.clone()); - let body_lvl = lvl + scopes.len(); + let vars = vars(lvl, scope.clone()); + let body_lvl = lvl + scope.len(); let cond_subst = subst + &vars; - let condition = UExpr::Pred(Env(schemas, &cond_subst, body_lvl).eval(condition)); + let condition = UExpr::pred(Env(schemas, &cond_subst, body_lvl).eval(condition)); let source = Env(schemas, subst, body_lvl).eval(*source); - Rel::lam(scopes, condition * UExpr::App(source, vars)) + Lambda(scope, condition * UExpr::app(source, vars)) }, // Project f[x, y] from R(x, y) // λ a. ∑ x, y. [a = f[x, y]] × R(x, y) Project { columns, source } => { - let proj_vars = vars(lvl, scopes.clone()); - let inner_scopes = source.scope(schemas); - let inner_vars = vars(lvl + scopes.len(), inner_scopes.clone()); - let inner_lvl = lvl + scopes.len() + inner_scopes.len(); + let inner_scope = source.scope(schemas); + let inner_vars = vars(lvl + scope.len(), inner_scope.clone()); + let inner_lvl = lvl + scope.len() + inner_scope.len(); let source = Env(schemas, subst, inner_lvl).eval(*source); let cols_subst = subst + &inner_vars; - let cols_env = Env(schemas, &(cols_subst), inner_lvl); - let body = proj_vars + let cols_env = Env(schemas, &cols_subst, inner_lvl); + let matches = vars(lvl, scope.clone()) .into_iter() .zip(columns) - .map(|(var, col)| Pred(Logic::Eq(var, cols_env.eval(col)))) - .fold(UExpr::App(source, inner_vars), UExpr::mul); - Rel::lam(scopes, UExpr::sum(inner_scopes, body)) + .map(|(var, col)| Logic::Eq(var, cols_env.eval(col))) + .collect(); + let app = UExpr::app(source, inner_vars); + Lambda(scope, UExpr::sum(inner_scope, UExpr::pred(Logic::And(matches)) * app)) }, // R(x) semi join S(y) on P[x, y] // λ x. R(x) × ‖∑ y. [P[x, y]] × S(y)‖ - Join { condition, left, right, kind: kind @ (JoinKind::Semi | JoinKind::Anti) } => { - let left_vars = vars(lvl, scopes.clone()); - let body_lvl = lvl + scopes.len(); - let inner_scopes = right.scope(schemas); - let inner_lvl = body_lvl + inner_scopes.len(); - let right_vars = vars(body_lvl, inner_scopes.clone()); + Join { condition, left, right, kind: kind @ (Semi | Anti) } => { + let left_vars = vars(lvl, scope.clone()); + let body_lvl = lvl + scope.len(); + let inner_scope = right.scope(schemas); + let inner_lvl = body_lvl + inner_scope.len(); + let right_vars = vars(body_lvl, inner_scope.clone()); let cond_subst = subst + &(&left_vars + &right_vars); - let cond = Pred(Env(schemas, &cond_subst, inner_lvl).eval(condition)); - let right_body = App(Env(schemas, subst, inner_lvl).eval(*right), right_vars); - let left_body = App(Env(schemas, subst, body_lvl).eval(*left), left_vars); + let cond = UExpr::pred(Env(schemas, &cond_subst, inner_lvl).eval(condition)); + let right_body = + UExpr::app(Env(schemas, subst, inner_lvl).eval(*right), right_vars); + let left_body = UExpr::app(Env(schemas, subst, body_lvl).eval(*left), left_vars); let wrapper = match kind { - JoinKind::Semi => UExpr::squash, - JoinKind::Anti => UExpr::not, + Semi => UExpr::squash, + Anti => UExpr::not, _ => unreachable!(), }; - Rel::lam(scopes, left_body * wrapper(UExpr::sum(inner_scopes, cond * right_body))) + Lambda(scope, left_body * wrapper(UExpr::sum(inner_scope, cond * right_body))) }, // R(x) inner join S(y) on P[x, y] // λ x, y. [P[x, y]] × R(x) × S(y) @@ -205,129 +204,234 @@ impl Eval for Env<'_> { // + ¬(∑ x'. P[x', y] × R(x')) × Null(x) × S(y) // + ¬(∑ y'. P[x, y'] × S(y')) × Null(y) × R(x) Join { condition, left, right, kind } => { - let left_scopes = left.scope(schemas); - let right_scopes = right.scope(schemas); - let right_vars = &vars(lvl + left_scopes.len(), right_scopes); - let left_vars = &vars(lvl, left_scopes); - let body_lvl = lvl + scopes.len(); + let left_scope = left.scope(schemas); + let right_scope = right.scope(schemas); + let right_vars = &vars(lvl + left_scope.len(), right_scope); + let left_vars = &vars(lvl, left_scope); + let body_lvl = lvl + scope.len(); let body_env = Env(schemas, subst, body_lvl); - let left_body = UExpr::App(body_env.eval(*left.clone()), left_vars.clone()); - let right_body = UExpr::App(body_env.eval(*right.clone()), right_vars.clone()); + let left_body = UExpr::app(body_env.eval(*left.clone()), left_vars.clone()); + let right_body = UExpr::app(body_env.eval(*right.clone()), right_vars.clone()); let cond_subst = subst + &(left_vars + right_vars); let cond_env = Env(schemas, &cond_subst, body_lvl); - let matching = UExpr::Pred(cond_env.eval(condition.clone())) + let matching = UExpr::pred(cond_env.eval(condition.clone())) * left_body.clone() * right_body.clone(); let miss = |miss_left| { let missing = *if miss_left { left.clone() } else { right.clone() }; - let inner_scopes = missing.scope(schemas); - let inner_vars = vars(body_lvl, inner_scopes.clone()); - let inner_lvl = body_lvl + inner_scopes.len(); + let inner_scope = missing.scope(schemas); + let inner_vars = vars(body_lvl, inner_scope.clone()); + let inner_lvl = body_lvl + inner_scope.len(); let inner_cond_vars = if miss_left { &inner_vars + right_vars } else { left_vars + &inner_vars }; let inner_cond_subst = subst + &inner_cond_vars; - let inner_cond = UExpr::Pred( + let inner_cond = UExpr::pred( Env(schemas, &inner_cond_subst, inner_lvl).eval(condition.clone()), ); let missing = Env(schemas, subst, inner_lvl).eval(missing); - let inner_body = inner_cond * UExpr::App(missing, inner_vars); + let inner_body = inner_cond * UExpr::app(missing, inner_vars); let other_body = if miss_left { right_body.clone() } else { left_body.clone() }; if miss_left { left_vars } else { right_vars } .iter() - .map(|v| UExpr::Pred(Logic::is_null(v.clone()))) - .fold(other_body * !UExpr::sum(inner_scopes, inner_body), UExpr::mul) + .map(|v| UExpr::pred(v.clone().is_null())) + .fold(other_body * !UExpr::sum(inner_scope, inner_body), UExpr::mul) }; match kind { - JoinKind::Inner => Rel::lam(scopes, matching), - JoinKind::Left => Rel::lam(scopes, matching + miss(false)), - JoinKind::Right => Rel::lam(scopes, matching + miss(true)), - JoinKind::Full => Rel::lam(scopes, matching + miss(true) + miss(false)), + Inner => Lambda(scope, matching), + Left => Lambda(scope, matching + miss(false)), + Right => Lambda(scope, matching + miss(true)), + Full => Lambda(scope, matching + miss(true) + miss(false)), _ => unreachable!(), } }, - // R(x) correlate join S[x](y) + // R(x) correlated join S[x](y) // λx, y. R(x) × S[x](y) - Correlate(left, right) => { - let left_scopes = left.scope(schemas); - let right_scopes = right.scope(schemas); - let right_vars = vars(lvl + left_scopes.len(), right_scopes); - let left_vars = vars(lvl, left_scopes); - let body_lvl = lvl + scopes.len(); - let left = Env(schemas, subst, body_lvl).eval(*left); + // R(x) left correlated join S[x](y) + // λx, y. R(x) × S[x](y) + R(x) × Null(y) × ¬(∑ y'. S[x](y')) + // R(x) semi correlated join S[x](y) + // λx. R(x) × ‖∑ y. S[x](y)‖ + Correlate { kind, left, right } => { + let left_scope = left.scope(schemas); + let right_scope = right.scope(schemas); + let left_vars = vars(lvl, left_scope.clone()); let right_subst = subst + &left_vars; - let right = Env(schemas, &right_subst, body_lvl).eval(*right); - Rel::lam(scopes, UExpr::App(left, left_vars) * UExpr::App(right, right_vars)) + let body_lvl = lvl + scope.len(); + let inner = |positive| { + let inner_app = UExpr::app( + Env(schemas, &right_subst, body_lvl + right_scope.len()) + .eval(*right.clone()), + vars(body_lvl, right_scope.clone()), + ); + let wrapper = if positive { UExpr::squash } else { UExpr::not }; + wrapper(UExpr::sum(right_scope.clone(), inner_app)) + }; + let left_app = UExpr::app(Env(schemas, subst, body_lvl).eval(*left), left_vars); + let right_vars = vars(lvl + left_scope.len(), right_scope.clone()); + let right_app = UExpr::app( + Env(schemas, &right_subst, body_lvl).eval(*right.clone()), + right_vars.clone(), + ); + match kind { + Inner => Lambda(scope, left_app * right_app), + Left => { + let nulls = right_vars.iter().map(|v| v.clone().is_null()).collect(); + Lambda( + scope, + left_app.clone() * right_app + + left_app * UExpr::pred(Logic::And(nulls)) * inner(false), + ) + }, + Semi => Lambda(scope, left_app * inner(true)), + Anti => Lambda(scope, left_app * inner(false)), + _ => panic!("Unsupported join type in correlated join."), + } }, // R(x) union all S(y) // λx. R(x) + S(x) - Union(left, right) => { - let body_lvl = lvl + scopes.len(); - let vars = vars(lvl, scopes.clone()); - let left = Env(schemas, subst, body_lvl).eval(*left); - let right = Env(schemas, subst, body_lvl).eval(*right); - Rel::lam(scopes, UExpr::App(left, vars.clone()) + UExpr::App(right, vars)) + Union(sources) => { + let body_lvl = lvl + scope.len(); + let vars = vars(lvl, scope.clone()); + let sum = sources + .into_iter() + .map(|source| { + UExpr::app(Env(schemas, subst, body_lvl).eval(source), vars.clone()) + }) + .collect(); + Lambda(scope, Add(sum)) }, // R(x) intersect S(y) // λx. ‖R(x) × S(x)‖ - Intersect(left, right) => { - let body_lvl = lvl + scopes.len(); - let vars = vars(lvl, scopes.clone()); - let left = Env(schemas, subst, body_lvl).eval(*left); - let right = Env(schemas, subst, body_lvl).eval(*right); - Rel::lam(scopes, UExpr::squash(UExpr::App(left, vars.clone()) * UExpr::App(right, vars))) + Intersect(sources) => { + let body_lvl = lvl + scope.len(); + let vars = vars(lvl, scope.clone()); + let prod = sources + .into_iter() + .map(|source| { + UExpr::app(Env(schemas, subst, body_lvl).eval(source), vars.clone()) + }) + .collect(); + Lambda(scope, UExpr::squash(Mul(prod))) }, // R(x) except S(y) // λx. ‖R(x) × ¬S(x)‖ Except(left, right) => { - let body_lvl = lvl + scopes.len(); - let vars = vars(lvl, scopes.clone()); + let body_lvl = lvl + scope.len(); + let vars = vars(lvl, scope.clone()); let left = Env(schemas, subst, body_lvl).eval(*left); let right = Env(schemas, subst, body_lvl).eval(*right); - Rel::lam(scopes, UExpr::squash(UExpr::App(left, vars.clone()) * !UExpr::App(right, vars))) + Lambda( + scope, + UExpr::squash(UExpr::app(left, vars.clone()) * !UExpr::app(right, vars)), + ) }, // Distinct R(x) // λx. ‖R(x)‖ Distinct(source) => { - let source = Env(schemas, subst, lvl + scopes.len()).eval(*source); - Rel::lam(scopes.clone(), UExpr::squash(UExpr::App(source, vars(lvl, scopes)))) + let source = Env(schemas, subst, lvl + scope.len()).eval(*source); + Lambda(scope.clone(), UExpr::squash(UExpr::app(source, vars(lvl, scope)))) }, // Values ((a1, b1), (a2, b2), (a3, b3)) // λx, y. [x = a1] × [y = b1] + [x = a2] × [y = b2] + [x = a3] × [y = b3] - Values { schema, content } => { - let vars = vars(lvl, scopes.clone()); - let env = Env(schemas, subst, lvl + scopes.len()); + Values { schema: _, content } => { + let vars = vars(lvl, scope.clone()); + let env = Env(schemas, subst, lvl + scope.len()); let rows = content.into_iter().map(|row| { - let cols = - vars.iter().zip(row).map(|(v, e)| Pred(Logic::Eq(v.clone(), env.eval(e)))); - UExpr::Mul(cols.collect()) + let cols = vars + .iter() + .zip(row) + .map(|(v, e)| UExpr::pred(Logic::Eq(v.clone(), env.eval(e)))); + Mul(cols.collect()) }); - Rel::lam(scopes, UExpr::Add(rows.collect())) + Lambda(scope, Add(rows.collect())) }, // Agg1(f[x, y]), Agg2(g[x, y]) on R(x, y) // λa, b. [a = Agg1(λc. ∑x, y. [c = f[x, y]] × R(x, y))] // × [b = Agg2(λc. ∑x, y. [c = g[x, y]] × R(x, y))] Aggregate { columns, source } => { - let vars = vars(lvl, scopes.clone()); - let env = Env(schemas, subst, lvl + scopes.len()); + let vars = vars(lvl, scope.clone()); + let env = Env(schemas, subst, lvl + scope.len()); let cols = vars .into_iter() .zip(columns) - .map(|(v, agg)| Pred(Logic::Eq(v, env.eval((agg, *source.clone()))))); - Rel::lam(scopes, Mul(cols.collect())) + .map(|(v, agg)| UExpr::pred(Logic::Eq(v, env.eval((agg, *source.clone()))))); + Lambda(scope, Mul(cols.collect())) + }, + // Agg(f[x, y]) on R(x, y) group by g[x, y] + // λk, a. ‖∑x, y. [k = g[x, y]] × R(x, y)‖ × [a = Agg(λa'. ∑x, y. [a' = f[x, y]] × [k = g[x, y]] × R(x, y))] + Group { keys: key, columns, source } => { + let source_scope = source.scope(schemas); + let (key_vars, agg_vars) = vars(lvl, scope.clone()).split_at(key.len()); + let grouped = |lvl, vars| { + let key_subst = subst + &vars; + let key_env = Env(schemas, &key_subst, lvl); + let matches = key_vars + .iter() + .zip(key.clone()) + .map(|(v, k)| Logic::Eq(v.clone(), key_env.eval(k))); + let app = UExpr::app(Env(schemas, subst, lvl).eval(source.clone()), vars); + UExpr::pred(Logic::And(matches.collect())) * app + }; + let body_lvl = lvl + scope.len(); + let source_vars = vars(body_lvl, source_scope.clone()); + let agged = |agg: AggCall| { + let inner_scope: Vector<_> = agg.args.iter().map(|e| e.ty()).collect(); + let inner_lvl = body_lvl + inner_scope.len(); + let source_vars = vars(inner_lvl, source_scope.clone()); + let arg_subst = subst + &source_vars; + let arg_env = Env(schemas, &arg_subst, inner_lvl + source_scope.len()); + let inner_vars = vars(body_lvl, inner_scope.clone()); + let matches = inner_vars + .iter() + .zip(agg.args) + .map(|(v, arg)| Logic::Eq(v.clone(), arg_env.eval(arg))); + let body = UExpr::sum( + source_scope.clone(), + UExpr::pred(Logic::And(matches.collect())) + * grouped(inner_lvl + source_scope.len(), source_vars), + ); + let body = if agg.ignore_nulls { + let condition = inner_vars.iter().map(|v| !v.clone().is_null()); + UExpr::pred(Logic::And(condition.collect())) * body + } else { + body + }; + let body = if agg.distinct { UExpr::squash(body) } else { body }; + use shared::Expr::{Agg, HOp}; + match agg.op.as_str() { + "COUNT" => Agg(Aggr(agg.op, inner_scope, body, Box::new(1u32.into()))), + _ if inner_scope.len() == 1 => { + Agg(Aggr(agg.op, inner_scope, body, inner_vars[0].clone().into())) + }, + _ => HOp(agg.op, vec![], Lambda(inner_scope, body).into(), agg.ty), + } + }; + let aggs = agg_vars + .into_iter() + .zip(columns) + .map(|(v, agg)| Logic::Eq(v, agged(agg))) + .collect(); + let left = UExpr::squash(UExpr::sum( + source_scope.clone(), + grouped(body_lvl + source_scope.len(), source_vars), + )); + Lambda(scope, left * UExpr::pred(Logic::And(aggs))) }, Sort { mut collation, offset, limit, source } => { // TODO: Better way to handle multiple sort columns. - if let Some((col, _, ord)) = collation.pop() { - let body = self.eval(Sort { collation, offset, limit, source }.into()); - Rel::HOp("sort".to_string(), vec![col.into(), ord.into()], body) + let vars = vars(lvl, scope.clone()); + let env = Env(schemas, subst, lvl + scope.len()); + let head = if let Some((col, _, ord)) = collation.pop() { + let body = env.eval(Sort { collation, offset, limit, source }.into()); + Head::HOp("sort".to_string(), vec![col.into(), ord.into()], body) } else { - let source = self.eval(source); - let offset = offset.map(|n| self.eval(n)).unwrap_or(0u32.into()); + let source = env.eval(source); + let offset = offset.map(|n| env.eval(n)).unwrap_or(0u32.into()); if let Some(count) = limit { - Rel::HOp("limit".to_string(), vec![self.eval(count), offset], source) + Head::HOp("limit".to_string(), vec![env.eval(count), offset], source) } else { - Rel::HOp("offset".to_string(), vec![offset], source) + Head::HOp("offset".to_string(), vec![offset], source) } - } + }; + Lambda(scope, Neu(Neutral(head, vars))) }, } } @@ -347,41 +451,51 @@ pub enum JoinKind { #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AggCall { - #[serde(rename = "operator")] + #[serde(alias = "operator")] op: String, - #[serde(rename = "operand")] + #[serde(alias = "operand")] args: Vec, + #[serde(default = "default_distinct")] distinct: bool, + #[serde(default = "default_ignore_nulls")] ignore_nulls: bool, #[serde(alias = "type")] ty: DataType, } +fn default_distinct() -> bool { + false +} + +fn default_ignore_nulls() -> bool { + true +} + impl Eval<(AggCall, Relation), syntax::Expr> for Env<'_> { fn eval(self, (agg, rel): (AggCall, Relation)) -> syntax::Expr { - let tys = agg.args.iter().map(|arg| arg.ty()).collect_vec(); let args = agg.args; let source = match agg.op.as_str() { "COUNT" if args.is_empty() => rel, _ => Relation::Project { columns: args, source: rel.into() }, }; - let source = if agg.distinct { Relation::Distinct(source.into()) } else { source }; - let source = if agg.ignore_nulls { - let conditions = tys.into_iter().enumerate().map(|(i, ty)| Expr::Op { - op: "IS NOT NULL".into(), - args: vec![Expr::Col { column: VL(i), ty }], - ty: DataType::Boolean, - }).collect_vec(); - let condition = Expr::Op { - op: "AND".into(), - args: conditions, - ty: DataType::Boolean, - }; - Relation::Filter { condition, source: source.into() } + let Env(_, _, lvl) = self; + let Lambda(scope, body) = self.eval(source); + let body = if agg.ignore_nulls { + let condition = vars(lvl, scope.clone()).into_iter().map(|v| !v.is_null()); + UExpr::pred(Logic::And(condition.collect())) * body } else { - source + body }; - syntax::Expr::HOp(agg.op, vec![], Box::new(self.eval(source)), agg.ty) + let body = if agg.distinct { UExpr::squash(body) } else { body }; + // TODO: Handle various agg calls. + match agg.op.as_str() { + "COUNT" => syntax::Expr::Agg(Aggr(agg.op, scope, body, Box::new(1u32.into()))), + _ if scope.len() == 1 => { + let var = vars(lvl, scope.clone())[0].clone(); + syntax::Expr::Agg(Aggr(agg.op, scope, body, var.into())) + }, + _ => syntax::Expr::HOp(agg.op, vec![], Lambda(scope, body).into(), agg.ty), + } } } @@ -394,23 +508,15 @@ pub enum Expr { #[serde(alias = "type")] ty: DataType, }, - HOp { - #[serde(rename = "operator")] - op: String, - #[serde(rename = "operand")] - args: Vec, - #[serde(rename = "query")] - rel: Box, - #[serde(alias = "type")] - ty: DataType, - }, Op { - #[serde(rename = "operator")] + #[serde(alias = "operator")] op: String, - #[serde(rename = "operand")] + #[serde(alias = "operand")] args: Vec, #[serde(alias = "type")] ty: DataType, + #[serde(alias = "query")] + rel: Option>, }, } @@ -419,7 +525,6 @@ impl Expr { match self { Expr::Col { ty, .. } => ty, Expr::Op { ty, .. } => ty, - Expr::HOp { ty, .. } => ty, } .clone() } @@ -428,54 +533,100 @@ impl Expr { if self.ty() == DataType::Real { self } else { - Expr::Op { op: "CAST".to_string(), args: vec![self], ty: DataType::Real } + Expr::Op { op: "CAST".to_string(), args: vec![self], ty: DataType::Real, rel: None } } } } +pub fn num_op(op: &str) -> bool { + matches!( + op, + "+" | "PLUS" | "UNARY PLUS" | "-" | "MINUS" | "UNARY MINUS" | "*" | "MULT" | "/" | "DIV" + ) +} + +pub fn num_cmp(op: &str) -> bool { + matches!(op, |">"| "GT" + | "<" | "LT" + | ">=" | "GE" + | "<=" | "LE" + | "=" | "EQ" + | "<>" | "!=" + | "NE") +} + impl Eval for Env<'_> { fn eval(self, source: Expr) -> syntax::Expr { use shared::Expr::*; match source { - Expr::Col { column, ty } => self.1[column.0].clone(), - Expr::Op { op, args, ty } => { - let cast = matches!(op.as_str(), "+" | "-" | "*" | "/" if &ty == &DataType::Real) - || matches!(op.as_str(), ">" | "<" | ">=" | "<=" | "=" if args.iter().any(|e| e.ty() == DataType::Real)); + e if let Some(l) = self.eval_logic(&e) => Log(l.into()), + Expr::Col { column, ty: _ } => self.1[column.0].clone(), + Expr::Op { op, args, ty, rel: None } => { + let cast = (num_op(&op) && ty == DataType::Real) + || (num_cmp(&op) && args.iter().any(|e| e.ty() == DataType::Real)); let args = if cast { args.into_iter().map(Expr::into_real).collect() } else { args }; Op(op, self.eval(args), ty) }, - Expr::HOp { op, args, rel, ty } => HOp(op, self.eval(args), self.eval(rel), ty), + Expr::Op { op, args, rel: Some(rel), ty } => { + HOp(op, self.eval(args), self.eval(*rel).into(), ty) + }, + } + } +} + +impl Env<'_> { + fn eval_logic(self, source: &Expr) -> Option { + match source { + Expr::Op { op, args, ty: DataType::Boolean, rel: None } => { + match op.to_uppercase().as_str() { + "TRUE" => Some(Logic::tt()), + "FALSE" => Some(Logic::ff()), + "<=>" | "IS" | "IS NOT DISTINCT FROM" => { + Some(Logic::Eq(self.eval(args[0].clone()), self.eval(args[1].clone()))) + }, + "IS NOT" | "IS DISTINCT FROM" => { + Some(!Logic::Eq(self.eval(args[0].clone()), self.eval(args[1].clone()))) + }, + "IS NULL" => { + let e: syntax::Expr = self.eval(args[0].clone()); + Some(e.is_null()) + }, + "IS NOT NULL" => { + let e: syntax::Expr = self.eval(args[0].clone()); + Some(!e.is_null()) + }, + "IS TRUE" => Some(Logic::Bool(self.eval(args[0].clone()))), + "IS NOT TRUE" => Some(!Logic::Bool(self.eval(args[0].clone()))), + _ => None, + } + }, + Expr::Op { op, args: _, rel: Some(rel), ty: DataType::Boolean } => match op.as_str() { + "EXISTS" => { + let Env(schemas, subst, lvl) = self; + let scope = rel.scope(schemas); + let rel = Env(schemas, subst, lvl + scope.len()).eval(*rel.clone()); + let vars = vars(lvl, scope.clone()); + Some(Logic::squash(UExpr::sum(scope, UExpr::app(rel, vars)))) + }, + _ => None, + }, + _ => None, } } } impl Eval for Env<'_> { fn eval(self, source: Expr) -> Logic { + assert_eq!(source.ty(), DataType::Boolean, "wrong type for predicate"); match source.clone() { - Expr::Op { op, args, ty: DataType::Boolean } => match op.to_uppercase().as_str() { - "TRUE" => Logic::tt(), - "FALSE" => Logic::ff(), - "=" if args.iter().any(|a| a.ty() == DataType::Real) => { - let args = args.into_iter().map(Expr::into_real).collect_vec(); - Logic::Eq(self.eval(args[0].clone()), self.eval(args[1].clone())) - }, - "=" => Logic::Eq(self.eval(args[0].clone()), self.eval(args[1].clone())), - "<>" => !Logic::Eq(self.eval(args[0].clone()), self.eval(args[1].clone())), + e if let Some(l) = self.eval_logic(&e) => l, + Expr::Op { op, args, .. } => match op.to_uppercase().as_str() { "AND" => Logic::And(args.into_iter().map(|arg| self.eval(arg)).collect()), "OR" => Logic::Or(args.into_iter().map(|arg| self.eval(arg)).collect()), - "NOT" => Logic::not(self.eval(args[0].clone())), - "IS NULL" => Logic::is_null(self.eval(args[0].clone())), - "IS NOT NULL" => !Logic::is_null(self.eval(args[0].clone())), - _ => Logic::Bool(self.eval(source)), - }, - Expr::Col { ty: DataType::Boolean, .. } => Logic::Bool(self.eval(source)), - Expr::HOp { op, args, rel, ty: DataType::Boolean } => match op.as_str() { - "IN" => Logic::App(syntax::Application(self.eval(*rel), self.eval(args).into())), - "EXISTS" => Logic::Exists(self.eval(*rel)), _ => Logic::Bool(self.eval(source)), }, - _ => panic!("wrong type for predicate"), + Expr::Col { .. } => Logic::Bool(self.eval(source)), } } } diff --git a/src/pipeline/shared.rs b/src/pipeline/shared.rs index b705377..76fea7d 100644 --- a/src/pipeline/shared.rs +++ b/src/pipeline/shared.rs @@ -11,7 +11,8 @@ use imbl::{vector, Vector}; use indenter::indented; use itertools::Itertools; use serde::{Deserialize, Serialize}; -use z3::ast::{Ast, Datatype, Dynamic}; +use serde_enum_str::{Deserialize_enum_str, Serialize_enum_str}; +use z3::ast::{Ast, Dynamic}; use z3::{Context, FuncDecl, Sort}; pub trait Eval { @@ -44,10 +45,33 @@ pub struct Schema { } #[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)] -pub enum Expr { +pub enum Expr { Var(VL, DataType), - Op(String, Vec>, DataType), - HOp(String, Vec>, Box, DataType), + Log(Box>>), + Agg(A), + Op(String, Vec>, DataType), + HOp(String, Vec>, Box, DataType), +} + +pub trait Typed { + fn ty(&self) -> DataType; +} + +impl Typed for Expr { + fn ty(&self) -> DataType { + use Expr::*; + match self { + Var(_, ty) | Op(_, _, ty) | HOp(_, _, _, ty) => ty.clone(), + Log(_) => DataType::Boolean, + Agg(agg) => agg.ty(), + } + } +} + +impl Expr { + pub fn is_null(self) -> Logic { + Logic::Eq(Self::Op("NULL".to_string(), vec![], self.ty()), self) + } } #[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] @@ -60,19 +84,29 @@ impl Display for Lambda { } } +#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] +pub struct Sigma(pub Vector, pub U); + +impl Display for Sigma { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + writeln!(f, "∑ {:?} {{", self.0)?; + writeln!(indented(f).with_str("\t"), "{}", self.1)?; + writeln!(f, "}}") + } +} + #[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)] -pub enum Logic { - Bool(Expr), - Eq(Expr, Expr), - Pred(String, Vec>), - Neg(Box>), - And(Vector>), - Or(Vector>), - App(A), - Exists(L), -} - -impl Logic { +pub enum Logic { + Bool(E), + Eq(E, E), + Pred(String, Vec), + Neg(Box>), + And(Vector>), + Or(Vector>), + Squash(Box), +} + +impl Logic { pub fn tt() -> Self { Logic::And(vector![]) } @@ -81,13 +115,12 @@ impl Logic { Logic::Or(vector![]) } - pub fn is_null(expr: Expr) -> Self { - let ty = expr.ty(); - Self::Eq(expr, Expr::Op("NULL".to_string(), vec![], ty)) + pub fn squash(u: impl Into>) -> Self { + Logic::Squash(u.into()) } } -impl Mul for Logic { +impl Mul for Logic { type Output = Self; fn mul(self, rhs: Self) -> Self::Output { @@ -101,7 +134,7 @@ impl Mul for Logic { } } -impl Add for Logic { +impl Add for Logic { type Output = Self; fn add(self, rhs: Self) -> Self::Output { @@ -115,7 +148,7 @@ impl Add for Logic { } } -impl Not for Logic { +impl Not for Logic { type Output = Self; fn not(self) -> Self::Output { @@ -123,7 +156,7 @@ impl Not for Logic { } } -impl Display for Logic { +impl Display for Logic { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { use Logic::*; match self { @@ -135,23 +168,15 @@ impl Display for Logic { And(ls) => write!(f, "({})", ls.iter().format(" ∧ ")), Or(ls) if ls.is_empty() => write!(f, "false"), Or(ls) => write!(f, "({})", ls.iter().format(" ∨ ")), - App(app) => write!(f, "{}", app), - Exists(rel) => write!(f, "∃({})", rel), + Squash(u) => write!(f, "{}", u), } } } -impl Eval, Logic> for E -where - E: Eval, Expr> + Eval + Eval> + Clone, - S: Clone, - T: Clone, - L: Clone, - M: Clone, - A: Clone, - B: Clone, +impl Eval, Logic> for Env +where Env: Eval + Eval + Clone { - fn eval(self, source: Logic) -> Logic { + fn eval(self, source: Logic) -> Logic { use Logic::*; match source { Bool(e) => Bool(self.eval(e)), @@ -160,31 +185,23 @@ where Neg(l) => Neg(self.eval(l)), And(ls) => And(self.eval(ls)), Or(ls) => Or(self.eval(ls)), - App(app) => self.eval(app), - Exists(rel) => Exists(self.eval(rel)), + Squash(u) => Squash(self.eval(u)), } } } -impl Expr { - pub fn ty(&self) -> DataType { - use Expr::*; - match self { - Var(_, ty) | Op(_, _, ty) | HOp(_, _, _, ty) => ty.clone(), - } +impl Expr { + pub fn vars(level: usize, scope: Vector) -> Vector { + scope.into_iter().enumerate().map(|(l, ty)| Expr::Var(VL(level + l), ty)).collect() } } -impl Expr { - pub fn vars(level: usize, scopes: Vector) -> Vector> { - scopes.into_iter().enumerate().map(|(l, ty)| Expr::::Var(VL(level + l), ty)).collect() - } -} - -impl Display for Expr { +impl Display for Expr { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { Expr::Var(v, _) => write!(f, "{}", v), + Expr::Log(u) => write!(f, "‖{}‖", u), + Expr::Agg(agg) => write!(f, "{}", agg), Expr::Op(op, args, _) if args.is_empty() => write!(f, "\"{}\"", op), Expr::Op(op, args, _) => { write!(f, "{}({})", op, args.iter().join(", ")) @@ -194,64 +211,51 @@ impl Display for Expr { } } -impl From for Expr { +impl From for Expr { fn from(n: u32) -> Self { Expr::Op(n.to_string(), vec![], DataType::Integer) } } -impl From for Expr { +impl From for Expr { fn from(n: usize) -> Self { Expr::Op(n.to_string(), vec![], DataType::Integer) } } -impl From for Expr { +impl From for Expr { fn from(s: String) -> Self { Expr::Op(s, vec![], DataType::String) } } -impl Eval, Expr> for E -where E: Eval<(VL, DataType), Expr> + Eval + Clone +impl + Eval, Expr> for Env +where Env: Eval<(VL, DataType), Expr> + + Eval + + Eval + + Eval> + + Clone { - fn eval(self, source: Expr) -> Expr { + fn eval(self, source: Expr) -> Expr { use Expr::*; match source { Var(l, ty) => self.eval((l, ty)), + Log(l) => Log(self.eval(l)), + Agg(agg) => self.eval(agg), Op(f, args, ty) => Op(f, self.eval(args), ty), HOp(f, args, rel, ty) => HOp(f, self.clone().eval(args), self.eval(rel), ty), } } } -impl Eval, Neutral> for E -where E: Eval, Head> + Eval>, Vector>> + Clone -{ - fn eval(self, source: Neutral) -> Neutral { - let head = self.clone().eval(source.head); - let args = self.eval(source.args); - Neutral { head, args } - } -} - #[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] -pub struct Relation(pub Vector, pub Box); - -impl Display for Relation { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - writeln!(f, "λ {:?}", self.0)?; - writeln!(indented(f).with_str("\t"), "{}", self.1) - } -} - -#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] -pub enum Head { +pub enum Head { Var(VL), - HOp(String, Vec>, Box), + HOp(String, Vec, Box), } -impl Display for Head { +impl Display for Head { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { Head::Var(VL(l)) => write!(f, "#{}", l), @@ -262,42 +266,43 @@ impl Display for Head { } } -impl Eval, Head> for E -where E: Eval>, Vec>> + Eval, Box> + Clone +impl Eval, Head> for Env +where Env: Eval + Eval, Vec> + Clone { - fn eval(self, source: Head) -> Head { + fn eval(self, source: Head) -> Head { use Head::*; match source { Var(v) => Var(v), - HOp(op, args, rel) => HOp(op, self.clone().eval(args), self.eval(rel)), + HOp(op, args, rel) => HOp(op, self.clone().eval(args), self.eval(*rel).into()), } } } #[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] -pub struct Neutral { - pub head: Head, - pub args: Vector>, -} +pub struct Neutral(pub Head, pub Vector); -impl Neutral { - pub fn new(head: Head, args: Vector>) -> Self { - Neutral { head, args } +impl Display for Neutral { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "{}({})", self.0, self.1.iter().format(", ")) } } -impl Display for Neutral { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - write!(f, "{}({})", self.head, self.args.iter().format(", ")) +impl Eval, Neutral> for Env +where Env: Eval, Head> + Eval, Vector> + Clone +{ + fn eval(self, Neutral(head, args): Neutral) -> Neutral { + let head = self.clone().eval(head); + let args = self.eval(args); + Neutral(head, args) } } /// SQL data types (adapted from sqlparser) -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] +#[derive( + Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize_enum_str, Deserialize_enum_str, +)] #[serde(rename_all = "UPPERCASE")] pub enum DataType { - /// Uuid type - Uuid, /// Integer #[serde(alias = "INT", alias = "SMALLINT", alias = "BIGINT", alias = "TINYINT")] #[serde(alias = "TIMESTAMP", alias = "DATE", alias = "TIME")] @@ -306,21 +311,14 @@ pub enum DataType { #[serde(alias = "FLOAT", alias = "DOUBLE", alias = "DECIMAL")] Real, /// Boolean + #[serde(alias = "BOOL")] Boolean, - /// Interval - Interval, - /// Regclass used in postgresql serial - Regclass, /// String #[serde(alias = "VARCHAR", alias = "CHAR", alias = "TEXT")] String, /// Custom type such as enums - Custom(String), - /// Arrays - Array(Box), - /// Any type #[serde(other)] - Any, + Custom(String), } #[derive(Clone, Debug, Default, Ord, PartialOrd, Eq, PartialEq, Hash)] @@ -471,13 +469,16 @@ impl<'c> Ctx<'c> { pub fn sort(&self, ty: &DataType) -> Sort<'c> { use DataType::*; match ty { - Boolean => &self.bool.sort, - String => &self.string.sort, - Integer => &self.int.sort, - Real => &self.real.sort, - _ => panic!("unsupported type {:?}", ty), + Boolean => self.bool.sort.clone(), + String => self.string.sort.clone(), + Integer => self.int.sort.clone(), + Real => self.real.sort.clone(), + Custom(ty) => self.generic_sort(ty), } - .clone() + } + + pub fn generic_sort(&self, ty: impl ToString) -> Sort<'c> { + Sort::uninterpreted(self.z3_ctx(), z3::Symbol::String(ty.to_string())) } pub fn strict_sort(&self, ty: &DataType) -> Sort<'c> { @@ -493,7 +494,7 @@ impl<'c> Ctx<'c> { } pub fn var(&self, ty: &DataType, prefix: &str) -> Dynamic<'c> { - Datatype::fresh_const(self.solver.get_context(), prefix, &self.sort(ty)).into() + Dynamic::fresh_const(self.solver.get_context(), prefix, &self.sort(ty)) } pub fn app( @@ -510,9 +511,9 @@ impl<'c> Ctx<'c> { let f = FuncDecl::new(ctx, name, &domain.iter().collect_vec(), &range); f.apply(&args) } - + pub fn timeout() -> Duration { - if let Some(t) = std::env::var("COSETTE_SMT_TIMEOUT").ok().and_then(|t| t.parse::().ok()) { + if let Some(t) = std::env::var("QED_SMT_TIMEOUT").ok().and_then(|t| t.parse::().ok()) { Duration::from_millis(t) } else { Duration::from_secs(10) diff --git a/src/pipeline/stable.rs b/src/pipeline/stable.rs index 920364d..5c5453c 100644 --- a/src/pipeline/stable.rs +++ b/src/pipeline/stable.rs @@ -1,45 +1,55 @@ use std::collections::BTreeMap; -use imbl::{HashSet, Vector}; +use imbl::{vector, HashSet, Vector}; use itertools::Itertools; use z3::ast::Ast; use z3::SatResult; use super::normal::Z3Env; -use super::shared::{DataType, Eval, Lambda, Terms, Ctx}; +use super::shared::{Ctx, DataType, Eval, Lambda, Sigma, Terms}; use crate::pipeline::normal; -use crate::pipeline::shared::{self, VL}; +use crate::pipeline::shared::{self, Typed, VL}; -pub type Expr<'c> = shared::Expr>; #[derive(Clone)] -pub struct LogicRel<'c>(pub Vector, pub Env<'c>, pub normal::Logic); -pub type Neutral<'c> = shared::Neutral>; -pub type Logic<'c> = shared::Logic, LogicRel<'c>, Neutral<'c>>; +pub struct Aggr<'c>( + pub String, + pub Vector, + pub Env<'c>, + pub normal::Inner, + pub normal::Expr, +); + +impl Typed for Aggr<'_> { + fn ty(&self) -> DataType { + self.4.ty() + } +} + +pub type Expr<'c> = shared::Expr, Relation<'c>, Aggr<'c>>; +pub type Neutral<'c> = shared::Neutral, Expr<'c>>; +pub type Logic<'c> = shared::Logic, Expr<'c>>; #[derive(Clone)] pub struct Relation<'c>(pub Vector, pub Env<'c>, pub normal::UExpr); pub type UExpr<'c> = Terms>; +// Env(subst: C -> stb::Expr D, z3: C -> z3::Expr): Eval (nom::Expr C) (stb::Expr D) #[derive(Clone)] -pub struct Env<'c>(pub Vector>>, pub usize, pub Z3Env<'c>); +pub struct Env<'c>(pub Vector>>, pub Z3Env<'c>); impl<'c> Env<'c> { pub fn append(&self, subst: Vector>>) -> Self { - Env(self.0.clone() + subst, self.1, self.2.clone()) + Env(self.0.clone() + subst, self.1.clone()) } pub fn extend(&self, base: usize, scope: Vector) -> Self { let vars = shared::Expr::vars(base, scope.clone()).into_iter().map(Some).collect(); - Env(self.0.clone() + vars, base + scope.len(), self.2.extend(&scope)) + Env(self.0.clone() + vars, self.1.extend(&scope)) } } #[derive(Clone)] -pub struct Term<'c> { - pub scope: Vector, - pub logic: Logic<'c>, - pub apps: Vector>, -} +pub struct Term<'c>(pub Vector, pub Env<'c>, pub normal::Inner); impl<'c> Eval<(VL, DataType), Expr<'c>> for &Env<'c> { fn eval(self, (VL(l), _): (VL, DataType)) -> Expr<'c> { @@ -53,64 +63,58 @@ impl<'c> Eval> for &Env<'c> { } } -impl<'c> Eval> for &Env<'c> { - fn eval(self, normal::LogicRel(scope, body): normal::LogicRel) -> LogicRel<'c> { - LogicRel(scope, self.clone(), *body) - } -} - -impl<'c> Eval> for &Env<'c> { - fn eval(self, source: normal::Neutral) -> Logic<'c> { - Logic::App(self.eval(source)) +impl<'c> Eval> for &Env<'c> { + fn eval(self, normal::Aggr(op, scope, i, e): normal::Aggr) -> Expr<'c> { + Expr::Agg(Aggr(op, scope, self.clone(), *i, *e)) } } impl<'c> Eval> for &Env<'c> { fn eval(self, source: normal::UExpr) -> UExpr<'c> { - source.into_iter().filter_map(|term| self.eval(term)).collect() + source.into_iter().map(|term| self.eval(term)).collect() } } -fn exprs(logic: &normal::Logic) -> Vec<&normal::Expr> { - use shared::Logic::*; - match logic { - Bool(_) | Pred(_, _) => vec![], - Eq(e1, e2) => vec![e1, e2], - Neg(l) => exprs(l), - And(ls) => ls.iter().flat_map(exprs).collect(), - Or(ls) => ls.iter().flat_map(exprs).collect(), - App(_) => vec![], - Exists(normal::LogicRel(_, l)) => exprs(l), - } -} - -fn var_elim<'c>( +// env : C -> stb::Expr D +// cong : [(Id, nom::Expr (C + S))] +// S', C + S -> stb::Expr (D + S') +pub fn min_subst<'c>( env: &Env<'c>, - vars: &[(u32, &normal::Expr)], + scope: Vector, + context: &Vector, cong: &[(u32, &normal::Expr)], ) -> (Vector, Vector>>) { - let groups = vars.iter().chain(cong).copied().into_group_map(); - let vars = vars - .iter() - .map(|&(g, e)| match e { - &shared::Expr::Var(v, ref ty) => (g, v, ty.clone()), - _ => unreachable!(), - }) - .collect_vec(); - - let Env(subst, lvl, _) = env; + let groups = cong.iter().copied().into_group_map(); + let Env(subst, _) = env; let level = subst.len(); - let bound = level..level + vars.len(); - let mut scope = Vector::new(); - let mut keys: HashSet<_> = vars.iter().map(|&(_, v, _)| v).collect(); + let bound = level..level + scope.len(); + let vars = bound.clone().map(VL); + let var_groups = vars.clone().map(|v| { + ( + v, + cong.iter() + .find(|&&(_, e)| e == &normal::Expr::Var(v, e.ty())) + .map(|(g, _)| groups.get(&g).unwrap()), + ) + }); + let mut new_scope = Vector::new(); + let mut keys: HashSet<_> = vars.clone().collect(); let mut deps_map = BTreeMap::new(); - let (exprs, mut var_subst) = vars - .into_iter() - .map(|(g, v, ty)| { - let group = groups.get(&g).unwrap(); + + fn root_deps(vars: &HashSet, deps_map: &BTreeMap>) -> HashSet { + let saturate = |var, deps: &BTreeMap<_, _>| { + deps.get(&var).map_or_else(|| HashSet::unit(var), |vars| root_deps(vars, deps)) + }; + HashSet::unions(vars.iter().map(|&v| saturate(v, deps_map))) + } + + let (exprs, mut var_subst) = var_groups + .zip(scope.clone()) + .map(|((v, es), ty)| { keys.remove(&v); - if let Some((_, deps, expr)) = group - .iter() + if let Some((_, deps, expr)) = es + .into_iter() + .flatten() .filter_map(|&expr| { let deps = expr.deps(&bound); let root_deps = root_deps(&deps, &deps_map); @@ -123,101 +127,127 @@ fn var_elim<'c>( (expr.clone(), None) } else { keys.insert(v); - let new_v = VL(lvl + scope.len()); + let new_v = VL(context.len() + new_scope.len()); log::info!("[key] {} ~> {}", v, new_v); - scope.push_back(ty.clone()); + new_scope.push_back(ty.clone()); (normal::Expr::Var(v, ty.clone()), Some(Expr::Var(new_v, ty))) } }) .unzip(); - - fn root_deps(vars: &HashSet, deps_map: &BTreeMap>) -> HashSet { - let saturate = |var, deps: &BTreeMap<_, _>| { - deps.get(&var).map_or_else(|| HashSet::unit(var), |vars| root_deps(vars, deps)) - }; - HashSet::unions(vars.iter().map(|&v| saturate(v, deps_map))) - } - + // Ensures v is mapped to some Expr fn prune<'c>( v: VL, - keys: &HashSet, deps_map: &mut BTreeMap>, var_subst: &mut Vector>>, exprs: &Vec, env: &Env<'c>, ) { if let Some((v, deps)) = deps_map.remove_entry(&v) { - deps.into_iter().for_each(|w| prune(w, keys, deps_map, var_subst, exprs, env)); + deps.into_iter().for_each(|w| prune(w, deps_map, var_subst, exprs, env)); let i = v.0 - env.0.len(); var_subst[i] = Some((&env.append(var_subst.clone())).eval(exprs[i].clone())); }; } while let Some((&v, _)) = deps_map.first_key_value() { - prune(v, &keys, &mut deps_map, &mut var_subst, &exprs, env); + prune(v, &mut deps_map, &mut var_subst, &exprs, env); } - (scope, var_subst) + (new_scope, var_subst) } -impl<'c> Eval>> for &Env<'c> { - fn eval(self, source: normal::Term) -> Option> { - let Env(subst, lvl, z3_env) = self; - let z3_env = z3_env.extend(&source.scope); - let solver = &z3_env.0.solver; - let constraint = (&z3_env).eval(&source.logic); - let vars = shared::Expr::vars(subst.len(), source.scope.clone()); - let exprs = vars - .iter() - .chain(exprs(&source.logic)) - .filter(|e| e.in_scope(subst.len() + source.scope.len())) - .collect_vec(); - let z3_asts = exprs.iter().map(|&e| (&z3_env).eval(e)).collect_vec(); - let z3_asts = z3_asts.iter().map(|e| e as &dyn Ast).collect_vec(); - solver.push(); - solver.assert(&constraint); - let handle = solver.get_context().handle(); - let checked = crossbeam::atomic::AtomicCell::new(false); - let (ids, res) = crossbeam::thread::scope(|s| { - let checked = &checked; - let p = crossbeam::sync::Parker::new(); - let u = p.unparker().clone(); - s.spawn(move |_| { - p.park_timeout(Ctx::timeout()); - if !checked.load() { - handle.interrupt(); - } - }); - let (ids, res) = solver.get_implied_equalities(z3_asts.as_slice()); - checked.store(true); - u.unpark(); - (ids, res) - }) - .unwrap(); - solver.pop(1); - match res { - SatResult::Unsat => None, - SatResult::Unknown => { - let scope = source.scope; - let vars = &Expr::vars(*lvl, scope.clone()).into_iter().map(Some).collect(); - let env = &Env(subst + vars, lvl + scope.len(), z3_env); - let logic = env.eval(source.logic); - let apps = env.eval(source.apps); - Some(Term { scope, logic, apps }) +impl<'c> Eval> for &Env<'c> { + fn eval(self, Sigma(scope, inner): normal::Term) -> Term<'c> { + Term(scope, self.clone(), inner) + } +} + +pub type NormAgg<'c> = (Vector, Logic<'c>, Vector>, Expr<'c>); + +impl<'c> Expr<'c> { + pub fn split(self, aop: &str, context: &Vector) -> Vector> { + match self { + Expr::Op(op, args, _) if op == aop => { + args.into_iter().flat_map(|arg| arg.split(aop, context)).collect() }, - SatResult::Sat => { - let groups = ids.into_iter().zip(exprs).collect_vec(); - log::info!( - "Congruence groups: {}", - groups.iter().map(|(g, e)| format!("[{}, {}]", g, e)).join(", ") - ); - let (vars, cong) = groups.split_at(source.scope.len()); - let env = &Env(subst.clone(), *lvl, z3_env.clone()); - let (scope, ref new_subst) = var_elim(env, vars, cong); - let env = &Env(subst + new_subst, lvl + scope.len(), z3_env); - let logic = env.eval(source.logic); - let apps = env.eval(source.apps); - Some(Term { scope, logic, apps }) + Expr::Agg(Aggr(op, old_scope, env, i, e)) if op == aop => { + if let Some((scope, new_subst)) = + stablize(&env, old_scope.clone(), context, i.logic.clone()) + { + let Env(subst, z3_env) = env; + let env = &Env(subst + new_subst, z3_env.extend(&old_scope)); + let logic = env.eval(i.logic); + let apps = env.eval(i.apps); + env.eval(e) + .split(aop, &(context + &scope)) + .into_iter() + .map(|(scp, l, aps, e)| { + (&scope + &scp, Logic::And(vector![logic.clone(), l]), &apps + &aps, e) + }) + .collect() + } else { + vector![] + } }, + _ => vector![(vector![], Logic::tt(), vector![], self)], } } } + +// Env: C -> stb::Expr D +// C + S ~> C + S' +pub fn stablize<'c>( + env: &Env<'c>, + scope: Vector, + context: &Vector, + logic: normal::Logic, +) -> Option<(Vector, Vector>>)> { + let Env(subst, z3_env) = env; + let z3_env = &z3_env.extend(&scope); + let solver = &z3_env.0.solver; + let constraint = z3_env.eval(&logic); + let vars = shared::Expr::vars(subst.len(), scope.clone()); + let exprs = vars + .iter() + .chain(logic.exprs()) + .filter(|e| e.in_scope(subst.len() + scope.len())) + .unique() + .collect_vec(); + let z3_asts = exprs.iter().map(|&e| z3_env.eval(e)).collect_vec(); + let z3_asts = z3_asts.iter().map(|e| e as &dyn Ast).collect_vec(); + solver.push(); + solver.assert(&constraint); + let handle = solver.get_context().handle(); + let checked = crossbeam::atomic::AtomicCell::new(false); + let (ids, res) = std::thread::scope(|s| { + let checked = &checked; + let p = crossbeam::sync::Parker::new(); + let u = p.unparker().clone(); + s.spawn(move || { + p.park_timeout(Ctx::timeout()); + if !checked.load() { + handle.interrupt(); + } + }); + let (ids, res) = solver.get_implied_equalities(z3_asts.as_slice()); + checked.store(true); + u.unpark(); + (ids, res) + }); + solver.pop(1); + match res { + SatResult::Unsat => None, + SatResult::Unknown => { + let vars = Expr::vars(context.len(), scope.clone()).into_iter().map(Some).collect(); + Some((scope, vars)) + }, + SatResult::Sat => { + let groups = ids.into_iter().zip(exprs).collect_vec(); + log::info!( + "Congruence groups: {}", + groups.iter().map(|(g, e)| format!("[{}, {}]", g, e)).join(", ") + ); + let env = &Env(subst.clone(), z3_env.clone()); + Some(min_subst(env, scope, context, &groups)) + }, + } +} diff --git a/src/pipeline/syntax.rs b/src/pipeline/syntax.rs index 8c5ef95..bc65b46 100644 --- a/src/pipeline/syntax.rs +++ b/src/pipeline/syntax.rs @@ -6,46 +6,30 @@ use indenter::indented; use itertools::Itertools; use UExpr::*; -use super::shared::VL; +use super::shared::{Lambda, Neutral, Typed}; use crate::pipeline::shared; use crate::pipeline::shared::DataType; -/// A relation in the U-semiring formalism is a function that maps a tuple to a U-semiring value. -/// It can be represented as a variable for an unknown relation, or encoded as a lambda function -/// when having the explict definition. -/// Here the lambda term uses a vector of data types to bind every components of the input tuple. -/// That is, each component is treated as a unique variable that might appear in the function body. -pub type Expr = shared::Expr; -#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] -pub struct Application(pub Relation, pub Vector); - -#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] -pub enum Relation { - Var(VL), - HOp(String, Vec, Box), - Lam(Vector, Box), -} +pub type Relation = Lambda; +pub type Expr = shared::Expr; +pub type Logic = shared::Logic; -pub type Logic = shared::Logic; +#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq, Hash)] +pub struct Aggr(pub String, pub Vector, pub UExpr, pub Box); -impl Relation { - pub fn lam(scopes: Vector, body: impl Into>) -> Relation { - Relation::Lam(scopes, body.into()) +impl Display for Aggr { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let Aggr(name, scope, uexpr, expr) = self; + write!(f, "⨿{} {:?} {{", name, scope)?; + writeln!(indented(f).with_str("\t"), "{},", uexpr)?; + writeln!(indented(f).with_str("\t"), "{}", expr)?; + write!(f, "}}") } } -impl Display for Relation { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - Relation::Var(table) => write!(f, "#{}", table.0), - Relation::Lam(scopes, body) => { - writeln!(f, "(λ {:?}", scopes)?; - writeln!(indented(f).with_str("\t"), "{})", body) - }, - Relation::HOp(op, args, rel) => { - writeln!(f, "{}({}, {})", op, args.iter().join(", "), rel) - }, - } +impl Typed for Aggr { + fn ty(&self) -> DataType { + self.3.ty() } } @@ -65,10 +49,11 @@ pub enum UExpr { // Summation that ranges over tuples of certain schema Sum(Vector, Box), // Predicate that can be evaluated to 0 or 1 - Pred(Logic), - // Application of a relation with arguments. - // Here each argument are required to be a single variable. - App(Relation, Vector), + Pred(Box), + // Application of a lambda with arguments + App(Box, Vector), + // Neutral application + Neu(Neutral), } impl UExpr { @@ -80,24 +65,20 @@ impl UExpr { UExpr::Mul(vector![]) } - pub fn sum(scopes: impl Into>, body: impl Into>) -> Self { - Sum(scopes.into(), body.into()) + pub fn sum(scope: impl Into>, body: impl Into>) -> Self { + Sum(scope.into(), body.into()) } pub fn squash(body: impl Into>) -> Self { Squash(body.into()) } - pub fn as_logic(self) -> Logic { - match self { - Add(us) => Logic::Or(us.into_iter().map(UExpr::as_logic).collect()), - Mul(us) => Logic::And(us.into_iter().map(UExpr::as_logic).collect()), - Squash(u) => u.as_logic(), - Not(u) => !u.as_logic(), - Sum(scopes, body) => Logic::Exists(Relation::Lam(scopes, body)), - Pred(logic) => logic, - App(table, args) => Logic::App(Application(table, args)), - } + pub fn pred(l: Logic) -> Self { + Pred(l.into()) + } + + pub fn app(rel: impl Into>, args: Vector) -> Self { + App(rel.into(), args) } } @@ -110,8 +91,8 @@ impl Display for UExpr { Mul(us) => write!(f, "({})", us.iter().format(" × ")), Squash(u) => write!(f, "‖{}‖", u), Not(u) => write!(f, "¬({})", u), - Sum(scopes, body) => { - writeln!(f, "∑ {:?} {{", scopes)?; + Sum(scope, body) => { + writeln!(f, "∑ {:?} {{", scope)?; writeln!(indented(f).with_str("\t"), "{}", body)?; write!(f, "}}") }, @@ -119,17 +100,13 @@ impl Display for UExpr { App(rel, args) => { write!(f, "{}({})", rel, args.iter().join(", ")) }, + Neu(Neutral(head, args)) => { + write!(f, "{}({})", head, args.iter().join(", ")) + }, } } } -impl Display for Application { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - let Application(rel, args) = self; - write!(f, "{}({})", rel, args.iter().join(", ")) - } -} - // The following overload the +, *, and ! operators for UExpr, so that we can construct an expression // in a natural way. diff --git a/src/pipeline/unify.rs b/src/pipeline/unify.rs index 5ebf312..8d197d9 100644 --- a/src/pipeline/unify.rs +++ b/src/pipeline/unify.rs @@ -1,42 +1,64 @@ use std::cell::RefCell; use std::collections::HashMap; -use std::io::Write; -use std::ops::Deref; +use std::io::{Read, Write}; use std::process::{Command, Stdio}; use std::rc::Rc; use imbl::Vector; -use isoperm::wrapper::Isoperm; use itertools::Itertools; use z3::ast::{Ast, Bool, Dynamic, Int}; -use z3::SatResult; -use super::normal::Term; -use super::shared::{self, Ctx}; -use crate::pipeline::normal::{Expr, HOpMap, RelHOpMap, Relation, UExpr, Z3Env}; -use crate::pipeline::shared::{DataType, Eval, Head, VL}; +use super::normal::{Inner, Term}; +use super::shared::{Ctx, Lambda, Sigma}; +use crate::pipeline::normal::{Expr, UExpr, Z3Env}; +use crate::pipeline::shared::{DataType, Eval}; pub trait Unify { - fn unify(self, t1: T, t2: T) -> bool; + fn unify(&self, t1: &T, t2: &T) -> bool; } #[derive(Clone)] pub struct UnifyEnv<'c>(pub Rc>, pub Vector>, pub Vector>); -impl<'c> Unify<&Relation> for &UnifyEnv<'c> { - fn unify(self, rel1: &Relation, rel2: &Relation) -> bool { - let (shared::Lambda(tys1, uexpr1), shared::Lambda(tys2, uexpr2)) = (rel1, rel2); - if tys1 != tys2 { +impl UnifyEnv<'_> { + fn envs(&self) -> (Z3Env, Z3Env) { + let UnifyEnv(ctx, subst1, subst2) = self; + let h_ops = Rc::new(RefCell::new(HashMap::new())); + let agg_ops = Rc::new(RefCell::new(HashMap::new())); + let rel_h_ops = Rc::new(RefCell::new(HashMap::new())); + let env1 = + Z3Env(ctx.clone(), subst1.clone(), h_ops.clone(), agg_ops.clone(), rel_h_ops.clone()); + let env2 = + Z3Env(ctx.clone(), subst2.clone(), h_ops.clone(), agg_ops.clone(), rel_h_ops.clone()); + (env1, env2) + } +} + +impl<'c, T> Unify> for UnifyEnv<'c> +where UnifyEnv<'c>: Unify +{ + fn unify(&self, t1: &Lambda, t2: &Lambda) -> bool { + let (Lambda(scp1, body1), Lambda(scp2, body2)) = (t1, t2); + if scp1 != scp2 { return false; } let UnifyEnv(ctx, subst1, subst2) = self; - let vars = &tys1.iter().map(|ty| ctx.var(ty, "v")).collect(); - UnifyEnv(ctx.clone(), subst1 + vars, subst2 + vars).unify(uexpr1, uexpr2) + let vars = &scp1.iter().map(|ty| ctx.var(ty, "v")).collect(); + let env = UnifyEnv(ctx.clone(), subst1 + vars, subst2 + vars); + env.unify(body1, body2) + } +} + +impl<'c, A, B> Unify<(A, B)> for UnifyEnv<'c> +where UnifyEnv<'c>: Unify + Unify +{ + fn unify(&self, (a1, b1): &(A, B), (a2, b2): &(A, B)) -> bool { + self.unify(a1, a2) && self.unify(b1, b2) } } -impl<'c> Unify<&UExpr> for &UnifyEnv<'c> { - fn unify(self, u1: &UExpr, u2: &UExpr) -> bool { +impl<'c> Unify for UnifyEnv<'c> { + fn unify(&self, u1: &UExpr, u2: &UExpr) -> bool { let mut terms2 = u2.0.clone(); u1.0.len() == u2.0.len() && u1.iter().all(|t1| { @@ -46,62 +68,70 @@ impl<'c> Unify<&UExpr> for &UnifyEnv<'c> { } } -impl<'c> Unify<&Expr> for &UnifyEnv<'c> { - fn unify(self, t1: &Expr, t2: &Expr) -> bool { - let UnifyEnv(ctx, subst1, subst2) = self; - let h_ops = Rc::new(RefCell::new(HashMap::new())); - let rel_h_ops = Rc::new(RefCell::new(HashMap::new())); - let env1 = &Z3Env(ctx.clone(), subst1.clone(), h_ops.clone(), rel_h_ops.clone()); - let env2 = &Z3Env(ctx.clone(), subst2.clone(), h_ops.clone(), rel_h_ops.clone()); - let e1 = env1.eval(t1); - let e2 = env2.eval(t2); - let h_ops_equiv = - extract_equiv(ctx.clone(), h_ops.borrow().deref(), rel_h_ops.borrow().deref()); - ctx.solver.check_assumptions(&[h_ops_equiv, e1._eq(&e2).not()]) == SatResult::Unsat - } -} - -impl<'c> Unify<&Vec> for &UnifyEnv<'c> { - fn unify(self, ts1: &Vec, ts2: &Vec) -> bool { - ts1.len() == ts2.len() && ts1.iter().zip(ts2).all(|(t1, t2)| self.unify(t1, t2)) +impl<'c> Unify> for UnifyEnv<'c> { + fn unify(&self, es1: &Vec, es2: &Vec) -> bool { + es1.len() == es2.len() && { + let (ref env1, ref env2) = self.envs(); + let expr_eqs = + es1.iter().zip(es2).map(|(e1, e2)| env1.eval(e1)._eq(&env2.eval(e2))).collect_vec(); + let eq = Bool::and(self.0.z3_ctx(), &expr_eqs.iter().collect_vec()); + let h_ops_eq = env1.extract_equiv(); + smt(&self.0.solver, h_ops_eq.implies(&eq)) + } } } -fn extract_equiv<'c>(ctx: Rc>, h_ops: &HOpMap<'c>, rel_h_ops: &RelHOpMap<'c>) -> Bool<'c> { - let expr_eqs = h_ops - .iter() - .tuple_combinations() - .filter_map(|(((op1, args1, rel1, env1), v1), ((op2, args2, rel2, env2), v2))| { - let env = &UnifyEnv(ctx.clone(), env1.clone(), env2.clone()); - (op1 == op2 && env.unify(args1, args2) && env.unify(rel1, rel2)).then(|| v1._eq(v2)) - }) - .collect_vec(); - let rel_eqs = rel_h_ops - .iter() - .tuple_combinations() - .filter_map( - |( - ((op1, args1, rel1, env1, sq1), (n1, dom1)), - ((op2, args2, rel2, env2, sq2), (n2, dom2)), - )| { - let env = UnifyEnv(ctx.clone(), env1.clone(), env2.clone()); - (op1 == op2 - && sq1 == sq2 && dom1 == dom2 - && env.unify(args1, args2) - && env.unify(rel1, rel2)) - .then(|| { - let vars = dom1.iter().map(|ty| ctx.var(ty, "t")).collect_vec(); - let vars = vars.iter().collect_vec(); - let target = if *sq1 { DataType::Boolean } else { DataType::Integer }; - let l = &ctx.app(n1, &vars, &target, false); - let r = &ctx.app(n2, &vars, &target, false); - let vars = vars.iter().map(|&v| v as &dyn Ast).collect_vec(); - z3::ast::forall_const(ctx.z3_ctx(), &vars, &[], &l._eq(r)) - }) - }, +impl Z3Env<'_> { + pub fn extract_equiv(&self) -> Bool { + let Z3Env(ctx, _, h_ops, agg_ops, rel_h_ops) = self; + let (h_ops, agg_ops, rel_h_ops) = + (&*h_ops.borrow(), &*agg_ops.borrow(), &*rel_h_ops.borrow()); + let expr_eqs = h_ops + .iter() + .tuple_combinations() + .filter_map(|(((op1, args1, rel1, env1), v1), ((op2, args2, rel2, env2), v2))| { + let env = &UnifyEnv(ctx.clone(), env1.clone(), env2.clone()); + (op1 == op2 && env.unify(args1, args2) && env.unify(rel1, rel2)).then(|| v1._eq(v2)) + }) + .collect_vec(); + let agg_eqs = agg_ops + .iter() + .tuple_combinations() + .filter_map(|(((op1, lam1, env1), v1), ((op2, lam2, env2), v2))| { + let env = &UnifyEnv(ctx.clone(), env1.clone(), env2.clone()); + (op1 == op2 && env.unify(lam1, lam2)).then(|| v1._eq(v2)) + }) + .collect_vec(); + let rel_eqs = rel_h_ops + .iter() + .tuple_combinations() + .filter_map( + |( + ((op1, args1, rel1, env1, sq1), (n1, dom1)), + ((op2, args2, rel2, env2, sq2), (n2, dom2)), + )| { + let env = UnifyEnv(ctx.clone(), env1.clone(), env2.clone()); + (op1 == op2 + && sq1 == sq2 && dom1 == dom2 + && env.unify(args1, args2) + && env.unify(rel1, rel2)) + .then(|| { + let vars = dom1.iter().map(|ty| ctx.var(ty, "t")).collect_vec(); + let vars = vars.iter().collect_vec(); + let target = if *sq1 { DataType::Boolean } else { DataType::Integer }; + let l = &ctx.app(n1, &vars, &target, false); + let r = &ctx.app(n2, &vars, &target, false); + let vars = vars.iter().map(|&v| v as &dyn Ast).collect_vec(); + z3::ast::forall_const(ctx.z3_ctx(), &vars, &[], &l._eq(r)) + }) + }, + ) + .collect_vec(); + Bool::and( + ctx.z3_ctx(), + &expr_eqs.iter().chain(agg_eqs.iter()).chain(rel_eqs.iter()).collect_vec(), ) - .collect_vec(); - Bool::and(ctx.z3_ctx(), &expr_eqs.iter().chain(rel_eqs.iter()).collect_vec()) + } } fn perm_equiv(v1: &Vector, v2: &Vector) -> bool { @@ -114,94 +144,72 @@ fn perm_equiv(v1: &Vector, v2: &Vector) -> bool { } } -impl<'c> Unify<&Term> for &UnifyEnv<'c> { - fn unify(self, t1: &Term, t2: &Term) -> bool { - if !perm_equiv(&t1.scope, &t2.scope) { +fn perms(types: Vec, vars: Vec) -> impl Iterator> +where + T: Ord + PartialEq + Clone, + V: Clone, +{ + use itertools::Either; + let sort_perm = permutation::sort(types.as_slice()); + let sorted_scope = sort_perm.apply_slice(types.as_slice()); + let sorted_vars = sort_perm.apply_slice(vars.as_slice()); + let groups = sorted_scope.iter().group_by(|a| *a); + let group_lengths = if types.is_empty() { + Either::Left(std::iter::once(0)) + } else { + Either::Right(groups.into_iter().map(|(_, group)| group.count())) + }; + let mut level = 0; + let inv_sort_perm = sort_perm.inverse(); + group_lengths + .map(|length| { + let perms = (level..level + length).permutations(length); + level += length; + perms + }) + .multi_cartesian_product() + .map(move |perms| { + let perm_vec = perms.into_iter().flatten().collect_vec(); + let permute = &inv_sort_perm * &permutation::Permutation::from_vec(perm_vec); + permute.apply_slice(sorted_vars.as_slice()) + }) +} + +impl<'c> Unify for UnifyEnv<'c> { + fn unify(&self, Sigma(s1, t1): &Term, Sigma(s2, t2): &Term) -> bool { + if !perm_equiv(&s1, &s2) { return false; } log::info!("Unifying\n{}\n{}", t1, t2); let UnifyEnv(ctx, subst1, subst2) = self; - type Var<'e, 'c> = isoperm::wrapper::Var, &'e Expr>; - fn extract<'v, 'c>( - t: &'v Term, - subst: &'v Vector>, - ) -> (Vec<(usize, Vec>)>, HashMap, DataType>) { - let scope = subst.len()..subst.len() + t.scope.len(); - let mut args: HashMap<_, _> = - scope.clone().map(Var::Local).zip(t.scope.clone()).collect(); - let constraints = t - .apps - .iter() - .filter_map(|app| { - let translate = |arg: &'v Expr| match arg { - Expr::Var(VL(l), _) if scope.contains(l) => Var::Local(*l), - Expr::Var(VL(l), ty) => { - let v = &subst[*l]; - args.insert(Var::Global(v), ty.clone()); - Var::Global(v) - }, - arg => { - args.insert(Var::Expr(arg), arg.ty()); - Var::Expr(arg) - }, - }; - match &app.head { - &Head::Var(VL(t)) => Some((t, app.args.iter().map(translate).collect())), - Head::HOp(_, _, _) => None, - } - }) - .collect(); - (constraints, args) - } - let (constraints1, args1) = extract(t1, subst1); - let (constraints2, args2) = extract(t2, subst2); - let z3_ctx = ctx.z3_ctx(); - let vars1 = t1.scope.iter().map(|ty| ctx.var(ty, "v")).collect(); + let vars1 = s1.iter().map(|ty| ctx.var(ty, "v")).collect(); let subst1 = subst1 + &vars1; - if let Ok(mut perm) = Isoperm::new(constraints1, args1, constraints2, args2) { - perm.result() - .map(|bij| { - bij.into_iter() - .filter_map(|(v1, v2)| match (v1, v2) { - (&Var::Local(l1), &Var::Local(l2)) => Some((l2, subst1[l1].clone())), - _ => None, - }) - .sorted_by_key(|(l, _)| *l) - .map(|(_, v)| v) - .collect_vec() - }) - .take(24) - .any(|vars2| { - assert_eq!(vars2.len(), t2.scope.len()); - log::info!("Permutation: {:?}", vars2); - let subst2 = subst2 + &vars2.into(); - let h_ops = Rc::new(RefCell::new(HashMap::new())); - let rel_h_ops = Rc::new(RefCell::new(HashMap::new())); - let env1 = - &Z3Env(ctx.clone(), subst1.clone(), h_ops.clone(), rel_h_ops.clone()); - let env2 = - &Z3Env(ctx.clone(), subst2.clone(), h_ops.clone(), rel_h_ops.clone()); - let (logic1, apps1): (_, Int<'c>) = (env1.eval(&t1.logic), env1.eval(&t1.apps)); - let (logic2, apps2) = (env2.eval(&t2.logic), env2.eval(&t2.apps)); - let apps_equiv = apps1._eq(&apps2); - let equiv = Bool::and(z3_ctx, &[&logic1.iff(&logic2), &apps_equiv]); - let solver = &ctx.solver; - solver.push(); - solver.assert(&logic1); - solver.assert(&logic2); - let h_ops_equiv = extract_equiv( - ctx.clone(), - h_ops.borrow().deref(), - rel_h_ops.borrow().deref(), - ); - solver.pop(1); - log::info!("{}", equiv); - log::info!("{}", h_ops_equiv); - smt(solver, h_ops_equiv.implies(&equiv)) - }) - } else { - false - } + perms(s1.iter().cloned().collect(), vars1.into_iter().collect()).take(24).any(|vars2| { + assert_eq!(vars2.len(), s2.len()); + log::info!("Permutation: {:?}", vars2); + UnifyEnv(ctx.clone(), subst1.clone(), subst2 + &vars2.into()).unify(t1, t2) + }) + } +} + +impl Unify for UnifyEnv<'_> { + fn unify(&self, t1: &Inner, t2: &Inner) -> bool { + let UnifyEnv(ctx, _, _) = self; + let (ref env1, ref env2) = self.envs(); + let z3_ctx = ctx.z3_ctx(); + let (logic1, apps1) = (env1.eval(&t1.logic), env1.eval(&t1.apps)); + let (logic2, apps2) = (env2.eval(&t2.logic), env2.eval(&t2.apps)); + let equiv = logic1 + .ite(&apps1, &Int::from_i64(z3_ctx, 0)) + ._eq(&logic2.ite(&apps2, &Int::from_i64(z3_ctx, 0))); + let solver = &ctx.solver; + solver.push(); + solver.assert(&Bool::or(z3_ctx, &[&logic1, &logic2])); + let h_ops_equiv = env1.extract_equiv(); + solver.pop(1); + log::info!("{}", equiv); + log::info!("{}", h_ops_equiv); + smt(solver, h_ops_equiv.implies(&equiv)) } } @@ -210,21 +218,66 @@ pub(crate) fn smt<'c>(solver: &'c z3::Solver, pred: Bool<'c>) -> bool { .dump_smtlib(pred.not()) .replace(" and", " true") .replace(" or", " false") + .replace(")and", ") true") + .replace(")or", ") false") .replace("(* ", "(* 1 ") .replace("(+ ", "(+ 0 "); let smt = smt.strip_prefix("; \n(set-info :status )").unwrap_or(smt.as_str()); - let timeout = "--tlimit=".to_string() + &Ctx::timeout().as_millis().to_string(); - let mut child = Command::new("cvc5") - .args([&timeout, "--strings-exp"]) - .stdin(Stdio::piped()) - .stdout(Stdio::piped()) - .spawn() - .expect("Failed to spawn child process"); - let mut stdin = child.stdin.take().expect("Failed to open stdin"); - stdin.write_all("(set-logic ALL)".as_bytes()).unwrap(); - stdin.write_all(smt.as_bytes()).unwrap(); - drop(stdin); - let output = child.wait_with_output().expect("Failed to read stdout"); - let result = String::from_utf8(output.stdout).unwrap(); - dbg!(result).ends_with("unsat\n") + let res = crossbeam::atomic::AtomicCell::new(false); + let last = crossbeam::atomic::AtomicCell::new(false); + crossbeam::thread::scope(|s| { + let res = &res; + let last = &last; + let p = crossbeam::sync::Parker::new(); + let u1 = p.unparker().clone(); + let u2 = p.unparker().clone(); + let mut z3_cmd = Command::new("z3") + .args(["-in"]) + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .spawn() + .expect("Failed to spawn child process for z3."); + let mut z3_in = z3_cmd.stdin.take().expect("Failed to open stdin."); + let mut z3_out = z3_cmd.stdout.take().expect("Failed to read stdout"); + let mut cvc5_cmd = Command::new("cvc5") + .args(["--strings-exp"]) + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .spawn() + .expect("Failed to spawn child process for cvc5."); + let mut cvc5_in = cvc5_cmd.stdin.take().expect("Failed to open stdin."); + let mut cvc5_out = cvc5_cmd.stdout.take().expect("Failed to capture stdout"); + s.spawn(move |_| { + z3_in.write_all(smt.as_bytes()).unwrap(); + drop(z3_in); + let mut result = String::new(); + z3_out.read_to_string(&mut result).expect("Failed to read stdout."); + log::info!("Z3 result: {}", result); + let provable = result.starts_with("unsat\n"); + res.fetch_or(provable); + if result.starts_with("unsat\n") || result.starts_with("sat\n") || last.fetch_or(true) { + u1.unpark(); + } + }); + s.spawn(move |_| { + cvc5_in.write_all("(set-logic ALL)".as_bytes()).unwrap(); + cvc5_in.write_all(smt.as_bytes()).unwrap(); + drop(cvc5_in); + let mut result = String::new(); + cvc5_out.read_to_string(&mut result).expect("Failed to read stdout."); + log::info!("CVC5 result: {}", result); + let provable = result.ends_with("unsat\n"); + res.fetch_or(provable); + if result.starts_with("unsat\n") || result.starts_with("sat\n") || last.fetch_or(true) { + u2.unpark(); + } + }); + p.park_timeout(Ctx::timeout()); + z3_cmd.kill().unwrap(); + z3_cmd.wait().unwrap(); + cvc5_cmd.kill().unwrap(); + cvc5_cmd.wait().unwrap(); + res.load() + }) + .unwrap() } diff --git a/src/solver.rs b/src/solver.rs deleted file mode 100644 index 88ddb93..0000000 --- a/src/solver.rs +++ /dev/null @@ -1,15 +0,0 @@ -use crate::pipeline::shared::Schema; -use crate::pipeline::syntax::Relation; -use crate::pipeline::{evaluate, unify}; - -/// The collection of all data in a request. -/// We need to check the equivalence of the two relations under the given environment. -#[derive(Clone, Debug)] -pub struct Payload(pub Vec, pub Relation, pub Relation); - -impl Payload { - pub fn check(self) -> bool { - let Payload(schemas, r1, r2) = self; - unify(evaluate(r1, &schemas.clone().into()), evaluate(r2, &schemas.into())) - } -} diff --git a/tests/RelOptRulesTest/testAddRedundantSemiJoinRule.json b/tests/RelOptRulesTest/testAddRedundantSemiJoinRule.json deleted file mode 100644 index 68449ce..0000000 --- a/tests/RelOptRulesTest/testAddRedundantSemiJoinRule.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateCaseToFilter.json b/tests/RelOptRulesTest/testAggregateCaseToFilter.json deleted file mode 100644 index 632e82d..0000000 --- a/tests/RelOptRulesTest/testAggregateCaseToFilter.json +++ /dev/null @@ -1,1335 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "40", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'x'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "CHAR" - } - ], - "type": "CHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "45", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "70", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 5, - "type": "CHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 8, - "type": "DECIMAL" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "DECIMAL" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "40", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'x'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "CHAR" - } - ], - "type": "CHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "45", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "70", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "column": 5, - "type": "BIGINT" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "DECIMAL" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "DECIMAL" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "40", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "45", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "<>", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "70", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "DECIMAL" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "DECIMAL" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 14, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "DECIMAL" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "40", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "45", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "<>", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "70", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)], COUNT_DISTINCT_CLERK=[COUNT(DISTINCT $1)], SUM_SAL_D10=[SUM($2)], SUM_SAL_D20=[SUM($3)], COUNT_D30=[SUM($4)], COUNT_D40=[COUNT($5)], COUNT_D45=[SUM($6)], COUNT_D50=[SUM($7)], SUM_NULL_D60=[SUM($8)], SUM_NULL_D70=[SUM($9)], COUNT_D20=[COUNT($10)])\r\n LogicalProject(SAL=[$1], $f1=[CASE(=($0, 'CLERK'), $2, null:INTEGER)], $f2=[CASE(=($2, 10), $1, null:INTEGER)], $f3=[CASE(=($2, 20), $1, 0)], $f4=[CASE(=($2, 30), 1, 0)], $f5=[CASE(=($2, 40), 'x', null:CHAR(1))], $f6=[CASE(=($2, 45), 1, null:INTEGER)], $f7=[CASE(=($2, 50), 1, null:INTEGER)], $f8=[null:DECIMAL(19, 9)], $f9=[CASE(=($2, 70), null:INTEGER, 1)], $f10=[CASE(=($2, 20), 1, null:INTEGER)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(SUM_SAL=[$0], COUNT_DISTINCT_CLERK=[$1], SUM_SAL_D10=[$2], SUM_SAL_D20=[$3], COUNT_D30=[CAST($4):INTEGER], COUNT_D40=[$5], COUNT_D45=[$6], COUNT_D50=[$7], SUM_NULL_D60=[$8], SUM_NULL_D70=[$9], COUNT_D20=[$10])\r\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)], COUNT_DISTINCT_CLERK=[COUNT(DISTINCT $2) FILTER $3], SUM_SAL_D10=[SUM($4) FILTER $5], SUM_SAL_D20=[SUM($6) FILTER $7], COUNT_D30=[COUNT() FILTER $8], COUNT_D40=[COUNT() FILTER $9], COUNT_D45=[SUM($10) FILTER $11], COUNT_D50=[SUM($12) FILTER $13], SUM_NULL_D60=[SUM($1)], SUM_NULL_D70=[SUM($14) FILTER $15], COUNT_D20=[COUNT() FILTER $16])\r\n LogicalProject(SAL=[$1], $f8=[null:DECIMAL(19, 9)], DEPTNO=[$2], $f12=[=($0, 'CLERK')], SAL0=[$1], $f14=[=($2, 10)], SAL1=[$1], $f16=[=($2, 20)], $f17=[=($2, 30)], $f18=[=($2, 40)], $f19=[1], $f20=[=($2, 45)], $f21=[1], $f22=[=($2, 50)], $f23=[1], $f24=[<>($2, 70)], $f25=[=($2, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateConstantKeyRule.json b/tests/RelOptRulesTest/testAggregateConstantKeyRule.json deleted file mode 100644 index c6b709f..0000000 --- a/tests/RelOptRulesTest/testAggregateConstantKeyRule.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(C=[$2])\r\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(C=[$1])\r\n LogicalAggregate(group=[{0}], C=[COUNT()])\r\n LogicalProject(SAL=[$0])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateConstantKeyRule3.json b/tests/RelOptRulesTest/testAggregateConstantKeyRule3.json deleted file mode 100644 index a8892f0..0000000 --- a/tests/RelOptRulesTest/testAggregateConstantKeyRule3.json +++ /dev/null @@ -1,424 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "MGR" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Clerk'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Clerk'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "_ISO-8859-1'Clerk'", - "operand": [], - "type": "VARCHAR" - }, - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Clerk'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Clerk'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[>($2, 3)])\r\n LogicalAggregate(group=[{0, 1}], agg#0=[COUNT()])\r\n LogicalProject(MGR=[$1], JOB=[$0])\r\n LogicalFilter(condition=[AND(IS NULL($1), =($0, 'Clerk'))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(JOB=[$0])\r\n LogicalFilter(condition=[>($1, 3)])\r\n LogicalProject(JOB=['Clerk':VARCHAR(10)], $f2=[$1])\r\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\r\n LogicalProject(MGR=[$1])\r\n LogicalFilter(condition=[AND(IS NULL($1), =($0, 'Clerk'))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateDynamicFunction.json b/tests/RelOptRulesTest/testAggregateDynamicFunction.json deleted file mode 100644 index bcecfec..0000000 --- a/tests/RelOptRulesTest/testAggregateDynamicFunction.json +++ /dev/null @@ -1,396 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "HIREDATE" - ], - "types": [ - "INTEGER", - "TIMESTAMP" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "TIMESTAMP" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "TIMESTAMP" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "TIMESTAMP" - }, - { - "operator": "CURRENT_TIMESTAMP", - "operand": [], - "type": "TIMESTAMP" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "TIMESTAMP" - }, - { - "column": 3, - "type": "TIMESTAMP" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "TIMESTAMP" - }, - { - "operator": "CURRENT_TIMESTAMP", - "operand": [], - "type": "TIMESTAMP" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "TIMESTAMP" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CURRENT_TIMESTAMP", - "operand": [], - "type": "TIMESTAMP" - }, - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "TIMESTAMP" - }, - { - "operator": "CURRENT_TIMESTAMP", - "operand": [], - "type": "TIMESTAMP" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "TIMESTAMP" - }, - { - "operator": "CURRENT_TIMESTAMP", - "operand": [], - "type": "TIMESTAMP" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(HIREDATE=[$1])\r\n LogicalFilter(condition=[>($2, 3)])\r\n LogicalAggregate(group=[{0, 1}], agg#0=[COUNT()])\r\n LogicalFilter(condition=[AND(IS NULL($0), =($1, CURRENT_TIMESTAMP))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(HIREDATE=[$0])\r\n LogicalFilter(condition=[>($1, 3)])\r\n LogicalProject(HIREDATE=[CURRENT_TIMESTAMP], $f2=[$1])\r\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\r\n LogicalProject(MGR=[$0])\r\n LogicalFilter(condition=[AND(IS NULL($0), =($1, CURRENT_TIMESTAMP))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateExtractProjectRule.json b/tests/RelOptRulesTest/testAggregateExtractProjectRule.json deleted file mode 100644 index db5c125..0000000 --- a/tests/RelOptRulesTest/testAggregateExtractProjectRule.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateExtractProjectRuleWithGroupingSets.json b/tests/RelOptRulesTest/testAggregateExtractProjectRuleWithGroupingSets.json deleted file mode 100644 index 1c24135..0000000 --- a/tests/RelOptRulesTest/testAggregateExtractProjectRuleWithGroupingSets.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {0}, {2}]], EXPR$2=[SUM($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {0}, {2}]], EXPR$2=[SUM($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateExtractProjectRuleWithGroupingSets2.json b/tests/RelOptRulesTest/testAggregateExtractProjectRuleWithGroupingSets2.json deleted file mode 100644 index fe041d3..0000000 --- a/tests/RelOptRulesTest/testAggregateExtractProjectRuleWithGroupingSets2.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {1}]], EXPR$2=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {1}]], EXPR$2=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateGroupingSetsProjectMerge.json b/tests/RelOptRulesTest/testAggregateGroupingSetsProjectMerge.json deleted file mode 100644 index 0b4e2f4..0000000 --- a/tests/RelOptRulesTest/testAggregateGroupingSetsProjectMerge.json +++ /dev/null @@ -1,288 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\r\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$1=[SUM($2)])\r\n LogicalProject(X=[$2], Y=[$0], Z=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\r\n LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {2}, {}]], EXPR$1=[SUM($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove1.json b/tests/RelOptRulesTest/testAggregateJoinRemove1.json deleted file mode 100644 index 7cc0bf8..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove1.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove10.json b/tests/RelOptRulesTest/testAggregateJoinRemove10.json deleted file mode 100644 index e704de3..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove10.json +++ /dev/null @@ -1,393 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1, $2)])\r\n LogicalProject(DEPTNO=[$0], NAME=[$2], NAME0=[$4])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[left])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $2, $4)])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[left])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove11.json b/tests/RelOptRulesTest/testAggregateJoinRemove11.json deleted file mode 100644 index 26d2177..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove11.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$0], SLACKER=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove2.json b/tests/RelOptRulesTest/testAggregateJoinRemove2.json deleted file mode 100644 index 99dc048..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove2.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{1}], EXPR$1=[COUNT(DISTINCT $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove3.json b/tests/RelOptRulesTest/testAggregateJoinRemove3.json deleted file mode 100644 index 1f29a19..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove3.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$0], NAME=[$2])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $2)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove4.json b/tests/RelOptRulesTest/testAggregateJoinRemove4.json deleted file mode 100644 index 03254ed..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove4.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "scan": 1 - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove5.json b/tests/RelOptRulesTest/testAggregateJoinRemove5.json deleted file mode 100644 index 3ed5209..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove5.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$1], NAME=[$2])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove6.json b/tests/RelOptRulesTest/testAggregateJoinRemove6.json deleted file mode 100644 index 10edcad..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove6.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{2}], EXPR$1=[COUNT(DISTINCT $0)])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove7.json b/tests/RelOptRulesTest/testAggregateJoinRemove7.json deleted file mode 100644 index da3c335..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove7.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove8.json b/tests/RelOptRulesTest/testAggregateJoinRemove8.json deleted file mode 100644 index ac518fb..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove8.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$0], NAME0=[$3])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $2)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateJoinRemove9.json b/tests/RelOptRulesTest/testAggregateJoinRemove9.json deleted file mode 100644 index b94ce3a..0000000 --- a/tests/RelOptRulesTest/testAggregateJoinRemove9.json +++ /dev/null @@ -1,363 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$0], NAME=[$3])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0, 2}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateMerge1.json b/tests/RelOptRulesTest/testAggregateMerge1.json deleted file mode 100644 index 1b86a07..0000000 --- a/tests/RelOptRulesTest/testAggregateMerge1.json +++ /dev/null @@ -1,532 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "MGR", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 7, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{1}], EXPR$1=[MIN($4)], Z=[MAX($3)], EXPR$3=[SUM($6)], N=[SUM($5)], SAL=[SUM($2)])\r\n LogicalAggregate(group=[{0, 3}], X=[SUM($2)], Z=[MAX($2)], Y=[MIN($2)], M=[COUNT()], R=[COUNT($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{2}], EXPR$1=[MIN($1)], Z=[MAX($1)], EXPR$3=[COUNT($0)], N=[COUNT()], SAL=[SUM($1)])\r\n LogicalProject(MGR=[$1], SAL=[$2], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateMerge2.json b/tests/RelOptRulesTest/testAggregateMerge2.json deleted file mode 100644 index 96e538f..0000000 --- a/tests/RelOptRulesTest/testAggregateMerge2.json +++ /dev/null @@ -1,534 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "MGR", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - true, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$2=[$2], EXPR$3=[$3])\r\n LogicalAggregate(group=[{0, 2}], groups=[[{0}, {2}]], EXPR$2=[SUM($3)], EXPR$3=[SUM($4)])\r\n LogicalAggregate(group=[{0, 1, 4}], X=[SUM($3)], Y=[COUNT($2)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$2=[$2], EXPR$3=[$3])\r\n LogicalAggregate(group=[{0, 3}], groups=[[{0}, {3}]], EXPR$2=[SUM($2)], EXPR$3=[COUNT($1)])\r\n LogicalProject(EMPNO=[$0], MGR=[$2], SAL=[$3], DEPTNO=[$4])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateMerge8.json b/tests/RelOptRulesTest/testAggregateMerge8.json deleted file mode 100644 index 28eda9a..0000000 --- a/tests/RelOptRulesTest/testAggregateMerge8.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], X=[SUM($0)], Z=[MIN($1)])\r\n LogicalAggregate(group=[{}], X=[SUM($0)], Y=[MIN($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], X=[SUM($0)], Z=[MIN($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateMergeSum0.json b/tests/RelOptRulesTest/testAggregateMergeSum0.json deleted file mode 100644 index 7f3815e..0000000 --- a/tests/RelOptRulesTest/testAggregateMergeSum0.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], agg#0=[$SUM0($2)])\r\n LogicalAggregate(group=[{0, 1}], COUNT_COMM=[COUNT()])\r\n LogicalProject(MGR=[$3], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], agg#0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateProjectMerge.json b/tests/RelOptRulesTest/testAggregateProjectMerge.json deleted file mode 100644 index a733c3d..0000000 --- a/tests/RelOptRulesTest/testAggregateProjectMerge.json +++ /dev/null @@ -1,288 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM($2)])\r\n LogicalProject(X=[$2], Y=[$0], Z=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\r\n LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 2}], EXPR$1=[SUM($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateProjectPullUpConstants.json b/tests/RelOptRulesTest/testAggregateProjectPullUpConstants.json deleted file mode 100644 index 9158211..0000000 --- a/tests/RelOptRulesTest/testAggregateProjectPullUpConstants.json +++ /dev/null @@ -1,379 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "JOB", - "SAL" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1, 2}], S=[SUM($2)])\r\n LogicalProject(JOB=[$1], EMPNO=[$0], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(JOB=[$0], EMPNO=[10], SAL=[$1], S=[$2])\r\n LogicalAggregate(group=[{0, 1}], S=[SUM($1)])\r\n LogicalProject(JOB=[$1], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateProjectPullUpConstants2.json b/tests/RelOptRulesTest/testAggregateProjectPullUpConstants2.json deleted file mode 100644 index 236396d..0000000 --- a/tests/RelOptRulesTest/testAggregateProjectPullUpConstants2.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'John'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'John'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "operator": "_ISO-8859-1'John'", - "operand": [], - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'John'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'John'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalFilter(condition=[=($0, 'John')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(ENAME=['John':VARCHAR(20)], SAL=[$0])\r\n LogicalAggregate(group=[{1}])\r\n LogicalFilter(condition=[=($0, 'John')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateRemove1.json b/tests/RelOptRulesTest/testAggregateRemove1.json deleted file mode 100644 index a6566f1..0000000 --- a/tests/RelOptRulesTest/testAggregateRemove1.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "BIT_AND", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "BIT_OR", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "BIGINT" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], EXPR$1=[$2], EXPR$2=[$3], EXPR$3=[$4], EXPR$4=[$5], EXPR$5=[$6], EXPR$6=[$7])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM($2)], EXPR$2=[MIN($2)], EXPR$3=[MAX($2)], EXPR$4=[BIT_AND($2)], EXPR$5=[BIT_OR($2)], EXPR$6=[COUNT(DISTINCT $2)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$2], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], EXPR$1=[$1], EXPR$2=[$1], EXPR$3=[$1], EXPR$4=[$1], EXPR$5=[$1], EXPR$6=[1:BIGINT])\r\n LogicalProject(EMPNO=[$0], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateRemove2.json b/tests/RelOptRulesTest/testAggregateRemove2.json deleted file mode 100644 index cbb3f11..0000000 --- a/tests/RelOptRulesTest/testAggregateRemove2.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ], - "help": [ - "LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateRemove3.json b/tests/RelOptRulesTest/testAggregateRemove3.json deleted file mode 100644 index d3d592b..0000000 --- a/tests/RelOptRulesTest/testAggregateRemove3.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT($2)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$2], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], EXPR$1=[CASE(IS NOT NULL($1), 1:BIGINT, 0:BIGINT)])\r\n LogicalProject(EMPNO=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateRemove7.json b/tests/RelOptRulesTest/testAggregateRemove7.json deleted file mode 100644 index 6e7b5b5..0000000 --- a/tests/RelOptRulesTest/testAggregateRemove7.json +++ /dev/null @@ -1,541 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalProject(MGR=[$0], SUM_SAL=[$2])\r\n LogicalFilter(condition=[=($1, 100)])\r\n LogicalAggregate(group=[{0, 1}], SUM_SAL=[SUM($2)])\r\n LogicalProject(MGR=[$0], DEPTNO=[$2], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(MGR=[$0], SUM_SAL=[$2])\r\n LogicalFilter(condition=[=($1, 100)])\r\n LogicalAggregate(group=[{0, 1}], SUM_SAL=[SUM($2)])\r\n LogicalProject(MGR=[$0], DEPTNO=[$2], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateUnionTransposeWithOneInputUnique.json b/tests/RelOptRulesTest/testAggregateUnionTransposeWithOneInputUnique.json deleted file mode 100644 index 432d2be..0000000 --- a/tests/RelOptRulesTest/testAggregateUnionTransposeWithOneInputUnique.json +++ /dev/null @@ -1,1090 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(DEPTNO=[$0], T=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$0], T=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalProject(DEPTNO=[$0], T=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$0], T=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAggregateUnionTransposeWithTopLevelGroupSetRemapping.json b/tests/RelOptRulesTest/testAggregateUnionTransposeWithTopLevelGroupSetRemapping.json deleted file mode 100644 index 10a81cd..0000000 --- a/tests/RelOptRulesTest/testAggregateUnionTransposeWithTopLevelGroupSetRemapping.json +++ /dev/null @@ -1,956 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], T2=[$0])\r\n LogicalAggregate(group=[{1}], EXPR$0=[COUNT($0)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(T1=[CASE(=($0, 0), 1, null:INTEGER)], T2=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(T1=[CASE(=($0, 0), 1, null:INTEGER)], T2=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1], T2=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[$SUM0($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{1}], EXPR$0=[COUNT($0)])\r\n LogicalProject(T1=[CASE(=($0, 0), 1, null:INTEGER)], T2=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{1}], EXPR$0=[COUNT($0)])\r\n LogicalProject(T1=[CASE(=($0, 0), 1, null:INTEGER)], T2=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAll.json b/tests/RelOptRulesTest/testAll.json deleted file mode 100644 index 485c5fa..0000000 --- a/tests/RelOptRulesTest/testAll.json +++ /dev/null @@ -1,454 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "<= SOME", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "<=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 11, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": "<=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "<=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": "<=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 11, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[NOT(<= SOME($0, {\nLogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n}))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[NOT(CAST(OR(AND(IS TRUE(<=($0, $9)), <>($10, 0)), AND(>($10, $11), null, <>($10, 0), IS NOT TRUE(<=($0, $9))), AND(<=($0, $9), <>($10, 0), IS NOT TRUE(<=($0, $9)), <=($10, $11)))):BOOLEAN NOT NULL)])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(m=[$0], c=[$1], d=[$1])\r\n LogicalAggregate(group=[{}], m=[MAX($0)], c=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAlreadyFalseEliminatesFilter.json b/tests/RelOptRulesTest/testAlreadyFalseEliminatesFilter.json deleted file mode 100644 index 0f9faf0..0000000 --- a/tests/RelOptRulesTest/testAlreadyFalseEliminatesFilter.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalFilter(condition=[false])\r\n LogicalValues(tuples=[[{ 1, 2 }]])\r\n", - "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAntiJoinProjectTranspose.json b/tests/RelOptRulesTest/testAntiJoinProjectTranspose.json deleted file mode 100644 index 98fc91d..0000000 --- a/tests/RelOptRulesTest/testAntiJoinProjectTranspose.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "ANTI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "TINYINT" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "ANTI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "TINYINT" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[anti])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject($f0=[*(2, $0)])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[anti])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject($f0=[*(2, $0)])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAnyInProjectNonNullable.json b/tests/RelOptRulesTest/testAnyInProjectNonNullable.json deleted file mode 100644 index fd2642e..0000000 --- a/tests/RelOptRulesTest/testAnyInProjectNonNullable.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "> SOME", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$1], EXPR$1=[> SOME($0, {\nLogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$1], EXPR$1=[CAST(OR(AND(IS TRUE(>($0, $2)), <>($3, 0)), AND(>($3, $4), null, <>($3, 0), IS NOT TRUE(>($0, $2))), AND(>($0, $2), <>($3, 0), IS NOT TRUE(>($0, $2)), <=($3, $4)))):BOOLEAN NOT NULL])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(m=[$0], c=[$1], d=[$1])\r\n LogicalAggregate(group=[{}], m=[MIN($0)], c=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testAnyInProjectNullable.json b/tests/RelOptRulesTest/testAnyInProjectNullable.json deleted file mode 100644 index 1ea2f43..0000000 --- a/tests/RelOptRulesTest/testAnyInProjectNullable.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "MGR" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], EXPR$1=[IN($1, {\nLogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[OR(AND(IS NOT NULL($5), <>($2, 0)), AND(<($3, $2), null, <>($2, 0), IS NULL($5)))])\r\n LogicalJoin(condition=[=($1, $4)], joinType=[left])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(MGR=[$0], i=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testBitAndReuseDistinctAttrWithMixedOptionality.json b/tests/RelOptRulesTest/testBitAndReuseDistinctAttrWithMixedOptionality.json deleted file mode 100644 index 0e06eca..0000000 --- a/tests/RelOptRulesTest/testBitAndReuseDistinctAttrWithMixedOptionality.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "BIT_AND", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "BIT_AND", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[BIT_AND($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT()], EXPR$2=[BIT_AND($0)])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testBitOrReuseDistinctAttrWithMixedOptionality.json b/tests/RelOptRulesTest/testBitOrReuseDistinctAttrWithMixedOptionality.json deleted file mode 100644 index 678616c..0000000 --- a/tests/RelOptRulesTest/testBitOrReuseDistinctAttrWithMixedOptionality.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "BIT_OR", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "BIT_OR", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[BIT_OR($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT()], EXPR$2=[BIT_OR($0)])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testCasePushIsAlwaysWorking.json b/tests/RelOptRulesTest/testCasePushIsAlwaysWorking.json deleted file mode 100644 index 9b2fcdf..0000000 --- a/tests/RelOptRulesTest/testCasePushIsAlwaysWorking.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[=(CASE(>($1, 1000), $0, $1), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(AND(>($1, 1000), =($0, 1)), =($1, 1))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testCastInAggregateExpandDistinctAggregatesRule.json b/tests/RelOptRulesTest/testCastInAggregateExpandDistinctAggregatesRule.json deleted file mode 100644 index bc6e725..0000000 --- a/tests/RelOptRulesTest/testCastInAggregateExpandDistinctAggregatesRule.json +++ /dev/null @@ -1,1095 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "BIGINT" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 5, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM(DISTINCT $1)], EXPR$2=[SUM(DISTINCT $2)])\r\n LogicalAggregate(group=[{0}], CN=[COUNT()], SM=[SUM($1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0], EXPR$1=[CAST($1):BIGINT NOT NULL], EXPR$2=[CAST($2):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) FILTER $3], EXPR$2=[SUM($2) FILTER $4])\r\n LogicalProject(NAME=[$0], CN=[$1], SM=[$2], $g_1=[=($3, 1)], $g_2=[=($3, 2)])\r\n LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1}, {0, 2}]], $g=[GROUPING($0, $1, $2)])\r\n LogicalAggregate(group=[{0}], CN=[COUNT()], SM=[SUM($1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testCastInAggregateReduceFunctions.json b/tests/RelOptRulesTest/testCastInAggregateReduceFunctions.json deleted file mode 100644 index 9ea144d..0000000 --- a/tests/RelOptRulesTest/testCastInAggregateReduceFunctions.json +++ /dev/null @@ -1,664 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "STDDEV_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "STDDEV_SAMP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "VAR_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "VAR_SAMP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "POWER", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "0.5", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "DOUBLE" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "POWER", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BIGINT" - }, - { - "operator": "-", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "0.5", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "DOUBLE" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BIGINT" - }, - { - "operator": "-", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[STDDEV_SAMP($1)], EXPR$4=[VAR_POP($1)], EXPR$5=[VAR_SAMP($1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$4=[CAST(/(-($1, /(*($2, $2), $3)), $3)):INTEGER NOT NULL], EXPR$5=[CAST(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1)))):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($1)], agg#2=[COUNT()])\r\n LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testCustomColumnResolvingInCorrelatedSubQuery.json b/tests/RelOptRulesTest/testCustomColumnResolvingInCorrelatedSubQuery.json deleted file mode 100644 index b7e5a2b..0000000 --- a/tests/RelOptRulesTest/testCustomColumnResolvingInCorrelatedSubQuery.json +++ /dev/null @@ -1,407 +0,0 @@ -{ - "schemas": [ - { - "name": "T", - "fields": [ - "\"K0\"", - "\"C1\"", - "\"F1\".\"A0\"", - "\"F2\".\"A0\"", - "\"F0\".\"C0\"", - "\"F1\".\"C0\"", - "\"F0\".\"C1\"", - "\"F1\".\"C2\"", - "\"F2\".\"C3\"" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "BOOLEAN", - "INTEGER", - "INTEGER", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false, - true, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "$SCALAR_QUERY", - "operand": [], - "query": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "VARCHAR" - }, - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "VARCHAR" - }, - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\r\n LogicalFilter(condition=[=($4, $SCALAR_QUERY({\nLogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\r\n LogicalProject(\"F1\".\"C0\"=[$5])\r\n LogicalFilter(condition=[=($cor0.\"K0\", $0)])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n}))], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n", - "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\r\n LogicalFilter(condition=[=($4, $9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{0}])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\r\n LogicalProject(\"F1\".\"C0\"=[$1])\r\n LogicalFilter(condition=[=($cor0.\"K0\", $0)])\r\n LogicalProject(\"K0\"=[$0], \"F1\".\"C0\"=[$5])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testCustomColumnResolvingInCorrelatedSubQuery2.json b/tests/RelOptRulesTest/testCustomColumnResolvingInCorrelatedSubQuery2.json deleted file mode 100644 index f378b2c..0000000 --- a/tests/RelOptRulesTest/testCustomColumnResolvingInCorrelatedSubQuery2.json +++ /dev/null @@ -1,340 +0,0 @@ -{ - "schemas": [ - { - "name": "T", - "fields": [ - "\"K0\"", - "\"C1\"", - "\"F1\".\"A0\"", - "\"F2\".\"A0\"", - "\"F0\".\"C0\"", - "\"F1\".\"C0\"", - "\"F0\".\"C1\"", - "\"F1\".\"C2\"", - "\"F2\".\"C3\"" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "BOOLEAN", - "INTEGER", - "INTEGER", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false, - true, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 17, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\r\n LogicalFilter(condition=[IN($4, {\nLogicalProject(C0=[$5])\r\n LogicalFilter(condition=[=($cor0.\"F1\".\"C2\", $7)])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n", - "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\r\n LogicalFilter(condition=[=($4, $9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(C0=[$0])\r\n LogicalFilter(condition=[=($cor0.\"F1\".\"C2\", $1)])\r\n LogicalProject(\"F1\".\"C0\"=[$5], \"F1\".\"C2\"=[$7])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testCustomColumnResolvingInNonCorrelatedSubQuery.json b/tests/RelOptRulesTest/testCustomColumnResolvingInNonCorrelatedSubQuery.json deleted file mode 100644 index 95f99aa..0000000 --- a/tests/RelOptRulesTest/testCustomColumnResolvingInNonCorrelatedSubQuery.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "schemas": [ - { - "name": "T", - "fields": [ - "\"K0\"", - "\"C1\"", - "\"F1\".\"A0\"", - "\"F2\".\"A0\"", - "\"F0\".\"C0\"", - "\"F1\".\"C0\"", - "\"F0\".\"C1\"", - "\"F1\".\"C2\"", - "\"F2\".\"C3\"" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "BOOLEAN", - "INTEGER", - "INTEGER", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false, - true, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\r\n LogicalFilter(condition=[IN($4, {\nLogicalProject(C0=[$5])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n})])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n", - "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\r\n LogicalJoin(condition=[=($4, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(\"F1\".\"C0\"=[$5])\r\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDecorrelateAggWithConstantGroupKey.json b/tests/RelOptRulesTest/testDecorrelateAggWithConstantGroupKey.json deleted file mode 100644 index aba5e36..0000000 --- a/tests/RelOptRulesTest/testDecorrelateAggWithConstantGroupKey.json +++ /dev/null @@ -1,820 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 11, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "CHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 11, - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'abc'", - "operand": [], - "type": "CHAR" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 13, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "CHAR" - }, - { - "column": 12, - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 13, - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'abc'", - "operand": [], - "type": "CHAR" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 11, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 18, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - }, - { - "column": 11, - "type": "CHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 12, - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'abc'", - "operand": [], - "type": "CHAR" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 17, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 14, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 11, - "type": "CHAR" - }, - { - "column": 13, - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 14, - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'abc'", - "operand": [], - "type": "CHAR" - }, - { - "column": 13, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 17, - "type": "INTEGER" - }, - { - "column": 19, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ] - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{3, 5}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[=($cor0.SAL, $0)])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(EXPR$0=[$2])\r\n LogicalAggregate(group=[{0, 1}], EXPR$0=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], $f1=['abc'], SAL=[$1])\r\n LogicalFilter(condition=[=($cor0.MGR, $0)])\r\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalJoin(condition=[AND(=($3, $10), =($5, $9))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EXPR$0=[$2], EMPNO=[$1])\r\n LogicalAggregate(group=[{0, 1}], EXPR$0=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], EMPNO=[$0], SAL=[$1])\r\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDecorrelateExists.json b/tests/RelOptRulesTest/testDecorrelateExists.json deleted file mode 100644 index f45b645..0000000 --- a/tests/RelOptRulesTest/testDecorrelateExists.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[EXISTS({\nLogicalFilter(condition=[=($cor0.DEPTNO, $7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDecorrelateTwoExists.json b/tests/RelOptRulesTest/testDecorrelateTwoExists.json deleted file mode 100644 index 4901dd2..0000000 --- a/tests/RelOptRulesTest/testDecorrelateTwoExists.json +++ /dev/null @@ -1,506 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "NOT", - "operand": [ - { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 14, - "type": "INTEGER" - }, - { - "operator": "34", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NULL", - "operand": [ - { - "column": 11, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "34", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "34", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(EXISTS({\nLogicalFilter(condition=[=($cor0.DEPTNO, $7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), NOT(EXISTS({\nLogicalFilter(condition=[AND(=($2, $cor0.JOB), =($5, 34))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})))], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NULL($11)])\r\n LogicalJoin(condition=[=($2, $10)], joinType=[left])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(JOB=[$0], $f1=[true])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$0])\r\n LogicalFilter(condition=[=($1, 34)])\r\n LogicalProject(JOB=[$2], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDecorrelateTwoIn.json b/tests/RelOptRulesTest/testDecorrelateTwoIn.json deleted file mode 100644 index 5e918be..0000000 --- a/tests/RelOptRulesTest/testDecorrelateTwoIn.json +++ /dev/null @@ -1,333 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(SAL=[$3])\r\n LogicalFilter(condition=[AND(IN($0, {\nLogicalProject(DEPTNO=[$0])\r\n LogicalFilter(condition=[=($cor0.JOB, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n}), IN($0, {\nLogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[=($cor0.ENAME, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}))], variablesSet=[[$cor0]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(SAL=[$3])\r\n LogicalJoin(condition=[AND(=($1, $7), =($0, $6))], joinType=[inner])\r\n LogicalJoin(condition=[AND(=($2, $5), =($0, $4))], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDecorrelateUncorrelatedInAndCorrelatedExists.json b/tests/RelOptRulesTest/testDecorrelateUncorrelatedInAndCorrelatedExists.json deleted file mode 100644 index b3b6d96..0000000 --- a/tests/RelOptRulesTest/testDecorrelateUncorrelatedInAndCorrelatedExists.json +++ /dev/null @@ -1,466 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "query": { - "project": { - "target": [ - { - "column": 11, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 14, - "type": "INTEGER" - }, - { - "operator": "34", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "34", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "34", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(IN($2, {\nLogicalProject(JOB=[$2])\r\n LogicalFilter(condition=[=($5, 34)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), EXISTS({\nLogicalFilter(condition=[=($cor0.DEPTNO, $7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}))], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalJoin(condition=[=($7, $10)], joinType=[inner])\r\n LogicalJoin(condition=[=($2, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$0])\r\n LogicalFilter(condition=[=($1, 34)])\r\n LogicalProject(JOB=[$2], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDigestOfApproximateDistinctAggregateCall.json b/tests/RelOptRulesTest/testDigestOfApproximateDistinctAggregateCall.json deleted file mode 100644 index 9f0ff8f..0000000 --- a/tests/RelOptRulesTest/testDigestOfApproximateDistinctAggregateCall.json +++ /dev/null @@ -1,351 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - }, - { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - ], - "help": [ - "LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT(APPROXIMATE DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{1}], EXPR$1=[COUNT(DISTINCT $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{1}], EXPR$1=[COUNT(APPROXIMATE DISTINCT $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCount1.json b/tests/RelOptRulesTest/testDistinctCount1.json deleted file mode 100644 index 806e444..0000000 --- a/tests/RelOptRulesTest/testDistinctCount1.json +++ /dev/null @@ -1,310 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$1], ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{1}], EXPR$1=[COUNT()])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCount2.json b/tests/RelOptRulesTest/testDistinctCount2.json deleted file mode 100644 index da6726c..0000000 --- a/tests/RelOptRulesTest/testDistinctCount2.json +++ /dev/null @@ -1,572 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$2], ENAME=[$0], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[$1], EXPR$2=[CAST($2):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1) FILTER $3], EXPR$2=[MIN($2) FILTER $4])\r\n LogicalProject(DEPTNO=[$0], ENAME=[$1], EXPR$2=[$2], $g_0=[=($3, 0)], $g_1=[=($3, 1)])\r\n LogicalProject(DEPTNO=[$1], ENAME=[$0], EXPR$2=[$2], $g=[$3])\r\n LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {2}]], EXPR$2=[SUM($1)], $g=[GROUPING($2, $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCount3.json b/tests/RelOptRulesTest/testDistinctCount3.json deleted file mode 100644 index 29c90aa..0000000 --- a/tests/RelOptRulesTest/testDistinctCount3.json +++ /dev/null @@ -1,496 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT(DISTINCT $0)], EXPR$1=[SUM($1)])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[CAST($2):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT() FILTER $2], EXPR$1=[MIN($1) FILTER $2])\r\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $g_0=[=($2, 0)])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], $g=[GROUPING($0)])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountGroupingSets1.json b/tests/RelOptRulesTest/testDistinctCountGroupingSets1.json deleted file mode 100644 index 1746fea..0000000 --- a/tests/RelOptRulesTest/testDistinctCountGroupingSets1.json +++ /dev/null @@ -1,565 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 6, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT(DISTINCT $2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT() FILTER $2])\r\n LogicalProject(DEPTNO=[$0], JOB=[$1], $g_0=[=($3, 0)])\r\n LogicalAggregate(group=[{0, 1, 2}], $g=[GROUPING($0, $1, $2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountGroupingSets2.json b/tests/RelOptRulesTest/testDistinctCountGroupingSets2.json deleted file mode 100644 index f6dd522..0000000 --- a/tests/RelOptRulesTest/testDistinctCountGroupingSets2.json +++ /dev/null @@ -1,719 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 6, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT(DISTINCT $2)], EXPR$3=[SUM($3)])\r\n LogicalProject(DEPTNO=[$3], JOB=[$1], ENAME=[$0], SAL=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], JOB=[$1], EXPR$2=[$2], EXPR$3=[CAST($3):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT($2) FILTER $4], EXPR$3=[MIN($3) FILTER $5])\r\n LogicalProject(DEPTNO=[$0], JOB=[$1], ENAME=[$2], EXPR$3=[$3], $g_0=[=($4, 0)], $g_1=[=($4, 1)])\r\n LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1, 2}, {0, 1}]], EXPR$3=[SUM($3)], $g=[GROUPING($0, $1, $2)])\r\n LogicalProject(DEPTNO=[$3], JOB=[$1], ENAME=[$0], SAL=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountMixed.json b/tests/RelOptRulesTest/testDistinctCountMixed.json deleted file mode 100644 index d11ed75..0000000 --- a/tests/RelOptRulesTest/testDistinctCountMixed.json +++ /dev/null @@ -1,604 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], CDDJ=[COUNT(DISTINCT $0, $1)], S=[SUM($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], CDDJ=[$1], S=[CAST($2):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], CDDJ=[COUNT($1) FILTER $3], S=[MIN($2) FILTER $4])\r\n LogicalProject(DEPTNO=[$0], JOB=[$1], S=[$2], $g_0=[=($3, 0)], $g_1=[=($3, 1)])\r\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]], S=[SUM($2)], $g=[GROUPING($0, $1)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountMixed2.json b/tests/RelOptRulesTest/testDistinctCountMixed2.json deleted file mode 100644 index da4aa9d..0000000 --- a/tests/RelOptRulesTest/testDistinctCountMixed2.json +++ /dev/null @@ -1,719 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], CDE=[COUNT(DISTINCT $1)], CDJE=[COUNT(DISTINCT $2, $1)], CDDJ=[COUNT(DISTINCT $0, $2)], S=[SUM($3)])\r\n LogicalProject(DEPTNO=[$3], ENAME=[$0], JOB=[$1], SAL=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], CDE=[$1], CDJE=[$2], CDDJ=[$3], S=[CAST($4):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], CDE=[COUNT($1) FILTER $5], CDJE=[COUNT($2, $1) FILTER $4], CDDJ=[COUNT($2) FILTER $6], S=[MIN($3) FILTER $7])\r\n LogicalProject(DEPTNO=[$2], ENAME=[$0], JOB=[$1], S=[$3], $g_0=[=($4, 0)], $g_1=[=($4, 1)], $g_2=[=($4, 2)], $g_3=[=($4, 3)])\r\n LogicalAggregate(group=[{0, 1, 3}], groups=[[{0, 1, 3}, {0, 3}, {1, 3}, {3}]], S=[SUM($2)], $g=[GROUPING($3, $0, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountMixedJoin.json b/tests/RelOptRulesTest/testDistinctCountMixedJoin.json deleted file mode 100644 index b524628..0000000 --- a/tests/RelOptRulesTest/testDistinctCountMixedJoin.json +++ /dev/null @@ -1,1153 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 5, - "type": "BIGINT" - }, - { - "column": 7, - "type": "BIGINT" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[COUNT(DISTINCT $2, $1)], EXPR$3=[COUNT(DISTINCT $0, $2)], EXPR$4=[SUM($3)])\r\n LogicalProject(DEPTNO=[$3], ENAME=[$0], JOB=[$1], SAL=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[$3], EXPR$2=[$5], EXPR$3=[$7], EXPR$4=[$1])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $6)], joinType=[inner])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner])\r\n LogicalAggregate(group=[{1}], EXPR$4=[SUM($0)])\r\n LogicalProject(SAL=[$2], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{1}], EXPR$1=[COUNT()])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(ENAME=[$0], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{2}], EXPR$2=[COUNT()])\r\n LogicalAggregate(group=[{0, 1, 2}])\r\n LogicalProject(ENAME=[$0], JOB=[$1], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{1}], EXPR$3=[COUNT()])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$1], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountMultiple.json b/tests/RelOptRulesTest/testDistinctCountMultiple.json deleted file mode 100644 index 988f93c..0000000 --- a/tests/RelOptRulesTest/testDistinctCountMultiple.json +++ /dev/null @@ -1,568 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[COUNT(DISTINCT $2)])\r\n LogicalProject(DEPTNO=[$2], ENAME=[$0], JOB=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1) FILTER $3], EXPR$2=[COUNT($2) FILTER $4])\r\n LogicalProject(DEPTNO=[$0], ENAME=[$1], JOB=[$2], $g_1=[=($3, 1)], $g_2=[=($3, 2)])\r\n LogicalProject(DEPTNO=[$2], ENAME=[$0], JOB=[$1], $g=[$3])\r\n LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 2}, {1, 2}]], $g=[GROUPING($2, $0, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountMultipleNoGroup.json b/tests/RelOptRulesTest/testDistinctCountMultipleNoGroup.json deleted file mode 100644 index 59cf1e3..0000000 --- a/tests/RelOptRulesTest/testDistinctCountMultipleNoGroup.json +++ /dev/null @@ -1,393 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[COUNT($0) FILTER $2], EXPR$1=[COUNT($1) FILTER $3])\r\n LogicalProject(ENAME=[$0], JOB=[$1], $g_1=[=($2, 1)], $g_2=[=($2, 2)])\r\n LogicalAggregate(group=[{0, 1}], groups=[[{0}, {1}]], $g=[GROUPING($0, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountMultipleViaJoin.json b/tests/RelOptRulesTest/testDistinctCountMultipleViaJoin.json deleted file mode 100644 index b524628..0000000 --- a/tests/RelOptRulesTest/testDistinctCountMultipleViaJoin.json +++ /dev/null @@ -1,1153 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 5, - "type": "BIGINT" - }, - { - "column": 7, - "type": "BIGINT" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[COUNT(DISTINCT $2, $1)], EXPR$3=[COUNT(DISTINCT $0, $2)], EXPR$4=[SUM($3)])\r\n LogicalProject(DEPTNO=[$3], ENAME=[$0], JOB=[$1], SAL=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[$3], EXPR$2=[$5], EXPR$3=[$7], EXPR$4=[$1])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $6)], joinType=[inner])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner])\r\n LogicalAggregate(group=[{1}], EXPR$4=[SUM($0)])\r\n LogicalProject(SAL=[$2], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{1}], EXPR$1=[COUNT()])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(ENAME=[$0], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{2}], EXPR$2=[COUNT()])\r\n LogicalAggregate(group=[{0, 1, 2}])\r\n LogicalProject(ENAME=[$0], JOB=[$1], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{1}], EXPR$3=[COUNT()])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$1], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountWithExpandSumType.json b/tests/RelOptRulesTest/testDistinctCountWithExpandSumType.json deleted file mode 100644 index 420c0b5..0000000 --- a/tests/RelOptRulesTest/testDistinctCountWithExpandSumType.json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "COMM" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "DECIMAL" - } - ], - "type": "BIGINT" - }, - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 1, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "DECIMAL" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()], EXPR$1=[COUNT(DISTINCT $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], EXPR$1=[$1])\r\n LogicalAggregate(group=[{}], EXPR$0=[$SUM0($1)], EXPR$1=[COUNT()])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctCountWithoutGroupBy.json b/tests/RelOptRulesTest/testDistinctCountWithoutGroupBy.json deleted file mode 100644 index aa88dc9..0000000 --- a/tests/RelOptRulesTest/testDistinctCountWithoutGroupBy.json +++ /dev/null @@ -1,401 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[MAX($0)], EXPR$1=[COUNT(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$1], ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[MIN($1) FILTER $3], EXPR$1=[COUNT($0) FILTER $2])\r\n LogicalProject(ENAME=[$0], EXPR$0=[$1], $g_0=[=($2, 0)], $g_1=[=($2, 1)])\r\n LogicalAggregate(group=[{0}], groups=[[{0}, {}]], EXPR$0=[MAX($1)], $g=[GROUPING($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctNonDistinctAggregates.json b/tests/RelOptRulesTest/testDistinctNonDistinctAggregates.json deleted file mode 100644 index d75f89c..0000000 --- a/tests/RelOptRulesTest/testDistinctNonDistinctAggregates.json +++ /dev/null @@ -1,560 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT()], EXPR$2=[AVG(DISTINCT $1)])\r\n LogicalProject(EMPNO=[$0], DEPTNO0=[$2])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($2)], EXPR$2=[AVG($1)])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT()])\r\n LogicalProject(EMPNO=[$0], DEPTNO0=[$2])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctNonDistinctAggregatesWithGrouping1.json b/tests/RelOptRulesTest/testDistinctNonDistinctAggregatesWithGrouping1.json deleted file mode 100644 index 78f5ae6..0000000 --- a/tests/RelOptRulesTest/testDistinctNonDistinctAggregatesWithGrouping1.json +++ /dev/null @@ -1,544 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($0)], EXPR$2=[SUM(DISTINCT $1)], EXPR$3=[MAX($0)], EXPR$4=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], SAL=[$0], COMM=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($2)], EXPR$2=[SUM($1)], EXPR$3=[MAX($3)], EXPR$4=[MAX($4)])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM($0)], EXPR$3=[MAX($0)], EXPR$4=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], SAL=[$0], COMM=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctNonDistinctAggregatesWithGrouping2.json b/tests/RelOptRulesTest/testDistinctNonDistinctAggregatesWithGrouping2.json deleted file mode 100644 index 45ce273..0000000 --- a/tests/RelOptRulesTest/testDistinctNonDistinctAggregatesWithGrouping2.json +++ /dev/null @@ -1,406 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT()], EXPR$2=[SUM(DISTINCT $1)])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($2)], EXPR$2=[SUM($1)])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctNonDistinctTwoAggregatesWithGrouping.json b/tests/RelOptRulesTest/testDistinctNonDistinctTwoAggregatesWithGrouping.json deleted file mode 100644 index ae8280f..0000000 --- a/tests/RelOptRulesTest/testDistinctNonDistinctTwoAggregatesWithGrouping.json +++ /dev/null @@ -1,496 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[SUM(DISTINCT $2)])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($2)], EXPR$2=[MIN($3)], EXPR$3=[SUM($1)])\r\n LogicalAggregate(group=[{0, 2}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctWithDiffFiltersAndSameGroupSet.json b/tests/RelOptRulesTest/testDistinctWithDiffFiltersAndSameGroupSet.json deleted file mode 100644 index 1f721db..0000000 --- a/tests/RelOptRulesTest/testDistinctWithDiffFiltersAndSameGroupSet.json +++ /dev/null @@ -1,620 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "500", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "500", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "500", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "500", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "500", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "500", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT(DISTINCT $0) FILTER $1], EXPR$1=[COUNT(DISTINCT $1) FILTER $0])\r\n LogicalProject(C=[>($0, 1000)], D=[<($0, 500)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[COUNT() FILTER $1], EXPR$1=[COUNT() FILTER $0])\r\n LogicalProject($g_0_f_0=[AND(=($2, 0), $0)], $g_0_f_1=[AND(=($2, 0), $1)])\r\n LogicalAggregate(group=[{0, 1}], $g=[GROUPING($0, $1)])\r\n LogicalProject(C=[>($0, 1000)], D=[<($0, 500)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctWithFilterAndGroupBy.json b/tests/RelOptRulesTest/testDistinctWithFilterAndGroupBy.json deleted file mode 100644 index 50e8c36..0000000 --- a/tests/RelOptRulesTest/testDistinctWithFilterAndGroupBy.json +++ /dev/null @@ -1,766 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 7, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT(DISTINCT $2) FILTER $3])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0], $f3=[>($0, 1000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[CAST($1):INTEGER NOT NULL], EXPR$2=[$2])\r\n LogicalAggregate(group=[{0}], EXPR$1=[MIN($2) FILTER $4], EXPR$2=[COUNT($1) FILTER $3])\r\n LogicalProject(DEPTNO=[$0], SAL=[$1], EXPR$1=[$3], $g_0_f_2=[AND(=($4, 0), IS TRUE($2))], $g_3=[=($4, 3)])\r\n LogicalAggregate(group=[{0, 2, 3}], groups=[[{0, 2, 3}, {0}]], EXPR$1=[SUM($1)], $g=[GROUPING($0, $2, $3)])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0], $f3=[>($0, 1000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctWithFilterWithoutGroupBy.json b/tests/RelOptRulesTest/testDistinctWithFilterWithoutGroupBy.json deleted file mode 100644 index 0b669e2..0000000 --- a/tests/RelOptRulesTest/testDistinctWithFilterWithoutGroupBy.json +++ /dev/null @@ -1,623 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT(DISTINCT $1) FILTER $2])\r\n LogicalProject(COMM=[$1], SAL=[$0], $f2=[>($0, 1000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[MIN($1) FILTER $3], EXPR$1=[COUNT($0) FILTER $2])\r\n LogicalProject(SAL=[$0], EXPR$0=[$2], $g_0_f_1=[AND(=($3, 0), IS TRUE($1))], $g_3=[=($3, 3)])\r\n LogicalAggregate(group=[{1, 2}], groups=[[{1, 2}, {}]], EXPR$0=[SUM($0)], $g=[GROUPING($1, $2)])\r\n LogicalProject(COMM=[$1], SAL=[$0], $f2=[>($0, 1000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctWithGrouping.json b/tests/RelOptRulesTest/testDistinctWithGrouping.json deleted file mode 100644 index bba3145..0000000 --- a/tests/RelOptRulesTest/testDistinctWithGrouping.json +++ /dev/null @@ -1,349 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[SUM(DISTINCT $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($2)], EXPR$3=[SUM($0)])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctWithMultipleInputs.json b/tests/RelOptRulesTest/testDistinctWithMultipleInputs.json deleted file mode 100644 index e8e1fb0..0000000 --- a/tests/RelOptRulesTest/testDistinctWithMultipleInputs.json +++ /dev/null @@ -1,531 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[COUNT(DISTINCT $2, $1)])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($3)], EXPR$2=[MIN($4)], EXPR$3=[COUNT()])\r\n LogicalAggregate(group=[{0, 1, 2}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testDistinctWithMultipleInputsAndGroupby.json b/tests/RelOptRulesTest/testDistinctWithMultipleInputsAndGroupby.json deleted file mode 100644 index e7bd132..0000000 --- a/tests/RelOptRulesTest/testDistinctWithMultipleInputsAndGroupby.json +++ /dev/null @@ -1,535 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[COUNT(DISTINCT $2, $0, $1)])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($3)], EXPR$2=[MIN($4)], EXPR$3=[COUNT()])\r\n LogicalAggregate(group=[{0, 1, 2}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\r\n LogicalProject(DEPTNO=[$2], COMM=[$1], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyAggregate.json b/tests/RelOptRulesTest/testEmptyAggregate.json deleted file mode 100644 index b1de39a..0000000 --- a/tests/RelOptRulesTest/testEmptyAggregate.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - } - } - } - } - ] - } - } - } - }, - { - "values": { - "schema": [ - "INTEGER" - ], - "content": [] - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$0=[SUM($1)])\r\n LogicalValues(tuples=[[]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyAggregateEmptyKeyWithAggregateValuesRule.json b/tests/RelOptRulesTest/testEmptyAggregateEmptyKeyWithAggregateValuesRule.json deleted file mode 100644 index 9a2ebd3..0000000 --- a/tests/RelOptRulesTest/testEmptyAggregateEmptyKeyWithAggregateValuesRule.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "values": { - "schema": [ - "INTEGER" - ], - "content": [] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER" - ], - "content": [] - } - } - } - } - } - } - ] - } - }, - { - "values": { - "schema": [ - "BIGINT", - "INTEGER" - ], - "content": [ - [ - { - "operator": "0", - "operand": [], - "type": "BIGINT" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()], EXPR$1=[SUM($0)])\r\n LogicalValues(tuples=[[]])\r\n", - "LogicalValues(tuples=[[{ 0, null }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyFilterProjectUnion.json b/tests/RelOptRulesTest/testEmptyFilterProjectUnion.json deleted file mode 100644 index 3a37bb8..0000000 --- a/tests/RelOptRulesTest/testEmptyFilterProjectUnion.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - ], - "help": [ - "LogicalProject(X=[$0], Y=[$1])\r\n LogicalFilter(condition=[>(+($0, $1), 30)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(X=[$0], Y=[$1])\r\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\r\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[{ 20, 2 }]])\r\n", - "LogicalProject(X=[$0], Y=[$1])\r\n LogicalValues(tuples=[[{ 30, 3 }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyIntersect.json b/tests/RelOptRulesTest/testEmptyIntersect.json deleted file mode 100644 index a2505af..0000000 --- a/tests/RelOptRulesTest/testEmptyIntersect.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "intersect": [ - { - "intersect": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - ] - }, - { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - ], - "help": [ - "LogicalIntersect(all=[false])\r\n LogicalIntersect(all=[false])\r\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[{ 30, 3 }]])\r\n LogicalProject(X=[$0], Y=[$1])\r\n LogicalFilter(condition=[>($0, 50)])\r\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\r\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[{ 30, 3 }]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyMinus.json b/tests/RelOptRulesTest/testEmptyMinus.json deleted file mode 100644 index a03ba14..0000000 --- a/tests/RelOptRulesTest/testEmptyMinus.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "distinct": { - "except": [ - { - "distinct": { - "except": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "40", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - ] - } - }, - { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - ], - "help": [ - "LogicalMinus(all=[false])\r\n LogicalMinus(all=[false])\r\n LogicalProject(X=[$0], Y=[$1])\r\n LogicalFilter(condition=[>($0, 30)])\r\n LogicalValues(tuples=[[{ 30, 3 }]])\r\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[{ 20, 2 }]])\r\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[{ 40, 4 }]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyMinus2.json b/tests/RelOptRulesTest/testEmptyMinus2.json deleted file mode 100644 index 62fe111..0000000 --- a/tests/RelOptRulesTest/testEmptyMinus2.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "distinct": { - "except": [ - { - "distinct": { - "except": [ - { - "distinct": { - "except": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "40", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "50", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "except": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "40", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalMinus(all=[false])\r\n LogicalMinus(all=[false])\r\n LogicalMinus(all=[false])\r\n LogicalProject(X=[$0], Y=[$1])\r\n LogicalValues(tuples=[[{ 30, 3 }]])\r\n LogicalProject(X=[$0], Y=[$1])\r\n LogicalFilter(condition=[>($0, 30)])\r\n LogicalValues(tuples=[[{ 20, 2 }]])\r\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[{ 40, 4 }]])\r\n LogicalProject(X=[$0], Y=[$1])\r\n LogicalFilter(condition=[>($0, 50)])\r\n LogicalValues(tuples=[[{ 50, 5 }]])\r\n", - "LogicalMinus(all=[false])\r\n LogicalProject(X=[$0], Y=[$1])\r\n LogicalValues(tuples=[[{ 30, 3 }]])\r\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[{ 40, 4 }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyProject.json b/tests/RelOptRulesTest/testEmptyProject.json deleted file mode 100644 index 702984b..0000000 --- a/tests/RelOptRulesTest/testEmptyProject.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "values": { - "schema": [ - "INTEGER" - ], - "content": [] - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+(+($0, $1), $0)])\r\n LogicalFilter(condition=[>(+($0, $1), 50)])\r\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptyProject2.json b/tests/RelOptRulesTest/testEmptyProject2.json deleted file mode 100644 index 702984b..0000000 --- a/tests/RelOptRulesTest/testEmptyProject2.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "values": { - "schema": [ - "INTEGER" - ], - "content": [] - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+(+($0, $1), $0)])\r\n LogicalFilter(condition=[>(+($0, $1), 50)])\r\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptySort.json b/tests/RelOptRulesTest/testEmptySort.json deleted file mode 100644 index ff350b7..0000000 --- a/tests/RelOptRulesTest/testEmptySort.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 7, - "INTEGER", - "ASC" - ] - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - ], - "help": [ - "LogicalSort(sort0=[$7], dir0=[ASC])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptySort2.json b/tests/RelOptRulesTest/testEmptySort2.json deleted file mode 100644 index 268b425..0000000 --- a/tests/RelOptRulesTest/testEmptySort2.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "sort": { - "collation": [ - [ - 1, - "VARCHAR", - "ASC" - ], - [ - 0, - "TINYINT", - "ASC" - ] - ], - "source": { - "values": { - "schema": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "content": [] - } - } - } - }, - { - "values": { - "schema": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "content": [] - } - } - ], - "help": [ - "LogicalSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])\r\n LogicalValues(tuples=[[]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testEmptySortLimitZero.json b/tests/RelOptRulesTest/testEmptySortLimitZero.json deleted file mode 100644 index 8048914..0000000 --- a/tests/RelOptRulesTest/testEmptySortLimitZero.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 7, - "INTEGER", - "ASC" - ] - ], - "limit": { - "operator": "0", - "operand": [], - "type": "INTEGER" - }, - "source": { - "scan": 0 - } - } - }, - { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - ], - "help": [ - "LogicalSort(sort0=[$7], dir0=[ASC], fetch=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExistsWithAtLeastOneRowSubQuery.json b/tests/RelOptRulesTest/testExistsWithAtLeastOneRowSubQuery.json deleted file mode 100644 index 2602601..0000000 --- a/tests/RelOptRulesTest/testExistsWithAtLeastOneRowSubQuery.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "EXISTS", - "operand": [], - "query": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "scan": 0 - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalFilter(condition=[EXISTS({\nLogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalProject($f0=[0])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, $7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExistsWithNoRowSubQuery.json b/tests/RelOptRulesTest/testExistsWithNoRowSubQuery.json deleted file mode 100644 index c887a78..0000000 --- a/tests/RelOptRulesTest/testExistsWithNoRowSubQuery.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "EXISTS", - "operand": [], - "query": { - "values": { - "schema": [ - "BIGINT" - ], - "content": [] - } - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "scan": 0 - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalFilter(condition=[NOT(EXISTS({\nLogicalValues(tuples=[[]])\r\n}))])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandFilterExists.json b/tests/RelOptRulesTest/testExpandFilterExists.json deleted file mode 100644 index 08c72d0..0000000 --- a/tests/RelOptRulesTest/testExpandFilterExists.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(EXISTS({\nLogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), <($1, 100))])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(IS NOT NULL($2), <($1, 100))])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandFilterExistsSimple.json b/tests/RelOptRulesTest/testExpandFilterExistsSimple.json deleted file mode 100644 index cfa567f..0000000 --- a/tests/RelOptRulesTest/testExpandFilterExistsSimple.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[EXISTS({\nLogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandFilterExistsSimpleAnd.json b/tests/RelOptRulesTest/testExpandFilterExistsSimpleAnd.json deleted file mode 100644 index 2c433ae..0000000 --- a/tests/RelOptRulesTest/testExpandFilterExistsSimpleAnd.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[AND(EXISTS({\nLogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), <($1, 100))])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[<($1, 100)])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandFilterIn.json b/tests/RelOptRulesTest/testExpandFilterIn.json deleted file mode 100644 index 801afa8..0000000 --- a/tests/RelOptRulesTest/testExpandFilterIn.json +++ /dev/null @@ -1,400 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 4, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(IN($2, {\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), <($1, 100))])\r\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(IS NOT NULL($4), <($1, 100))])\r\n LogicalJoin(condition=[=($2, $3)], joinType=[left])\r\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandFilterIn3Value.json b/tests/RelOptRulesTest/testExpandFilterIn3Value.json deleted file mode 100644 index 844769b..0000000 --- a/tests/RelOptRulesTest/testExpandFilterIn3Value.json +++ /dev/null @@ -1,897 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[<($0, CASE(=(IN($1, {\nLogicalProject(EXPR$0=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), true), 10, =(IN($1, {\nLogicalProject(EXPR$0=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), false), 20, 30))])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[<($0, CASE(=(CASE(=($2, 0), false, IS NOT NULL($5), true, <($3, $2), null:BOOLEAN, false), true), 10, =(CASE(=($2, 0), false, IS NOT NULL($5), true, <($3, $2), null:BOOLEAN, false), false), 20, 30))])\r\n LogicalJoin(condition=[=($1, $4)], joinType=[left])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\r\n LogicalProject(EXPR$0=[CASE(true, CAST($1):INTEGER, null:INTEGER)])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(EXPR$0=[CASE(true, CAST($1):INTEGER, null:INTEGER)], i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandFilterInComposite.json b/tests/RelOptRulesTest/testExpandFilterInComposite.json deleted file mode 100644 index 8bc3b75..0000000 --- a/tests/RelOptRulesTest/testExpandFilterInComposite.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(IN($0, $2, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), <($1, 100))])\r\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(IS NOT NULL($5), <($1, 100))])\r\n LogicalJoin(condition=[AND(=($0, $3), =($2, $4))], joinType=[left])\r\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$1], i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandFilterScalar.json b/tests/RelOptRulesTest/testExpandFilterScalar.json deleted file mode 100644 index 654bd1c..0000000 --- a/tests/RelOptRulesTest/testExpandFilterScalar.json +++ /dev/null @@ -1,530 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "<", - "operand": [ - { - "operator": "$SCALAR_QUERY", - "operand": [], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "INTEGER" - }, - { - "operator": "$SCALAR_QUERY", - "operand": [], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SINGLE_VALUE", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SINGLE_VALUE", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(<($SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), $SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})), <($1, 100))])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(<($2, $3), <($1, 100))])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandJoinExists.json b/tests/RelOptRulesTest/testExpandJoinExists.json deleted file mode 100644 index f9e4d20..0000000 --- a/tests/RelOptRulesTest/testExpandJoinExists.json +++ /dev/null @@ -1,330 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[EXISTS({\nLogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})], joinType=[left])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandJoinScalar.json b/tests/RelOptRulesTest/testExpandJoinScalar.json deleted file mode 100644 index 4418194..0000000 --- a/tests/RelOptRulesTest/testExpandJoinScalar.json +++ /dev/null @@ -1,531 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "<", - "operand": [ - { - "operator": "$SCALAR_QUERY", - "operand": [], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "INTEGER" - }, - { - "operator": "$SCALAR_QUERY", - "operand": [], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SINGLE_VALUE", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SINGLE_VALUE", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[<($SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), $SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}))], joinType=[left])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[<($2, $3)], joinType=[left])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandProjectExists.json b/tests/RelOptRulesTest/testExpandProjectExists.json deleted file mode 100644 index e84a5a1..0000000 --- a/tests/RelOptRulesTest/testExpandProjectExists.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "EXISTS", - "operand": [], - "query": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], D=[EXISTS({\nLogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], D=[IS NOT NULL($1)])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandProjectIn.json b/tests/RelOptRulesTest/testExpandProjectIn.json deleted file mode 100644 index e57e9b7..0000000 --- a/tests/RelOptRulesTest/testExpandProjectIn.json +++ /dev/null @@ -1,358 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], D=[IN($1, {\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], D=[CASE(IS NOT NULL($3), true, false)])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandProjectInComposite.json b/tests/RelOptRulesTest/testExpandProjectInComposite.json deleted file mode 100644 index 8093ad2..0000000 --- a/tests/RelOptRulesTest/testExpandProjectInComposite.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 4, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], D=[IN($0, $1, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], D=[CASE(IS NOT NULL($4), true, false)])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$1], i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandProjectInNullable.json b/tests/RelOptRulesTest/testExpandProjectInNullable.json deleted file mode 100644 index 5cf67a0..0000000 --- a/tests/RelOptRulesTest/testExpandProjectInNullable.json +++ /dev/null @@ -1,805 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "IN", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], D=[IN(CASE(true, CAST($1):INTEGER, null:INTEGER), {\nLogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], D=[CASE(=($2, 0), false, IS NULL(CASE(true, CAST($1):INTEGER, null:INTEGER)), null:BOOLEAN, IS NOT NULL($5), true, <($3, $2), null:BOOLEAN, false)])\r\n LogicalJoin(condition=[=(CASE(true, CAST($1):INTEGER, null:INTEGER), $4)], joinType=[left])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[CASE(true, CAST($1):INTEGER, null:INTEGER)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], i=[true])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[CASE(true, CAST($1):INTEGER, null:INTEGER)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandProjectScalar.json b/tests/RelOptRulesTest/testExpandProjectScalar.json deleted file mode 100644 index 262e4b6..0000000 --- a/tests/RelOptRulesTest/testExpandProjectScalar.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "$SCALAR_QUERY", - "operand": [], - "query": { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SINGLE_VALUE", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], D=[$SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalJoin(condition=[true], joinType=[left])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[<($0, 20)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpandWhereComparisonCorrelated.json b/tests/RelOptRulesTest/testExpandWhereComparisonCorrelated.json deleted file mode 100644 index 35f04ae..0000000 --- a/tests/RelOptRulesTest/testExpandWhereComparisonCorrelated.json +++ /dev/null @@ -1,361 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "$SCALAR_QUERY", - "operand": [], - "query": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[=($1, $SCALAR_QUERY({\nLogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\r\n LogicalProject(SAL=[$5])\r\n LogicalFilter(condition=[=($0, $cor0.EMPNO)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}))], variablesSet=[[$cor0]])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[=($5, $9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\r\n LogicalProject(SAL=[$1])\r\n LogicalFilter(condition=[=($0, $cor0.EMPNO)])\r\n LogicalProject(EMPNO=[$0], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpressionSimplification1.json b/tests/RelOptRulesTest/testExpressionSimplification1.json deleted file mode 100644 index 583b3b4..0000000 --- a/tests/RelOptRulesTest/testExpressionSimplification1.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1''", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'3'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "Sarg[(-∞.._ISO-8859-1''), (_ISO-8859-1''.._ISO-8859-1'3'), (_ISO-8859-1'3'..+∞)]", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(<>($1, ''), <>($1, '3'))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[SEARCH($1, Sarg[(-∞..'':VARCHAR(20)), ('':VARCHAR(20)..'3':VARCHAR(20)), ('3':VARCHAR(20)..+∞)]:VARCHAR(20))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExpressionSimplification2.json b/tests/RelOptRulesTest/testExpressionSimplification2.json deleted file mode 100644 index ca89aa2..0000000 --- a/tests/RelOptRulesTest/testExpressionSimplification2.json +++ /dev/null @@ -1,243 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1''", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1''", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "OR", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'3'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'3'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "Sarg[(-∞.._ISO-8859-1''), (_ISO-8859-1''.._ISO-8859-1'3'), (_ISO-8859-1'3'..+∞)]", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(OR(<($1, ''), >($1, '')), OR(<($1, '3'), >($1, '3')))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[SEARCH($1, Sarg[(-∞..'':CHAR(1)), ('':CHAR(1)..'3'), ('3'..+∞)]:CHAR(1))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExtractJoinFilterRule.json b/tests/RelOptRulesTest/testExtractJoinFilterRule.json deleted file mode 100644 index 0114687..0000000 --- a/tests/RelOptRulesTest/testExtractJoinFilterRule.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[=($0, $1)])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExtractYearMonthToRange.json b/tests/RelOptRulesTest/testExtractYearMonthToRange.json deleted file mode 100644 index 2f04d12..0000000 --- a/tests/RelOptRulesTest/testExtractYearMonthToRange.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP_B", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER", - "BIRTHDATE" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN", - "DATE" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "DATE" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "operator": "EXTRACT", - "operand": [ - { - "operator": "YEAR", - "operand": [], - "type": "SYMBOL" - }, - { - "column": 9, - "type": "DATE" - } - ], - "type": "BIGINT" - }, - { - "operator": "2014", - "operand": [], - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "EXTRACT", - "operand": [ - { - "operator": "MONTH", - "operand": [], - "type": "SYMBOL" - }, - { - "column": 9, - "type": "DATE" - } - ], - "type": "BIGINT" - }, - { - "operator": "4", - "operand": [], - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "DATE" - } - ], - "source": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 9, - "type": "DATE" - }, - { - "operator": "Sarg[[2014-04-01..2014-05-01)]", - "operand": [], - "type": "DATE" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\r\n LogicalFilter(condition=[AND(=(EXTRACT(FLAG(YEAR), $9), 2014), =(EXTRACT(FLAG(MONTH), $9), 4))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\r\n LogicalFilter(condition=[SEARCH($9, Sarg[[2014-04-01..2014-05-01)])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testExtractYearToRange.json b/tests/RelOptRulesTest/testExtractYearToRange.json deleted file mode 100644 index 6946457..0000000 --- a/tests/RelOptRulesTest/testExtractYearToRange.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP_B", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER", - "BIRTHDATE" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN", - "DATE" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "DATE" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "EXTRACT", - "operand": [ - { - "operator": "YEAR", - "operand": [], - "type": "SYMBOL" - }, - { - "column": 9, - "type": "DATE" - } - ], - "type": "BIGINT" - }, - { - "operator": "2014", - "operand": [], - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "DATE" - } - ], - "source": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 9, - "type": "DATE" - }, - { - "operator": "Sarg[[2014-01-01..2015-01-01)]", - "operand": [], - "type": "DATE" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\r\n LogicalFilter(condition=[=(EXTRACT(FLAG(YEAR), $9), 2014)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\r\n LogicalFilter(condition=[SEARCH($9, Sarg[[2014-01-01..2015-01-01)])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFilterJoinRuleAndIsNotNull.json b/tests/RelOptRulesTest/testFilterJoinRuleAndIsNotNull.json deleted file mode 100644 index 631e883..0000000 --- a/tests/RelOptRulesTest/testFilterJoinRuleAndIsNotNull.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalFilter(condition=[AND(IS NOT NULL($9), IS NOT NULL($10))])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[CAST($9):INTEGER], NAME=[CAST($10):VARCHAR(10)])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFilterJoinRuleOrIsNotNull.json b/tests/RelOptRulesTest/testFilterJoinRuleOrIsNotNull.json deleted file mode 100644 index 68f99ae..0000000 --- a/tests/RelOptRulesTest/testFilterJoinRuleOrIsNotNull.json +++ /dev/null @@ -1,315 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalFilter(condition=[OR(IS NOT NULL($9), IS NOT NULL($10))])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[CAST($9):INTEGER], NAME=[CAST($10):VARCHAR(10)])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFilterProjectTranspose.json b/tests/RelOptRulesTest/testFilterProjectTranspose.json deleted file mode 100644 index 8e0900f..0000000 --- a/tests/RelOptRulesTest/testFilterProjectTranspose.json +++ /dev/null @@ -1,400 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\r\n LogicalProject(TWICEDEPTNO=[*($0, 2)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, *($0, 2))])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFilterRemoveIsNotDistinctFromRule.json b/tests/RelOptRulesTest/testFilterRemoveIsNotDistinctFromRule.json deleted file mode 100644 index 806aa0a..0000000 --- a/tests/RelOptRulesTest/testFilterRemoveIsNotDistinctFromRule.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "nullable": [ - false, - true, - true, - true, - true, - true, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalFilter(condition=[IS NOT DISTINCT FROM($7, 20)])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n", - "LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFlattenUncorrelatedCallBelowEquals.json b/tests/RelOptRulesTest/testFlattenUncorrelatedCallBelowEquals.json deleted file mode 100644 index 9ccf419..0000000 --- a/tests/RelOptRulesTest/testFlattenUncorrelatedCallBelowEquals.json +++ /dev/null @@ -1,486 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, +($0, 30))])\r\n LogicalProject(DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\r\n LogicalProject($f9=[+($0, 30)])\r\n LogicalProject(DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFlattenUncorrelatedTwoLevelCallBelowEqualsSucceeds.json b/tests/RelOptRulesTest/testFlattenUncorrelatedTwoLevelCallBelowEqualsSucceeds.json deleted file mode 100644 index f3a6c19..0000000 --- a/tests/RelOptRulesTest/testFlattenUncorrelatedTwoLevelCallBelowEqualsSucceeds.json +++ /dev/null @@ -1,530 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, +(*(2, $0), 30))])\r\n LogicalProject(DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\r\n LogicalProject($f9=[+(*(2, $0), 30)])\r\n LogicalProject(DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFullOuterJoinSimplificationToInner.json b/tests/RelOptRulesTest/testFullOuterJoinSimplificationToInner.json deleted file mode 100644 index 740b699..0000000 --- a/tests/RelOptRulesTest/testFullOuterJoinSimplificationToInner.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[AND(=($1, 'Charlie'), >($2, 100))])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalProject(DUMMY=[0])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\r\n LogicalFilter(condition=[=($1, 'Charlie')])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFullOuterJoinSimplificationToLeftOuter.json b/tests/RelOptRulesTest/testFullOuterJoinSimplificationToLeftOuter.json deleted file mode 100644 index f9b1f6c..0000000 --- a/tests/RelOptRulesTest/testFullOuterJoinSimplificationToLeftOuter.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[=($1, 'Charlie')])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalProject(DUMMY=[0])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalFilter(condition=[=($1, 'Charlie')])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testFullOuterJoinSimplificationToRightOuter.json b/tests/RelOptRulesTest/testFullOuterJoinSimplificationToRightOuter.json deleted file mode 100644 index d4e9430..0000000 --- a/tests/RelOptRulesTest/testFullOuterJoinSimplificationToRightOuter.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[>($1, 100)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalProject(DUMMY=[0])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testGroupByBooleanLiteralSimple.json b/tests/RelOptRulesTest/testGroupByBooleanLiteralSimple.json deleted file mode 100644 index 41d979c..0000000 --- a/tests/RelOptRulesTest/testGroupByBooleanLiteralSimple.json +++ /dev/null @@ -1,282 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "BOOLEAN" - ], - "content": [ - [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ] - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "BOOLEAN" - ], - "content": [ - [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ] - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\r\n LogicalProject($f0=[true], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\r\n LogicalProject($f0=[$1], SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalValues(tuples=[[{ true }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testGroupByDateLiteralSimple.json b/tests/RelOptRulesTest/testGroupByDateLiteralSimple.json deleted file mode 100644 index a8ae4f7..0000000 --- a/tests/RelOptRulesTest/testGroupByDateLiteralSimple.json +++ /dev/null @@ -1,282 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "DATE" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "DATE" - }, - { - "column": 1, - "type": "DATE" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "DATE" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "DATE" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "DATE" - ], - "content": [ - [ - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - } - ] - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "DATE" - }, - { - "column": 1, - "type": "DATE" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "DATE" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "DATE" - ], - "content": [ - [ - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - } - ] - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\r\n LogicalProject($f0=[2022-01-01], SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\r\n LogicalProject($f0=[$1], SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalValues(tuples=[[{ 2022-01-01 }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testGroupByMultipleLiterals.json b/tests/RelOptRulesTest/testGroupByMultipleLiterals.json deleted file mode 100644 index 6eeb7f3..0000000 --- a/tests/RelOptRulesTest/testGroupByMultipleLiterals.json +++ /dev/null @@ -1,594 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "CHAR" - }, - { - "column": 5, - "type": "DATE" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'ab'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "CHAR" - }, - { - "column": 10, - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "DATE" - }, - { - "column": 11, - "type": "DATE" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'ab'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "CHAR" - }, - { - "column": 5, - "type": "DATE" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "CHAR" - }, - { - "column": 6, - "type": "DATE" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "BOOLEAN", - "BOOLEAN", - "CHAR", - "DATE" - ], - "content": [ - [ - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'ab'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - } - ] - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "BOOLEAN" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "CHAR" - }, - { - "column": 10, - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "DATE" - }, - { - "column": 11, - "type": "DATE" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "BOOLEAN" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 10, - "type": "BOOLEAN" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 11, - "type": "CHAR" - }, - { - "column": 12, - "type": "DATE" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "BOOLEAN", - "BOOLEAN", - "CHAR", - "DATE" - ], - "content": [ - [ - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'ab'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]", - "operand": [], - "type": "DATE" - } - ] - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$6])\r\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5}], EXPR$0=[AVG($6)])\r\n LogicalProject($f0=[false], DEPTNO=[$2], $f2=[true], EMPNO=[$0], $f4=['ab'], $f5=[2022-01-01], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$6])\r\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5}], EXPR$0=[AVG($6)])\r\n LogicalProject($f0=[$3], DEPTNO=[$2], $f2=[$4], EMPNO=[$0], $f4=[$5], $f5=[$6], SAL=[$1])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalValues(tuples=[[{ false, true, 'ab', 2022-01-01 }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testInferringPredicatesWithNotOperatorInJoinCondition.json b/tests/RelOptRulesTest/testInferringPredicatesWithNotOperatorInJoinCondition.json deleted file mode 100644 index f2a7032..0000000 --- a/tests/RelOptRulesTest/testInferringPredicatesWithNotOperatorInJoinCondition.json +++ /dev/null @@ -1,371 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NOT", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "6", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "6", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "Sarg[(-∞..4), (4..6), (6..+∞)]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\r\n LogicalJoin(condition=[AND(=($16, $7), NOT(OR(=($7, 4), =($7, 6))))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\r\n LogicalJoin(condition=[=($16, $7)], joinType=[inner])\r\n LogicalFilter(condition=[NOT(OR(=($7, 4), =($7, 6)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[SEARCH($7, Sarg[(-∞..4), (4..6), (6..+∞)])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testIntersectToDistinct.json b/tests/RelOptRulesTest/testIntersectToDistinct.json deleted file mode 100644 index cf2e0e7..0000000 --- a/tests/RelOptRulesTest/testIntersectToDistinct.json +++ /dev/null @@ -1,902 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "intersect": [ - { - "intersect": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "3", - "operand": [], - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 13, - "type": "TIMESTAMP" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 14, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 16, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 16, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 16, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalIntersect(all=[false])\r\n LogicalIntersect(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($9, 3)])\r\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5, 6, 7, 8}], agg#0=[COUNT()])\r\n LogicalUnion(all=[true])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testIsNullPushDown.json b/tests/RelOptRulesTest/testIsNullPushDown.json deleted file mode 100644 index be04093..0000000 --- a/tests/RelOptRulesTest/testIsNullPushDown.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "values": { - "schema": [ - "INTEGER", - "INTEGER", - "BIGINT" - ], - "content": [] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER", - "BIGINT" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalValues(tuples=[[]])\r\n", - "LogicalProject(EMPNO=[$0], DEPTNO=[$1], W_COUNT=[$2])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testIsNullPushDown2.json b/tests/RelOptRulesTest/testIsNullPushDown2.json deleted file mode 100644 index be04093..0000000 --- a/tests/RelOptRulesTest/testIsNullPushDown2.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "values": { - "schema": [ - "INTEGER", - "INTEGER", - "BIGINT" - ], - "content": [] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER", - "BIGINT" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalValues(tuples=[[]])\r\n", - "LogicalProject(EMPNO=[$0], DEPTNO=[$1], W_COUNT=[$2])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinAssociateRuleWithBottomAlwaysTrueConditionAllowed.json b/tests/RelOptRulesTest/testJoinAssociateRuleWithBottomAlwaysTrueConditionAllowed.json deleted file mode 100644 index d3e8913..0000000 --- a/tests/RelOptRulesTest/testJoinAssociateRuleWithBottomAlwaysTrueConditionAllowed.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "nullable": [ - false, - true, - true, - true, - true, - true, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME", - "LOC" - ], - "types": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ], - [ - 2 - ] - ], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "DECIMAL", - "DECIMAL" - ], - "nullable": [ - true, - true, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ], - [ - 2 - ], - [ - 3 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "column": 8, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 2 - } - } - }, - { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "column": 8, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 1 - }, - "right": { - "scan": 2 - } - } - } - } - } - ], - "help": [ - "LogicalJoin(condition=[=($2, $12)], joinType=[inner])\r\n LogicalJoin(condition=[=($7, $8)], joinType=[inner])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalTableScan(table=[[scott, BONUS]])\r\n", - "LogicalJoin(condition=[AND(=($2, $12), =($7, $8))], joinType=[inner])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalTableScan(table=[[scott, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinAssociateRuleWithTopAlwaysTrueConditionAllowed.json b/tests/RelOptRulesTest/testJoinAssociateRuleWithTopAlwaysTrueConditionAllowed.json deleted file mode 100644 index bd404c2..0000000 --- a/tests/RelOptRulesTest/testJoinAssociateRuleWithTopAlwaysTrueConditionAllowed.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "nullable": [ - false, - true, - true, - true, - true, - true, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "DECIMAL", - "DECIMAL" - ], - "nullable": [ - true, - true, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ], - [ - 2 - ], - [ - 3 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME", - "LOC" - ], - "types": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ], - [ - 2 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "column": 12, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 2 - } - } - }, - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "column": 12, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 1 - }, - "right": { - "scan": 2 - } - } - } - } - } - ], - "help": [ - "LogicalJoin(condition=[=($7, $12)], joinType=[inner])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalTableScan(table=[[scott, BONUS]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalJoin(condition=[=($7, $12)], joinType=[inner])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[scott, BONUS]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinCommuteRuleWithAlwaysTrueConditionAllowed.json b/tests/RelOptRulesTest/testJoinCommuteRuleWithAlwaysTrueConditionAllowed.json deleted file mode 100644 index 436a21b..0000000 --- a/tests/RelOptRulesTest/testJoinCommuteRuleWithAlwaysTrueConditionAllowed.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "nullable": [ - false, - true, - true, - true, - true, - true, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME", - "LOC" - ], - "types": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ], - [ - 2 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - { - "project": { - "target": [ - { - "column": 3, - "type": "SMALLINT" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "SMALLINT" - }, - { - "column": 7, - "type": "DATE" - }, - { - "column": 8, - "type": "DECIMAL" - }, - { - "column": 9, - "type": "DECIMAL" - }, - { - "column": 10, - "type": "TINYINT" - }, - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 1 - }, - "right": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalProject(EMPNO=[$3], ENAME=[$4], JOB=[$5], MGR=[$6], HIREDATE=[$7], SAL=[$8], COMM=[$9], DEPTNO=[$10], DEPTNO0=[$0], DNAME=[$1], LOC=[$2])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinConditionPushdown1.json b/tests/RelOptRulesTest/testJoinConditionPushdown1.json deleted file mode 100644 index 38eff53..0000000 --- a/tests/RelOptRulesTest/testJoinConditionPushdown1.json +++ /dev/null @@ -1,359 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - }, - { - "column": 18, - "type": "INTEGER" - }, - { - "column": 19, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 18, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 18, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - }, - { - "column": 18, - "type": "INTEGER" - }, - { - "column": 19, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 18, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17], DEPTNO1=[$18], NAME=[$19])\r\n LogicalFilter(condition=[AND(=($7, $18), =($16, $18))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17], DEPTNO1=[$18], NAME=[$19])\r\n LogicalJoin(condition=[=($7, $18)], joinType=[inner])\r\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinConditionPushdown2.json b/tests/RelOptRulesTest/testJoinConditionPushdown2.json deleted file mode 100644 index d0444ec..0000000 --- a/tests/RelOptRulesTest/testJoinConditionPushdown2.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalFilter(condition=[AND(=($7, $9), =($0, $9))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalFilter(condition=[=($7, $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinConditionPushdown4.json b/tests/RelOptRulesTest/testJoinConditionPushdown4.json deleted file mode 100644 index ebe442b..0000000 --- a/tests/RelOptRulesTest/testJoinConditionPushdown4.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "TINYINT" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "join": { - "kind": "SEMI", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 1, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "TINYINT" - }, - { - "column": 2, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalJoin(condition=[AND(=($0, $1), =($0, $2))], joinType=[semi])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalFilter(condition=[=($0, $1)])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinConditionPushdown6.json b/tests/RelOptRulesTest/testJoinConditionPushdown6.json deleted file mode 100644 index de046a5..0000000 --- a/tests/RelOptRulesTest/testJoinConditionPushdown6.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[AND(=($7, $9), =($0, $9))], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalFilter(condition=[=($7, $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule1.json b/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule1.json deleted file mode 100644 index 8041974..0000000 --- a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule1.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalProject(MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule12.json b/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule12.json deleted file mode 100644 index 0c20616..0000000 --- a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule12.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "schemas": [ - { - "name": "EMPNULLABLES", - "fields": [ - "ENAME", - "MGR", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - true, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$2])\r\n LogicalJoin(condition=[AND(=($0, $3), IS NOT DISTINCT FROM($1, $4))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalProject(ENAME=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n", - "LogicalProject(DEPTNO=[$2])\r\n LogicalJoin(condition=[AND(=($0, $3), IS NOT DISTINCT FROM($1, $4))], joinType=[inner])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalProject(ENAME=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule2.json b/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule2.json deleted file mode 100644 index e6dcf8a..0000000 --- a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule2.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalProject(MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule3.json b/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule3.json deleted file mode 100644 index 8dd8220..0000000 --- a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule3.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[>($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[>($0, $2)], joinType=[inner])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalProject(MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule4.json b/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule4.json deleted file mode 100644 index 9b97fd5..0000000 --- a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule4.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "schemas": [ - { - "name": "EMPNULLABLES", - "fields": [ - "ENAME", - "MGR", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - true, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$2])\r\n LogicalJoin(condition=[AND(=($0, $3), >($1, $4))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalProject(ENAME=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n", - "LogicalProject(DEPTNO=[$2])\r\n LogicalJoin(condition=[AND(=($0, $3), >($1, $4))], joinType=[inner])\r\n LogicalFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalFilter(condition=[AND(IS NOT NULL($0), IS NOT NULL($1))])\r\n LogicalProject(ENAME=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule5.json b/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule5.json deleted file mode 100644 index 1299414..0000000 --- a/tests/RelOptRulesTest/testJoinDeriveIsNotNullFilterRule5.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "schemas": [ - { - "name": "EMPNULLABLES", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - true, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], DEPTNO=[+($1, 1)])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalProject(ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n", - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], DEPTNO=[+($1, 1)])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalFilter(condition=[IS NOT NULL($0)])\r\n LogicalProject(ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinProjectTranspose1.json b/tests/RelOptRulesTest/testJoinProjectTranspose1.json deleted file mode 100644 index 51ad128..0000000 --- a/tests/RelOptRulesTest/testJoinProjectTranspose1.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "column": 1, - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "column": 1, - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0])\r\n LogicalJoin(condition=[$1], joinType=[right])\r\n LogicalProject(NAME=[$0], $f4=[$2])\r\n LogicalJoin(condition=[$1], joinType=[left])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject($f2=[>($0, 10)], $f4=[>($0, 10)])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0])\r\n LogicalJoin(condition=[>($1, 10)], joinType=[right])\r\n LogicalJoin(condition=[>($1, 10)], joinType=[left])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinProjectTranspose7.json b/tests/RelOptRulesTest/testJoinProjectTranspose7.json deleted file mode 100644 index 4583377..0000000 --- a/tests/RelOptRulesTest/testJoinProjectTranspose7.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinProjectTranspose8.json b/tests/RelOptRulesTest/testJoinProjectTranspose8.json deleted file mode 100644 index 731d281..0000000 --- a/tests/RelOptRulesTest/testJoinProjectTranspose8.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2], EXPR$1=[$3])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], EXPR$1=[AND(>($0, 10), null)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2], EXPR$1=[$3])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$3], EXPR$1=[AND(>($2, 10), null)])\r\n LogicalJoin(condition=[=($1, $3)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinProjectTransposeWindow.json b/tests/RelOptRulesTest/testJoinProjectTransposeWindow.json deleted file mode 100644 index f88950b..0000000 --- a/tests/RelOptRulesTest/testJoinProjectTransposeWindow.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BIGINT" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "error": "Not implemented: RANK" - }, - { - "operator": "+", - "operand": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "error": "Not implemented: RANK" - }, - { - "operator": "+", - "operand": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1], R=[$3], EXPR$1=[$4])\r\n LogicalJoin(condition=[=($2, $3)], joinType=[inner])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[CAST($1):BIGINT NOT NULL])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(R=[RANK() OVER (ORDER BY $0)], EXPR$1=[+(1, 1)])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalJoin(condition=[=(CAST($1):BIGINT NOT NULL, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(R=[RANK() OVER (ORDER BY $0)], EXPR$1=[+(1, 1)])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testJoinPushTransitivePredicatesRule2.json b/tests/RelOptRulesTest/testJoinPushTransitivePredicatesRule2.json deleted file mode 100644 index 29df1e3..0000000 --- a/tests/RelOptRulesTest/testJoinPushTransitivePredicatesRule2.json +++ /dev/null @@ -1,1602 +0,0 @@ -{ - "schemas": [ - { - "name": "EMPNULLABLES", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BOOLEAN" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 5, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BOOLEAN" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[AND(=($0, $3), =($1, $4))], joinType=[inner])\r\n LogicalProject(SAL=[$0], $f9=[=($0, 4)])\r\n LogicalFilter(condition=[AND(=($1, 20), >($0, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalFilter(condition=[=($1, $0)])\r\n LogicalAggregate(group=[{0, 1, 2}])\r\n LogicalJoin(condition=[OR(=($1, $0), $2)], joinType=[inner])\r\n LogicalProject(SAL=[$0])\r\n LogicalFilter(condition=[AND(=($1, 20), >($0, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(SAL=[$0], $f9=[=($0, 4)])\r\n LogicalFilter(condition=[AND(=($1, 20), >($0, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n", - "LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[AND(=($0, $3), =($1, $4))], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 1000)])\r\n LogicalProject(SAL=[$0], $f9=[=($0, 4)])\r\n LogicalFilter(condition=[AND(=($1, 20), >($0, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalFilter(condition=[=($1, $0)])\r\n LogicalAggregate(group=[{0, 1, 2}])\r\n LogicalJoin(condition=[OR(=($1, $0), $2)], joinType=[inner])\r\n LogicalProject(SAL=[$0])\r\n LogicalFilter(condition=[AND(=($1, 20), >($0, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(SAL=[$0], $f9=[=($0, 4)])\r\n LogicalFilter(condition=[AND(=($1, 20), >($0, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testLeftEmptyAntiJoin.json b/tests/RelOptRulesTest/testLeftEmptyAntiJoin.json deleted file mode 100644 index 23cc362..0000000 --- a/tests/RelOptRulesTest/testLeftEmptyAntiJoin.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "TINYINT" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "join": { - "kind": "ANTI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "column": 8, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "values": { - "schema": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "content": [] - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "values": { - "schema": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[=($7, $8)], joinType=[anti])\r\n LogicalValues(tuples=[[]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testLeftEmptyFullJoin.json b/tests/RelOptRulesTest/testLeftEmptyFullJoin.json deleted file mode 100644 index 35cb32f..0000000 --- a/tests/RelOptRulesTest/testLeftEmptyFullJoin.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[full])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[full])\r\n LogicalValues(tuples=[[]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testLeftEmptyInnerJoin.json b/tests/RelOptRulesTest/testLeftEmptyInnerJoin.json deleted file mode 100644 index 751afbb..0000000 --- a/tests/RelOptRulesTest/testLeftEmptyInnerJoin.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN", - "INTEGER", - "VARCHAR" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testLeftEmptyLeftJoin.json b/tests/RelOptRulesTest/testLeftEmptyLeftJoin.json deleted file mode 100644 index 52f128b..0000000 --- a/tests/RelOptRulesTest/testLeftEmptyLeftJoin.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN", - "INTEGER", - "VARCHAR" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testLeftEmptyRightJoin.json b/tests/RelOptRulesTest/testLeftEmptyRightJoin.json deleted file mode 100644 index 4798786..0000000 --- a/tests/RelOptRulesTest/testLeftEmptyRightJoin.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalValues(tuples=[[]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testLeftEmptySemiJoin.json b/tests/RelOptRulesTest/testLeftEmptySemiJoin.json deleted file mode 100644 index 3d94d1f..0000000 --- a/tests/RelOptRulesTest/testLeftEmptySemiJoin.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "TINYINT" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "TINYINT" - }, - { - "column": 8, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "values": { - "schema": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "content": [] - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "values": { - "schema": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[=($7, $8)], joinType=[semi])\r\n LogicalValues(tuples=[[]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testLeftOuterJoinSimplificationToInner.json b/tests/RelOptRulesTest/testLeftOuterJoinSimplificationToInner.json deleted file mode 100644 index 71a846b..0000000 --- a/tests/RelOptRulesTest/testLeftOuterJoinSimplificationToInner.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[>($1, 100)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalProject(DUMMY=[0])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMaxReuseDistinctAttrWithMixedOptionality.json b/tests/RelOptRulesTest/testMaxReuseDistinctAttrWithMixedOptionality.json deleted file mode 100644 index 9c80838..0000000 --- a/tests/RelOptRulesTest/testMaxReuseDistinctAttrWithMixedOptionality.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[MAX($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT()], EXPR$2=[MAX($0)])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMergeFilter.json b/tests/RelOptRulesTest/testMergeFilter.json deleted file mode 100644 index 54866e6..0000000 --- a/tests/RelOptRulesTest/testMergeFilter.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$1])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$1])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMergeIntersect.json b/tests/RelOptRulesTest/testMergeIntersect.json deleted file mode 100644 index cf252d3..0000000 --- a/tests/RelOptRulesTest/testMergeIntersect.json +++ /dev/null @@ -1,448 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "intersect": [ - { - "intersect": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "intersect": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - ], - "help": [ - "LogicalIntersect(all=[false])\r\n LogicalIntersect(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalIntersect(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMergeJoinFilter.json b/tests/RelOptRulesTest/testMergeJoinFilter.json deleted file mode 100644 index 0122d52..0000000 --- a/tests/RelOptRulesTest/testMergeJoinFilter.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[=($0, 10)])\r\n LogicalProject(DEPTNO=[$2], ENAME=[$0])\r\n LogicalJoin(condition=[AND(=($1, $2), =($2, 10))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$2], ENAME=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMergeMinus.json b/tests/RelOptRulesTest/testMergeMinus.json deleted file mode 100644 index 1722b51..0000000 --- a/tests/RelOptRulesTest/testMergeMinus.json +++ /dev/null @@ -1,454 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "except": [ - { - "distinct": { - "except": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "except": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalMinus(all=[false])\r\n LogicalMinus(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalMinus(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMergeUnionAll.json b/tests/RelOptRulesTest/testMergeUnionAll.json deleted file mode 100644 index 7c628ca..0000000 --- a/tests/RelOptRulesTest/testMergeUnionAll.json +++ /dev/null @@ -1,448 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "union": [ - { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - ], - "help": [ - "LogicalUnion(all=[true])\r\n LogicalUnion(all=[true])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalUnion(all=[true])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMergeUnionDistinct.json b/tests/RelOptRulesTest/testMergeUnionDistinct.json deleted file mode 100644 index bac3d23..0000000 --- a/tests/RelOptRulesTest/testMergeUnionDistinct.json +++ /dev/null @@ -1,454 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "union": [ - { - "distinct": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalUnion(all=[false])\r\n LogicalUnion(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalUnion(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMergeUnionMixed2.json b/tests/RelOptRulesTest/testMergeUnionMixed2.json deleted file mode 100644 index 1011156..0000000 --- a/tests/RelOptRulesTest/testMergeUnionMixed2.json +++ /dev/null @@ -1,452 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "union": [ - { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalUnion(all=[false])\r\n LogicalUnion(all=[true])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalUnion(all=[false])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($7, 30)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMinReuseDistinctAttrWithMixedOptionality.json b/tests/RelOptRulesTest/testMinReuseDistinctAttrWithMixedOptionality.json deleted file mode 100644 index 70d18f9..0000000 --- a/tests/RelOptRulesTest/testMinReuseDistinctAttrWithMixedOptionality.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[MIN($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT()], EXPR$2=[MIN($0)])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMinusMergeRule.json b/tests/RelOptRulesTest/testMinusMergeRule.json deleted file mode 100644 index a807521..0000000 --- a/tests/RelOptRulesTest/testMinusMergeRule.json +++ /dev/null @@ -1,439 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "except": [ - { - "except": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "except": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "except": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - }, - { - "except": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "except": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - ], - "help": [ - "LogicalMinus(all=[true])\r\n LogicalMinus(all=[true])\r\n LogicalProject(NAME=[$0], DEPTNO=[$1])\r\n LogicalMinus(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0], EXPR$2=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$0], DEPTNO=[$1])\r\n LogicalMinus(all=[true])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0], EXPR$2=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalMinus(all=[true])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalMinus(all=[true])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testMultipleDistinctWithGrouping.json b/tests/RelOptRulesTest/testMultipleDistinctWithGrouping.json deleted file mode 100644 index b647850..0000000 --- a/tests/RelOptRulesTest/testMultipleDistinctWithGrouping.json +++ /dev/null @@ -1,635 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[AVG(DISTINCT $1)], EXPR$3=[SUM(DISTINCT $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(SAL=[$0], EXPR$1=[$1], EXPR$2=[$3], EXPR$3=[$5])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner])\r\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$2=[AVG($1)])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$3=[SUM($0)])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(SAL=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testNoOversimplificationBelowIsNull.json b/tests/RelOptRulesTest/testNoOversimplificationBelowIsNull.json deleted file mode 100644 index e86bc12..0000000 --- a/tests/RelOptRulesTest/testNoOversimplificationBelowIsNull.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NULL", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NULL", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NULL(OR(AND(=($0, 1), =($3, 1)), AND(=($0, null), =($3, 1))))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NULL(OR(AND(=($0, 1), =($3, 1)), AND(null, =($3, 1))))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testOrAlwaysTrue.json b/tests/RelOptRulesTest/testOrAlwaysTrue.json deleted file mode 100644 index 9735b84..0000000 --- a/tests/RelOptRulesTest/testOrAlwaysTrue.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "schemas": [ - { - "name": "EMPNULLABLES", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[OR(IS NULL($5), IS NOT NULL($5))])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testOrAlwaysTrue2.json b/tests/RelOptRulesTest/testOrAlwaysTrue2.json deleted file mode 100644 index 685719c..0000000 --- a/tests/RelOptRulesTest/testOrAlwaysTrue2.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "schemas": [ - { - "name": "EMPNULLABLES", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[OR(IS NOT NULL($5), IS NULL($5))])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testOversimplifiedCaseStatement.json b/tests/RelOptRulesTest/testOversimplifiedCaseStatement.json deleted file mode 100644 index c480a9e..0000000 --- a/tests/RelOptRulesTest/testOversimplifiedCaseStatement.json +++ /dev/null @@ -1,294 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "/", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(>($3, 0), >(CASE(>($3, 0), /($7, $3), null:INTEGER), 1))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(>($3, 0), CASE(>($3, 0), >(/($7, $3), 1), false))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectAggregateMerge.json b/tests/RelOptRulesTest/testProjectAggregateMerge.json deleted file mode 100644 index e13b687..0000000 --- a/tests/RelOptRulesTest/testProjectAggregateMerge.json +++ /dev/null @@ -1,306 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($1, $2)])\r\n LogicalAggregate(group=[{0, 1}], SS=[SUM($2)])\r\n LogicalProject(JOB=[$0], DEPTNO=[$2], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject($f0=[+($1, $2)])\r\n LogicalAggregate(group=[{0, 1}], SS=[SUM($2)])\r\n LogicalProject(JOB=[$0], DEPTNO=[$2], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectAggregateMergeSum0.json b/tests/RelOptRulesTest/testProjectAggregateMergeSum0.json deleted file mode 100644 index 9b919d9..0000000 --- a/tests/RelOptRulesTest/testProjectAggregateMergeSum0.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalProject(SS0=[CASE(IS NOT NULL($0), CAST($0):INTEGER NOT NULL, 0)])\r\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], agg#0=[$SUM0($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectAggregateMergeSum0AndSum.json b/tests/RelOptRulesTest/testProjectAggregateMergeSum0AndSum.json deleted file mode 100644 index 002a784..0000000 --- a/tests/RelOptRulesTest/testProjectAggregateMergeSum0AndSum.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[*($0, 2)], SS0=[CASE(IS NOT NULL($0), CAST($0):INTEGER NOT NULL, 0)])\r\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject($f0=[*($0, 2)], $f1=[$1])\r\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)], agg#1=[$SUM0($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectCorrelateTransposeRuleLeftCorrelate.json b/tests/RelOptRulesTest/testProjectCorrelateTransposeRuleLeftCorrelate.json deleted file mode 100644 index 98de5bf..0000000 --- a/tests/RelOptRulesTest/testProjectCorrelateTransposeRuleLeftCorrelate.json +++ /dev/null @@ -1,364 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "source": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[IS NOT NULL($1)])\r\n LogicalProject(EMPNO=[$0], $f0=[$2])\r\n LogicalCorrelate(correlation=[$cor2], joinType=[left], requiredColumns=[{1}])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[=($cor2.DEPTNO, $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectJoinRemove1.json b/tests/RelOptRulesTest/testProjectJoinRemove1.json deleted file mode 100644 index d257ef9..0000000 --- a/tests/RelOptRulesTest/testProjectJoinRemove1.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], DEPTNO0=[$2])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectJoinRemove10.json b/tests/RelOptRulesTest/testProjectJoinRemove10.json deleted file mode 100644 index 2c581cd..0000000 --- a/tests/RelOptRulesTest/testProjectJoinRemove10.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "scan": 0 - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], SLACKER=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectJoinRemove4.json b/tests/RelOptRulesTest/testProjectJoinRemove4.json deleted file mode 100644 index 7ee6590..0000000 --- a/tests/RelOptRulesTest/testProjectJoinRemove4.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "scan": 0 - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectJoinRemove7.json b/tests/RelOptRulesTest/testProjectJoinRemove7.json deleted file mode 100644 index ea56593..0000000 --- a/tests/RelOptRulesTest/testProjectJoinRemove7.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "scan": 1 - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectJoinTransposeItem.json b/tests/RelOptRulesTest/testProjectJoinTransposeItem.json deleted file mode 100644 index 2897bf6..0000000 --- a/tests/RelOptRulesTest/testProjectJoinTransposeItem.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "schemas": [ - { - "name": "CUSTOMER", - "fields": [ - "C_NATIONKEY" - ], - "types": [ - "ANY" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "ITEM", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - }, - { - "operator": "ITEM", - "operand": [ - { - "column": 2, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "ANY" - }, - { - "column": 3, - "type": "ANY" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "ITEM", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "ITEM", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "ANY" - }, - { - "column": 3, - "type": "ANY" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "column": 2, - "type": "ANY" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "ANY" - }, - { - "operator": "ITEM", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "ITEM", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "ANY" - }, - { - "operator": "ITEM", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "ITEM", - "operand": [ - { - "column": 0, - "type": "ANY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ANY" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[ITEM($0, 0)], EXPR$1=[ITEM($2, 0)])\r\n LogicalJoin(condition=[=($1, $3)], joinType=[left])\r\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\r\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$3])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalProject($f1=[$1], EXPR$0=[ITEM($0, 0)])\r\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\r\n LogicalProject($f1=[$1], EXPR$0=[ITEM($0, 0)])\r\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testProjectSetOpTranspose.json b/tests/RelOptRulesTest/testProjectSetOpTranspose.json deleted file mode 100644 index 6934315..0000000 --- a/tests/RelOptRulesTest/testProjectSetOpTranspose.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "error": "Not implemented: SUM" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "error": "Not implemented: SUM" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - ], - "help": [ - "LogicalProject(JOB=[$0], EXPR$1=[SUM(+($1, 100)) OVER (PARTITION BY $2)])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(JOB=[$0], EXPR$1=[SUM($2) OVER (PARTITION BY $1)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(JOB=[$0], DEPTNO=[$2], EXPR$0=[+($1, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(JOB=[$0], DEPTNO=[$2], EXPR$0=[+($1, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullAggregateThroughUnion.json b/tests/RelOptRulesTest/testPullAggregateThroughUnion.json deleted file mode 100644 index 52b80a3..0000000 --- a/tests/RelOptRulesTest/testPullAggregateThroughUnion.json +++ /dev/null @@ -1,625 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullAggregateThroughUnion2.json b/tests/RelOptRulesTest/testPullAggregateThroughUnion2.json deleted file mode 100644 index 52b80a3..0000000 --- a/tests/RelOptRulesTest/testPullAggregateThroughUnion2.json +++ /dev/null @@ -1,625 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullAggregateThroughUnionAndAddProjects.json b/tests/RelOptRulesTest/testPullAggregateThroughUnionAndAddProjects.json deleted file mode 100644 index 37b3938..0000000 --- a/tests/RelOptRulesTest/testPullAggregateThroughUnionAndAddProjects.json +++ /dev/null @@ -1,457 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullAggregateThroughUnionWithAlias.json b/tests/RelOptRulesTest/testPullAggregateThroughUnionWithAlias.json deleted file mode 100644 index 5799e8f..0000000 --- a/tests/RelOptRulesTest/testPullAggregateThroughUnionWithAlias.json +++ /dev/null @@ -1,589 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantIntoFilter.json b/tests/RelOptRulesTest/testPullConstantIntoFilter.json deleted file mode 100644 index 294b801..0000000 --- a/tests/RelOptRulesTest/testPullConstantIntoFilter.json +++ /dev/null @@ -1,312 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "operator": "15", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[>(+($7, 5), $0)])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[>(15, $0)])\r\n LogicalFilter(condition=[=($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantIntoJoin.json b/tests/RelOptRulesTest/testPullConstantIntoJoin.json deleted file mode 100644 index 32356b6..0000000 --- a/tests/RelOptRulesTest/testPullConstantIntoJoin.json +++ /dev/null @@ -1,355 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[true], joinType=[left])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantIntoJoin2.json b/tests/RelOptRulesTest/testPullConstantIntoJoin2.json deleted file mode 100644 index 5ec753d..0000000 --- a/tests/RelOptRulesTest/testPullConstantIntoJoin2.json +++ /dev/null @@ -1,451 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 10, - "type": "INTEGER" - }, - { - "column": 11, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "operator": "+", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "TIMESTAMP" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "BOOLEAN" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 8, - "type": "INTEGER" - }, - { - "operator": "15", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "operator": "+", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$10], NAME=[$11])\r\n LogicalJoin(condition=[AND(=($0, $10), =($9, $12))], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[10], ENAME=[$0], JOB=[$1], MGR=[$2], HIREDATE=[$3], SAL=[$4], COMM=[$5], DEPTNO=[$6], SLACKER=[$7], DEPTNO0=[10], NAME=[$9])\r\n LogicalJoin(condition=[=($8, 15)], joinType=[inner])\r\n LogicalProject(ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, 10)])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(NAME=[$1])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantIntoProject.json b/tests/RelOptRulesTest/testPullConstantIntoProject.json deleted file mode 100644 index 8bc9af0..0000000 --- a/tests/RelOptRulesTest/testPullConstantIntoProject.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1], EXPR$1=[+($1, 1)], EXPR$2=[+($0, $1)])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[10], EXPR$1=[11], EXPR$2=[+($0, 10)])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantIntoProjectWithIsNotDistinctFrom.json b/tests/RelOptRulesTest/testPullConstantIntoProjectWithIsNotDistinctFrom.json deleted file mode 100644 index 0d4b8fd..0000000 --- a/tests/RelOptRulesTest/testPullConstantIntoProjectWithIsNotDistinctFrom.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1], EXPR$1=[+($1, 1)], EXPR$2=[+($0, $1)])\r\n LogicalFilter(condition=[OR(AND(IS NULL($1), IS NULL(10)), IS TRUE(=($1, 10)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[10], EXPR$1=[11], EXPR$2=[+($0, 10)])\r\n LogicalFilter(condition=[OR(AND(IS NULL($1), IS NULL(10)), IS TRUE(=($1, 10)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantIntoProjectWithIsNotDistinctFromForNull.json b/tests/RelOptRulesTest/testPullConstantIntoProjectWithIsNotDistinctFromForNull.json deleted file mode 100644 index 0e7e18d..0000000 --- a/tests/RelOptRulesTest/testPullConstantIntoProjectWithIsNotDistinctFromForNull.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[OR(AND(IS NULL($0), IS NULL(null:INTEGER)), IS TRUE(=($0, null)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(MGR=[null:INTEGER], DEPTNO=[$1])\r\n LogicalFilter(condition=[OR(AND(IS NULL($0), IS NULL(null:INTEGER)), IS TRUE(=($0, null)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughAggregateAllConst.json b/tests/RelOptRulesTest/testPullConstantThroughAggregateAllConst.json deleted file mode 100644 index ce8772c..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughAggregateAllConst.json +++ /dev/null @@ -1,368 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\r\n LogicalProject(EXPR$0=[4], EXPR$1=[+(2, 3)], FIVE=[5])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$0], EXPR$1=[+(2, 3)], EXPR$2=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$2=[MAX($1)])\r\n LogicalProject(EXPR$0=[4], FIVE=[5])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughAggregateAllLiterals.json b/tests/RelOptRulesTest/testPullConstantThroughAggregateAllLiterals.json deleted file mode 100644 index 1e533fa..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughAggregateAllLiterals.json +++ /dev/null @@ -1,368 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\r\n LogicalProject(EXPR$0=[4], EXPR$1=[+(2, 3)], $f2=[5])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$0], EXPR$1=[+(2, 3)], EXPR$2=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$2=[MAX($1)])\r\n LogicalProject(EXPR$0=[4], $f2=[5])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughAggregateConstGroupBy.json b/tests/RelOptRulesTest/testPullConstantThroughAggregateConstGroupBy.json deleted file mode 100644 index 82e490d..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughAggregateConstGroupBy.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\r\n LogicalProject(EXPR$0=[4], EXPR$1=[+(2, 3)], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$0], EXPR$1=[+(2, 3)], EXPR$2=[$1])\r\n LogicalAggregate(group=[{0}], EXPR$2=[MAX($1)])\r\n LogicalProject(EXPR$0=[4], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughAggregatePermuted.json b/tests/RelOptRulesTest/testPullConstantThroughAggregatePermuted.json deleted file mode 100644 index c9c2abb..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughAggregatePermuted.json +++ /dev/null @@ -1,413 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "42", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "42", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "42", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "42", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], EXPR$1=[$4])\r\n LogicalAggregate(group=[{0, 1, 2, 3}], EXPR$1=[MAX($4)])\r\n LogicalProject(DEPTNO=[$1], FOUR=[4], TWO_PLUS_THREE=[+(2, 3)], DEPTNO42=[+($1, 42)], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\r\n LogicalProject(DEPTNO=[$1], DEPTNO42=[+($1, 42)], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughAggregatePermutedConstFirst.json b/tests/RelOptRulesTest/testPullConstantThroughAggregatePermutedConstFirst.json deleted file mode 100644 index 821eb7c..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughAggregatePermutedConstFirst.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\r\n LogicalProject(FOUR=[4], DEPTNO=[$1], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalProject(DEPTNO=[$1], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughAggregatePermutedConstGroupBy.json b/tests/RelOptRulesTest/testPullConstantThroughAggregatePermutedConstGroupBy.json deleted file mode 100644 index e3a971a..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughAggregatePermutedConstGroupBy.json +++ /dev/null @@ -1,275 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "operator": "42", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "24", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "operator": "42", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "24", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$1], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\r\n LogicalProject($f0=[+(42, 24)], DEPTNO=[$1], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalProject(DEPTNO=[$1], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughAggregateSimpleNonNullable.json b/tests/RelOptRulesTest/testPullConstantThroughAggregateSimpleNonNullable.json deleted file mode 100644 index 094cc56..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughAggregateSimpleNonNullable.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\r\n LogicalProject(DEPTNO=[$1], FOUR=[4], ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalProject(DEPTNO=[$1], ENAME=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughConstLast.json b/tests/RelOptRulesTest/testPullConstantThroughConstLast.json deleted file mode 100644 index dfe49f4..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughConstLast.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\r\n LogicalProject(DEPTNO=[$1], FOUR=[4], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalProject(DEPTNO=[$1], MGR=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughUnion.json b/tests/RelOptRulesTest/testPullConstantThroughUnion.json deleted file mode 100644 index 05fdf35..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughUnion.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "union": [ - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - ] - }, - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - ], - "help": [ - "LogicalUnion(all=[true])\r\n LogicalProject(EXPR$0=[2], DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EXPR$0=[2], DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[2], DEPTNO=[$0], JOB=[$1])\r\n LogicalUnion(all=[true])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullConstantThroughUnion3.json b/tests/RelOptRulesTest/testPullConstantThroughUnion3.json deleted file mode 100644 index 6a4dea5..0000000 --- a/tests/RelOptRulesTest/testPullConstantThroughUnion3.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "union": [ - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ] - }, - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - ], - "help": [ - "LogicalUnion(all=[true])\r\n LogicalProject(EXPR$0=[2], EXPR$1=[3])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EXPR$0=[2], EXPR$1=[3])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[2], EXPR$1=[3])\r\n LogicalUnion(all=[true])\r\n LogicalProject(EXPR$0=[2])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EXPR$0=[2])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullFilterThroughAggregate.json b/tests/RelOptRulesTest/testPullFilterThroughAggregate.json deleted file mode 100644 index 2c39cc9..0000000 --- a/tests/RelOptRulesTest/testPullFilterThroughAggregate.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "5000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1, 2}])\r\n LogicalFilter(condition=[>($1, 5000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalFilter(condition=[>($1, 5000)])\r\n LogicalAggregate(group=[{0, 1, 2}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullFilterThroughAggregateGroupingSets.json b/tests/RelOptRulesTest/testPullFilterThroughAggregateGroupingSets.json deleted file mode 100644 index 92e03b1..0000000 --- a/tests/RelOptRulesTest/testPullFilterThroughAggregateGroupingSets.json +++ /dev/null @@ -1,448 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "5000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "5000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1, 2}, {0, 1}, {0}, {}]])\r\n LogicalFilter(condition=[>($1, 5000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1, 2}, {0, 1}, {0}, {}]])\r\n LogicalFilter(condition=[>($1, 5000)])\r\n LogicalAggregate(group=[{0, 1, 2}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPullNull.json b/tests/RelOptRulesTest/testPullNull.json deleted file mode 100644 index 07f48e2..0000000 --- a/tests/RelOptRulesTest/testPullNull.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($7, 7), =($0, 10), IS NULL($3), =($0, 10))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[10], ENAME=[$1], JOB=[$2], MGR=[null:INTEGER], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($7, 7), =($0, 10), IS NULL($3))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAboveFiltersIntoInnerJoinCondition.json b/tests/RelOptRulesTest/testPushAboveFiltersIntoInnerJoinCondition.json deleted file mode 100644 index bb7faa0..0000000 --- a/tests/RelOptRulesTest/testPushAboveFiltersIntoInnerJoinCondition.json +++ /dev/null @@ -1,281 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "TIMESTAMP" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "TIMESTAMP" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\r\n LogicalFilter(condition=[>($0, $5)])\r\n LogicalJoin(condition=[AND(=($0, $9), >($0, $5))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\r\n LogicalJoin(condition=[AND(=($0, $9), >($0, $5))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateFunctionsThroughJoin.json b/tests/RelOptRulesTest/testPushAggregateFunctionsThroughJoin.json deleted file mode 100644 index fbad485..0000000 --- a/tests/RelOptRulesTest/testPushAggregateFunctionsThroughJoin.json +++ /dev/null @@ -1,593 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "MGR", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 6, - "type": "BIGINT" - }, - { - "column": 7, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "BIGINT" - }, - { - "column": 6, - "type": "BIGINT" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "column": 8, - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "*", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "column": 8, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(JOB=[$0], MIN_SAL=[$2], MIN_DEPTNO=[$3], SUM_SAL_PLUS=[+($4, 1)], MAX_SAL=[$5], SUM_SAL_2=[$4], COUNT_SAL=[$6], COUNT_MGR=[$7])\r\n LogicalAggregate(group=[{0, 4}], MIN_SAL=[MIN($2)], MIN_DEPTNO=[MIN($3)], SUM_SAL_2=[SUM($2)], MAX_SAL=[MAX($2)], COUNT_SAL=[COUNT()], COUNT_MGR=[COUNT($1)])\r\n LogicalJoin(condition=[=($0, $4)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(JOB=[$0], MIN_SAL=[$1], MIN_DEPTNO=[$2], SUM_SAL_PLUS=[+($3, 1)], MAX_SAL=[$4], SUM_SAL_2=[$3], COUNT_SAL=[$5], COUNT_MGR=[$6])\r\n LogicalProject(JOB=[$0], MIN_SAL=[$1], MIN_DEPTNO=[$2], $f9=[CAST(*($3, $8)):INTEGER NOT NULL], MAX_SAL=[$4], $f10=[*($5, $8)], $f11=[*($6, $8)])\r\n LogicalJoin(condition=[=($0, $7)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], MIN_SAL=[MIN($2)], MIN_DEPTNO=[MIN($3)], SUM_SAL_2=[SUM($2)], MAX_SAL=[MAX($2)], COUNT_SAL=[COUNT()], COUNT_MGR=[COUNT($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateSumNoGroup.json b/tests/RelOptRulesTest/testPushAggregateSumNoGroup.json deleted file mode 100644 index 492b4c8..0000000 --- a/tests/RelOptRulesTest/testPushAggregateSumNoGroup.json +++ /dev/null @@ -1,473 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 0, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[$SUM0($0)])\r\n LogicalProject($f4=[*($1, $3)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateSumThroughJoin.json b/tests/RelOptRulesTest/testPushAggregateSumThroughJoin.json deleted file mode 100644 index cca0cec..0000000 --- a/tests/RelOptRulesTest/testPushAggregateSumThroughJoin.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(JOB=[$0], EXPR$1=[$2])\r\n LogicalAggregate(group=[{0, 2}], EXPR$1=[SUM($1)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(JOB=[$1], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(JOB=[$0], $f4=[CAST(*($1, $3)):INTEGER NOT NULL])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalProject(JOB=[$1], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateSumThroughJoinAfterAggregateReduce.json b/tests/RelOptRulesTest/testPushAggregateSumThroughJoinAfterAggregateReduce.json deleted file mode 100644 index e61561d..0000000 --- a/tests/RelOptRulesTest/testPushAggregateSumThroughJoinAfterAggregateReduce.json +++ /dev/null @@ -1,794 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 1, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM($1)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(JOB=[$1], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EXPR$0=[CASE(=($1, 0), null:INTEGER, $0)])\r\n LogicalAggregate(group=[{}], EXPR$0=[$SUM0($0)], agg#1=[$SUM0($1)])\r\n LogicalProject($f5=[CAST(*($1, $4)):INTEGER NOT NULL], $f6=[*($2, $4)])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], EXPR$0=[$SUM0($1)], agg#1=[COUNT()])\r\n LogicalProject(JOB=[$1], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateSumWithoutGroupKeyThroughJoin.json b/tests/RelOptRulesTest/testPushAggregateSumWithoutGroupKeyThroughJoin.json deleted file mode 100644 index dd78fc5..0000000 --- a/tests/RelOptRulesTest/testPushAggregateSumWithoutGroupKeyThroughJoin.json +++ /dev/null @@ -1,704 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM($1)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(JOB=[$1], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalProject($f4=[CAST(*($1, $3)):INTEGER])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], EXPR$0=[SUM($1)])\r\n LogicalProject(JOB=[$1], SAL=[$2])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoin1.json b/tests/RelOptRulesTest/testPushAggregateThroughJoin1.json deleted file mode 100644 index d58e067..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoin1.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoin2.json b/tests/RelOptRulesTest/testPushAggregateThroughJoin2.json deleted file mode 100644 index 7c103df..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoin2.json +++ /dev/null @@ -1,1036 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 2}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[inner])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0, 2}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[inner])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoin4.json b/tests/RelOptRulesTest/testPushAggregateThroughJoin4.json deleted file mode 100644 index 227d983..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoin4.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoin5.json b/tests/RelOptRulesTest/testPushAggregateThroughJoin5.json deleted file mode 100644 index e345241..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoin5.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "scan": 1 - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoin6.json b/tests/RelOptRulesTest/testPushAggregateThroughJoin6.json deleted file mode 100644 index 86cf80f..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoin6.json +++ /dev/null @@ -1,556 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM($1)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalProject($f3=[CAST(*($1, $2)):INTEGER])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoin7.json b/tests/RelOptRulesTest/testPushAggregateThroughJoin7.json deleted file mode 100644 index e04be70..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoin7.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "ANY_VALUE", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "ANY_VALUE", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[ANY_VALUE($1)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[ANY_VALUE($1)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoin8.json b/tests/RelOptRulesTest/testPushAggregateThroughJoin8.json deleted file mode 100644 index efd4a6c..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoin8.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SINGLE_VALUE", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SINGLE_VALUE", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SINGLE_VALUE($1)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SINGLE_VALUE($1)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoinDistinct.json b/tests/RelOptRulesTest/testPushAggregateThroughJoinDistinct.json deleted file mode 100644 index 5323cbb..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoinDistinct.json +++ /dev/null @@ -1,411 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{2}], SUM_SAL=[SUM($1)], C=[COUNT()])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$3], SUM_SAL=[$1], C=[$2])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\r\n LogicalAggregate(group=[{0}], SUM_SAL=[SUM($1)], C=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoinOnEmptyLogicalValues.json b/tests/RelOptRulesTest/testPushAggregateThroughJoinOnEmptyLogicalValues.json deleted file mode 100644 index 25c604d..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoinOnEmptyLogicalValues.json +++ /dev/null @@ -1,527 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - }, - "right": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 0, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], VOLUME=[COUNT()], C1_SUM_SAL=[SUM($0)])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalProject(SAL=[$5], ENAME=[$1])\r\n LogicalValues(tuples=[[]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], VOLUME=[$SUM0($0)], C1_SUM_SAL=[SUM($1)])\r\n LogicalProject(VOLUME=[$3], $f4=[CAST(*($1, $3)):INTEGER])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$1], SAL=[$0])\r\n LogicalProject(SAL=[$5], ENAME=[$1])\r\n LogicalValues(tuples=[[]])\r\n LogicalAggregate(group=[{0}], VOLUME=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughJoinWithUniqueInput.json b/tests/RelOptRulesTest/testPushAggregateThroughJoinWithUniqueInput.json deleted file mode 100644 index caff6df..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughJoinWithUniqueInput.json +++ /dev/null @@ -1,1319 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "TIMESTAMP" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "TIMESTAMP" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "TIMESTAMP" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "TIMESTAMP" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 8, - "type": "TIMESTAMP" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "TIMESTAMP" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "TIMESTAMP" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "TIMESTAMP" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "TIMESTAMP" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "TIMESTAMP" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "TIMESTAMP" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 6, - "type": "TIMESTAMP" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "TIMESTAMP" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "TIMESTAMP" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "TIMESTAMP" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "TIMESTAMP" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "TIMESTAMP" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "TIMESTAMP" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "TIMESTAMP" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "TIMESTAMP" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "TIMESTAMP" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "TIMESTAMP" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(JOB=[$0], MGR0=[$2], DEPTNO=[$1], HIREDATE1=[$3], COMM1=[$4])\r\n LogicalAggregate(group=[{0, 2, 3}], HIREDATE1=[MAX($5)], COMM1=[SUM($6)])\r\n LogicalJoin(condition=[=($1, $4)], joinType=[inner])\r\n LogicalProject(JOB=[$0], SAL=[$3], DEPTNO=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 2}], HIREDATE1=[MAX($1)], COMM1=[SUM($3)])\r\n LogicalProject(MGR=[$1], HIREDATE=[$2], SAL=[$3], COMM=[$4])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(JOB=[$0], MGR0=[$2], DEPTNO=[$1], HIREDATE1=[$3], COMM1=[$4])\r\n LogicalAggregate(group=[{0, 1, 2}], HIREDATE1=[MAX($3)], COMM1=[SUM($4)])\r\n LogicalProject(JOB=[$0], DEPTNO=[$2], MGR=[$4], HIREDATE1=[$6], $f8=[CAST(*($3, $7)):INTEGER NOT NULL])\r\n LogicalJoin(condition=[=($1, $5)], joinType=[inner])\r\n LogicalAggregate(group=[{0, 1, 2}], agg#0=[COUNT()])\r\n LogicalProject(JOB=[$0], SAL=[$3], DEPTNO=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 2}], HIREDATE1=[MAX($1)], COMM1=[SUM($3)])\r\n LogicalProject(MGR=[$1], HIREDATE=[$2], SAL=[$3], COMM=[$4])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin1.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin1.json deleted file mode 100644 index 747dc2a..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin1.json +++ /dev/null @@ -1,573 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin12.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin12.json deleted file mode 100644 index ee8f173..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin12.json +++ /dev/null @@ -1,597 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[right])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[right])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin13.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin13.json deleted file mode 100644 index 7f8826e..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin13.json +++ /dev/null @@ -1,597 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[full])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[full])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin14.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin14.json deleted file mode 100644 index 42b9118..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin14.json +++ /dev/null @@ -1,498 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(MGR=[$1], MGR0=[$0])\r\n LogicalProject(MGR0=[$1], MGR=[$0])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(MGR=[$1], MGR0=[$0])\r\n LogicalProject(MGR0=[$1], MGR=[$0])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[full])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin15.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin15.json deleted file mode 100644 index eef618d..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin15.json +++ /dev/null @@ -1,802 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "MGR" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 3}])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[full])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalProject(ENAME=[$0], JOB=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(JOB=[$1], MGR=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 3}])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[full])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalProject(ENAME=[$0], JOB=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$1], MGR=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin16.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin16.json deleted file mode 100644 index 82b7f58..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin16.json +++ /dev/null @@ -1,1000 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[full])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[full])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin2.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin2.json deleted file mode 100644 index a2305c3..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin2.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{1}])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{1}])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin3.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin3.json deleted file mode 100644 index 517c32f..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin3.json +++ /dev/null @@ -1,802 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "MGR" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 3}])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalProject(ENAME=[$0], JOB=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(JOB=[$1], MGR=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 3}])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalProject(ENAME=[$0], JOB=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$1], MGR=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin4.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin4.json deleted file mode 100644 index 1352f45..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin4.json +++ /dev/null @@ -1,383 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(JOB=[$0])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin5.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin5.json deleted file mode 100644 index 6c188dd..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin5.json +++ /dev/null @@ -1,597 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{1}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{1}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin6.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin6.json deleted file mode 100644 index 67c3436..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin6.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB" - ], - "types": [ - "VARCHAR", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - }, - { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(JOB=[$1])\r\n LogicalFilter(condition=[=($0, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin7.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin7.json deleted file mode 100644 index 22a2af3..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin7.json +++ /dev/null @@ -1,1000 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin8.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin8.json deleted file mode 100644 index b47be81..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin8.json +++ /dev/null @@ -1,1000 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{2}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{2}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin9.json b/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin9.json deleted file mode 100644 index 49492fa..0000000 --- a/tests/RelOptRulesTest/testPushAggregateThroughOuterJoin9.json +++ /dev/null @@ -1,1036 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'A'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "+", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 2}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0, 2}])\r\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(JOB=[$2], $f9=[+($3, $0)])\r\n LogicalFilter(condition=[=($1, 'A')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(NAME=[$1], $f2=[+($0, 5)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAvgGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushAvgGroupingSetsThroughUnion.json deleted file mode 100644 index 4dbc062..0000000 --- a/tests/RelOptRulesTest/testPushAvgGroupingSetsThroughUnion.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[AVG($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[AVG($2)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushAvgThroughUnion.json b/tests/RelOptRulesTest/testPushAvgThroughUnion.json deleted file mode 100644 index 2f918f5..0000000 --- a/tests/RelOptRulesTest/testPushAvgThroughUnion.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[AVG($1)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[AVG($1)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushBoolAndBoolOrThroughUnion.json b/tests/RelOptRulesTest/testPushBoolAndBoolOrThroughUnion.json deleted file mode 100644 index 04e6e24..0000000 --- a/tests/RelOptRulesTest/testPushBoolAndBoolOrThroughUnion.json +++ /dev/null @@ -1,935 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "BOOL_AND", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - }, - { - "operator": "BOOL_OR", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "BOOL_AND", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - }, - { - "operator": "BOOL_OR", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "BOOL_AND", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - }, - { - "operator": "BOOL_OR", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "BOOL_AND", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - }, - { - "operator": "BOOL_OR", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "BOOL_AND", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - }, - { - "operator": "BOOL_OR", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "BOOL_AND", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - }, - { - "operator": "BOOL_OR", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "operator": "MOD", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($1)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($1)])\r\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($1)])\r\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushCountFilterThroughUnion.json b/tests/RelOptRulesTest/testPushCountFilterThroughUnion.json deleted file mode 100644 index 23f854c..0000000 --- a/tests/RelOptRulesTest/testPushCountFilterThroughUnion.json +++ /dev/null @@ -1,880 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "union": [ - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "union": [ - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'CLERK'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT() FILTER $1])\r\n LogicalProject(DEPTNO=[$1], $f1=[=($0, 'CLERK')])\r\n LogicalUnion(all=[true])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($1, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT() FILTER $1])\r\n LogicalProject(DEPTNO=[$1], $f1=[=($0, 'CLERK')])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT() FILTER $1])\r\n LogicalProject(DEPTNO=[$1], $f1=[=($0, 'CLERK')])\r\n LogicalFilter(condition=[>($1, 20)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushCountNullableGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushCountNullableGroupingSetsThroughUnion.json deleted file mode 100644 index 4eda9f9..0000000 --- a/tests/RelOptRulesTest/testPushCountNullableGroupingSetsThroughUnion.json +++ /dev/null @@ -1,718 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "MGR", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 4, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[$SUM0($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushCountNullableThroughUnion.json b/tests/RelOptRulesTest/testPushCountNullableThroughUnion.json deleted file mode 100644 index 0f7f22d..0000000 --- a/tests/RelOptRulesTest/testPushCountNullableThroughUnion.json +++ /dev/null @@ -1,427 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "MGR" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1)])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushCountStarGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushCountStarGroupingSetsThroughUnion.json deleted file mode 100644 index c1254aa..0000000 --- a/tests/RelOptRulesTest/testPushCountStarGroupingSetsThroughUnion.json +++ /dev/null @@ -1,650 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 4, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[$SUM0($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushCountStarThroughUnion.json b/tests/RelOptRulesTest/testPushCountStarThroughUnion.json deleted file mode 100644 index 0c52fbe..0000000 --- a/tests/RelOptRulesTest/testPushCountStarThroughUnion.json +++ /dev/null @@ -1,399 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterPastAgg.json b/tests/RelOptRulesTest/testPushFilterPastAgg.json deleted file mode 100644 index e4e4fd0..0000000 --- a/tests/RelOptRulesTest/testPushFilterPastAgg.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalFilter(condition=[=($0, 'Charlie')])\r\n LogicalAggregate(group=[{0}], C=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0}], C=[COUNT()])\r\n LogicalFilter(condition=[=($0, 'Charlie')])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterPastAggFour.json b/tests/RelOptRulesTest/testPushFilterPastAggFour.json deleted file mode 100644 index 78b602b..0000000 --- a/tests/RelOptRulesTest/testPushFilterPastAggFour.json +++ /dev/null @@ -1,577 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "_ISO-8859-1'12'", - "operand": [], - "type": "CHAR" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "_ISO-8859-1'12'", - "operand": [], - "type": "CHAR" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "12", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "12", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "12", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "12", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{1}], EXPR$1=[$SUM0($2)])\r\n LogicalFilter(condition=[>($0, CAST('12'):INTEGER NOT NULL)])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{1}], EXPR$1=[$SUM0($2)])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT()])\r\n LogicalFilter(condition=[>($0, 12)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterPastAggTwo.json b/tests/RelOptRulesTest/testPushFilterPastAggTwo.json deleted file mode 100644 index 19852f9..0000000 --- a/tests/RelOptRulesTest/testPushFilterPastAggTwo.json +++ /dev/null @@ -1,377 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'c'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "OR", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'z'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'b'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'b'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'z'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'c'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'b'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'c'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'b'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(C1=[$0])\r\n LogicalFilter(condition=[AND(>($0, 'c'), OR(>($1, 30), <($0, 'z')))])\r\n LogicalAggregate(group=[{0}], C2=[COUNT()])\r\n LogicalFilter(condition=[>($0, 'b')])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(C1=[$0])\r\n LogicalFilter(condition=[OR(>($1, 30), <($0, 'z'))])\r\n LogicalAggregate(group=[{0}], C2=[COUNT()])\r\n LogicalFilter(condition=[>($0, 'c')])\r\n LogicalFilter(condition=[>($0, 'b')])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterPastAggWithGroupingSets2.json b/tests/RelOptRulesTest/testPushFilterPastAggWithGroupingSets2.json deleted file mode 100644 index e4e2150..0000000 --- a/tests/RelOptRulesTest/testPushFilterPastAggWithGroupingSets2.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(DNAME=[$0], DDEPTNO=[$1], C=[$2])\r\n LogicalFilter(condition=[=($0, 'Charlie')])\r\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]], C=[COUNT()])\r\n LogicalProject(DNAME=[$1], DDEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DNAME=[$0], DDEPTNO=[$1], C=[$2])\r\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]], C=[COUNT()])\r\n LogicalFilter(condition=[=($0, 'Charlie')])\r\n LogicalProject(DNAME=[$1], DDEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterPastProject.json b/tests/RelOptRulesTest/testPushFilterPastProject.json deleted file mode 100644 index 2bf65e7..0000000 --- a/tests/RelOptRulesTest/testPushFilterPastProject.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "column": 1, - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "column": 2, - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0])\r\n LogicalJoin(condition=[$1], joinType=[right])\r\n LogicalProject(NAME=[$0], $f4=[>($1, 10)])\r\n LogicalJoin(condition=[$2], joinType=[left])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$0], $f2=[>($0, 10)])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0])\r\n LogicalJoin(condition=[true], joinType=[right])\r\n LogicalProject(NAME=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalFilter(condition=[>($0, 10)])\r\n LogicalFilter(condition=[>($0, 10)])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterSemijoin.json b/tests/RelOptRulesTest/testPushFilterSemijoin.json deleted file mode 100644 index 5b9c15f..0000000 --- a/tests/RelOptRulesTest/testPushFilterSemijoin.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "DECIMAL", - "TINYINT" - ], - "nullable": [ - false, - true, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 4, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "DECIMAL" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 4, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "DECIMAL" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[AND(=($0, $4), =($3, 100))], joinType=[semi])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n", - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[=($0, $4)], joinType=[semi])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalFilter(condition=[=($1, 100)])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterThroughSemiJoin.json b/tests/RelOptRulesTest/testPushFilterThroughSemiJoin.json deleted file mode 100644 index 922e4f6..0000000 --- a/tests/RelOptRulesTest/testPushFilterThroughSemiJoin.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "<=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "<=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - ], - "help": [ - "LogicalFilter(condition=[<=($0, 10)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalFilter(condition=[<=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushFilterWithIsNotDistinctFromPastJoin.json b/tests/RelOptRulesTest/testPushFilterWithIsNotDistinctFromPastJoin.json deleted file mode 100644 index b9b2731..0000000 --- a/tests/RelOptRulesTest/testPushFilterWithIsNotDistinctFromPastJoin.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\r\n LogicalFilter(condition=[OR(AND(IS NULL($1), IS NULL($10)), IS TRUE(=($1, $10)))])\r\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\r\n LogicalJoin(condition=[AND(=($7, $16), IS NOT DISTINCT FROM($1, $10))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushJoinCondDownToProject.json b/tests/RelOptRulesTest/testPushJoinCondDownToProject.json deleted file mode 100644 index e614849..0000000 --- a/tests/RelOptRulesTest/testPushJoinCondDownToProject.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[=(+($0, 10), *($1, 2))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], DEPTNO0=[$2])\r\n LogicalJoin(condition=[=($1, $3)], joinType=[inner])\r\n LogicalProject(DEPTNO=[$0], $f2=[+($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$0], $f9=[*($0, 2)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushJoinThroughUnionOnLeft.json b/tests/RelOptRulesTest/testPushJoinThroughUnionOnLeft.json deleted file mode 100644 index 11bd95c..0000000 --- a/tests/RelOptRulesTest/testPushJoinThroughUnionOnLeft.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "union": [ - { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - ], - "help": [ - "LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalUnion(all=[true])\r\n LogicalProject(SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalUnion(all=[true])\r\n LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushJoinThroughUnionOnRight.json b/tests/RelOptRulesTest/testPushJoinThroughUnionOnRight.json deleted file mode 100644 index c366c59..0000000 --- a/tests/RelOptRulesTest/testPushJoinThroughUnionOnRight.json +++ /dev/null @@ -1,213 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "union": [ - { - "project": { - "target": [ - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - }, - { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - ], - "help": [ - "LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalUnion(all=[true])\r\n LogicalProject(SLACKER=[$8])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(SLACKER=[$8])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalUnion(all=[true])\r\n LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushMaxNullableGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushMaxNullableGroupingSetsThroughUnion.json deleted file mode 100644 index b96c201..0000000 --- a/tests/RelOptRulesTest/testPushMaxNullableGroupingSetsThroughUnion.json +++ /dev/null @@ -1,718 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "MGR", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MAX($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushMaxNullableThroughUnion.json b/tests/RelOptRulesTest/testPushMaxNullableThroughUnion.json deleted file mode 100644 index d973023..0000000 --- a/tests/RelOptRulesTest/testPushMaxNullableThroughUnion.json +++ /dev/null @@ -1,427 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "MGR" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushMinGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushMinGroupingSetsThroughUnion.json deleted file mode 100644 index ac9633a..0000000 --- a/tests/RelOptRulesTest/testPushMinGroupingSetsThroughUnion.json +++ /dev/null @@ -1,722 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MIN($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MIN($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MIN($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MIN($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushMinThroughUnion.json b/tests/RelOptRulesTest/testPushMinThroughUnion.json deleted file mode 100644 index b8e22f2..0000000 --- a/tests/RelOptRulesTest/testPushMinThroughUnion.json +++ /dev/null @@ -1,571 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastFilter.json b/tests/RelOptRulesTest/testPushProjectPastFilter.json deleted file mode 100644 index 1dfae48..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastFilter.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "UPPER", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'FOO'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "UPPER", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'FOO'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($0, $4)])\r\n LogicalFilter(condition=[AND(=($2, *(10, $3)), =(UPPER($1), 'FOO'))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[+($0, $4)])\r\n LogicalFilter(condition=[AND(=($2, *(10, $3)), =(UPPER($1), 'FOO'))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastFilter2.json b/tests/RelOptRulesTest/testPushProjectPastFilter2.json deleted file mode 100644 index 88ca1cb..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastFilter2.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[CASE(<($0, 10), true, false)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[<($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastFilter3b.json b/tests/RelOptRulesTest/testPushProjectPastFilter3b.json deleted file mode 100644 index 8118c27..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastFilter3b.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "UPPER", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'FOO'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "TIMESTAMP" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "column": 7, - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "UPPER", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'FOO'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(X=[+($0, $7)], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($5, *(10, $6)), =(UPPER($1), 'FOO'))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(X=[$8], ENAME=[$0], JOB=[$1], MGR=[$2], HIREDATE=[$3], SAL=[$4], COMM=[$5], SLACKER=[$6])\r\n LogicalFilter(condition=[$7])\r\n LogicalProject(ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8], $f7=[AND(=($5, *(10, $6)), =(UPPER($1), 'FOO'))], $f8=[+($0, $7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastFilter3c.json b/tests/RelOptRulesTest/testPushProjectPastFilter3c.json deleted file mode 100644 index 7b2289b..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastFilter3c.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "UPPER", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'FOO'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "TIMESTAMP" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "UPPER", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'FOO'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(X=[+($0, $7)], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($5, *(10, $6)), =(UPPER($1), 'FOO'))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(X=[$7], ENAME=[$0], JOB=[$1], MGR=[$2], HIREDATE=[$3], SAL=[$4], COMM=[$5], SLACKER=[$6])\r\n LogicalFilter(condition=[AND(=($4, *(10, $5)), =(UPPER($0), 'FOO'))])\r\n LogicalProject(ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8], $f7=[+($0, $7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastFullJoin.json b/tests/RelOptRulesTest/testPushProjectPastFullJoin.json deleted file mode 100644 index e503bf8..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastFullJoin.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($1, 11), 11, *(-1, $1))])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE($1, 11, $2)])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[full])\r\n LogicalProject(ENAME=[$0], EXPR$0=[<($1, 11)], EXPR$1=[*(-1, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastFullJoinStrong.json b/tests/RelOptRulesTest/testPushProjectPastFullJoinStrong.json deleted file mode 100644 index babffa5..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastFullJoinStrong.json +++ /dev/null @@ -1,487 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[full])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastInnerJoin.json b/tests/RelOptRulesTest/testPushProjectPastInnerJoin.json deleted file mode 100644 index d6c2ef1..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastInnerJoin.json +++ /dev/null @@ -1,491 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($1, 11), 11, *(-1, $1))])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), 11, *(-1, $1))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastInnerJoinStrong.json b/tests/RelOptRulesTest/testPushProjectPastInnerJoinStrong.json deleted file mode 100644 index ca72592..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastInnerJoinStrong.json +++ /dev/null @@ -1,487 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastJoin.json b/tests/RelOptRulesTest/testPushProjectPastJoin.json deleted file mode 100644 index 6f505ec..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastJoin.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME", - "COMM" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($1, $4)])\r\n LogicalJoin(condition=[AND(=($0, $3), =($2, 10))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[+($1, $4)])\r\n LogicalJoin(condition=[AND(=($0, $3), $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], SAL=[$1], EXPR$0=[=($2, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastLeftJoin.json b/tests/RelOptRulesTest/testPushProjectPastLeftJoin.json deleted file mode 100644 index 7d53e6e..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastLeftJoin.json +++ /dev/null @@ -1,491 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($1, 11), 11, *(-1, $1))])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), 11, *(-1, $1))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastLeftJoinSwap.json b/tests/RelOptRulesTest/testPushProjectPastLeftJoinSwap.json deleted file mode 100644 index 2fc2e3d..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastLeftJoinSwap.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "schemas": [ - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "column": 3, - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($2, 11), 11, *(-1, $2))])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE($2, 11, $3)])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalProject(ENAME=[$0], EXPR$0=[<($1, 11)], EXPR$1=[*(-1, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastLeftJoinSwapStrong.json b/tests/RelOptRulesTest/testPushProjectPastLeftJoinSwapStrong.json deleted file mode 100644 index 46018de..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastLeftJoinSwapStrong.json +++ /dev/null @@ -1,487 +0,0 @@ -{ - "schemas": [ - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($2, 11), *(-1, $2), $2)])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$2])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastRightJoin.json b/tests/RelOptRulesTest/testPushProjectPastRightJoin.json deleted file mode 100644 index f30d68f..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastRightJoin.json +++ /dev/null @@ -1,499 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "column": 1, - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "column": 2, - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($1, 11), 11, *(-1, $1))])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE($1, 11, $2)])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[right])\r\n LogicalProject(ENAME=[$0], EXPR$0=[<($1, 11)], EXPR$1=[*(-1, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastRightJoinStrong.json b/tests/RelOptRulesTest/testPushProjectPastRightJoinStrong.json deleted file mode 100644 index 2dcfe68..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastRightJoinStrong.json +++ /dev/null @@ -1,487 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastRightJoinSwap.json b/tests/RelOptRulesTest/testPushProjectPastRightJoinSwap.json deleted file mode 100644 index a7efdfd..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastRightJoinSwap.json +++ /dev/null @@ -1,491 +0,0 @@ -{ - "schemas": [ - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($2, 11), 11, *(-1, $2))])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$2])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), 11, *(-1, $1))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastRightJoinSwapStrong.json b/tests/RelOptRulesTest/testPushProjectPastRightJoinSwapStrong.json deleted file mode 100644 index 1958c26..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastRightJoinSwapStrong.json +++ /dev/null @@ -1,487 +0,0 @@ -{ - "schemas": [ - { - "name": "BONUS", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "<", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "*", - "operand": [ - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[CASE(<($2, 11), *(-1, $2), $2)])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\r\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\r\n LogicalProject(EXPR$1=[$2])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n LogicalProject(ENAME=[$0], EXPR$1=[CASE(<($1, 11), *(-1, $1), $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectPastSetOp.json b/tests/RelOptRulesTest/testPushProjectPastSetOp.json deleted file mode 100644 index dbe39c3..0000000 --- a/tests/RelOptRulesTest/testPushProjectPastSetOp.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - }, - { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - ], - "help": [ - "LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectWithIsNotDistinctFromPastJoin.json b/tests/RelOptRulesTest/testPushProjectWithIsNotDistinctFromPastJoin.json deleted file mode 100644 index 5c67ac5..0000000 --- a/tests/RelOptRulesTest/testPushProjectWithIsNotDistinctFromPastJoin.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME", - "JOB", - "COMM" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "||", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "||", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "||", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "||", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($0, $3)])\r\n LogicalJoin(condition=[AND(IS NOT DISTINCT FROM($2, $4), =($1, 10))], joinType=[inner])\r\n LogicalProject(SAL=[$2], DEPTNO=[$3], $f9=[||($0, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(COMM=[$2], $f4=[||($0, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[+($0, $3)])\r\n LogicalJoin(condition=[AND(IS NOT DISTINCT FROM($1, $4), $2)], joinType=[inner])\r\n LogicalProject(SAL=[$0], $f9=[$2], EXPR$0=[=($1, 10)])\r\n LogicalProject(SAL=[$2], DEPTNO=[$3], $f9=[||($0, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(COMM=[$2], $f4=[||($0, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectWithOverPastJoin1.json b/tests/RelOptRulesTest/testPushProjectWithOverPastJoin1.json deleted file mode 100644 index 0fb089f..0000000 --- a/tests/RelOptRulesTest/testPushProjectWithOverPastJoin1.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME", - "COMM" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "error": "Not implemented: COUNT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "error": "Not implemented: COUNT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($2, $5)], EXPR$1=[COUNT($0) OVER (PARTITION BY $3)])\r\n LogicalJoin(condition=[AND(=($1, $4), =($3, 10))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[+($2, $6)], EXPR$1=[COUNT($0) OVER (PARTITION BY $3)])\r\n LogicalJoin(condition=[AND(=($1, $5), $4)], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], SAL=[$2], DEPTNO=[$3], EXPR$0=[=($3, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectWithOverPastJoin2.json b/tests/RelOptRulesTest/testPushProjectWithOverPastJoin2.json deleted file mode 100644 index f51791a..0000000 --- a/tests/RelOptRulesTest/testPushProjectWithOverPastJoin2.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "error": "Not implemented: COUNT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "error": "Not implemented: COUNT" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($1, $6)], EXPR$1=[COUNT($5) OVER (PARTITION BY $4)])\r\n LogicalJoin(condition=[AND(=($0, $3), =($2, 10))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[+($1, $6)], EXPR$1=[COUNT($5) OVER (PARTITION BY $4)])\r\n LogicalJoin(condition=[AND(=($0, $3), $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], SAL=[$1], EXPR$0=[=($2, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushProjectWithOverPastJoin3.json b/tests/RelOptRulesTest/testPushProjectWithOverPastJoin3.json deleted file mode 100644 index e153f67..0000000 --- a/tests/RelOptRulesTest/testPushProjectWithOverPastJoin3.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "BONUS", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "error": "Not implemented: SUM" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "error": "Not implemented: SUM" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($1, $6)], EXPR$1=[SUM(+(+($5, $5), 100)) OVER (PARTITION BY $4)])\r\n LogicalJoin(condition=[AND(=($0, $3), =($2, 10))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n", - "LogicalProject(EXPR$0=[+($1, $5)], EXPR$1=[SUM($6) OVER (PARTITION BY $4)])\r\n LogicalJoin(condition=[AND(=($0, $3), $2)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], SAL=[$1], EXPR$0=[=($2, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(ENAME=[$0], JOB=[$1], COMM=[$3], EXPR$0=[+(+($2, $2), 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSemiJoinConditions.json b/tests/RelOptRulesTest/testPushSemiJoinConditions.json deleted file mode 100644 index ebf3f6a..0000000 --- a/tests/RelOptRulesTest/testPushSemiJoinConditions.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "VARCHAR", - "TINYINT" - ], - "nullable": [ - false, - true, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "TINYINT" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 2, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 2, - "type": "TINYINT" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "TINYINT" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 2, - "type": "TINYINT" - }, - { - "column": 3, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT DISTINCT FROM", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[AND(OR(=($0, $2), AND(IS NULL($0), IS NULL($2))), OR(=($1, $3), AND(IS NULL($1), IS NULL($3))))], joinType=[semi])\r\n LogicalProject(DEPTNO=[$2], ENAME=[$1])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$2])\r\n LogicalJoin(condition=[AND(IS NOT DISTINCT FROM($2, $3), IS NOT DISTINCT FROM($1, $4))], joinType=[semi])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSemiJoinPastFilter.json b/tests/RelOptRulesTest/testPushSemiJoinPastFilter.json deleted file mode 100644 index 634de7e..0000000 --- a/tests/RelOptRulesTest/testPushSemiJoinPastFilter.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'foo'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'foo'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[AND(=($1, $2), =($0, 'foo'))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(ENAME=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalFilter(condition=[=($0, 'foo')])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSemiJoinPastJoinRuleLeft.json b/tests/RelOptRulesTest/testPushSemiJoinPastJoinRuleLeft.json deleted file mode 100644 index b618ba6..0000000 --- a/tests/RelOptRulesTest/testPushSemiJoinPastJoinRuleLeft.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$1])\r\n LogicalFilter(condition=[AND(=($2, $3), =($0, $4))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(ENAME=[$1])\r\n LogicalJoin(condition=[=($0, $4)], joinType=[inner])\r\n LogicalJoin(condition=[=($2, $3)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $3)], joinType=[semi])\r\n LogicalJoin(condition=[=($2, $3)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSemiJoinPastJoinRuleRight.json b/tests/RelOptRulesTest/testPushSemiJoinPastJoinRuleRight.json deleted file mode 100644 index 206d2c5..0000000 --- a/tests/RelOptRulesTest/testPushSemiJoinPastJoinRuleRight.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 1 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[AND(=($1, $2), =($2, $3))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(ENAME=[$0])\r\n LogicalJoin(condition=[=($2, $3)], joinType=[inner])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSemiJoinPastProject.json b/tests/RelOptRulesTest/testPushSemiJoinPastProject.json deleted file mode 100644 index 2098439..0000000 --- a/tests/RelOptRulesTest/testPushSemiJoinPastProject.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "TRIM", - "operand": [ - { - "operator": "BOTH", - "operand": [], - "type": "SYMBOL" - }, - { - "operator": "_ISO-8859-1' '", - "operand": [], - "type": "CHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "TRIM", - "operand": [ - { - "operator": "BOTH", - "operand": [], - "type": "SYMBOL" - }, - { - "operator": "_ISO-8859-1' '", - "operand": [], - "type": "CHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0], EXPR$1=[$1], EXPR$2=[$2], DEPTNO=[$3])\r\n LogicalFilter(condition=[=($3, $4)])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalProject(ENAME=[$0], EXPR$1=[TRIM(FLAG(BOTH), ' ', $1)], EXPR$2=[*($2, 2)], DEPTNO=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(ENAME=[$0], EXPR$1=[$1], EXPR$2=[$2], DEPTNO=[$3])\r\n LogicalJoin(condition=[=($3, $4)], joinType=[inner])\r\n LogicalProject(ENAME=[$0], EXPR$1=[TRIM(FLAG(BOTH), ' ', $1)], EXPR$2=[*($2, 2)], DEPTNO=[$3])\r\n LogicalJoin(condition=[=($3, $4)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumConstantGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushSumConstantGroupingSetsThroughUnion.json deleted file mode 100644 index 02e6aa7..0000000 --- a/tests/RelOptRulesTest/testPushSumConstantGroupingSetsThroughUnion.json +++ /dev/null @@ -1,799 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0], U=[$2])\r\n LogicalUnion(all=[true])\r\n LogicalProject(JOB=[$0], DEPTNO=[$1], U=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(JOB=[$0], DEPTNO=[$1], U=[3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0], U=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0], U=[3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumConstantThroughUnion.json b/tests/RelOptRulesTest/testPushSumConstantThroughUnion.json deleted file mode 100644 index 6f4adfa..0000000 --- a/tests/RelOptRulesTest/testPushSumConstantThroughUnion.json +++ /dev/null @@ -1,604 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(ENAME=[$0], U=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(ENAME=[$0], U=[3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalProject(ENAME=[$0], U=[2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalProject(ENAME=[$0], U=[3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumCountStarGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushSumCountStarGroupingSetsThroughUnion.json deleted file mode 100644 index 1b2d2e9..0000000 --- a/tests/RelOptRulesTest/testPushSumCountStarGroupingSetsThroughUnion.json +++ /dev/null @@ -1,913 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 5, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)], EXPR$3=[COUNT()], EXPR$4=[MIN($0)], EXPR$5=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)], EXPR$3=[$SUM0($3)], EXPR$4=[MIN($4)], EXPR$5=[MAX($5)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)], EXPR$3=[COUNT()], EXPR$4=[MIN($0)], EXPR$5=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)], EXPR$3=[COUNT()], EXPR$4=[MIN($0)], EXPR$5=[MAX($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$1], EMPNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumCountStarThroughUnion.json b/tests/RelOptRulesTest/testPushSumCountStarThroughUnion.json deleted file mode 100644 index 3c7faf0..0000000 --- a/tests/RelOptRulesTest/testPushSumCountStarThroughUnion.json +++ /dev/null @@ -1,805 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT()], EXPR$3=[MIN($2)], EXPR$4=[MAX($1)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0], DEPTNO=[$2])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[$SUM0($2)], EXPR$3=[MIN($3)], EXPR$4=[MAX($4)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT()], EXPR$3=[MIN($2)], EXPR$4=[MAX($1)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0], DEPTNO=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT()], EXPR$3=[MIN($2)], EXPR$4=[MAX($1)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0], DEPTNO=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumNullConstantGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushSumNullConstantGroupingSetsThroughUnion.json deleted file mode 100644 index 9d451fd..0000000 --- a/tests/RelOptRulesTest/testPushSumNullConstantGroupingSetsThroughUnion.json +++ /dev/null @@ -1,799 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0], U=[$2])\r\n LogicalUnion(all=[true])\r\n LogicalProject(JOB=[$0], DEPTNO=[$1], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(JOB=[$0], DEPTNO=[$1], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$1], JOB=[$0], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumNullConstantThroughUnion.json b/tests/RelOptRulesTest/testPushSumNullConstantThroughUnion.json deleted file mode 100644 index 3913307..0000000 --- a/tests/RelOptRulesTest/testPushSumNullConstantThroughUnion.json +++ /dev/null @@ -1,604 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalProject(ENAME=[$0], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(ENAME=[$0], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalProject(ENAME=[$0], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalProject(ENAME=[$0], U=[null:INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumNullableGroupingSetsThroughUnion.json b/tests/RelOptRulesTest/testPushSumNullableGroupingSetsThroughUnion.json deleted file mode 100644 index e1c048e..0000000 --- a/tests/RelOptRulesTest/testPushSumNullableGroupingSetsThroughUnion.json +++ /dev/null @@ -1,718 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "MGR", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\r\n LogicalProject(DEPTNO=[$2], JOB=[$0], MGR=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumNullableNOGBYThroughUnion.json b/tests/RelOptRulesTest/testPushSumNullableNOGBYThroughUnion.json deleted file mode 100644 index df3b353..0000000 --- a/tests/RelOptRulesTest/testPushSumNullableNOGBYThroughUnion.json +++ /dev/null @@ -1,304 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testPushSumNullableThroughUnion.json b/tests/RelOptRulesTest/testPushSumNullableThroughUnion.json deleted file mode 100644 index 6c839c9..0000000 --- a/tests/RelOptRulesTest/testPushSumNullableThroughUnion.json +++ /dev/null @@ -1,427 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "MGR" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalUnion(all=[true])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceAggregateFunctionsByGroup.json b/tests/RelOptRulesTest/testReduceAggregateFunctionsByGroup.json deleted file mode 100644 index 9361ebe..0000000 --- a/tests/RelOptRulesTest/testReduceAggregateFunctionsByGroup.json +++ /dev/null @@ -1,306 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "ANY_VALUE", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "FIRST_VALUE", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "LAST_VALUE", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalProject(SAL=[$0], SAL_MAX=[$2], SAL_MIN=[$3], SAL_AVG=[$4], SAL_VAL=[$5], SAL_FIRST=[$6], SAL_LAST=[$7])\r\n LogicalAggregate(group=[{0, 1}], SAL_MAX=[MAX($0)], SAL_MIN=[MIN($0)], SAL_AVG=[AVG($0)], SAL_VAL=[ANY_VALUE($0)], SAL_FIRST=[FIRST_VALUE($0)], SAL_LAST=[LAST_VALUE($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(SAL=[$0], SAL_MAX=[$0], SAL_MIN=[$0], SAL_AVG=[$0], SAL_VAL=[$0], SAL_FIRST=[$0], SAL_LAST=[$0])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceAllAggregateFunctions.json b/tests/RelOptRulesTest/testReduceAllAggregateFunctions.json deleted file mode 100644 index 9ea144d..0000000 --- a/tests/RelOptRulesTest/testReduceAllAggregateFunctions.json +++ /dev/null @@ -1,664 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "STDDEV_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "STDDEV_SAMP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "VAR_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "VAR_SAMP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "POWER", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "0.5", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "DOUBLE" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "POWER", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BIGINT" - }, - { - "operator": "-", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "0.5", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "DOUBLE" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BIGINT" - }, - { - "operator": "-", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[STDDEV_SAMP($1)], EXPR$4=[VAR_POP($1)], EXPR$5=[VAR_SAMP($1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$4=[CAST(/(-($1, /(*($2, $2), $3)), $3)):INTEGER NOT NULL], EXPR$5=[CAST(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1)))):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($1)], agg#2=[COUNT()])\r\n LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceAverage.json b/tests/RelOptRulesTest/testReduceAverage.json deleted file mode 100644 index 9df2406..0000000 --- a/tests/RelOptRulesTest/testReduceAverage.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($0)], EXPR$2=[AVG($1)], EXPR$3=[MIN($0)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0], EXPR$1=[$0], EXPR$2=[CAST(/($1, $2)):INTEGER NOT NULL], EXPR$3=[$0])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1)], agg#1=[COUNT()])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceAverageAndSumWithNoReduceStddevAndVar.json b/tests/RelOptRulesTest/testReduceAverageAndSumWithNoReduceStddevAndVar.json deleted file mode 100644 index 393f253..0000000 --- a/tests/RelOptRulesTest/testReduceAverageAndSumWithNoReduceStddevAndVar.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "STDDEV_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "VAR_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "STDDEV_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "VAR_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[VAR_POP($1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[$4])\r\n LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], agg#1=[$SUM0($1)], agg#2=[COUNT()], EXPR$3=[VAR_POP($1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceAverageAndVarWithNoReduceStddev.json b/tests/RelOptRulesTest/testReduceAverageAndVarWithNoReduceStddev.json deleted file mode 100644 index 276eba8..0000000 --- a/tests/RelOptRulesTest/testReduceAverageAndVarWithNoReduceStddev.json +++ /dev/null @@ -1,410 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "STDDEV_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "VAR_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "STDDEV_POP", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "*", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[VAR_POP($1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[CAST(/(-($4, /(*($2, $2), $3)), $3)):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], agg#1=[SUM($1)], agg#2=[COUNT()], agg#3=[SUM($2)])\r\n LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceAverageWithNoReduceSum.json b/tests/RelOptRulesTest/testReduceAverageWithNoReduceSum.json deleted file mode 100644 index 3f48be7..0000000 --- a/tests/RelOptRulesTest/testReduceAverageWithNoReduceSum.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MAX", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[MAX($0)], EXPR$2=[AVG($1)], EXPR$3=[MIN($0)])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0], EXPR$1=[$0], EXPR$2=[CAST(/($1, $2)):INTEGER NOT NULL], EXPR$3=[$0])\r\n LogicalAggregate(group=[{0}], agg#0=[SUM($1)], agg#1=[COUNT()])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceCase.json b/tests/RelOptRulesTest/testReduceCase.json deleted file mode 100644 index 351fd58..0000000 --- a/tests/RelOptRulesTest/testReduceCase.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "2.1", - "operand": [], - "type": "FLOAT" - }, - { - "operator": "1", - "operand": [], - "type": "FLOAT" - } - ], - "type": "FLOAT" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "FLOAT" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(NEWCOL=[CASE(false, 2.1:FLOAT, 1:FLOAT)])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(NEWCOL=[1E0:FLOAT])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceCaseNullabilityChange.json b/tests/RelOptRulesTest/testReduceCaseNullabilityChange.json deleted file mode 100644 index 5c2489a..0000000 --- a/tests/RelOptRulesTest/testReduceCaseNullabilityChange.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "IS NOT NULL", - "operand": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(QX=[CASE(=($0, 1), 1, IS NOT NULL(1), 2, null:INTEGER)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(QX=[CAST(CASE(=($0, 1), 1, 2)):INTEGER])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceCastAndConsts.json b/tests/RelOptRulesTest/testReduceCastAndConsts.json deleted file mode 100644 index 0a94c38..0000000 --- a/tests/RelOptRulesTest/testReduceCastAndConsts.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "13", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "13", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=(CAST(+($0, /(10, 2))):INTEGER NOT NULL, 13)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[=(+($0, 5), 13)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceCasts.json b/tests/RelOptRulesTest/testReduceCasts.json deleted file mode 100644 index b671f1a..0000000 --- a/tests/RelOptRulesTest/testReduceCasts.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "JOB", - "DEPTNO" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Manager'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Manager'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[CAST($0):VARCHAR(128) NOT NULL], EXPR$1=[CAST($1):INTEGER NOT NULL])\r\n LogicalFilter(condition=[=(CAST(CAST($2):VARCHAR(1) NOT NULL):VARCHAR(7) NOT NULL, 'Manager')])\r\n LogicalProject(NAME=[$0], EMPNO=[$2], JOB=[$3])\r\n LogicalJoin(condition=[=($1, $4)], joinType=[inner])\r\n LogicalProject(NAME=[$1], DEPTNO0=[CAST($0):INTEGER NOT NULL])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(EMPNO=[$0], JOB=[$1], DEPTNO0=[CAST($2):INTEGER NOT NULL])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[CAST($0):VARCHAR(128) NOT NULL], EXPR$1=[$1])\r\n LogicalFilter(condition=[=(CAST(CAST($2):VARCHAR(1) NOT NULL):VARCHAR(7) NOT NULL, 'Manager')])\r\n LogicalProject(NAME=[$0], EMPNO=[$2], JOB=[$3])\r\n LogicalJoin(condition=[=($1, $4)], joinType=[inner])\r\n LogicalProject(NAME=[$1], DEPTNO0=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceCompositeInSubQuery.json b/tests/RelOptRulesTest/testReduceCompositeInSubQuery.json deleted file mode 100644 index 181e6a2..0000000 --- a/tests/RelOptRulesTest/testReduceCompositeInSubQuery.json +++ /dev/null @@ -1,453 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 11, - "type": "INTEGER" - }, - { - "column": 18, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "40", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "60", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 11, - "type": "INTEGER" - }, - { - "column": 18, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[OR(IN($0, $7, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$1])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), <($7, +(40, 60)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[OR(IN($0, $7, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$1])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}), <($7, 100))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstants.json b/tests/RelOptRulesTest/testReduceConstants.json deleted file mode 100644 index 5de81bb..0000000 --- a/tests/RelOptRulesTest/testReduceConstants.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "3", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "+", - "operand": [ - { - "operator": "5", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "6", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "ROW", - "operand": [ - { - "operator": "+", - "operand": [ - { - "operator": "7", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "ROW" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "7", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "-", - "operand": [ - { - "operator": "5", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "3", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "22", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "26", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "ROW", - "operand": [ - { - "operator": "15", - "operand": [], - "type": "INTEGER" - } - ], - "type": "ROW" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+(1, 2)], EXPR$1=[+($0, +(3, 4))], EXPR$2=[+(+(5, 6), $0)], EXPR$3=[null:INTEGER], EXPR$4=[CASE(IS NOT NULL(2), 2, null:INTEGER)], EXPR$5=[ROW(+(7, 8))])\r\n LogicalFilter(condition=[AND(=($0, +(7, 8)), =($0, CASE(IS NOT NULL(2), 2, null:INTEGER)))])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject($f9=[+($0, -(5, 5))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[3], EXPR$1=[22], EXPR$2=[26], EXPR$3=[null:INTEGER], EXPR$4=[CAST(2):INTEGER], EXPR$5=[ROW(15)])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstants3.json b/tests/RelOptRulesTest/testReduceConstants3.json deleted file mode 100644 index d4dc151..0000000 --- a/tests/RelOptRulesTest/testReduceConstants3.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[OR(AND(IS NULL($0), IS NULL($1)), IS TRUE(=($0, $1)))])\r\n LogicalFilter(condition=[IS NULL($0)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[IS NULL($1)])\r\n LogicalFilter(condition=[IS NULL($0)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsCaseEquals.json b/tests/RelOptRulesTest/testReduceConstantsCaseEquals.json deleted file mode 100644 index 1accb2c..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsCaseEquals.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[=(CASE(=($0, 20), 2, =($0, 10), 1, 3), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsCaseEquals2.json b/tests/RelOptRulesTest/testReduceConstantsCaseEquals2.json deleted file mode 100644 index 3af085a..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsCaseEquals2.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[=(CASE(=($0, 20), 2, =($0, 10), 1, null:INTEGER), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsCaseEquals3.json b/tests/RelOptRulesTest/testReduceConstantsCaseEquals3.json deleted file mode 100644 index 8960d75..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsCaseEquals3.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "111", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "30", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "111", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "Sarg[10, 30]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "Sarg[10, 30]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[=(CASE(=($0, 30), 1, =($0, 20), 2, =($0, 10), 1, =($0, 30), 111, 0), 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[SEARCH($0, Sarg[10, 30])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDup.json b/tests/RelOptRulesTest/testReduceConstantsDup.json deleted file mode 100644 index a26a43c..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDup.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[AND(=($0, 7), =($0, 8))])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$0])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDup2.json b/tests/RelOptRulesTest/testReduceConstantsDup2.json deleted file mode 100644 index 5f025c9..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDup2.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(=($7, 7), =($7, 8), =($0, 10), IS NULL($3), =($0, 10))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[10], ENAME=[$1], JOB=[$2], MGR=[null:INTEGER], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDup3.json b/tests/RelOptRulesTest/testReduceConstantsDup3.json deleted file mode 100644 index 4509ba2..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDup3.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "scan": 0 - } - ], - "help": [ - "LogicalFilter(condition=[OR(<>($0, 7), <>($0, 8))])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDup3Null.json b/tests/RelOptRulesTest/testReduceConstantsDup3Null.json deleted file mode 100644 index 302c3ff..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDup3Null.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "MGR" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(<>($1, 7), <>($1, 8))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[IS NOT NULL($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDupNot.json b/tests/RelOptRulesTest/testReduceConstantsDupNot.json deleted file mode 100644 index db4fe86..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDupNot.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "scan": 0 - } - ], - "help": [ - "LogicalFilter(condition=[NOT(AND(=($0, 7), =($0, 8)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDupNot2.json b/tests/RelOptRulesTest/testReduceConstantsDupNot2.json deleted file mode 100644 index 361f686..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDupNot2.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'foo'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0])\r\n LogicalFilter(condition=[NOT(AND(=($0, 7), =($1, 'foo'), =($0, 8)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDupNot2Null.json b/tests/RelOptRulesTest/testReduceConstantsDupNot2Null.json deleted file mode 100644 index 9b40cf4..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDupNot2Null.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "MGR", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[NOT(AND(=($1, 7), =($2, 8), =($1, 8)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[OR(IS NOT NULL($1), <>($2, 8))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsDupNotNull.json b/tests/RelOptRulesTest/testReduceConstantsDupNotNull.json deleted file mode 100644 index fc92ac3..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsDupNotNull.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "MGR" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "8", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[NOT(AND(=($1, 7), =($1, 8)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[IS NOT NULL($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsEliminatesFilter.json b/tests/RelOptRulesTest/testReduceConstantsEliminatesFilter.json deleted file mode 100644 index c5ed813..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsEliminatesFilter.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "3", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalFilter(condition=[>(+(1, 2), +(3, null))])\r\n LogicalValues(tuples=[[{ 1, 2 }]])\r\n", - "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsIsNotNull.json b/tests/RelOptRulesTest/testReduceConstantsIsNotNull.json deleted file mode 100644 index d350923..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsIsNotNull.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsIsNull.json b/tests/RelOptRulesTest/testReduceConstantsIsNull.json deleted file mode 100644 index d30018b..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsIsNull.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "values": { - "schema": [ - "INTEGER" - ], - "content": [] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalValues(tuples=[[]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsNegated.json b/tests/RelOptRulesTest/testReduceConstantsNegated.json deleted file mode 100644 index c0c8695..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsNegated.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NOT", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[AND(=($0, 10), NOT(=($0, 10)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsNegatedInverted.json b/tests/RelOptRulesTest/testReduceConstantsNegatedInverted.json deleted file mode 100644 index 03c1626..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsNegatedInverted.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[AND(>($0, 10), <=($0, 10))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsNull.json b/tests/RelOptRulesTest/testReduceConstantsNull.json deleted file mode 100644 index 6a9d3e9..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsNull.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "IS NULL", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[IS NULL($0)])\r\n LogicalFilter(condition=[IS NULL($0)])\r\n LogicalProject(N=[null:INTEGER])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(N=[null:INTEGER])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsNullEqualsOne.json b/tests/RelOptRulesTest/testReduceConstantsNullEqualsOne.json deleted file mode 100644 index d91e7b8..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsNullEqualsOne.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "content": [] - } - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalFilter(condition=[=(null, 1)])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsProjectNullable.json b/tests/RelOptRulesTest/testReduceConstantsProjectNullable.json deleted file mode 100644 index e9ed024..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsProjectNullable.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "MGR" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - true - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(MGR=[CAST(10):INTEGER])\r\n LogicalFilter(condition=[=($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceConstantsRequiresExecutor.json b/tests/RelOptRulesTest/testReduceConstantsRequiresExecutor.json deleted file mode 100644 index c5ed813..0000000 --- a/tests/RelOptRulesTest/testReduceConstantsRequiresExecutor.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "3", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalFilter(condition=[>(+(1, 2), +(3, null))])\r\n LogicalValues(tuples=[[{ 1, 2 }]])\r\n", - "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceDynamic.json b/tests/RelOptRulesTest/testReduceDynamic.json deleted file mode 100644 index 16eaf26..0000000 --- a/tests/RelOptRulesTest/testReduceDynamic.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "USER", - "operand": [], - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "_ISO-8859-1'happyCalciteUser'", - "operand": [], - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(USER=[USER])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(USER=['happyCalciteUser':VARCHAR(2000)])\r\n LogicalProject(DUMMY=[0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceNestedCaseWhen.json b/tests/RelOptRulesTest/testReduceNestedCaseWhen.json deleted file mode 100644 index 1758db5..0000000 --- a/tests/RelOptRulesTest/testReduceNestedCaseWhen.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "IS TRUE", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "Sarg[1000, 2000]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalFilter(condition=[IS TRUE(CASE(=($0, 1000), IS NULL(CASE(=($0, 1000), null:INTEGER, 1)), IS NULL(CASE(=($0, 2000), null:INTEGER, 1))))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalFilter(condition=[SEARCH($0, Sarg[1000, 2000])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceNullableToNotNull.json b/tests/RelOptRulesTest/testReduceNullableToNotNull.json deleted file mode 100644 index 726a281..0000000 --- a/tests/RelOptRulesTest/testReduceNullableToNotNull.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "operator": "_ISO-8859-1'a'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "_ISO-8859-1'a'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(NEWCOL=[+($0, CASE(=('a', 'a'), 1, null:INTEGER))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(NEWCOL=[+($0, 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceNullableToNotNull2.json b/tests/RelOptRulesTest/testReduceNullableToNotNull2.json deleted file mode 100644 index 726a281..0000000 --- a/tests/RelOptRulesTest/testReduceNullableToNotNull2.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "operator": "_ISO-8859-1'a'", - "operand": [], - "type": "CHAR" - }, - { - "operator": "_ISO-8859-1'a'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(NEWCOL=[+($0, CASE(=('a', 'a'), 1, null:INTEGER))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(NEWCOL=[+($0, 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceOrCaseWhen.json b/tests/RelOptRulesTest/testReduceOrCaseWhen.json deleted file mode 100644 index 0d8a75a..0000000 --- a/tests/RelOptRulesTest/testReduceOrCaseWhen.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "Sarg[1000, 2000]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalFilter(condition=[OR(IS NULL(CASE(=($0, 1000), null:INTEGER, 1)), IS NULL(CASE(=($0, 2000), null:INTEGER, 1)))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalFilter(condition=[SEARCH($0, Sarg[1000, 2000])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceValuesToEmpty.json b/tests/RelOptRulesTest/testReduceValuesToEmpty.json deleted file mode 100644 index 80a534d..0000000 --- a/tests/RelOptRulesTest/testReduceValuesToEmpty.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "values": { - "schema": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "content": [] - } - } - ], - "help": [ - "LogicalProject(X=[+($0, $1)], B=[$1], A=[$0])\r\n LogicalFilter(condition=[<(-($0, $1), 0)])\r\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 7 }]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceValuesUnderFilter.json b/tests/RelOptRulesTest/testReduceValuesUnderFilter.json deleted file mode 100644 index a536091..0000000 --- a/tests/RelOptRulesTest/testReduceValuesUnderFilter.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "CHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "15", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "CHAR" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'x'", - "operand": [], - "type": "CHAR" - } - ], - [ - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'y'", - "operand": [], - "type": "CHAR" - } - ] - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "CHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "CHAR" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "_ISO-8859-1'x'", - "operand": [], - "type": "CHAR" - } - ] - ] - } - } - } - } - ], - "help": [ - "LogicalProject(A=[$0], B=[$1])\r\n LogicalFilter(condition=[<($0, 15)])\r\n LogicalValues(tuples=[[{ 10, 'x' }, { 20, 'y' }]])\r\n", - "LogicalProject(A=[$0], B=[$1])\r\n LogicalValues(tuples=[[{ 10, 'x' }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceValuesUnderProject.json b/tests/RelOptRulesTest/testReduceValuesUnderProject.json deleted file mode 100644 index 85e02c4..0000000 --- a/tests/RelOptRulesTest/testReduceValuesUnderProject.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - }, - { - "values": { - "schema": [ - "INTEGER" - ], - "content": [ - [ - { - "operator": "11", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "23", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[+($0, $1)])\r\n LogicalValues(tuples=[[{ 10, 1 }, { 20, 3 }]])\r\n", - "LogicalValues(tuples=[[{ 11 }, { 23 }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceValuesUnderProjectFilter.json b/tests/RelOptRulesTest/testReduceValuesUnderProjectFilter.json deleted file mode 100644 index 8aa9172..0000000 --- a/tests/RelOptRulesTest/testReduceValuesUnderProjectFilter.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "project": { - "target": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "operator": "-", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "21", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "values": { - "schema": [ - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "20", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - } - } - } - }, - { - "values": { - "schema": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "content": [ - [ - { - "operator": "11", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - [ - { - "operator": "23", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ] - ] - } - } - ], - "help": [ - "LogicalProject(X=[+($0, $1)], B=[$1], A=[$0])\r\n LogicalFilter(condition=[<(-($0, $1), 21)])\r\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 7 }, { 20, 3 }]])\r\n", - "LogicalValues(tuples=[[{ 11, 1, 10 }, { 23, 3, 20 }]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testReduceWithNonTypePredicate.json b/tests/RelOptRulesTest/testReduceWithNonTypePredicate.json deleted file mode 100644 index 488337e..0000000 --- a/tests/RelOptRulesTest/testReduceWithNonTypePredicate.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "AVG", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[AVG($0)], EXPR$1=[AVG($0) WITHIN DISTINCT ($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[$0], EXPR$1=[CAST(/($1, $2)):INTEGER])\r\n LogicalProject(EXPR$0=[$0], $f1=[CASE(=($2, 0), null:INTEGER, $1)], $f2=[$2])\r\n LogicalAggregate(group=[{}], EXPR$0=[AVG($0)], agg#1=[$SUM0($0) WITHIN DISTINCT ($1)], agg#2=[COUNT() WITHIN DISTINCT ($1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRemoveDistinctOnAgg.json b/tests/RelOptRulesTest/testRemoveDistinctOnAgg.json deleted file mode 100644 index 6087899..0000000 --- a/tests/RelOptRulesTest/testRemoveDistinctOnAgg.json +++ /dev/null @@ -1,306 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "BIT_AND", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "BIT_OR", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "BIGINT" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], EXPR$1=[$2], EXPR$2=[$3], EXPR$3=[$3], EXPR$4=[$4], EXPR$5=[$5], EXPR$6=[$6], EXPR$7=[$7])\r\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM(DISTINCT $2)], EXPR$2=[MIN($2)], EXPR$4=[MAX($2)], EXPR$5=[BIT_AND($2)], EXPR$6=[BIT_OR($2)], EXPR$7=[COUNT(DISTINCT $2)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$2], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], EXPR$1=[$1], EXPR$2=[$1], EXPR$3=[$1], EXPR$4=[$1], EXPR$5=[$1], EXPR$6=[$1], EXPR$7=[1:BIGINT])\r\n LogicalProject(EMPNO=[$0], SAL=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRemoveSemiJoin.json b/tests/RelOptRulesTest/testRemoveSemiJoin.json deleted file mode 100644 index ad1ec11..0000000 --- a/tests/RelOptRulesTest/testRemoveSemiJoin.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[=($1, $2)])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(ENAME=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRemoveSemiJoinRight.json b/tests/RelOptRulesTest/testRemoveSemiJoinRight.json deleted file mode 100644 index 9da695d..0000000 --- a/tests/RelOptRulesTest/testRemoveSemiJoinRight.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[AND(=($1, $2), =($2, $3))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(ENAME=[$0])\r\n LogicalJoin(condition=[=($2, $3)], joinType=[inner])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRemoveSemiJoinRightWithFilter.json b/tests/RelOptRulesTest/testRemoveSemiJoinRightWithFilter.json deleted file mode 100644 index 013b035..0000000 --- a/tests/RelOptRulesTest/testRemoveSemiJoinRightWithFilter.json +++ /dev/null @@ -1,236 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'foo'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'foo'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[AND(=($1, $2), =($2, $4), =($3, 'foo'))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(ENAME=[$0])\r\n LogicalJoin(condition=[=($2, $4)], joinType=[inner])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[=($1, 'foo')])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRemoveSemiJoinWithFilter.json b/tests/RelOptRulesTest/testRemoveSemiJoinWithFilter.json deleted file mode 100644 index 644690f..0000000 --- a/tests/RelOptRulesTest/testRemoveSemiJoinWithFilter.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'foo'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'foo'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[AND(=($1, $2), =($0, 'foo'))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(ENAME=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalFilter(condition=[=($0, 'foo')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightEmptyAntiJoin.json b/tests/RelOptRulesTest/testRightEmptyAntiJoin.json deleted file mode 100644 index 96d9f86..0000000 --- a/tests/RelOptRulesTest/testRightEmptyAntiJoin.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "TINYINT" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "join": { - "kind": "ANTI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "TINYINT" - }, - { - "column": 2, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "content": [] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[anti])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalValues(tuples=[[]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightEmptyAntiJoinNonEqui.json b/tests/RelOptRulesTest/testRightEmptyAntiJoinNonEqui.json deleted file mode 100644 index e054b55..0000000 --- a/tests/RelOptRulesTest/testRightEmptyAntiJoinNonEqui.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "SAL", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "DECIMAL", - "TINYINT" - ], - "nullable": [ - false, - true, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "join": { - "kind": "ANTI", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "TINYINT" - }, - { - "column": 3, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "DECIMAL" - }, - { - "operator": "2000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "content": [] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[AND(=($2, $3), =($1, 2000))], joinType=[anti])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalValues(tuples=[[]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightEmptyFullJoin.json b/tests/RelOptRulesTest/testRightEmptyFullJoin.json deleted file mode 100644 index 68cd02e..0000000 --- a/tests/RelOptRulesTest/testRightEmptyFullJoin.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "FULL", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR" - ], - "content": [] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[full])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightEmptyInnerJoin.json b/tests/RelOptRulesTest/testRightEmptyInnerJoin.json deleted file mode 100644 index 79d9d50..0000000 --- a/tests/RelOptRulesTest/testRightEmptyInnerJoin.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN", - "INTEGER", - "VARCHAR" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightEmptyLeftJoin.json b/tests/RelOptRulesTest/testRightEmptyLeftJoin.json deleted file mode 100644 index cb6a659..0000000 --- a/tests/RelOptRulesTest/testRightEmptyLeftJoin.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR" - ], - "content": [] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightEmptyRightJoin.json b/tests/RelOptRulesTest/testRightEmptyRightJoin.json deleted file mode 100644 index 4757057..0000000 --- a/tests/RelOptRulesTest/testRightEmptyRightJoin.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "false", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "values": { - "schema": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN", - "INTEGER", - "VARCHAR" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalFilter(condition=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightEmptySemiJoin.json b/tests/RelOptRulesTest/testRightEmptySemiJoin.json deleted file mode 100644 index fecee47..0000000 --- a/tests/RelOptRulesTest/testRightEmptySemiJoin.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "TINYINT" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "TINYINT" - }, - { - "column": 2, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "values": { - "schema": [ - "TINYINT", - "VARCHAR", - "VARCHAR" - ], - "content": [] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "SMALLINT" - } - ], - "source": { - "values": { - "schema": [ - "SMALLINT", - "VARCHAR", - "VARCHAR", - "SMALLINT", - "DATE", - "DECIMAL", - "DECIMAL", - "TINYINT" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n LogicalValues(tuples=[[]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testRightOuterJoinSimplificationToInner.json b/tests/RelOptRulesTest/testRightOuterJoinSimplificationToInner.json deleted file mode 100644 index 730a0a9..0000000 --- a/tests/RelOptRulesTest/testRightOuterJoinSimplificationToInner.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'Charlie'", - "operand": [], - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[=($1, 'Charlie')])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalProject(DUMMY=[0])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalFilter(condition=[=($1, 'Charlie')])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinProjectTranspose.json b/tests/RelOptRulesTest/testSemiJoinProjectTranspose.json deleted file mode 100644 index e3ce899..0000000 --- a/tests/RelOptRulesTest/testSemiJoinProjectTranspose.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "TINYINT" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 0, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "TINYINT" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "*", - "operand": [ - { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "TINYINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject($f0=[*(2, $0)])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n", - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject($f0=[*(2, $0)])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinReduceConstants.json b/tests/RelOptRulesTest/testSemiJoinReduceConstants.json deleted file mode 100644 index ce9437e..0000000 --- a/tests/RelOptRulesTest/testSemiJoinReduceConstants.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "200", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "operator": "200", - "operand": [], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "200", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[semi])\r\n LogicalFilter(condition=[=($1, 200)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[=($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(SAL=[$0])\r\n LogicalJoin(condition=[=(200, $2)], joinType=[semi])\r\n LogicalFilter(condition=[=($1, 200)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[=($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinRule.json b/tests/RelOptRulesTest/testSemiJoinRule.json deleted file mode 100644 index 40ffa63..0000000 --- a/tests/RelOptRulesTest/testSemiJoinRule.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinRuleExists.json b/tests/RelOptRulesTest/testSemiJoinRuleExists.json deleted file mode 100644 index 40ffa63..0000000 --- a/tests/RelOptRulesTest/testSemiJoinRuleExists.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinRuleLeft.json b/tests/RelOptRulesTest/testSemiJoinRuleLeft.json deleted file mode 100644 index 6682a51..0000000 --- a/tests/RelOptRulesTest/testSemiJoinRuleLeft.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinRuleWithHint.json b/tests/RelOptRulesTest/testSemiJoinRuleWithHint.json deleted file mode 100644 index 7b8052e..0000000 --- a/tests/RelOptRulesTest/testSemiJoinRuleWithHint.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "DNAME" - ], - "types": [ - "TINYINT", - "VARCHAR" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ], - [ - 1 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "SMALLINT", - "TINYINT" - ], - "nullable": [ - false, - true - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "TINYINT" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 1, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "TINYINT" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "TINYINT" - }, - { - "column": 2, - "type": "TINYINT" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "TINYINT" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n", - "LogicalProject(DNAME=[$1])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[scott, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[scott, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinRuleWithJoinOnUniqueInput.json b/tests/RelOptRulesTest/testSemiJoinRuleWithJoinOnUniqueInput.json deleted file mode 100644 index 8dffe28..0000000 --- a/tests/RelOptRulesTest/testSemiJoinRuleWithJoinOnUniqueInput.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalJoin(condition=[=($7, $9)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSemiJoinTrim.json b/tests/RelOptRulesTest/testSemiJoinTrim.json deleted file mode 100644 index 07f53e3..0000000 --- a/tests/RelOptRulesTest/testSemiJoinTrim.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - }, - { - "name": "ACCOUNT", - "fields": [ - "ACCTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - "right": { - "scan": 2 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - }, - "right": { - "scan": 2 - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, CUSTOMER, ACCOUNT]])\r\n", - "LogicalProject(DEPTNO=[$0])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalFilter(condition=[>($0, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, CUSTOMER, ACCOUNT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSimplifyFilter.json b/tests/RelOptRulesTest/testSimplifyFilter.json deleted file mode 100644 index 6f4251a..0000000 --- a/tests/RelOptRulesTest/testSimplifyFilter.json +++ /dev/null @@ -1,323 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "5", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "3", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[AND(>($0, 3), >($7, 5))])\r\n LogicalFilter(condition=[>($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[>($0, 3)])\r\n LogicalFilter(condition=[>($7, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSkipReduceConstantsCaseEquals.json b/tests/RelOptRulesTest/testSkipReduceConstantsCaseEquals.json deleted file mode 100644 index 7754102..0000000 --- a/tests/RelOptRulesTest/testSkipReduceConstantsCaseEquals.json +++ /dev/null @@ -1,375 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - }, - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 13, - "type": "TIMESTAMP" - }, - { - "column": 14, - "type": "INTEGER" - }, - { - "column": 15, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 17, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "-1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\r\n LogicalFilter(condition=[=(CASE(IS NOT NULL($3), CAST($3):INTEGER NOT NULL, -1), CASE(IS NOT NULL($12), CAST($12):INTEGER NOT NULL, -1))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\r\n LogicalJoin(condition=[=(CASE(IS NOT NULL($3), CAST($3):INTEGER NOT NULL, -1), CASE(IS NOT NULL($12), CAST($12):INTEGER NOT NULL, -1))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSome.json b/tests/RelOptRulesTest/testSome.json deleted file mode 100644 index bb84a4f..0000000 --- a/tests/RelOptRulesTest/testSome.json +++ /dev/null @@ -1,436 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "> SOME", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 11, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 11, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[> SOME($0, {\nLogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n})])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[OR(AND(IS TRUE(>($0, $9)), <>($10, 0)), AND(>($10, $11), null, <>($10, 0), IS NOT TRUE(>($0, $9))), AND(>($0, $9), <>($10, 0), IS NOT TRUE(>($0, $9)), <=($10, $11)))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(m=[$0], c=[$1], d=[$1])\r\n LogicalAggregate(group=[{}], m=[MIN($0)], c=[COUNT()])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSomeWithEquality.json b/tests/RelOptRulesTest/testSomeWithEquality.json deleted file mode 100644 index b47d44b..0000000 --- a/tests/RelOptRulesTest/testSomeWithEquality.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IN($7, {\nLogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n})])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSomeWithEquality2.json b/tests/RelOptRulesTest/testSomeWithEquality2.json deleted file mode 100644 index 5402fbc..0000000 --- a/tests/RelOptRulesTest/testSomeWithEquality2.json +++ /dev/null @@ -1,243 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IN($1, {\nLogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n})])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalJoin(condition=[=($1, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSomeWithNotEquality.json b/tests/RelOptRulesTest/testSomeWithNotEquality.json deleted file mode 100644 index fdab2f9..0000000 --- a/tests/RelOptRulesTest/testSomeWithNotEquality.json +++ /dev/null @@ -1,497 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "<> SOME", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 9, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 9, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 9, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "BIGINT" - }, - { - "column": 0, - "type": "BIGINT" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 1 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[<> SOME($7, {\nLogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n})])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[OR(AND(<>($10, $9), <=($10, 1), OR(<>($7, $11), null), <>($9, 0)), AND(=($10, 1), <>($7, $11), <>($9, 0), OR(=($10, $9), >($10, 1))), AND(<>($9, 0), OR(=($10, $9), >($10, 1)), <>($10, 1)))])\r\n LogicalJoin(condition=[true], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(c=[$0], d=[$0], m=[$1])\r\n LogicalAggregate(group=[{}], c=[COUNT()], m=[MAX($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderBy.json b/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderBy.json deleted file mode 100644 index 14a3c54..0000000 --- a/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderBy.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], dir0=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], dir0=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalSort(sort0=[$5], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderByLimit.json b/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderByLimit.json deleted file mode 100644 index d8942a0..0000000 --- a/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderByLimit.json +++ /dev/null @@ -1,266 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalSort(sort0=[$5], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderByTwoFields.json b/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderByTwoFields.json deleted file mode 100644 index 1e4a0c4..0000000 --- a/tests/RelOptRulesTest/testSortJoinCopyInnerJoinOrderByTwoFields.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ], - [ - 10, - "VARCHAR", - "ASC" - ] - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ], - [ - 10, - "VARCHAR", - "ASC" - ] - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "sort": { - "collation": [ - [ - 1, - "VARCHAR", - "ASC" - ] - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], sort1=[$10], dir0=[ASC], dir1=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], sort1=[$10], dir0=[ASC], dir1=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalSort(sort0=[$5], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalSort(sort0=[$1], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderBy.json b/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderBy.json deleted file mode 100644 index 23fca22..0000000 --- a/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderBy.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderByLimitOffset.json b/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderByLimitOffset.json deleted file mode 100644 index 2a86a9f..0000000 --- a/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderByLimitOffset.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "offset": { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "offset": { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2], fetch=[10])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2], fetch=[10])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderByOffset.json b/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderByOffset.json deleted file mode 100644 index 9568fd4..0000000 --- a/tests/RelOptRulesTest/testSortJoinCopySemiJoinOrderByOffset.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "offset": { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "offset": { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "SEMI", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\r\n LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinTranspose1.json b/tests/RelOptRulesTest/testSortJoinTranspose1.json deleted file mode 100644 index a9bd126..0000000 --- a/tests/RelOptRulesTest/testSortJoinTranspose1.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "sort": { - "collation": [ - [ - 5, - "INTEGER", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 1 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\r\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinTranspose2.json b/tests/RelOptRulesTest/testSortJoinTranspose2.json deleted file mode 100644 index f7f50a9..0000000 --- a/tests/RelOptRulesTest/testSortJoinTranspose2.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 10, - "VARCHAR", - "ASC" - ] - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 10, - "VARCHAR", - "ASC" - ] - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "sort": { - "collation": [ - [ - 1, - "VARCHAR", - "ASC" - ] - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$10], dir0=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$10], dir0=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalSort(sort0=[$1], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinTranspose4.json b/tests/RelOptRulesTest/testSortJoinTranspose4.json deleted file mode 100644 index f7f50a9..0000000 --- a/tests/RelOptRulesTest/testSortJoinTranspose4.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 10, - "VARCHAR", - "ASC" - ] - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "source": { - "sort": { - "collation": [ - [ - 10, - "VARCHAR", - "ASC" - ] - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "sort": { - "collation": [ - [ - 1, - "VARCHAR", - "ASC" - ] - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$10], dir0=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\r\n LogicalSort(sort0=[$10], dir0=[ASC])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalSort(sort0=[$1], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortJoinTranspose6.json b/tests/RelOptRulesTest/testSortJoinTranspose6.json deleted file mode 100644 index 8375b98..0000000 --- a/tests/RelOptRulesTest/testSortJoinTranspose6.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "sort": { - "collation": [], - "offset": { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "sort": { - "collation": [], - "offset": { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "sort": { - "collation": [], - "offset": { - "operator": "2", - "operand": [], - "type": "INTEGER" - }, - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], EMPNO=[$1])\r\n LogicalSort(offset=[2], fetch=[10])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EMPNO=[$1])\r\n LogicalSort(offset=[2], fetch=[10])\r\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalSort(offset=[2], fetch=[10])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortProjectTranspose1.json b/tests/RelOptRulesTest/testSortProjectTranspose1.json deleted file mode 100644 index 0eb9b54..0000000 --- a/tests/RelOptRulesTest/testSortProjectTranspose1.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 1, - "INTEGER", - "ASC" - ] - ], - "offset": { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "offset": { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$1], dir0=[ASC], offset=[1])\r\n LogicalProject(DEPTNO=[$0], EXPR$1=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[$0])\r\n LogicalSort(sort0=[$0], dir0=[ASC], offset=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortProjectTranspose2.json b/tests/RelOptRulesTest/testSortProjectTranspose2.json deleted file mode 100644 index 0c2856b..0000000 --- a/tests/RelOptRulesTest/testSortProjectTranspose2.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 1, - "DOUBLE", - "ASC" - ] - ], - "offset": { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "DOUBLE" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "DOUBLE" - } - ], - "source": { - "sort": { - "collation": [ - [ - 0, - "INTEGER", - "ASC" - ] - ], - "offset": { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$1], dir0=[ASC], offset=[1])\r\n LogicalProject(DEPTNO=[$0], EXPR$1=[CAST($0):DOUBLE NOT NULL])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[CAST($0):DOUBLE NOT NULL])\r\n LogicalSort(sort0=[$0], dir0=[ASC], offset=[1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortRemovalAllKeysConstant.json b/tests/RelOptRulesTest/testSortRemovalAllKeysConstant.json deleted file mode 100644 index 57b2a12..0000000 --- a/tests/RelOptRulesTest/testSortRemovalAllKeysConstant.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 1, - "INTEGER", - "DESC-nulls-last" - ] - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$1], dir0=[DESC-nulls-last])\r\n LogicalProject(C=[$2], DEPTNO=[$0])\r\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(C=[$2], DEPTNO=[$0])\r\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortRemovalOneKeyConstant.json b/tests/RelOptRulesTest/testSortRemovalOneKeyConstant.json deleted file mode 100644 index 06d5676..0000000 --- a/tests/RelOptRulesTest/testSortRemovalOneKeyConstant.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 1, - "INTEGER", - "ASC" - ], - [ - 2, - "INTEGER", - "DESC" - ] - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "sort": { - "collation": [ - [ - 2, - "INTEGER", - "DESC" - ] - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$1], sort1=[$2], dir0=[ASC], dir1=[DESC])\r\n LogicalProject(C=[$2], DEPTNO=[$0], SAL=[$1])\r\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalSort(sort0=[$2], dir0=[DESC])\r\n LogicalProject(C=[$2], DEPTNO=[$0], SAL=[$1])\r\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\r\n LogicalProject(DEPTNO=[$1], SAL=[$0])\r\n LogicalFilter(condition=[=($1, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortUnionTranspose.json b/tests/RelOptRulesTest/testSortUnionTranspose.json deleted file mode 100644 index eefe430..0000000 --- a/tests/RelOptRulesTest/testSortUnionTranspose.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "union": [ - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "scan": 0 - } - } - }, - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "limit": { - "operator": "10", - "operand": [], - "type": "INTEGER" - }, - "source": { - "scan": 0 - } - } - } - ] - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\r\n LogicalUnion(all=[true])\r\n LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortUnionTranspose2.json b/tests/RelOptRulesTest/testSortUnionTranspose2.json deleted file mode 100644 index 529d8bb..0000000 --- a/tests/RelOptRulesTest/testSortUnionTranspose2.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "NAME" - ], - "types": [ - "VARCHAR" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "source": { - "union": [ - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - }, - { - "sort": { - "collation": [ - [ - 0, - "VARCHAR", - "ASC" - ] - ], - "source": { - "scan": 0 - } - } - } - ] - } - } - } - ], - "help": [ - "LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalUnion(all=[true])\r\n LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalSort(sort0=[$0], dir0=[ASC])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSortUnionTranspose3.json b/tests/RelOptRulesTest/testSortUnionTranspose3.json deleted file mode 100644 index 782d853..0000000 --- a/tests/RelOptRulesTest/testSortUnionTranspose3.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "schemas": [], - "queries": [ - { - "values": { - "schema": [ - "VARCHAR" - ], - "content": [] - } - }, - { - "values": { - "schema": [ - "VARCHAR" - ], - "content": [] - } - } - ], - "help": [ - "LogicalValues(tuples=[[]])\r\n", - "LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSpatialContainsPoint.json b/tests/RelOptRulesTest/testSpatialContainsPoint.json deleted file mode 100644 index e4d08ff..0000000 --- a/tests/RelOptRulesTest/testSpatialContainsPoint.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "schemas": [ - { - "name": "RESTAURANTS", - "fields": [ - "NAME", - "LATITUDE", - "LONGITUDE", - "CUISINE", - "HILBERT" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "VARCHAR", - "BIGINT" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "ST_CONTAINS", - "operand": [ - { - "operator": "ST_BUFFER", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "10.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "20.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "6", - "operand": [], - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "SEARCH", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "ST_CONTAINS", - "operand": [ - { - "operator": "POLYGON ((16 20, 15.884711682419383 18.829458067903232, 15.54327719506772 17.703899405809462, 14.988817673815271 16.666578601882385, 14.242640687119286 15.757359312880716, 13.333421398117615 15.011182326184729, 12.29610059419054 14.45672280493228, 11.17054193209677 14.115288317580617, 10 14, 8.82945806790323 14.115288317580617, 7.703899405809461 14.45672280493228, 6.666578601882389 15.011182326184727, 5.757359312880715 15.757359312880714, 5.011182326184728 16.666578601882385, 4.45672280493228 17.70389940580946, 4.115288317580617 18.82945806790323, 4 20, 4.115288317580617 21.17054193209677, 4.456722804932279 22.296100594190538, 5.011182326184727 23.33342139811761, 5.757359312880714 24.242640687119284, 6.666578601882387 24.98881767381527, 7.703899405809458 25.54327719506772, 8.829458067903229 25.884711682419383, 9.999999999999998 26, 11.17054193209677 25.884711682419383, 12.29610059419054 25.54327719506772, 13.333421398117611 24.988817673815273, 14.242640687119284 24.242640687119284, 14.988817673815271 23.333421398117615, 15.54327719506772 22.29610059419054, 15.884711682419383 21.17054193209677, 16 20))", - "operand": [], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[ST_CONTAINS(ST_BUFFER(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), 6), ST_POINT($2, $1))])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n", - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]), ST_CONTAINS(POLYGON ((16 20, 15.884711682419383 18.829458067903232, 15.54327719506772 17.703899405809462, 14.988817673815271 16.666578601882385, 14.242640687119286 15.757359312880716, 13.333421398117615 15.011182326184729, 12.29610059419054 14.45672280493228, 11.17054193209677 14.115288317580617, 10 14, 8.82945806790323 14.115288317580617, 7.703899405809461 14.45672280493228, 6.666578601882389 15.011182326184727, 5.757359312880715 15.757359312880714, 5.011182326184728 16.666578601882385, 4.45672280493228 17.70389940580946, 4.115288317580617 18.82945806790323, 4 20, 4.115288317580617 21.17054193209677, 4.456722804932279 22.296100594190538, 5.011182326184727 23.33342139811761, 5.757359312880714 24.242640687119284, 6.666578601882387 24.98881767381527, 7.703899405809458 25.54327719506772, 8.829458067903229 25.884711682419383, 9.999999999999998 26, 11.17054193209677 25.884711682419383, 12.29610059419054 25.54327719506772, 13.333421398117611 24.988817673815273, 14.242640687119284 24.242640687119284, 14.988817673815271 23.333421398117615, 15.54327719506772 22.29610059419054, 15.884711682419383 21.17054193209677, 16 20)):GEOMETRY, ST_POINT($2, $1)))])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSpatialDWithinLine.json b/tests/RelOptRulesTest/testSpatialDWithinLine.json deleted file mode 100644 index e162250..0000000 --- a/tests/RelOptRulesTest/testSpatialDWithinLine.json +++ /dev/null @@ -1,220 +0,0 @@ -{ - "schemas": [ - { - "name": "RESTAURANTS", - "fields": [ - "NAME", - "LATITUDE", - "LONGITUDE", - "CUISINE", - "HILBERT" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "VARCHAR", - "BIGINT" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "ST_MAKELINE", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "8.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "20.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "12.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "20.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "SEARCH", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "Sarg[[33064..33076], [33092..33100], [33112..33156], [33164..33176], [33236..33240], [36457..36459], [36501..36503], [36505..36507], [36517..36519]]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "LINESTRING (8 20, 12 20)", - "operand": [], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[ST_DWITHIN(ST_MAKELINE(ST_POINT(8.0:DECIMAL(2, 1), 20.0:DECIMAL(3, 1)), ST_POINT(12.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1))), ST_POINT($2, $1), 4)])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n", - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[33064..33076], [33092..33100], [33112..33156], [33164..33176], [33236..33240], [36457..36459], [36501..36503], [36505..36507], [36517..36519]]), ST_DWITHIN(LINESTRING (8 20, 12 20):GEOMETRY, ST_POINT($2, $1), 4))])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSpatialDWithinReversed.json b/tests/RelOptRulesTest/testSpatialDWithinReversed.json deleted file mode 100644 index cb2654a..0000000 --- a/tests/RelOptRulesTest/testSpatialDWithinReversed.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "schemas": [ - { - "name": "RESTAURANTS", - "fields": [ - "NAME", - "LATITUDE", - "LONGITUDE", - "CUISINE", - "HILBERT" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "VARCHAR", - "BIGINT" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "10.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "20.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "6", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "SEARCH", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "POINT (10 20)", - "operand": [], - "type": "GEOMETRY" - }, - { - "operator": "6", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT($2, $1), ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), 6)])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n", - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]), ST_DWITHIN(ST_POINT($2, $1), POINT (10 20):GEOMETRY, 6))])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSpatialDWithinToHilbert.json b/tests/RelOptRulesTest/testSpatialDWithinToHilbert.json deleted file mode 100644 index b93d118..0000000 --- a/tests/RelOptRulesTest/testSpatialDWithinToHilbert.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "schemas": [ - { - "name": "RESTAURANTS", - "fields": [ - "NAME", - "LATITUDE", - "LONGITUDE", - "CUISINE", - "HILBERT" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "VARCHAR", - "BIGINT" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "10.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "20.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "SEARCH", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "Sarg[[28988..28989], [28991..28994], [29006..29009], [29011..29014], [32426..32429], [32431..32434], [32446..32449], [32451..32454], [32506..32509], [32511..32514], [32526..32527], [32929..32930], [32942..32949], [32951..32953], [32955..32970], [32973..32975], [33009..33011], [33014..33185], [33187..33190], [33205..33207], [33209..33211], [33226..33229], [33231..33265], [33267..33270], [36392..36401], [36403..36404], [36421..36423], [36425..36427], [36442..36445], [36447..36548], [36556..36568]]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "POINT (10 20)", - "operand": [], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), ST_POINT($2, $1), 10)])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n", - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[28988..28989], [28991..28994], [29006..29009], [29011..29014], [32426..32429], [32431..32434], [32446..32449], [32451..32454], [32506..32509], [32511..32514], [32526..32527], [32929..32930], [32942..32949], [32951..32953], [32955..32970], [32973..32975], [33009..33011], [33014..33185], [33187..33190], [33205..33207], [33209..33211], [33226..33229], [33231..33265], [33267..33270], [36392..36401], [36403..36404], [36421..36423], [36425..36427], [36442..36445], [36447..36548], [36556..36568]]), ST_DWITHIN(POINT (10 20):GEOMETRY, ST_POINT($2, $1), 10))])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSpatialDWithinToHilbertNegative.json b/tests/RelOptRulesTest/testSpatialDWithinToHilbertNegative.json deleted file mode 100644 index 0f4dbef..0000000 --- a/tests/RelOptRulesTest/testSpatialDWithinToHilbertNegative.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "schemas": [ - { - "name": "RESTAURANTS", - "fields": [ - "NAME", - "LATITUDE", - "LONGITUDE", - "CUISINE", - "HILBERT" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "VARCHAR", - "BIGINT" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "10.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "20.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "-2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "values": { - "schema": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "VARCHAR", - "BIGINT" - ], - "content": [] - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), ST_POINT($2, $1), -2)])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n", - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalValues(tuples=[[]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSpatialDWithinToHilbertZero.json b/tests/RelOptRulesTest/testSpatialDWithinToHilbertZero.json deleted file mode 100644 index f7b9126..0000000 --- a/tests/RelOptRulesTest/testSpatialDWithinToHilbertZero.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "schemas": [ - { - "name": "RESTAURANTS", - "fields": [ - "NAME", - "LATITUDE", - "LONGITUDE", - "CUISINE", - "HILBERT" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "VARCHAR", - "BIGINT" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "ST_DWITHIN", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "10.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "20.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "33139", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "operator": "POINT (10 20)", - "operand": [], - "type": "GEOMETRY" - }, - { - "operator": "ST_POINT", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), ST_POINT($2, $1), 0)])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n", - "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\r\n LogicalFilter(condition=[AND(=($4, 33139), =(POINT (10 20), ST_POINT($2, $1)))])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSpatialReduce.json b/tests/RelOptRulesTest/testSpatialReduce.json deleted file mode 100644 index 988d29d..0000000 --- a/tests/RelOptRulesTest/testSpatialReduce.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "schemas": [ - { - "name": "RESTAURANTS", - "fields": [ - "HILBERT" - ], - "types": [ - "BIGINT" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "ST_BUFFER", - "operand": [ - { - "operator": "ST_POINT", - "operand": [ - { - "operator": "0.0", - "operand": [], - "type": "DECIMAL" - }, - { - "operator": "0.0", - "operand": [], - "type": "DECIMAL" - } - ], - "type": "GEOMETRY" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "GEOMETRY" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "operator": "POLYGON ((1 0, 0.9238795325112867 -0.3826834323650898, 0.7071067811865476 -0.7071067811865475, 0.3826834323650898 -0.9238795325112867, 0.0000000000000001 -1, -0.3826834323650897 -0.9238795325112867, -0.7071067811865475 -0.7071067811865476, -0.9238795325112867 -0.3826834323650899, -1 -0.0000000000000001, -0.9238795325112868 0.3826834323650897, -0.7071067811865477 0.7071067811865475, -0.3826834323650903 0.9238795325112865, -0.0000000000000002 1, 0.38268343236509 0.9238795325112866, 0.7071067811865474 0.7071067811865477, 0.9238795325112865 0.3826834323650904, 1 0))", - "operand": [], - "type": "GEOMETRY" - } - ], - "type": "GEOMETRY" - } - ], - "source": { - "scan": 0 - } - } - } - ], - "help": [ - "LogicalProject(B=[ST_BUFFER(ST_POINT(0.0:DECIMAL(2, 1), 0.0:DECIMAL(2, 1)), 1, 4)])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n", - "LogicalProject(B=[CAST(POLYGON ((1 0, 0.9238795325112867 -0.3826834323650898, 0.7071067811865476 -0.7071067811865475, 0.3826834323650898 -0.9238795325112867, 0.0000000000000001 -1, -0.3826834323650897 -0.9238795325112867, -0.7071067811865475 -0.7071067811865476, -0.9238795325112867 -0.3826834323650899, -1 -0.0000000000000001, -0.9238795325112868 0.3826834323650897, -0.7071067811865477 0.7071067811865475, -0.3826834323650903 0.9238795325112865, -0.0000000000000002 1, 0.38268343236509 0.9238795325112866, 0.7071067811865474 0.7071067811865477, 0.9238795325112865 0.3826834323650904, 1 0)):GEOMETRY):GEOMETRY])\r\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testStrengthenJoinType.json b/tests/RelOptRulesTest/testStrengthenJoinType.json deleted file mode 100644 index d54ac40..0000000 --- a/tests/RelOptRulesTest/testStrengthenJoinType.json +++ /dev/null @@ -1,375 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "TIMESTAMP" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "TIMESTAMP" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 10, - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 6, - "type": "TIMESTAMP" - } - ], - "type": "TIMESTAMP" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 10, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "100", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\r\n LogicalFilter(condition=[AND(IS NOT NULL($9), >($7, 100))])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\r\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[CAST($2):INTEGER], ENAME=[CAST($3):VARCHAR(20)], JOB=[CAST($4):VARCHAR(10)], MGR=[$5], HIREDATE=[CAST($6):TIMESTAMP(0)], SAL=[CAST($7):INTEGER], COMM=[CAST($8):INTEGER], DEPTNO0=[CAST($9):INTEGER], SLACKER=[CAST($10):BOOLEAN])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalFilter(condition=[>($5, 100)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSumAndDistinctSumWithExpandSumType.json b/tests/RelOptRulesTest/testSumAndDistinctSumWithExpandSumType.json deleted file mode 100644 index 3d75567..0000000 --- a/tests/RelOptRulesTest/testSumAndDistinctSumWithExpandSumType.json +++ /dev/null @@ -1,278 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "COMM" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "operator": "CAST", - "operand": [ - { - "column": 0, - "type": "DECIMAL" - } - ], - "type": "BIGINT" - }, - { - "column": 1, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "BIGINT" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "DECIMAL" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[SUM(DISTINCT $0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[CAST($0):BIGINT], EXPR$1=[$1])\r\n LogicalAggregate(group=[{}], EXPR$0=[SUM($1)], EXPR$1=[SUM($0)])\r\n LogicalAggregate(group=[{0}], EXPR$0=[SUM($0)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testSwapOuterJoin.json b/tests/RelOptRulesTest/testSwapOuterJoin.json deleted file mode 100644 index 7d99fc9..0000000 --- a/tests/RelOptRulesTest/testSwapOuterJoin.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 1 - }, - "right": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalProject(DUMMY=[0])\r\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceAggregate.json b/tests/RelOptRulesTest/testTransitiveInferenceAggregate.json deleted file mode 100644 index 0d5afd7..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceAggregate.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceComplexPredicate.json b/tests/RelOptRulesTest/testTransitiveInferenceComplexPredicate.json deleted file mode 100644 index fc334d4..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceComplexPredicate.json +++ /dev/null @@ -1,361 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "/", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($1, $3)], joinType=[inner])\r\n LogicalFilter(condition=[AND(>($1, 7), =($0, $1), >(+($0, $1), /($0, 2)))])\r\n LogicalProject(COMM=[$1], DEPTNO=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[=($0, $1)])\r\n LogicalProject(SAL=[$0], DEPTNO=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($1, $3)], joinType=[inner])\r\n LogicalFilter(condition=[AND(>($1, 7), =($0, $1), >(+($0, $1), /($0, 2)))])\r\n LogicalProject(COMM=[$1], DEPTNO=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($1, 7)])\r\n LogicalFilter(condition=[=($0, $1)])\r\n LogicalProject(SAL=[$0], DEPTNO=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceConjunctInPullUp.json b/tests/RelOptRulesTest/testTransitiveInferenceConjunctInPullUp.json deleted file mode 100644 index a613954..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceConjunctInPullUp.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "Sarg[7, 9, (10..+∞)]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "Sarg[7, 9, (10..+∞)]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "SEARCH", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "Sarg[7, 9, (10..+∞)]", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[SEARCH($0, Sarg[7, 9, (10..+∞)])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[SEARCH($0, Sarg[7, 9, (10..+∞)])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[SEARCH($0, Sarg[7, 9, (10..+∞)])])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceJoin.json b/tests/RelOptRulesTest/testTransitiveInferenceJoin.json deleted file mode 100644 index 7c67788..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceJoin.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceJoin3way.json b/tests/RelOptRulesTest/testTransitiveInferenceJoin3way.json deleted file mode 100644 index d60dc50..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceJoin3way.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 0 - } - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceJoin3wayAgg.json b/tests/RelOptRulesTest/testTransitiveInferenceJoin3wayAgg.json deleted file mode 100644 index f4d911d..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceJoin3wayAgg.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "scan": 0 - } - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalAggregate(group=[{0}])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceLeftOuterJoin.json b/tests/RelOptRulesTest/testTransitiveInferenceLeftOuterJoin.json deleted file mode 100644 index 813de58..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceLeftOuterJoin.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "9", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "9", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[>($1, 9)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[>($1, 9)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceProject.json b/tests/RelOptRulesTest/testTransitiveInferenceProject.json deleted file mode 100644 index a0fb41e..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceProject.json +++ /dev/null @@ -1,153 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferencePullUpThruAlias.json b/tests/RelOptRulesTest/testTransitiveInferencePullUpThruAlias.json deleted file mode 100644 index 27cf18a..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferencePullUpThruAlias.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "COMM", - "DEPTNO" - ], - "types": [ - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalProject(COMM=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalProject(COMM=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalProject(DEPTNO=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceRightOuterJoin.json b/tests/RelOptRulesTest/testTransitiveInferenceRightOuterJoin.json deleted file mode 100644 index 6aebe24..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceRightOuterJoin.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "9", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "RIGHT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "9", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "9", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[right])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 9)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[right])\r\n LogicalFilter(condition=[>($0, 9)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 9)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceUnion.json b/tests/RelOptRulesTest/testTransitiveInferenceUnion.json deleted file mode 100644 index a505515..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceUnion.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "union": [ - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "union": [ - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalUnion(all=[true])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalUnion(all=[true])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceUnion3way.json b/tests/RelOptRulesTest/testTransitiveInferenceUnion3way.json deleted file mode 100644 index b0a1e92..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceUnion3way.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "union": [ - { - "union": [ - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - }, - "right": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "union": [ - { - "union": [ - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - }, - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - ] - }, - "right": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalUnion(all=[true])\r\n LogicalUnion(all=[true])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EXPR$0=[1])\r\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalUnion(all=[true])\r\n LogicalUnion(all=[true])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[>($0, 1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testTransitiveInferenceUnionAlwaysTrue.json b/tests/RelOptRulesTest/testTransitiveInferenceUnionAlwaysTrue.json deleted file mode 100644 index ad13cc8..0000000 --- a/tests/RelOptRulesTest/testTransitiveInferenceUnionAlwaysTrue.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "union": [ - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "scan": 0 - } - ] - } - } - }, - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - "right": { - "filter": { - "condition": { - "operator": "<", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "7", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[<($0, 4)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalUnion(all=[true])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalJoin(condition=[=($0, $1)], joinType=[inner])\r\n LogicalFilter(condition=[<($0, 4)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalFilter(condition=[<($0, 4)])\r\n LogicalUnion(all=[true])\r\n LogicalFilter(condition=[>($0, 7)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testUncorrelatedCallInConjunctionIsFlattenedOnlyIfSiblingOfCorrelation.json b/tests/RelOptRulesTest/testUncorrelatedCallInConjunctionIsFlattenedOnlyIfSiblingOfCorrelation.json deleted file mode 100644 index 38297c6..0000000 --- a/tests/RelOptRulesTest/testUncorrelatedCallInConjunctionIsFlattenedOnlyIfSiblingOfCorrelation.json +++ /dev/null @@ -1,660 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "<", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "<", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "scan": 0 - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [], - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "<", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 9, - "type": "BOOLEAN" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "project": { - "target": [ - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "<", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "50", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "20", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "operator": "30", - "operand": [], - "type": "INTEGER" - }, - { - "column": 10, - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 16, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalFilter(condition=[AND(<(+($0, 50), 20), >=($cor0.DEPTNO, +(30, $1)))])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[IS NOT NULL($9)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\r\n LogicalProject($f0=[true])\r\n LogicalProject(DUMMY=[0])\r\n LogicalFilter(condition=[AND(<(+($0, 50), 20), >=($cor0.DEPTNO, $1))])\r\n LogicalProject(EMPNO=[$0], $f9=[+(30, $1)])\r\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testUnionMergeRule.json b/tests/RelOptRulesTest/testUnionMergeRule.json deleted file mode 100644 index e4aee00..0000000 --- a/tests/RelOptRulesTest/testUnionMergeRule.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "union": [ - { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - ] - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - }, - { - "union": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - ] - } - ], - "help": [ - "LogicalUnion(all=[true])\r\n LogicalUnion(all=[true])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalUnion(all=[true])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalUnion(all=[true])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testUnionToDistinctRule.json b/tests/RelOptRulesTest/testUnionToDistinctRule.json deleted file mode 100644 index 0425e8d..0000000 --- a/tests/RelOptRulesTest/testUnionToDistinctRule.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "union": [ - { - "scan": 0 - }, - { - "scan": 0 - } - ] - } - } - } - } - } - ] - } - } - ], - "help": [ - "LogicalUnion(all=[false])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalAggregate(group=[{0, 1}])\r\n LogicalUnion(all=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereAnyCorrelatedInSelect.json b/tests/RelOptRulesTest/testWhereAnyCorrelatedInSelect.json deleted file mode 100644 index da6fdd6..0000000 --- a/tests/RelOptRulesTest/testWhereAnyCorrelatedInSelect.json +++ /dev/null @@ -1,519 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "> SOME", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 10, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 13, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 12, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 12, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 11, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[> SOME($0, {\nLogicalProject(DEPTNO=[$0])\r\n LogicalFilter(condition=[=($cor0.JOB, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalJoin(condition=[AND(=($2, $13), OR(AND(>($0, $9), IS NOT TRUE(OR(IS NULL($12), =($10, 0)))), AND(>($0, $9), IS NOT TRUE(OR(IS NULL($12), =($10, 0))), IS NOT TRUE(>($0, $9)), IS NOT TRUE(>($10, $11)))))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(m=[$1], c=[$2], d=[$2], trueLiteral=[true], NAME=[$0])\r\n LogicalAggregate(group=[{0}], m=[MIN($1)], c=[COUNT()])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereExpressionInCorrelated.json b/tests/RelOptRulesTest/testWhereExpressionInCorrelated.json deleted file mode 100644 index f9ede96..0000000 --- a/tests/RelOptRulesTest/testWhereExpressionInCorrelated.json +++ /dev/null @@ -1,414 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 8, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[IN($1, {\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[=(+($5, 1), $cor0.SALPLUS)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalProject(ENAME=[$0], DEPTNO=[$2], SALPLUS=[+($1, 1)])\r\n LogicalProject(ENAME=[$1], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(ENAME=[$0])\r\n LogicalJoin(condition=[AND(=($2, $4), =($1, $3))], joinType=[inner])\r\n LogicalProject(ENAME=[$0], DEPTNO=[$2], SALPLUS=[+($1, 1)])\r\n LogicalProject(ENAME=[$1], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], $f9=[+($0, 1)])\r\n LogicalProject(SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereExpressionInCorrelated2.json b/tests/RelOptRulesTest/testWhereExpressionInCorrelated2.json deleted file mode 100644 index 7904dd8..0000000 --- a/tests/RelOptRulesTest/testWhereExpressionInCorrelated2.json +++ /dev/null @@ -1,399 +0,0 @@ -{ - "schemas": [ - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "operator": "+", - "operand": [ - { - "column": 8, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "-", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "-", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "+", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(NAME=[$0])\r\n LogicalFilter(condition=[IN($1, {\nLogicalProject(DEPTNO=[$7])\r\n LogicalFilter(condition=[=(+($5, 1), $cor0.DEPTNOMINUS)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0], DEPTNOMINUS=[-($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(NAME=[$0])\r\n LogicalJoin(condition=[AND(=($2, $4), =($1, $3))], joinType=[inner])\r\n LogicalProject(NAME=[$1], DEPTNO=[$0], DEPTNOMINUS=[-($0, 10)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{0, 1}])\r\n LogicalProject(DEPTNO=[$1], $f9=[+($0, 1)])\r\n LogicalProject(SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereInCorrelated.json b/tests/RelOptRulesTest/testWhereInCorrelated.json deleted file mode 100644 index dae0799..0000000 --- a/tests/RelOptRulesTest/testWhereInCorrelated.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "JOB", - "SAL" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - } - } - } - ], - "help": [ - "LogicalProject(SAL=[$2])\r\n LogicalFilter(condition=[IN($0, {\nLogicalProject(DEPTNO=[$0])\r\n LogicalFilter(condition=[=($cor0.JOB, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(SAL=[$2])\r\n LogicalJoin(condition=[AND(=($1, $4), =($0, $3))], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereInJoinCorrelated.json b/tests/RelOptRulesTest/testWhereInJoinCorrelated.json deleted file mode 100644 index 97dcf90..0000000 --- a/tests/RelOptRulesTest/testWhereInJoinCorrelated.json +++ /dev/null @@ -1,373 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "IN", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 9, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 11, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 11, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "correlate": [ - { - "join": { - "kind": "INNER", - "condition": { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "scan": 1 - } - } - }, - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 11, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 11, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 12, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 16, - "type": "INTEGER" - }, - { - "column": 18, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 11, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 12, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 13, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 17, - "type": "INTEGER" - }, - { - "column": 19, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - ] - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[IN($1, {\nLogicalProject(SAL=[$5])\r\n LogicalFilter(condition=[>($7, $cor0.DEPTNO)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n})], variablesSet=[[$cor0]])\r\n LogicalJoin(condition=[=($2, $3)], joinType=[inner])\r\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n", - "LogicalProject(EMPNO=[$0])\r\n LogicalFilter(condition=[=($5, $11)])\r\n LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{7}])\r\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalAggregate(group=[{0}])\r\n LogicalProject(SAL=[$0])\r\n LogicalFilter(condition=[>($1, $cor0.DEPTNO)])\r\n LogicalProject(SAL=[$5], DEPTNO=[$7])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereNotInCorrelated.json b/tests/RelOptRulesTest/testWhereNotInCorrelated.json deleted file mode 100644 index e49e5e9..0000000 --- a/tests/RelOptRulesTest/testWhereNotInCorrelated.json +++ /dev/null @@ -1,370 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "JOB", - "SAL" - ], - "types": [ - "INTEGER", - "VARCHAR", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO", - "NAME" - ], - "types": [ - "INTEGER", - "VARCHAR" - ], - "nullable": [ - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 1 - } - } - } - } - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 7, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 8, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(SAL=[$2])\r\n LogicalFilter(condition=[NOT(IN($0, {\nLogicalProject(DEPTNO=[$0])\r\n LogicalFilter(condition=[=($cor0.JOB, $1)])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n}))], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(SAL=[$2])\r\n LogicalFilter(condition=[OR(=($3, 0), IS NOT TRUE(OR(IS NOT NULL($7), <($4, $3))))])\r\n LogicalJoin(condition=[AND(=($0, $6), =($1, $8))], joinType=[left])\r\n LogicalJoin(condition=[=($1, $5)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(c=[$1], ck=[$1], NAME=[$0])\r\n LogicalAggregate(group=[{0}], c=[COUNT()])\r\n LogicalProject(NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n LogicalProject(DEPTNO=[$0], i=[true], NAME=[$1])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereNotInCorrelated2.json b/tests/RelOptRulesTest/testWhereNotInCorrelated2.json deleted file mode 100644 index b2f1e6b..0000000 --- a/tests/RelOptRulesTest/testWhereNotInCorrelated2.json +++ /dev/null @@ -1,591 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "NOT", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "project": { - "target": [ - { - "column": 10, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 11, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 10, - "type": "VARCHAR" - }, - { - "column": 9, - "type": "INTEGER" - }, - { - "column": 14, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NOT TRUE", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "IS NOT NULL", - "operand": [ - { - "column": 13, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "<", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "column": 9, - "type": "BIGINT" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 12, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 14, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "left": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 11, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 1, - "type": "BIGINT" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - "right": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "filter": { - "condition": { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[NOT(IN($0, {\nLogicalProject(EMPNO=[$1])\r\n LogicalFilter(condition=[AND(>($2, 2), =($cor0.ENAME, $0))])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0], R=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n}))], variablesSet=[[$cor0]])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[OR(=($9, 0), IS NOT TRUE(OR(IS NOT NULL($13), <($10, $9))))])\r\n LogicalJoin(condition=[AND(=($0, $12), =($1, $14))], joinType=[left])\r\n LogicalJoin(condition=[=($1, $11)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(c=[$1], ck=[$1], ENAME=[$0])\r\n LogicalAggregate(group=[{0}], c=[COUNT()])\r\n LogicalProject(ENAME=[$0])\r\n LogicalFilter(condition=[>($1, 2)])\r\n LogicalProject(ENAME=[$1], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(EMPNO=[$1], i=[true], ENAME=[$0])\r\n LogicalFilter(condition=[>($2, 2)])\r\n LogicalProject(ENAME=[$1], EMPNO=[$0], R=[$2])\r\n LogicalProject(EMPNO=[$0], ENAME=[$1], SAL=[$5])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWhereOrSubQuery.json b/tests/RelOptRulesTest/testWhereOrSubQuery.json deleted file mode 100644 index 5b7cbcc..0000000 --- a/tests/RelOptRulesTest/testWhereOrSubQuery.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "EMPNO", - "ENAME", - "JOB", - "MGR", - "HIREDATE", - "SAL", - "COMM", - "DEPTNO", - "SLACKER" - ], - "types": [ - "INTEGER", - "VARCHAR", - "VARCHAR", - "INTEGER", - "TIMESTAMP", - "INTEGER", - "INTEGER", - "INTEGER", - "BOOLEAN" - ], - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - }, - { - "name": "DEPT", - "fields": [ - "DEPTNO" - ], - "types": [ - "INTEGER" - ], - "nullable": [ - false - ], - "key": [ - [ - 0 - ] - ], - "guaranteed": [] - } - ], - "queries": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NOT", - "operand": [ - { - "operator": "IN", - "operand": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "query": { - "scan": 1 - }, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "scan": 0 - } - } - } - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "TIMESTAMP" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "BOOLEAN" - } - ], - "source": { - "filter": { - "condition": { - "operator": "OR", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "4", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 10, - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "join": { - "kind": "LEFT", - "condition": { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 9, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - "left": { - "scan": 0 - }, - "right": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "true", - "operand": [], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 1 - } - } - } - } - } - } - } - } - } - ], - "help": [ - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[OR(=($5, 4), NOT(IN($0, {\nLogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n})))])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\r\n LogicalFilter(condition=[OR(=($5, 4), IS NULL($10))])\r\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n LogicalProject(DEPTNO=[$0], i=[true])\r\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinct.json b/tests/RelOptRulesTest/testWithinDistinct.json deleted file mode 100644 index 92213ba..0000000 --- a/tests/RelOptRulesTest/testWithinDistinct.json +++ /dev/null @@ -1,752 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[SUM($1) WITHIN DISTINCT ($2)])\r\n LogicalProject(DEPTNO=[$2], SAL=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], $f1=[CAST($1):INTEGER NOT NULL], $f2=[$2])\r\n LogicalAggregate(group=[{0}], agg#0=[MIN($1) FILTER $3], agg#1=[$SUM0($2) FILTER $4])\r\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f3=[$3], $f6=[=($5, 1)], $f7=[AND(=($5, 0), $THROW_UNLESS(OR(<>($5, 0), =($3, $4)), 'more than one distinct value in agg UNIQUE_VALUE'))])\r\n LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {0}]], agg#0=[$SUM0($1)], agg#1=[MIN($1)], agg#2=[MAX($1)], agg#3=[GROUPING($0, $2)])\r\n LogicalProject(DEPTNO=[$2], SAL=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctCountDistinct.json b/tests/RelOptRulesTest/testWithinDistinctCountDistinct.json deleted file mode 100644 index b7bbf1f..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctCountDistinct.json +++ /dev/null @@ -1,915 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": true, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": ">", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "COUNT", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": ">", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 7, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "VARCHAR" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "1000", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], SS_C=[SUM($1) WITHIN DISTINCT ($2)], CDJ=[COUNT(DISTINCT $3)], CJ_J=[COUNT() WITHIN DISTINCT ($3)], CDJ_J=[COUNT(DISTINCT $3) WITHIN DISTINCT ($3)], CDJ_FILTERED=[COUNT(DISTINCT $3) FILTER $4])\r\n LogicalProject(DEPTNO=[$3], SAL=[$1], COMM=[$2], JOB=[$0], $f4=[>($1, 1000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], $f1=[$1], $f2=[$2], $f20=[$2], $f21=[$2], $f3=[$3])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[COUNT($2) FILTER $5])\r\n LogicalProject(DEPTNO=[$0], $f3=[$3], $f4=[$4], $f7=[=($6, 1)], $f8=[=($6, 2)], $f9=[AND(=($6, 2), >($5, 0))])\r\n LogicalAggregate(group=[{0, 2, 3}], groups=[[{0, 2}, {0, 3}]], agg#0=[MIN($1)], agg#1=[MIN($3) FILTER $4], agg#2=[COUNT() FILTER $4], agg#3=[GROUPING($0, $2, $3)])\r\n LogicalProject(DEPTNO=[$3], SAL=[$1], COMM=[$2], JOB=[$0], $f4=[>($1, 1000)])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctFilteredAggs.json b/tests/RelOptRulesTest/testWithinDistinctFilteredAggs.json deleted file mode 100644 index 8354590..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctFilteredAggs.json +++ /dev/null @@ -1,1596 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 10, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($1) FILTER $5])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[>($3, 10)], JOB=[$1], COMM=[$3], $f5=[LIKE($0, '%ok%')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\r\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[$SUM0($2) FILTER $5], agg#3=[COUNT() FILTER $6])\r\n LogicalProject(DEPTNO=[$0], $f3=[$3], $f6=[$6], $f10=[AND(=($9, 2), >($5, 0), $THROW_UNLESS(OR(<>($9, 2), AND(IS NULL($3), IS NULL($4)), IS TRUE(=($3, $4))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f11=[AND(=($9, 2), >($5, 0))], $f12=[AND(=($9, 1), >($8, 0), $THROW_UNLESS(OR(<>($9, 1), AND(IS NULL($6), IS NULL($7)), IS TRUE(=($6, $7))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f13=[AND(=($9, 1), >($8, 0))])\r\n LogicalAggregate(group=[{0, 1, 3}], groups=[[{0, 1}, {0, 3}]], agg#0=[MIN($1) FILTER $2], agg#1=[MAX($1) FILTER $2], agg#2=[COUNT() FILTER $2], agg#3=[MIN($4) FILTER $5], agg#4=[MAX($4) FILTER $5], agg#5=[COUNT() FILTER $5], agg#6=[GROUPING($0, $1, $3)])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[>($3, 10)], JOB=[$1], COMM=[$3], $f5=[LIKE($0, '%ok%')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctFilteredAggsSameFilter.json b/tests/RelOptRulesTest/testWithinDistinctFilteredAggsSameFilter.json deleted file mode 100644 index 2f100c4..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctFilteredAggsSameFilter.json +++ /dev/null @@ -1,1492 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "2", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "<>", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 8, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 9, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 8, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 8, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 4, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "column": 5, - "type": "VARCHAR" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($1) FILTER $2])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[LIKE($0, '%ok%')], JOB=[$1], COMM=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\r\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[$SUM0($2) FILTER $5], agg#3=[COUNT() FILTER $6])\r\n LogicalProject(DEPTNO=[$0], $f3=[$3], $f6=[$6], $f9=[AND(=($8, 2), >($5, 0), $THROW_UNLESS(OR(<>($8, 2), AND(IS NULL($3), IS NULL($4)), IS TRUE(=($3, $4))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f10=[AND(=($8, 2), >($5, 0))], $f11=[AND(=($8, 1), >($5, 0), $THROW_UNLESS(OR(<>($8, 1), AND(IS NULL($6), IS NULL($7)), IS TRUE(=($6, $7))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f12=[AND(=($8, 1), >($5, 0))])\r\n LogicalAggregate(group=[{0, 1, 3}], groups=[[{0, 1}, {0, 3}]], agg#0=[MIN($1) FILTER $2], agg#1=[MAX($1) FILTER $2], agg#2=[COUNT() FILTER $2], agg#3=[MIN($4) FILTER $2], agg#4=[MAX($4) FILTER $2], agg#5=[GROUPING($0, $1, $3)])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[LIKE($0, '%ok%')], JOB=[$1], COMM=[$3])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctFilteredAggsUniformDistinctKeys.json b/tests/RelOptRulesTest/testWithinDistinctFilteredAggsUniformDistinctKeys.json deleted file mode 100644 index 70422c4..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctFilteredAggsUniformDistinctKeys.json +++ /dev/null @@ -1,1316 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 7, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 7, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "AND", - "operand": [ - { - "operator": ">", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "OR", - "operand": [ - { - "operator": "AND", - "operand": [ - { - "operator": "IS NULL", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS NULL", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "IS TRUE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 7, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 8, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($3) FILTER $5])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[>($3, 10)], JOB=[$1], COMM=[$3], $f5=[LIKE($0, '%ok%')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\r\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[$SUM0($2) FILTER $5], agg#3=[COUNT() FILTER $6])\r\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f5=[$5], $f8=[AND(>($4, 0), $THROW_UNLESS(OR(AND(IS NULL($2), IS NULL($3)), IS TRUE(=($2, $3))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f9=[>($4, 0)], $f10=[AND(>($7, 0), $THROW_UNLESS(OR(AND(IS NULL($5), IS NULL($6)), IS TRUE(=($5, $6))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f11=[>($7, 0)])\r\n LogicalAggregate(group=[{0, 3}], agg#0=[MIN($1) FILTER $2], agg#1=[MAX($1) FILTER $2], agg#2=[COUNT() FILTER $2], agg#3=[MIN($4) FILTER $5], agg#4=[MAX($4) FILTER $5], agg#5=[COUNT() FILTER $5])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[>($3, 10)], JOB=[$1], COMM=[$3], $f5=[LIKE($0, '%ok%')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctFilteredAggsUniformDistinctKeysNoThrow.json b/tests/RelOptRulesTest/testWithinDistinctFilteredAggsUniformDistinctKeysNoThrow.json deleted file mode 100644 index e340b05..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctFilteredAggsUniformDistinctKeysNoThrow.json +++ /dev/null @@ -1,932 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "ENAME", - "JOB", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 2, - "type": "BIGINT" - }, - { - "operator": "CASE", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "NULL", - "operand": [], - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 4, - "type": "BIGINT" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 0, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 7, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 7, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": ">", - "operand": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "10", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "column": 4, - "type": "VARCHAR" - }, - { - "column": 6, - "type": "INTEGER" - }, - { - "operator": "LIKE", - "operand": [ - { - "column": 3, - "type": "VARCHAR" - }, - { - "operator": "_ISO-8859-1'%ok%'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($3) FILTER $5])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[>($3, 10)], JOB=[$1], COMM=[$3], $f5=[LIKE($0, '%ok%')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\r\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $3], agg#2=[$SUM0($2) FILTER $4], agg#3=[COUNT() FILTER $4])\r\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f4=[$4], $f6=[>($3, 0)], $f7=[>($5, 0)])\r\n LogicalAggregate(group=[{0, 3}], agg#0=[MIN($1) FILTER $2], agg#1=[COUNT() FILTER $2], agg#2=[MIN($4) FILTER $5], agg#3=[COUNT() FILTER $5])\r\n LogicalProject(DEPTNO=[$4], SAL=[$2], $f2=[>($3, 10)], JOB=[$1], COMM=[$3], $f5=[LIKE($0, '%ok%')])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctNoThrow.json b/tests/RelOptRulesTest/testWithinDistinctNoThrow.json deleted file mode 100644 index ec434ec..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctNoThrow.json +++ /dev/null @@ -1,624 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "1", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "BIGINT" - }, - { - "operator": "0", - "operand": [], - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "GROUPING", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[SUM($1) WITHIN DISTINCT ($2)])\r\n LogicalProject(DEPTNO=[$2], SAL=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], $f1=[CAST($1):INTEGER NOT NULL], $f2=[$2])\r\n LogicalAggregate(group=[{0}], agg#0=[MIN($1) FILTER $3], agg#1=[$SUM0($2) FILTER $4])\r\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f3=[$3], $f5=[=($4, 1)], $f6=[=($4, 0)])\r\n LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {0}]], agg#0=[$SUM0($1)], agg#1=[MIN($1)], agg#2=[GROUPING($0, $2)])\r\n LogicalProject(DEPTNO=[$2], SAL=[$1], JOB=[$0])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctUniformDistinctKeys.json b/tests/RelOptRulesTest/testWithinDistinctUniformDistinctKeys.json deleted file mode 100644 index ccf5466..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctUniformDistinctKeys.json +++ /dev/null @@ -1,724 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 5, - "type": "INTEGER" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "$THROW_UNLESS", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 6, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'", - "operand": [], - "type": "CHAR" - } - ], - "type": "BOOLEAN" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MAX", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($2)], EXPR$2=[AVG($3) WITHIN DISTINCT ($2)])\r\n LogicalProject(DEPTNO=[$3], SAL=[$1], JOB=[$0], COMM=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[$SUM0($2) FILTER $4], agg#2=[COUNT()])\r\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f4=[$4], $f6=[$THROW_UNLESS(=($2, $3), 'more than one distinct value in agg UNIQUE_VALUE')], $f7=[$THROW_UNLESS(=($4, $5), 'more than one distinct value in agg UNIQUE_VALUE')])\r\n LogicalAggregate(group=[{0, 2}], agg#0=[MIN($1)], agg#1=[MAX($1)], agg#2=[MIN($3)], agg#3=[MAX($3)])\r\n LogicalProject(DEPTNO=[$3], SAL=[$1], JOB=[$0], COMM=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/RelOptRulesTest/testWithinDistinctUniformDistinctKeysNoThrow.json b/tests/RelOptRulesTest/testWithinDistinctUniformDistinctKeysNoThrow.json deleted file mode 100644 index 8595228..0000000 --- a/tests/RelOptRulesTest/testWithinDistinctUniformDistinctKeysNoThrow.json +++ /dev/null @@ -1,540 +0,0 @@ -{ - "schemas": [ - { - "name": "EMP", - "fields": [ - "JOB", - "SAL", - "COMM", - "DEPTNO" - ], - "types": [ - "VARCHAR", - "INTEGER", - "INTEGER", - "INTEGER" - ], - "nullable": [ - false, - false, - false, - false - ], - "key": [], - "guaranteed": [] - } - ], - "queries": [ - { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "SUM", - "operand": [ - { - "column": 2, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "AVG", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - }, - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "operator": "CAST", - "operand": [ - { - "operator": "/", - "operand": [ - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 3, - "type": "BIGINT" - } - ], - "type": "BIGINT" - } - ], - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - } - ], - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 0, - "type": "VARCHAR" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 5, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 5, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - }, - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 4, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "$SUM0", - "operand": [ - { - "column": 3, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "$SUM0", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "COUNT", - "operand": [], - "distinct": false, - "ignoreNulls": false, - "type": "BIGINT" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 0, - "type": "INTEGER" - }, - { - "column": 1, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "distinct": { - "correlate": [ - { - "project": { - "target": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - } - ], - "source": { - "project": { - "target": [ - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 2, - "type": "INTEGER" - }, - { - "column": 1, - "type": "VARCHAR" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - }, - { - "aggregate": { - "function": [ - { - "operator": "MIN", - "operand": [ - { - "column": 4, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - }, - { - "operator": "MIN", - "operand": [ - { - "column": 6, - "type": "INTEGER" - } - ], - "distinct": false, - "ignoreNulls": false, - "type": "INTEGER" - } - ], - "source": { - "filter": { - "condition": { - "operator": "AND", - "operand": [ - { - "operator": "=", - "operand": [ - { - "column": 1, - "type": "INTEGER" - }, - { - "column": 3, - "type": "INTEGER" - } - ], - "type": "BOOLEAN" - }, - { - "operator": "=", - "operand": [ - { - "column": 2, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "VARCHAR" - } - ], - "type": "BOOLEAN" - } - ], - "type": "BOOLEAN" - }, - "source": { - "project": { - "target": [ - { - "column": 6, - "type": "INTEGER" - }, - { - "column": 4, - "type": "INTEGER" - }, - { - "column": 3, - "type": "VARCHAR" - }, - { - "column": 5, - "type": "INTEGER" - } - ], - "source": { - "scan": 0 - } - } - } - } - } - } - } - ] - } - } - } - } - } - } - ] - } - } - } - } - ], - "help": [ - "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($2)], EXPR$2=[AVG($3) WITHIN DISTINCT ($2)])\r\n LogicalProject(DEPTNO=[$3], SAL=[$1], JOB=[$0], COMM=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n", - "LogicalProject(DEPTNO=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL])\r\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($3)], agg#2=[COUNT()])\r\n LogicalAggregate(group=[{0, 2}], agg#0=[MIN($1)], agg#1=[MIN($3)])\r\n LogicalProject(DEPTNO=[$3], SAL=[$1], JOB=[$0], COMM=[$2])\r\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\r\n" - ] -} diff --git a/tests/calcite/testAddRedundantSemiJoinRule.json b/tests/calcite/testAddRedundantSemiJoinRule.json new file mode 100644 index 0000000..420927f --- /dev/null +++ b/tests/calcite/testAddRedundantSemiJoinRule.json @@ -0,0 +1,98 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($7, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateCaseToFilter.json b/tests/calcite/testAggregateCaseToFilter.json new file mode 100644 index 0000000..7bdea61 --- /dev/null +++ b/tests/calcite/testAggregateCaseToFilter.json @@ -0,0 +1,607 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)], COUNT_DISTINCT_CLERK=[COUNT(DISTINCT $1)], SUM_SAL_D10=[SUM($2)], SUM_SAL_D20=[SUM($3)], COUNT_D30=[SUM($4)], COUNT_D40=[COUNT($5)], COUNT_D45=[SUM($6)], COUNT_D50=[SUM($7)], SUM_NULL_D60=[SUM($8)], SUM_NULL_D70=[SUM($9)], COUNT_D20=[COUNT($10)])\n LogicalProject(SAL=[$5], $f1=[CASE(=($2, 'CLERK'), $7, null:INTEGER)], $f2=[CASE(=($7, 10), $5, null:INTEGER)], $f3=[CASE(=($7, 20), $5, 0)], $f4=[CASE(=($7, 30), 1, 0)], $f5=[CASE(=($7, 40), 'x', null:CHAR(1))], $f6=[CASE(=($7, 45), 1, null:INTEGER)], $f7=[CASE(=($7, 50), 1, null:INTEGER)], $f8=[null:DECIMAL(19, 9)], $f9=[CASE(=($7, 70), null:INTEGER, 1)], $f10=[CASE(=($7, 20), 1, null:INTEGER)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SUM_SAL=[$0], COUNT_DISTINCT_CLERK=[$1], SUM_SAL_D10=[$2], SUM_SAL_D20=[$3], COUNT_D30=[CAST($4):INTEGER], COUNT_D40=[$5], COUNT_D45=[$6], COUNT_D50=[$7], SUM_NULL_D60=[$8], SUM_NULL_D70=[$9], COUNT_D20=[$10])\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)], COUNT_DISTINCT_CLERK=[COUNT(DISTINCT $2) FILTER $3], SUM_SAL_D10=[SUM($4) FILTER $5], SUM_SAL_D20=[SUM($6) FILTER $7], COUNT_D30=[COUNT() FILTER $8], COUNT_D40=[COUNT() FILTER $9], COUNT_D45=[SUM($10) FILTER $11], COUNT_D50=[SUM($12) FILTER $13], SUM_NULL_D60=[SUM($1)], SUM_NULL_D70=[SUM($14) FILTER $15], COUNT_D20=[COUNT() FILTER $16])\n LogicalProject(SAL=[$5], $f8=[null:DECIMAL(19, 9)], DEPTNO=[$7], $f12=[=($2, 'CLERK')], SAL0=[$5], $f14=[=($7, 10)], SAL1=[$5], $f16=[=($7, 20)], $f17=[=($7, 30)], $f18=[=($7, 40)], $f19=[1], $f20=[=($7, 45)], $f21=[1], $f22=[=($7, 50)], $f23=[1], $f24=[<>($7, 70)], $f25=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 5, + "type" : "CHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "DECIMAL", + "operand" : [ { + "column" : 8, + "type" : "DECIMAL" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'CLERK'" + } ], + "operator" : "=" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "CASE" + }, { + "type" : "CHAR", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "40" + } ], + "operator" : "=" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'x'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "45" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "70" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "DECIMAL", + "operand" : [ { + "column" : 1, + "type" : "DECIMAL" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 14, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'CLERK'" + } ], + "operator" : "=" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "40" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "45" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "70" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "CAST" + }, { + "column" : 5, + "type" : "BIGINT" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "DECIMAL" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateConstantKeyRule.json b/tests/calcite/testAggregateConstantKeyRule.json new file mode 100644 index 0000000..4531632 --- /dev/null +++ b/tests/calcite/testAggregateConstantKeyRule.json @@ -0,0 +1,131 @@ +{ + "help" : [ "LogicalProject(C=[$2])\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(C=[$2])\n LogicalProject(DEPTNO=[10], SAL=[$0], C=[$1])\n LogicalAggregate(group=[{0}], C=[COUNT()])\n LogicalProject(SAL=[$5])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 2, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateConstantKeyRule3.json b/tests/calcite/testAggregateConstantKeyRule3.json new file mode 100644 index 0000000..f354645 --- /dev/null +++ b/tests/calcite/testAggregateConstantKeyRule3.json @@ -0,0 +1,185 @@ +{ + "help" : [ "LogicalProject(JOB=[$1])\n LogicalFilter(condition=[>($2, 3)])\n LogicalAggregate(group=[{0, 1}], agg#0=[COUNT()])\n LogicalProject(MGR=[$3], JOB=[$2])\n LogicalFilter(condition=[AND(IS NULL($3), =($2, 'Clerk'))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(JOB=[$1])\n LogicalFilter(condition=[>($2, 3)])\n LogicalProject(MGR=[$0], JOB=['Clerk':VARCHAR(10)], $f2=[$1])\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\n LogicalProject(MGR=[$3])\n LogicalFilter(condition=[AND(IS NULL($3), =($2, 'Clerk'))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : ">" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Clerk'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Clerk'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Clerk'" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateDynamicFunction.json b/tests/calcite/testAggregateDynamicFunction.json new file mode 100644 index 0000000..ac297d5 --- /dev/null +++ b/tests/calcite/testAggregateDynamicFunction.json @@ -0,0 +1,185 @@ +{ + "help" : [ "LogicalProject(HIREDATE=[$1])\n LogicalFilter(condition=[>($2, 3)])\n LogicalAggregate(group=[{0, 1}], agg#0=[COUNT()])\n LogicalProject(MGR=[$3], HIREDATE=[$4])\n LogicalFilter(condition=[AND(IS NULL($3), =($4, CURRENT_TIMESTAMP))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(HIREDATE=[$1])\n LogicalFilter(condition=[>($2, 3)])\n LogicalProject(MGR=[$0], HIREDATE=[CURRENT_TIMESTAMP], $f2=[$1])\n LogicalAggregate(group=[{0}], agg#0=[COUNT()])\n LogicalProject(MGR=[$3])\n LogicalFilter(condition=[AND(IS NULL($3), =($4, CURRENT_TIMESTAMP))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : ">" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "TIMESTAMP" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "type" : "TIMESTAMP", + "operand" : [ ], + "operator" : "CURRENT_TIMESTAMP" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "TIMESTAMP" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "type" : "TIMESTAMP", + "operand" : [ ], + "operator" : "CURRENT_TIMESTAMP" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "TIMESTAMP", + "operand" : [ ], + "operator" : "CURRENT_TIMESTAMP" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "TIMESTAMP" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateExtractProjectRule.json b/tests/calcite/testAggregateExtractProjectRule.json new file mode 100644 index 0000000..b49861a --- /dev/null +++ b/tests/calcite/testAggregateExtractProjectRule.json @@ -0,0 +1,54 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\n LogicalProject(SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateExtractProjectRuleWithGroupingSets.json b/tests/calcite/testAggregateExtractProjectRuleWithGroupingSets.json new file mode 100644 index 0000000..7339c16 --- /dev/null +++ b/tests/calcite/testAggregateExtractProjectRuleWithGroupingSets.json @@ -0,0 +1,72 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 7}], groups=[[{0, 7}, {0}, {7}]], EXPR$2=[SUM($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {0}, {2}]], EXPR$2=[SUM($1)])\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateExtractProjectRuleWithGroupingSets2.json b/tests/calcite/testAggregateExtractProjectRuleWithGroupingSets2.json new file mode 100644 index 0000000..c416e3c --- /dev/null +++ b/tests/calcite/testAggregateExtractProjectRuleWithGroupingSets2.json @@ -0,0 +1,69 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 7}], groups=[[{0, 7}, {0}, {7}]], EXPR$2=[SUM($0)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {1}]], EXPR$2=[SUM($0)])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateGroupingSetsProjectMerge.json b/tests/calcite/testAggregateGroupingSetsProjectMerge.json new file mode 100644 index 0000000..db5945c --- /dev/null +++ b/tests/calcite/testAggregateGroupingSetsProjectMerge.json @@ -0,0 +1,114 @@ +{ + "help" : [ "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$1=[SUM($2)])\n LogicalProject(X=[$7], Y=[$0], Z=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\n LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 7}], groups=[[{0, 7}, {7}, {}]], EXPR$1=[SUM($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove1.json b/tests/calcite/testAggregateJoinRemove1.json new file mode 100644 index 0000000..e01d512 --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove1.json @@ -0,0 +1,68 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove10.json b/tests/calcite/testAggregateJoinRemove10.json new file mode 100644 index 0000000..c4d3b0b --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove10.json @@ -0,0 +1,155 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1, $2)])\n LogicalProject(DEPTNO=[$7], NAME=[$10], NAME0=[$12])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7}], EXPR$1=[COUNT(DISTINCT $10, $12)])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove11.json b/tests/calcite/testAggregateJoinRemove11.json new file mode 100644 index 0000000..658f71a --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove11.json @@ -0,0 +1,89 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7}], EXPR$1=[COUNT(DISTINCT $8)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 8, + "type" : "BOOLEAN" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove2.json b/tests/calcite/testAggregateJoinRemove2.json new file mode 100644 index 0000000..e909886 --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove2.json @@ -0,0 +1,89 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7}], EXPR$1=[COUNT(DISTINCT $2)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove3.json b/tests/calcite/testAggregateJoinRemove3.json new file mode 100644 index 0000000..c32deee --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove3.json @@ -0,0 +1,108 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7}], EXPR$1=[COUNT(DISTINCT $10)])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove4.json b/tests/calcite/testAggregateJoinRemove4.json new file mode 100644 index 0000000..7654fe4 --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove4.json @@ -0,0 +1,67 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$9])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove5.json b/tests/calcite/testAggregateJoinRemove5.json new file mode 100644 index 0000000..1d953ca --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove5.json @@ -0,0 +1,89 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 1 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove6.json b/tests/calcite/testAggregateJoinRemove6.json new file mode 100644 index 0000000..2c35c97 --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove6.json @@ -0,0 +1,108 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$9], JOB=[$2])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{9}], EXPR$1=[COUNT(DISTINCT $2)])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove7.json b/tests/calcite/testAggregateJoinRemove7.json new file mode 100644 index 0000000..239dcce --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove7.json @@ -0,0 +1,106 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7}])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove8.json b/tests/calcite/testAggregateJoinRemove8.json new file mode 100644 index 0000000..7751390 --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove8.json @@ -0,0 +1,127 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], NAME0=[$12])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7}], EXPR$1=[COUNT(DISTINCT $10)])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateJoinRemove9.json b/tests/calcite/testAggregateJoinRemove9.json new file mode 100644 index 0000000..f76efc8 --- /dev/null +++ b/tests/calcite/testAggregateJoinRemove9.json @@ -0,0 +1,115 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], NAME=[$12])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{7, 10}])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateMerge1.json b/tests/calcite/testAggregateMerge1.json new file mode 100644 index 0000000..4ba7971 --- /dev/null +++ b/tests/calcite/testAggregateMerge1.json @@ -0,0 +1,175 @@ +{ + "help" : [ "LogicalAggregate(group=[{1}], EXPR$1=[MIN($4)], Z=[MAX($3)], EXPR$3=[SUM($6)], N=[SUM($5)], SAL=[SUM($2)])\n LogicalAggregate(group=[{1, 7}], X=[SUM($5)], Z=[MAX($5)], Y=[MIN($5)], M=[COUNT()], R=[COUNT($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{7}], EXPR$1=[MIN($5)], Z=[MAX($5)], EXPR$3=[COUNT($3)], N=[COUNT()], SAL=[SUM($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateMerge2.json b/tests/calcite/testAggregateMerge2.json new file mode 100644 index 0000000..6b02575 --- /dev/null +++ b/tests/calcite/testAggregateMerge2.json @@ -0,0 +1,143 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$2=[$2], EXPR$3=[$3])\n LogicalAggregate(group=[{0, 2}], groups=[[{0}, {2}]], EXPR$2=[SUM($3)], EXPR$3=[SUM($4)])\n LogicalAggregate(group=[{0, 1, 7}], X=[SUM($5)], Y=[COUNT($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$2=[$2], EXPR$3=[$3])\n LogicalAggregate(group=[{0, 7}], groups=[[{0}, {7}]], EXPR$2=[SUM($5)], EXPR$3=[COUNT($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateMerge8.json b/tests/calcite/testAggregateMerge8.json new file mode 100644 index 0000000..838e22a --- /dev/null +++ b/tests/calcite/testAggregateMerge8.json @@ -0,0 +1,88 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], X=[SUM($0)], Z=[MIN($1)])\n LogicalAggregate(group=[{}], X=[SUM($5)], Y=[MIN($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], X=[SUM($5)], Z=[MIN($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateMergeSum0.json b/tests/calcite/testAggregateMergeSum0.json new file mode 100644 index 0000000..f784ec0 --- /dev/null +++ b/tests/calcite/testAggregateMergeSum0.json @@ -0,0 +1,61 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], agg#0=[$SUM0($2)])\n LogicalAggregate(group=[{3, 7}], COUNT_COMM=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], agg#0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateProjectMerge.json b/tests/calcite/testAggregateProjectMerge.json new file mode 100644 index 0000000..42f8ac5 --- /dev/null +++ b/tests/calcite/testAggregateProjectMerge.json @@ -0,0 +1,114 @@ +{ + "help" : [ "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM($2)])\n LogicalProject(X=[$7], Y=[$0], Z=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(X=[$0], EXPR$1=[$2], Y=[$1])\n LogicalProject(DEPTNO=[$1], EMPNO=[$0], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 7}], EXPR$1=[SUM($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateProjectPullUpConstants.json b/tests/calcite/testAggregateProjectPullUpConstants.json new file mode 100644 index 0000000..8446698 --- /dev/null +++ b/tests/calcite/testAggregateProjectPullUpConstants.json @@ -0,0 +1,136 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1, 2}], S=[SUM($2)])\n LogicalProject(JOB=[$2], EMPNO=[$0], SAL=[$5])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(JOB=[$0], EMPNO=[10], SAL=[$1], S=[$2])\n LogicalAggregate(group=[{0, 1}], S=[SUM($1)])\n LogicalProject(JOB=[$2], SAL=[$5])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateProjectPullUpConstants2.json b/tests/calcite/testAggregateProjectPullUpConstants2.json new file mode 100644 index 0000000..be40420 --- /dev/null +++ b/tests/calcite/testAggregateProjectPullUpConstants2.json @@ -0,0 +1,81 @@ +{ + "help" : [ "LogicalAggregate(group=[{1, 5}])\n LogicalFilter(condition=[=($1, 'John')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(ENAME=['John':VARCHAR(20)], SAL=[$0])\n LogicalAggregate(group=[{5}])\n LogicalFilter(condition=[=($1, 'John')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'John'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'John'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'John'" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateRemove1.json b/tests/calcite/testAggregateRemove1.json new file mode 100644 index 0000000..ca65b24 --- /dev/null +++ b/tests/calcite/testAggregateRemove1.json @@ -0,0 +1,165 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], EXPR$1=[$2], EXPR$2=[$3], EXPR$3=[$4], EXPR$4=[$5], EXPR$5=[$6], EXPR$6=[$7], EXPR$7=[$8])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM($2)], EXPR$2=[MIN($2)], EXPR$3=[MAX($2)], EXPR$4=[BIT_AND($2)], EXPR$5=[BIT_OR($2)], EXPR$6=[COUNT(DISTINCT $2)], EXPR$7=[GROUPING($1)])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], EXPR$1=[$5], EXPR$2=[$5], EXPR$3=[$5], EXPR$4=[$5], EXPR$5=[$5], EXPR$6=[1:BIGINT], EXPR$7=[0:BIGINT])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "BIT_AND", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "BIT_OR", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "BIGINT" + }, { + "column" : 8, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "0" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateRemove2.json b/tests/calcite/testAggregateRemove2.json new file mode 100644 index 0000000..0d05918 --- /dev/null +++ b/tests/calcite/testAggregateRemove2.json @@ -0,0 +1,50 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateRemove3.json b/tests/calcite/testAggregateRemove3.json new file mode 100644 index 0000000..e05d79f --- /dev/null +++ b/tests/calcite/testAggregateRemove3.json @@ -0,0 +1,89 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT($2)])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], EXPR$1=[CASE(IS NOT NULL($3), 1:BIGINT, 0:BIGINT)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "CASE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateRemove7.json b/tests/calcite/testAggregateRemove7.json new file mode 100644 index 0000000..977afec --- /dev/null +++ b/tests/calcite/testAggregateRemove7.json @@ -0,0 +1,158 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(MGR=[$0], SUM_SAL=[$2])\n LogicalFilter(condition=[=($1, 100)])\n LogicalAggregate(group=[{0, 1}], SUM_SAL=[SUM($2)])\n LogicalProject(MGR=[$3], DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(MGR=[$0], SUM_SAL=[$2])\n LogicalFilter(condition=[=($1, 100)])\n LogicalAggregate(group=[{0, 1}], SUM_SAL=[SUM($2)])\n LogicalProject(MGR=[$3], DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateUnionTransposeWithOneInputUnique.json b/tests/calcite/testAggregateUnionTransposeWithOneInputUnique.json new file mode 100644 index 0000000..107dc77 --- /dev/null +++ b/tests/calcite/testAggregateUnionTransposeWithOneInputUnique.json @@ -0,0 +1,168 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7], T=[1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], T=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(DEPTNO=[$7], T=[1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], T=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + } + } + } ] + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + } + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAggregateUnionTransposeWithTopLevelGroupSetRemapping.json b/tests/calcite/testAggregateUnionTransposeWithTopLevelGroupSetRemapping.json new file mode 100644 index 0000000..b0b503b --- /dev/null +++ b/tests/calcite/testAggregateUnionTransposeWithTopLevelGroupSetRemapping.json @@ -0,0 +1,246 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], T2=[$0])\n LogicalAggregate(group=[{1}], EXPR$0=[COUNT($0)])\n LogicalUnion(all=[true])\n LogicalProject(T1=[CASE(=($7, 0), 1, null:INTEGER)], T2=[1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(T1=[CASE(=($7, 0), 1, null:INTEGER)], T2=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1], T2=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[$SUM0($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{1}], EXPR$0=[COUNT($0)])\n LogicalProject(T1=[CASE(=($7, 0), 1, null:INTEGER)], T2=[1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], EXPR$0=[COUNT($0)])\n LogicalProject(T1=[CASE(=($7, 0), 1, null:INTEGER)], T2=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + } ] + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + } + } + } ] + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAll.json b/tests/calcite/testAll.json new file mode 100644 index 0000000..33f05aa --- /dev/null +++ b/tests/calcite/testAll.json @@ -0,0 +1,340 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[NOT(<= SOME($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n}))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[NOT(CAST(OR(AND(IS TRUE(<=($0, $9)), <>($10, 0)), AND(>($10, $11), null, <>($10, 0), IS NOT TRUE(<=($0, $9))), AND(<=($0, $9), <>($10, 0), IS NOT TRUE(<=($0, $9)), <=($10, $11)))):BOOLEAN NOT NULL)])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(m=[$0], c=[$1], d=[$1])\n LogicalAggregate(group=[{}], m=[MAX($0)], c=[COUNT()])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "<= SOME" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "<=" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "<=" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "<=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "<=" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : "<=" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ], + "operator" : "CAST" + } ], + "operator" : "NOT" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAlreadyFalseEliminatesFilter.json b/tests/calcite/testAlreadyFalseEliminatesFilter.json new file mode 100644 index 0000000..7f4afc3 --- /dev/null +++ b/tests/calcite/testAlreadyFalseEliminatesFilter.json @@ -0,0 +1,54 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalFilter(condition=[false])\n LogicalValues(tuples=[[{ 1, 2 }]])\n", "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAntiCorrelateWithLeftEmpty.json b/tests/calcite/testAntiCorrelateWithLeftEmpty.json new file mode 100644 index 0000000..25a723b --- /dev/null +++ b/tests/calcite/testAntiCorrelateWithLeftEmpty.json @@ -0,0 +1,45 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[anti], requiredColumns=[{7}])\n LogicalValues(tuples=[[]])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "ANTI", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAntiCorrelateWithRightEmpty.json b/tests/calcite/testAntiCorrelateWithRightEmpty.json new file mode 100644 index 0000000..3ec263b --- /dev/null +++ b/tests/calcite/testAntiCorrelateWithRightEmpty.json @@ -0,0 +1,27 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[anti], requiredColumns=[{7}])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalValues(tuples=[[]])\n", "LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "ANTI", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, { + "scan" : 0 + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAntiJoinProjectTranspose.json b/tests/calcite/testAntiJoinProjectTranspose.json new file mode 100644 index 0000000..e1bceeb --- /dev/null +++ b/tests/calcite/testAntiJoinProjectTranspose.json @@ -0,0 +1,139 @@ +{ + "help" : [ "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[=($0, $3)], joinType=[anti])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject($f0=[*(2, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[anti])\n LogicalProject(DEPTNO=[$0], DNAME=[$1])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalProject($f0=[$0])\n LogicalAggregate(group=[{0}])\n LogicalProject($f0=[*(2, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "ANTI", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 0, + "type" : "TINYINT" + } ], + "operator" : "*" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "ANTI", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 0, + "type" : "TINYINT" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAnyInProjectNonNullable.json b/tests/calcite/testAnyInProjectNonNullable.json new file mode 100644 index 0000000..167e9cf --- /dev/null +++ b/tests/calcite/testAnyInProjectNonNullable.json @@ -0,0 +1,242 @@ +{ + "help" : [ "LogicalProject(NAME=[$1], EXPR$1=[> SOME($0, {\nLogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$1], EXPR$1=[CAST(OR(AND(IS TRUE(>($0, $2)), <>($3, 0)), AND(>($3, $4), null, <>($3, 0), IS NOT TRUE(>($0, $2))), AND(>($0, $2), <>($3, 0), IS NOT TRUE(>($0, $2)), <=($3, $4)))):BOOLEAN NOT NULL])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(m=[$0], c=[$1], d=[$1])\n LogicalAggregate(group=[{}], m=[MIN($0)], c=[COUNT()])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "> SOME" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "<=" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testAnyInProjectNullable.json b/tests/calcite/testAnyInProjectNullable.json new file mode 100644 index 0000000..921b646 --- /dev/null +++ b/tests/calcite/testAnyInProjectNullable.json @@ -0,0 +1,203 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], EXPR$1=[IN($1, {\nLogicalProject(MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[OR(AND(IS NOT NULL($5), <>($2, 0)), AND(<($3, $2), null, <>($2, 0), IS NULL($5)))])\n LogicalJoin(condition=[=($1, $4)], joinType=[left])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], i=[LITERAL_AGG(true)])\n LogicalProject(MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "LITERAL_AGG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testBitAndReuseDistinctAttrWithMixedOptionality.json b/tests/calcite/testBitAndReuseDistinctAttrWithMixedOptionality.json new file mode 100644 index 0000000..c203456 --- /dev/null +++ b/tests/calcite/testBitAndReuseDistinctAttrWithMixedOptionality.json @@ -0,0 +1,107 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[BIT_AND($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT($0)], EXPR$2=[BIT_AND($0)])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "BIT_AND", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "BIT_AND", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testBitOrReuseDistinctAttrWithMixedOptionality.json b/tests/calcite/testBitOrReuseDistinctAttrWithMixedOptionality.json new file mode 100644 index 0000000..0e22a68 --- /dev/null +++ b/tests/calcite/testBitOrReuseDistinctAttrWithMixedOptionality.json @@ -0,0 +1,107 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[BIT_OR($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT($0)], EXPR$2=[BIT_OR($0)])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "BIT_OR", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "BIT_OR", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testCasePushIsAlwaysWorking.json b/tests/calcite/testCasePushIsAlwaysWorking.json new file mode 100644 index 0000000..a4816f9 --- /dev/null +++ b/tests/calcite/testCasePushIsAlwaysWorking.json @@ -0,0 +1,112 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[=(CASE(>($5, 1000), $0, $5), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(AND(>($5, 1000), =($0, 1)), =($5, 1))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testCastInAggregateExpandDistinctAggregatesRule.json b/tests/calcite/testCastInAggregateExpandDistinctAggregatesRule.json new file mode 100644 index 0000000..fc3d7dd --- /dev/null +++ b/tests/calcite/testCastInAggregateExpandDistinctAggregatesRule.json @@ -0,0 +1,228 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM(DISTINCT $1)], EXPR$2=[SUM(DISTINCT $2)])\n LogicalAggregate(group=[{0}], CN=[COUNT()], SM=[SUM($1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0], EXPR$1=[CAST($1):BIGINT NOT NULL], EXPR$2=[CAST($2):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) FILTER $3], EXPR$2=[SUM($2) FILTER $4])\n LogicalProject(NAME=[$0], CN=[$1], SM=[$2], $g_1=[=($3, 1)], $g_2=[=($3, 2)])\n LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1}, {0, 2}]], $g=[GROUPING($0, $1, $2)])\n LogicalAggregate(group=[{0}], CN=[COUNT()], SM=[SUM($1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testCastInAggregateReduceFunctions.json b/tests/calcite/testCastInAggregateReduceFunctions.json new file mode 100644 index 0000000..31a4a0d --- /dev/null +++ b/tests/calcite/testCastInAggregateReduceFunctions.json @@ -0,0 +1,378 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[STDDEV_SAMP($1)], EXPR$4=[VAR_POP($1)], EXPR$5=[VAR_SAMP($1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$4=[CAST(/(-($1, /(*($2, $2), $3)), $3)):INTEGER NOT NULL], EXPR$5=[CAST(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1)))):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($1)], agg#2=[COUNT()])\n LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_SAMP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "VAR_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "VAR_SAMP", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "DOUBLE", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "0.5" + } ], + "operator" : "POWER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "DOUBLE", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "-" + } ], + "operator" : "CASE" + } ], + "operator" : "/" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "0.5" + } ], + "operator" : "POWER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "-" + } ], + "operator" : "CASE" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testCorrelateWithoutCorrelationToEmpty.json b/tests/calcite/testCorrelateWithoutCorrelationToEmpty.json new file mode 100644 index 0000000..4ceeeb0 --- /dev/null +++ b/tests/calcite/testCorrelateWithoutCorrelationToEmpty.json @@ -0,0 +1,132 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{0}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}])\n LogicalProject(i=[true])\n LogicalFilter(condition=[=($cor0.EMPNO, null)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "project" : { + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testCustomColumnResolvingInCorrelatedSubQuery.json b/tests/calcite/testCustomColumnResolvingInCorrelatedSubQuery.json new file mode 100644 index 0000000..dfecb12 --- /dev/null +++ b/tests/calcite/testCustomColumnResolvingInCorrelatedSubQuery.json @@ -0,0 +1,230 @@ +{ + "help" : [ "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalFilter(condition=[=($4, $SCALAR_QUERY({\nLogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n LogicalProject(\"F1\".\"C0\"=[$5])\n LogicalFilter(condition=[=($cor0.\"K0\", $0)])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n}))], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n", "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalFilter(condition=[=($4, $9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{0}])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n LogicalProject(\"F1\".\"C0\"=[$5])\n LogicalFilter(condition=[=($cor0.\"K0\", $0)])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "BOOLEAN", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false, false, true, false, false, false ], + "name" : "CATALOG.STRUCT.T", + "guaranteed" : [ ], + "fields" : [ "\"K0\"", "\"C1\"", "\"F1\".\"A0\"", "\"F2\".\"A0\"", "\"F0\".\"C0\"", "\"F1\".\"C0\"", "\"F0\".\"C1\"", "\"F1\".\"C2\"", "\"F2\".\"C3\"" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "query" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 14, + "type" : "INTEGER" + } ] + } + } + } + }, + "type" : "INTEGER", + "operand" : [ ], + "operator" : "$SCALAR_QUERY" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 14, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testCustomColumnResolvingInCorrelatedSubQuery2.json b/tests/calcite/testCustomColumnResolvingInCorrelatedSubQuery2.json new file mode 100644 index 0000000..b12b5e7 --- /dev/null +++ b/tests/calcite/testCustomColumnResolvingInCorrelatedSubQuery2.json @@ -0,0 +1,205 @@ +{ + "help" : [ "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalFilter(condition=[IN($4, {\nLogicalProject(C0=[$5])\n LogicalFilter(condition=[=($cor0.\"F1\".\"C2\", $7)])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n})], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n", "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalFilter(condition=[=($4, $9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n LogicalAggregate(group=[{0}])\n LogicalProject(C0=[$5])\n LogicalFilter(condition=[=($cor0.\"F1\".\"C2\", $7)])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "BOOLEAN", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false, false, true, false, false, false ], + "name" : "CATALOG.STRUCT.T", + "guaranteed" : [ ], + "fields" : [ "\"K0\"", "\"C1\"", "\"F1\".\"A0\"", "\"F2\".\"A0\"", "\"F0\".\"C0\"", "\"F1\".\"C0\"", "\"F0\".\"C1\"", "\"F1\".\"C2\"", "\"F2\".\"C3\"" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 14, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 14, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testCustomColumnResolvingInNonCorrelatedSubQuery.json b/tests/calcite/testCustomColumnResolvingInNonCorrelatedSubQuery.json new file mode 100644 index 0000000..9882e3f --- /dev/null +++ b/tests/calcite/testCustomColumnResolvingInNonCorrelatedSubQuery.json @@ -0,0 +1,171 @@ +{ + "help" : [ "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalFilter(condition=[IN($4, {\nLogicalProject(C0=[$5])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n})])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n", "LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalProject(\"K0\"=[$0], \"C1\"=[$1], \"F1\".\"A0\"=[$2], \"F2\".\"A0\"=[$3], \"F0\".\"C0\"=[$4], \"F1\".\"C0\"=[$5], \"F0\".\"C1\"=[$6], \"F1\".\"C2\"=[$7], \"F2\".\"C3\"=[$8])\n LogicalJoin(condition=[=($4, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n LogicalAggregate(group=[{0}])\n LogicalProject(C0=[$5])\n LogicalTableScan(table=[[CATALOG, STRUCT, T]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "BOOLEAN", "INTEGER", "INTEGER", "INTEGER", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false, false, true, false, false, false ], + "name" : "CATALOG.STRUCT.T", + "guaranteed" : [ ], + "fields" : [ "\"K0\"", "\"C1\"", "\"F1\".\"A0\"", "\"F2\".\"A0\"", "\"F0\".\"C0\"", "\"F1\".\"C0\"", "\"F0\".\"C1\"", "\"F1\".\"C2\"", "\"F2\".\"C3\"" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 14, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDecorrelateAggWithConstantGroupKey.json b/tests/calcite/testDecorrelateAggWithConstantGroupKey.json new file mode 100644 index 0000000..b8edf1e --- /dev/null +++ b/tests/calcite/testDecorrelateAggWithConstantGroupKey.json @@ -0,0 +1,264 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{3, 5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[=($cor0.SAL, $0)])\n LogicalAggregate(group=[{0}])\n LogicalProject(EXPR$0=[$2])\n LogicalAggregate(group=[{0, 1}], EXPR$0=[MAX($2)])\n LogicalProject(DEPTNO=[$2], $f1=['abc'], SAL=[$1])\n LogicalFilter(condition=[=($cor0.MGR, $0)])\n LogicalProject(EMPNO=[$0], SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[AND(=($3, $10), =($5, $9))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EXPR$0=[$2], EMPNO=[$1])\n LogicalAggregate(group=[{0, 1}], EXPR$0=[MAX($2)])\n LogicalProject(DEPTNO=[$7], EMPNO=[$0], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "CHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 11, + "type" : "INTEGER" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'abc'" + }, { + "column" : 10, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 11, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDecorrelateExists.json b/tests/calcite/testDecorrelateExists.json new file mode 100644 index 0000000..4f96905 --- /dev/null +++ b/tests/calcite/testDecorrelateExists.json @@ -0,0 +1,155 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[EXISTS({\nLogicalFilter(condition=[=($cor0.DEPTNO, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], $f1=[true])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDecorrelateTwoExists.json b/tests/calcite/testDecorrelateTwoExists.json new file mode 100644 index 0000000..716673c --- /dev/null +++ b/tests/calcite/testDecorrelateTwoExists.json @@ -0,0 +1,276 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(EXISTS({\nLogicalFilter(condition=[=($cor0.DEPTNO, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), NOT(EXISTS({\nLogicalFilter(condition=[AND(=($2, $cor0.JOB), =($5, 34))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})))], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NULL($12)])\n LogicalJoin(condition=[=($2, $11)], joinType=[left])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], $f1=[true])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(JOB=[$0], $f1=[true])\n LogicalAggregate(group=[{0}])\n LogicalProject(JOB=[$2])\n LogicalFilter(condition=[=($5, 34)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 14, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "34" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + } ], + "operator" : "NOT" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "34" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDecorrelateTwoIn.json b/tests/calcite/testDecorrelateTwoIn.json new file mode 100644 index 0000000..799b23b --- /dev/null +++ b/tests/calcite/testDecorrelateTwoIn.json @@ -0,0 +1,202 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[AND(IN($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($cor0.JOB, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n}), IN($0, {\nLogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[=($cor0.ENAME, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}))], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5])\n LogicalJoin(condition=[AND(=($1, $12), =($0, $11))], joinType=[inner])\n LogicalJoin(condition=[AND(=($2, $10), =($0, $9))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(EMPNO=[$0], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDecorrelateUncorrelatedInAndCorrelatedExists.json b/tests/calcite/testDecorrelateUncorrelatedInAndCorrelatedExists.json new file mode 100644 index 0000000..0057bb3 --- /dev/null +++ b/tests/calcite/testDecorrelateUncorrelatedInAndCorrelatedExists.json @@ -0,0 +1,245 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(IN($2, {\nLogicalProject(JOB=[$2])\n LogicalFilter(condition=[=($5, 34)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), EXISTS({\nLogicalFilter(condition=[=($cor0.DEPTNO, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}))], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($7, $10)], joinType=[inner])\n LogicalJoin(condition=[=($2, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}])\n LogicalProject(JOB=[$2])\n LogicalFilter(condition=[=($5, 34)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], $f1=[true])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 14, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "34" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 11, + "type" : "VARCHAR" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "IN" + }, { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "34" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDigestOfApproximateDistinctAggregateCall.json b/tests/calcite/testDigestOfApproximateDistinctAggregateCall.json new file mode 100644 index 0000000..2fc4214 --- /dev/null +++ b/tests/calcite/testDigestOfApproximateDistinctAggregateCall.json @@ -0,0 +1,140 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], EXPR$1=[$1])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT(APPROXIMATE DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[$1])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{7}], EXPR$1=[COUNT(DISTINCT $0)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{7}], EXPR$1=[COUNT(APPROXIMATE DISTINCT $0)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCount1.json b/tests/calcite/testDistinctCount1.json new file mode 100644 index 0000000..8ae8849 --- /dev/null +++ b/tests/calcite/testDistinctCount1.json @@ -0,0 +1,75 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{1}], EXPR$1=[COUNT($0)])\n LogicalAggregate(group=[{1, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCount2.json b/tests/calcite/testDistinctCount2.json new file mode 100644 index 0000000..73bb38f --- /dev/null +++ b/tests/calcite/testDistinctCount2.json @@ -0,0 +1,188 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[$1], EXPR$2=[CAST($2):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1) FILTER $3], EXPR$2=[MIN($2) FILTER $4])\n LogicalProject(DEPTNO=[$0], ENAME=[$1], EXPR$2=[$2], $g_0=[=($3, 0)], $g_1=[=($3, 1)])\n LogicalProject(DEPTNO=[$1], ENAME=[$0], EXPR$2=[$2], $g=[$3])\n LogicalAggregate(group=[{1, 7}], groups=[[{1, 7}, {7}]], EXPR$2=[SUM($5)], $g=[GROUPING($7, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCount3.json b/tests/calcite/testDistinctCount3.json new file mode 100644 index 0000000..530eb81 --- /dev/null +++ b/tests/calcite/testDistinctCount3.json @@ -0,0 +1,181 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$2])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT(DISTINCT $0)], EXPR$1=[SUM($1)])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$2])\n LogicalProject(DEPTNO=[$0], EXPR$0=[$1], EXPR$1=[CAST($2):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT($0) FILTER $2], EXPR$1=[MIN($1) FILTER $2])\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $g_0=[=($2, 0)])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], $g=[GROUPING($0)])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountGroupingSets1.json b/tests/calcite/testDistinctCountGroupingSets1.json new file mode 100644 index 0000000..4387182 --- /dev/null +++ b/tests/calcite/testDistinctCountGroupingSets1.json @@ -0,0 +1,141 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT(DISTINCT $2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT($2) FILTER $3])\n LogicalProject(DEPTNO=[$0], JOB=[$1], ENAME=[$2], $g_0=[=($3, 0)])\n LogicalAggregate(group=[{0, 1, 2}], $g=[GROUPING($0, $1, $2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountGroupingSets2.json b/tests/calcite/testDistinctCountGroupingSets2.json new file mode 100644 index 0000000..5b02c62 --- /dev/null +++ b/tests/calcite/testDistinctCountGroupingSets2.json @@ -0,0 +1,209 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT(DISTINCT $2)], EXPR$3=[SUM($3)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], ENAME=[$1], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], JOB=[$1], EXPR$2=[$2], EXPR$3=[CAST($3):INTEGER NOT NULL])\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT($2) FILTER $4], EXPR$3=[MIN($3) FILTER $5])\n LogicalProject(DEPTNO=[$0], JOB=[$1], ENAME=[$2], EXPR$3=[$3], $g_0=[=($4, 0)], $g_1=[=($4, 1)])\n LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1, 2}, {0, 1}]], EXPR$3=[SUM($3)], $g=[GROUPING($0, $1, $2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], ENAME=[$1], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountMixed.json b/tests/calcite/testDistinctCountMixed.json new file mode 100644 index 0000000..2aa7b46 --- /dev/null +++ b/tests/calcite/testDistinctCountMixed.json @@ -0,0 +1,191 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], CDDJ=[COUNT(DISTINCT $0, $1)], S=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], CDDJ=[$1], S=[CAST($2):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], CDDJ=[COUNT($0, $1) FILTER $3], S=[MIN($2) FILTER $4])\n LogicalProject(DEPTNO=[$0], JOB=[$1], S=[$2], $g_0=[=($3, 0)], $g_1=[=($3, 1)])\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]], S=[SUM($2)], $g=[GROUPING($0, $1)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountMixed2.json b/tests/calcite/testDistinctCountMixed2.json new file mode 100644 index 0000000..fc1dada --- /dev/null +++ b/tests/calcite/testDistinctCountMixed2.json @@ -0,0 +1,259 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], CDE=[COUNT(DISTINCT $1)], CDJE=[COUNT(DISTINCT $2, $1)], CDDJ=[COUNT(DISTINCT $0, $2)], S=[SUM($3)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1], JOB=[$2], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], CDE=[$1], CDJE=[$2], CDDJ=[$3], S=[CAST($4):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], CDE=[COUNT($1) FILTER $5], CDJE=[COUNT($2, $1) FILTER $4], CDDJ=[COUNT($0, $2) FILTER $6], S=[MIN($3) FILTER $7])\n LogicalProject(DEPTNO=[$2], ENAME=[$0], JOB=[$1], S=[$3], $g_0=[=($4, 0)], $g_1=[=($4, 1)], $g_2=[=($4, 2)], $g_3=[=($4, 3)])\n LogicalAggregate(group=[{1, 2, 7}], groups=[[{1, 2, 7}, {1, 7}, {2, 7}, {7}]], S=[SUM($5)], $g=[GROUPING($7, $1, $2)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountMixedJoin.json b/tests/calcite/testDistinctCountMixedJoin.json new file mode 100644 index 0000000..608b607 --- /dev/null +++ b/tests/calcite/testDistinctCountMixedJoin.json @@ -0,0 +1,278 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[COUNT(DISTINCT $2, $1)], EXPR$3=[COUNT(DISTINCT $0, $2)], EXPR$4=[SUM($3)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1], JOB=[$2], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[$3], EXPR$2=[$5], EXPR$3=[$7], EXPR$4=[$1])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $6)], joinType=[inner])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner])\n LogicalAggregate(group=[{7}], EXPR$4=[SUM($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], EXPR$1=[COUNT($0)])\n LogicalAggregate(group=[{1, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{2}], EXPR$2=[COUNT($1, $0)])\n LogicalAggregate(group=[{1, 2, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], EXPR$3=[COUNT($1, $0)])\n LogicalAggregate(group=[{2, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 5, + "type" : "BIGINT" + }, { + "column" : 7, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountMultiple.json b/tests/calcite/testDistinctCountMultiple.json new file mode 100644 index 0000000..0239d8a --- /dev/null +++ b/tests/calcite/testDistinctCountMultiple.json @@ -0,0 +1,167 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[COUNT(DISTINCT $2)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1) FILTER $3], EXPR$2=[COUNT($2) FILTER $4])\n LogicalProject(DEPTNO=[$0], ENAME=[$1], JOB=[$2], $g_1=[=($3, 1)], $g_2=[=($3, 2)])\n LogicalProject(DEPTNO=[$2], ENAME=[$0], JOB=[$1], $g=[$3])\n LogicalAggregate(group=[{1, 2, 7}], groups=[[{1, 7}, {2, 7}]], $g=[GROUPING($7, $1, $2)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountMultipleNoGroup.json b/tests/calcite/testDistinctCountMultipleNoGroup.json new file mode 100644 index 0000000..15a8942 --- /dev/null +++ b/tests/calcite/testDistinctCountMultipleNoGroup.json @@ -0,0 +1,132 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(ENAME=[$1], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[COUNT($0) FILTER $2], EXPR$1=[COUNT($1) FILTER $3])\n LogicalProject(ENAME=[$0], JOB=[$1], $g_1=[=($2, 1)], $g_2=[=($2, 2)])\n LogicalAggregate(group=[{1, 2}], groups=[[{1}, {2}]], $g=[GROUPING($1, $2)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountMultipleViaJoin.json b/tests/calcite/testDistinctCountMultipleViaJoin.json new file mode 100644 index 0000000..608b607 --- /dev/null +++ b/tests/calcite/testDistinctCountMultipleViaJoin.json @@ -0,0 +1,278 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT(DISTINCT $1)], EXPR$2=[COUNT(DISTINCT $2, $1)], EXPR$3=[COUNT(DISTINCT $0, $2)], EXPR$4=[SUM($3)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1], JOB=[$2], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[$3], EXPR$2=[$5], EXPR$3=[$7], EXPR$4=[$1])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $6)], joinType=[inner])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner])\n LogicalAggregate(group=[{7}], EXPR$4=[SUM($5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], EXPR$1=[COUNT($0)])\n LogicalAggregate(group=[{1, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{2}], EXPR$2=[COUNT($1, $0)])\n LogicalAggregate(group=[{1, 2, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], EXPR$3=[COUNT($1, $0)])\n LogicalAggregate(group=[{2, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 5, + "type" : "BIGINT" + }, { + "column" : 7, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountWithExpandSumType.json b/tests/calcite/testDistinctCountWithExpandSumType.json new file mode 100644 index 0000000..0cb8ccc --- /dev/null +++ b/tests/calcite/testDistinctCountWithExpandSumType.json @@ -0,0 +1,107 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()], EXPR$1=[COUNT(DISTINCT $0)])\n LogicalProject(COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[CAST($0):BIGINT NOT NULL], EXPR$1=[$1])\n LogicalAggregate(group=[{}], EXPR$0=[$SUM0($1)], EXPR$1=[COUNT($0)])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "DECIMAL", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "DECIMAL" + } ], + "operator" : "CAST" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctCountWithoutGroupBy.json b/tests/calcite/testDistinctCountWithoutGroupBy.json new file mode 100644 index 0000000..5d277d6 --- /dev/null +++ b/tests/calcite/testDistinctCountWithoutGroupBy.json @@ -0,0 +1,135 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[MAX($0)], EXPR$1=[COUNT(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[MIN($1) FILTER $3], EXPR$1=[COUNT($0) FILTER $2])\n LogicalProject(ENAME=[$0], EXPR$0=[$1], $g_0=[=($2, 0)], $g_1=[=($2, 1)])\n LogicalAggregate(group=[{1}], groups=[[{1}, {}]], EXPR$0=[MAX($7)], $g=[GROUPING($1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctNonDistinctAggregates.json b/tests/calcite/testDistinctNonDistinctAggregates.json new file mode 100644 index 0000000..b688ea0 --- /dev/null +++ b/tests/calcite/testDistinctNonDistinctAggregates.json @@ -0,0 +1,152 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT()], EXPR$2=[AVG(DISTINCT $1)])\n LogicalProject(EMPNO=[$0], DEPTNO0=[$9])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($2)], EXPR$2=[AVG($1)])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT()])\n LogicalProject(EMPNO=[$0], DEPTNO0=[$9])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctNonDistinctAggregatesWithGrouping1.json b/tests/calcite/testDistinctNonDistinctAggregatesWithGrouping1.json new file mode 100644 index 0000000..556b8e0 --- /dev/null +++ b/tests/calcite/testDistinctNonDistinctAggregatesWithGrouping1.json @@ -0,0 +1,173 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($0)], EXPR$2=[SUM(DISTINCT $1)], EXPR$3=[MAX($0)], EXPR$4=[MAX($2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($2)], EXPR$2=[SUM($1)], EXPR$3=[MAX($3)], EXPR$4=[MAX($4)])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM($0)], EXPR$3=[MAX($0)], EXPR$4=[MAX($2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctNonDistinctAggregatesWithGrouping2.json b/tests/calcite/testDistinctNonDistinctAggregatesWithGrouping2.json new file mode 100644 index 0000000..2dc1a39 --- /dev/null +++ b/tests/calcite/testDistinctNonDistinctAggregatesWithGrouping2.json @@ -0,0 +1,107 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT()], EXPR$2=[SUM(DISTINCT $1)])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($2)], EXPR$2=[SUM($1)])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[COUNT()])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctNonDistinctTwoAggregatesWithGrouping.json b/tests/calcite/testDistinctNonDistinctTwoAggregatesWithGrouping.json new file mode 100644 index 0000000..e2fd483 --- /dev/null +++ b/tests/calcite/testDistinctNonDistinctTwoAggregatesWithGrouping.json @@ -0,0 +1,146 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[SUM(DISTINCT $2)])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($2)], EXPR$2=[MIN($3)], EXPR$3=[SUM($1)])\n LogicalAggregate(group=[{0, 2}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctWithDiffFiltersAndSameGroupSet.json b/tests/calcite/testDistinctWithDiffFiltersAndSameGroupSet.json new file mode 100644 index 0000000..19ce8e4 --- /dev/null +++ b/tests/calcite/testDistinctWithDiffFiltersAndSameGroupSet.json @@ -0,0 +1,189 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT(DISTINCT $0) FILTER $1], EXPR$1=[COUNT(DISTINCT $1) FILTER $0])\n LogicalProject(C=[>($5, 1000)], D=[<($5, 500)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[COUNT($0) FILTER $3], EXPR$1=[COUNT($1) FILTER $2])\n LogicalProject(C=[$0], D=[$1], $g_0_f_0=[AND(=($2, 0), $0)], $g_0_f_1=[AND(=($2, 0), $1)])\n LogicalAggregate(group=[{0, 1}], $g=[GROUPING($0, $1)])\n LogicalProject(C=[>($5, 1000)], D=[<($5, 500)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "500" + } ], + "operator" : "<" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + }, { + "column" : 1, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "BOOLEAN" + }, { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "500" + } ], + "operator" : "<" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "BOOLEAN" + }, { + "column" : 1, + "type" : "BOOLEAN" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "column" : 0, + "type" : "BOOLEAN" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "AND" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctWithFilterAndGroupBy.json b/tests/calcite/testDistinctWithFilterAndGroupBy.json new file mode 100644 index 0000000..f7a87c0 --- /dev/null +++ b/tests/calcite/testDistinctWithFilterAndGroupBy.json @@ -0,0 +1,224 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT(DISTINCT $2) FILTER $3])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5], $f3=[>($5, 1000)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[CAST($1):INTEGER NOT NULL], EXPR$2=[$2])\n LogicalAggregate(group=[{0}], EXPR$1=[MIN($2) FILTER $4], EXPR$2=[COUNT($1) FILTER $3])\n LogicalProject(DEPTNO=[$0], SAL=[$1], EXPR$1=[$3], $g_0_f_2=[AND(=($4, 0), IS TRUE($2))], $g_3=[=($4, 3)])\n LogicalAggregate(group=[{0, 2, 3}], groups=[[{0, 2, 3}, {0}]], EXPR$1=[SUM($1)], $g=[GROUPING($0, $2, $3)])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5], $f3=[>($5, 1000)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BOOLEAN" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctWithFilterWithoutGroupBy.json b/tests/calcite/testDistinctWithFilterWithoutGroupBy.json new file mode 100644 index 0000000..2b463c1 --- /dev/null +++ b/tests/calcite/testDistinctWithFilterWithoutGroupBy.json @@ -0,0 +1,185 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT(DISTINCT $1) FILTER $2])\n LogicalProject(COMM=[$6], SAL=[$5], $f2=[>($5, 1000)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[MIN($1) FILTER $3], EXPR$1=[COUNT($0) FILTER $2])\n LogicalProject(SAL=[$0], EXPR$0=[$2], $g_0_f_1=[AND(=($3, 0), IS TRUE($1))], $g_3=[=($3, 3)])\n LogicalAggregate(group=[{1, 2}], groups=[[{1, 2}, {}]], EXPR$0=[SUM($0)], $g=[GROUPING($1, $2)])\n LogicalProject(COMM=[$6], SAL=[$5], $f2=[>($5, 1000)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "=" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctWithGrouping.json b/tests/calcite/testDistinctWithGrouping.json new file mode 100644 index 0000000..8d944e0 --- /dev/null +++ b/tests/calcite/testDistinctWithGrouping.json @@ -0,0 +1,137 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[SUM(DISTINCT $0)])\n LogicalProject(SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($2)], EXPR$3=[SUM($0)])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\n LogicalProject(SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctWithMultipleInputs.json b/tests/calcite/testDistinctWithMultipleInputs.json new file mode 100644 index 0000000..6298311 --- /dev/null +++ b/tests/calcite/testDistinctWithMultipleInputs.json @@ -0,0 +1,155 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[COUNT(DISTINCT $2, $1)])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($3)], EXPR$2=[MIN($4)], EXPR$3=[COUNT($2, $1)])\n LogicalAggregate(group=[{0, 1, 2}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testDistinctWithMultipleInputsAndGroupby.json b/tests/calcite/testDistinctWithMultipleInputsAndGroupby.json new file mode 100644 index 0000000..6fb079d --- /dev/null +++ b/tests/calcite/testDistinctWithMultipleInputsAndGroupby.json @@ -0,0 +1,161 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)], EXPR$3=[COUNT(DISTINCT $2, $0, $1)])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($3)], EXPR$2=[MIN($4)], EXPR$3=[COUNT($2, $0, $1)])\n LogicalAggregate(group=[{0, 1, 2}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)])\n LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyAggregate.json b/tests/calcite/testEmptyAggregate.json new file mode 100644 index 0000000..4cfce6f --- /dev/null +++ b/tests/calcite/testEmptyAggregate.json @@ -0,0 +1,41 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1])\n LogicalAggregate(group=[{0}], EXPR$0=[SUM($1)])\n LogicalValues(tuples=[[]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyAggregateEmptyKeyWithAggregateValuesRule.json b/tests/calcite/testEmptyAggregateEmptyKeyWithAggregateValuesRule.json new file mode 100644 index 0000000..387a424 --- /dev/null +++ b/tests/calcite/testEmptyAggregateEmptyKeyWithAggregateValuesRule.json @@ -0,0 +1,44 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()], EXPR$1=[SUM($0)])\n LogicalValues(tuples=[[]])\n", "LogicalValues(tuples=[[{ 0, null }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "values" : { + "schema" : [ "INTEGER" ], + "content" : [ ] + } + } + } + }, { + "values" : { + "schema" : [ "BIGINT", "INTEGER" ], + "content" : [ [ { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "0" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyFilterProjectUnion.json b/tests/calcite/testEmptyFilterProjectUnion.json new file mode 100644 index 0000000..faa5255 --- /dev/null +++ b/tests/calcite/testEmptyFilterProjectUnion.json @@ -0,0 +1,121 @@ +{ + "help" : [ "LogicalProject(X=[$0], Y=[$1])\n LogicalFilter(condition=[>(+($0, $1), 30)])\n LogicalUnion(all=[true])\n LogicalProject(X=[$0], Y=[$1])\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[{ 20, 2 }]])\n", "LogicalProject(X=[$0], Y=[$1])\n LogicalValues(tuples=[[{ 30, 3 }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : ">" + }, + "source" : { + "union" : [ { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyIntersect.json b/tests/calcite/testEmptyIntersect.json new file mode 100644 index 0000000..a4a8298 --- /dev/null +++ b/tests/calcite/testEmptyIntersect.json @@ -0,0 +1,110 @@ +{ + "help" : [ "LogicalIntersect(all=[false])\n LogicalIntersect(all=[false])\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[{ 30, 3 }]])\n LogicalProject(X=[$0], Y=[$1])\n LogicalFilter(condition=[>($0, 50)])\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[{ 30, 3 }]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "intersect" : [ { + "intersect" : [ { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyMinus.json b/tests/calcite/testEmptyMinus.json new file mode 100644 index 0000000..f15e344 --- /dev/null +++ b/tests/calcite/testEmptyMinus.json @@ -0,0 +1,102 @@ +{ + "help" : [ "LogicalMinus(all=[false])\n LogicalMinus(all=[false])\n LogicalProject(X=[$0], Y=[$1])\n LogicalFilter(condition=[>($0, 30)])\n LogicalValues(tuples=[[{ 30, 3 }]])\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[{ 20, 2 }]])\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[{ 40, 4 }]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "except" : [ { + "except" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "40" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyMinus2.json b/tests/calcite/testEmptyMinus2.json new file mode 100644 index 0000000..d1c6623 --- /dev/null +++ b/tests/calcite/testEmptyMinus2.json @@ -0,0 +1,189 @@ +{ + "help" : [ "LogicalMinus(all=[false])\n LogicalMinus(all=[false])\n LogicalMinus(all=[false])\n LogicalProject(X=[$0], Y=[$1])\n LogicalValues(tuples=[[{ 30, 3 }]])\n LogicalProject(X=[$0], Y=[$1])\n LogicalFilter(condition=[>($0, 30)])\n LogicalValues(tuples=[[{ 20, 2 }]])\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[{ 40, 4 }]])\n LogicalProject(X=[$0], Y=[$1])\n LogicalFilter(condition=[>($0, 50)])\n LogicalValues(tuples=[[{ 50, 5 }]])\n", "LogicalMinus(all=[false])\n LogicalProject(X=[$0], Y=[$1])\n LogicalValues(tuples=[[{ 30, 3 }]])\n LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[{ 40, 4 }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "except" : [ { + "except" : [ { + "except" : [ { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "40" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, { + "except" : [ { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "40" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyProject.json b/tests/calcite/testEmptyProject.json new file mode 100644 index 0000000..b58acb7 --- /dev/null +++ b/tests/calcite/testEmptyProject.json @@ -0,0 +1,76 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+(+($0, $1), $0)])\n LogicalFilter(condition=[>(+($0, $1), 50)])\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyProject2.json b/tests/calcite/testEmptyProject2.json new file mode 100644 index 0000000..b58acb7 --- /dev/null +++ b/tests/calcite/testEmptyProject2.json @@ -0,0 +1,76 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+(+($0, $1), $0)])\n LogicalFilter(condition=[>(+($0, $1), 50)])\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 3 }]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptySort.json b/tests/calcite/testEmptySort.json new file mode 100644 index 0000000..50baee2 --- /dev/null +++ b/tests/calcite/testEmptySort.json @@ -0,0 +1,67 @@ +{ + "help" : [ "LogicalSort(sort0=[$7], dir0=[ASC])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "collation" : [ [ 7, "INTEGER", "ASCENDING" ] ] + } + }, { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptySort2.json b/tests/calcite/testEmptySort2.json new file mode 100644 index 0000000..7c87e4b --- /dev/null +++ b/tests/calcite/testEmptySort2.json @@ -0,0 +1,22 @@ +{ + "help" : [ "LogicalSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])\n LogicalValues(tuples=[[]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + }, + "collation" : [ [ 1, "VARCHAR", "ASCENDING" ], [ 0, "TINYINT", "ASCENDING" ] ] + } + }, { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptySortLimitZero.json b/tests/calcite/testEmptySortLimitZero.json new file mode 100644 index 0000000..f957c7c --- /dev/null +++ b/tests/calcite/testEmptySortLimitZero.json @@ -0,0 +1,62 @@ +{ + "help" : [ "LogicalSort(sort0=[$7], dir0=[ASC], fetch=[0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "collation" : [ [ 7, "INTEGER", "ASCENDING" ] ] + } + }, { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyTable.json b/tests/calcite/testEmptyTable.json new file mode 100644 index 0000000..77b07b6 --- /dev/null +++ b/tests/calcite/testEmptyTable.json @@ -0,0 +1,33 @@ +{ + "help" : [ "LogicalProject(PRODUCTID=[$0], NAME=[$1], SUPPLIERID=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMPTY_PRODUCTS]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "INTEGER" ], + "nullable" : [ false, false, false ], + "name" : "CATALOG.SALES.EMPTY_PRODUCTS", + "guaranteed" : [ ], + "fields" : [ "PRODUCTID", "NAME", "SUPPLIERID" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "INTEGER" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testEmptyTableTransformsComplexQueryToSingleTableScan.json b/tests/calcite/testEmptyTableTransformsComplexQueryToSingleTableScan.json new file mode 100644 index 0000000..830bfcf --- /dev/null +++ b/tests/calcite/testEmptyTableTransformsComplexQueryToSingleTableScan.json @@ -0,0 +1,122 @@ +{ + "help" : [ "LogicalProject(PRODUCTID=[$0], NAME=[$1])\n LogicalJoin(condition=[=($0, $3)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, PRODUCTS]])\n LogicalProject(PRODUCTID=[$0], NAME=[$1], SUPPLIERID=[$2], PRODUCTID0=[$3], NAME0=[$4], SUPPLIERID0=[$5])\n LogicalFilter(condition=[>($2, 10)])\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, PRODUCTS]])\n LogicalTableScan(table=[[CATALOG, SALES, EMPTY_PRODUCTS]])\n", "LogicalProject(PRODUCTID=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, PRODUCTS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "INTEGER" ], + "nullable" : [ false, false, false ], + "name" : "CATALOG.SALES.PRODUCTS", + "guaranteed" : [ ], + "fields" : [ "PRODUCTID", "NAME", "SUPPLIERID" ], + "key" : [ ] + }, { + "types" : [ "INTEGER", "VARCHAR", "INTEGER" ], + "nullable" : [ false, false, false ], + "name" : "CATALOG.SALES.EMPTY_PRODUCTS", + "guaranteed" : [ ], + "fields" : [ "PRODUCTID", "NAME", "SUPPLIERID" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExistsWithAtLeastOneRowSubQuery.json b/tests/calcite/testExistsWithAtLeastOneRowSubQuery.json new file mode 100644 index 0000000..fad1c47 --- /dev/null +++ b/tests/calcite/testExistsWithAtLeastOneRowSubQuery.json @@ -0,0 +1,93 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[EXISTS({\nLogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[0])\n LogicalFilter(condition=[=($cor0.DEPTNO, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ] + } + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExistsWithNoRowSubQuery.json b/tests/calcite/testExistsWithNoRowSubQuery.json new file mode 100644 index 0000000..5a0628a --- /dev/null +++ b/tests/calcite/testExistsWithNoRowSubQuery.json @@ -0,0 +1,57 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[NOT(EXISTS({\nLogicalValues(tuples=[[]])\n}))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "values" : { + "schema" : [ "BIGINT" ], + "content" : [ ] + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterConstantInCorrelatedWithTwoSubQueries.json b/tests/calcite/testExpandFilterConstantInCorrelatedWithTwoSubQueries.json new file mode 100644 index 0000000..03683f1 --- /dev/null +++ b/tests/calcite/testExpandFilterConstantInCorrelatedWithTwoSubQueries.json @@ -0,0 +1,460 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(IN(1, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), >($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}), IN(2, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), <($0, 20))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}))], variablesSet=[[$cor0]])\n LogicalProject(EMPNO=[$0], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1])\n LogicalFilter(condition=[OR(CASE(=($2, false), null:BOOLEAN, IS NOT NULL($2), true, false), CASE(=($3, false), null:BOOLEAN, IS NOT NULL($3), true, false))])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1}])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1}])\n LogicalProject(EMPNO=[$0], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalAggregate(group=[{0}])\n LogicalProject(cs=[IS NOT NULL($0)])\n LogicalFilter(condition=[OR(=(1, $0), IS NULL($0))])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), >($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalAggregate(group=[{0}])\n LogicalProject(cs=[IS NOT NULL($0)])\n LogicalFilter(condition=[OR(=(2, $0), IS NULL($0))])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), <($0, 20))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ true, true ], + "name" : "CATALOG.SALES.DEPTNULLABLES", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "IN" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "IN" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BOOLEAN" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BOOLEAN" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ], + "operator" : "OR" + }, + "source" : { + "correlate" : { + "left" : { + "correlate" : { + "left" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 3, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterConstantInWithTwoSubQueries.json b/tests/calcite/testExpandFilterConstantInWithTwoSubQueries.json new file mode 100644 index 0000000..4f74e4f --- /dev/null +++ b/tests/calcite/testExpandFilterConstantInWithTwoSubQueries.json @@ -0,0 +1,429 @@ +{ + "help" : [ "LogicalFilter(condition=[OR(IN(1, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}), IN(2, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}))])\n LogicalProject(EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(CASE(IS NULL($2), false, =($1, false), null:BOOLEAN, IS NOT NULL($1), true, false), CASE(IS NULL($4), false, =($3, false), null:BOOLEAN, IS NOT NULL($3), true, false))])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalProject(EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalSort(sort0=[$0], dir0=[DESC], fetch=[1])\n LogicalAggregate(group=[{0}], c=[COUNT()])\n LogicalProject(cs=[IS NOT NULL($0)])\n LogicalFilter(condition=[OR(=(1, $0), IS NULL($0))])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalSort(sort0=[$0], dir0=[DESC], fetch=[1])\n LogicalAggregate(group=[{0}], c=[COUNT()])\n LogicalProject(cs=[IS NOT NULL($0)])\n LogicalFilter(condition=[OR(=(2, $0), IS NULL($0))])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ true, true ], + "name" : "CATALOG.SALES.DEPTNULLABLES", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "IN" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "IN" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BOOLEAN" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ] + } + } + } + }, + "collation" : [ [ 0, "BOOLEAN", "DESCENDING" ] ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ] + } + } + } + }, + "collation" : [ [ 0, "BOOLEAN", "DESCENDING" ] ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterExists.json b/tests/calcite/testExpandFilterExists.json new file mode 100644 index 0000000..388a3d8 --- /dev/null +++ b/tests/calcite/testExpandFilterExists.json @@ -0,0 +1,181 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(EXISTS({\nLogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), <($5, 100))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(IS NOT NULL($9), <($5, 100))])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}])\n LogicalProject(i=[true])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterExistsSimple.json b/tests/calcite/testExpandFilterExistsSimple.json new file mode 100644 index 0000000..c47a5f8 --- /dev/null +++ b/tests/calcite/testExpandFilterExistsSimple.json @@ -0,0 +1,139 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[EXISTS({\nLogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}])\n LogicalProject(i=[true])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterExistsSimpleAnd.json b/tests/calcite/testExpandFilterExistsSimpleAnd.json new file mode 100644 index 0000000..79ca6ae --- /dev/null +++ b/tests/calcite/testExpandFilterExistsSimpleAnd.json @@ -0,0 +1,170 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[AND(EXISTS({\nLogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), <($5, 100))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[<($5, 100)])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}])\n LogicalProject(i=[true])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterIn.json b/tests/calcite/testExpandFilterIn.json new file mode 100644 index 0000000..ac00c13 --- /dev/null +++ b/tests/calcite/testExpandFilterIn.json @@ -0,0 +1,203 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(IN($7, {\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), <($5, 100))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(IS NOT NULL($10), <($5, 100))])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], i=[LITERAL_AGG(true)])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "LITERAL_AGG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterIn3Value.json b/tests/calcite/testExpandFilterIn3Value.json new file mode 100644 index 0000000..c696919 --- /dev/null +++ b/tests/calcite/testExpandFilterIn3Value.json @@ -0,0 +1,496 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[<($0, CASE(=(IN($7, {\nLogicalProject(EXPR$0=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), true), 10, =(IN($7, {\nLogicalProject(EXPR$0=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), false), 20, 30))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[<($0, CASE(=(CASE(=($9, 0), false, IS NOT NULL($12), true, <($10, $9), null:BOOLEAN, false), true), 10, =(CASE(=($9, 0), false, IS NOT NULL($12), true, <($10, $9), null:BOOLEAN, false), false), 20, 30))])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(EXPR$0=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], i=[LITERAL_AGG(true)])\n LogicalProject(EXPR$0=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "CASE" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "CASE" + } ], + "operator" : "<" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "LITERAL_AGG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterInComposite.json b/tests/calcite/testExpandFilterInComposite.json new file mode 100644 index 0000000..f1cab93 --- /dev/null +++ b/tests/calcite/testExpandFilterInComposite.json @@ -0,0 +1,215 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(IN($0, $7, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), <($5, 100))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(IS NOT NULL($11), <($5, 100))])\n LogicalJoin(condition=[AND(=($0, $9), =($7, $10))], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7], i=[true])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterInCorrelatedWithTwoSubQueries.json b/tests/calcite/testExpandFilterInCorrelatedWithTwoSubQueries.json new file mode 100644 index 0000000..8b659c4 --- /dev/null +++ b/tests/calcite/testExpandFilterInCorrelatedWithTwoSubQueries.json @@ -0,0 +1,601 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(IN($2, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), >($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}), IN($2, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), <($0, 20))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}))], variablesSet=[[$cor0]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$2])\n LogicalFilter(condition=[OR(CASE(=($3, 0), false, IS NULL($2), null:BOOLEAN, IS NOT NULL($6), true, <($4, $3), null:BOOLEAN, false), CASE(=($7, 0), false, IS NULL($2), null:BOOLEAN, IS NOT NULL($10), true, <($8, $7), null:BOOLEAN, false))])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1, 2}])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1}])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1, 2}])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), >($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalProject(DEPTNO=[$0], i=[true])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), >($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), <($0, 20))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalProject(DEPTNO=[$0], i=[true])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), <($0, 20))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ true, true ], + "name" : "CATALOG.SALES.DEPTNULLABLES", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "column" : 7, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ], + "operator" : "OR" + }, + "source" : { + "correlate" : { + "left" : { + "correlate" : { + "left" : { + "correlate" : { + "left" : { + "correlate" : { + "left" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 6, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 8, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterInWithTwoSubQueries.json b/tests/calcite/testExpandFilterInWithTwoSubQueries.json new file mode 100644 index 0000000..4658655 --- /dev/null +++ b/tests/calcite/testExpandFilterInWithTwoSubQueries.json @@ -0,0 +1,486 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(IN($1, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}), IN($1, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}))])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], DEPTNO=[$1])\n LogicalFilter(condition=[OR(CASE(=($2, 0), false, IS NULL($1), null:BOOLEAN, IS NOT NULL($5), true, <($3, $2), null:BOOLEAN, false), CASE(=($6, 0), false, IS NULL($1), null:BOOLEAN, IS NOT NULL($9), true, <($7, $6), null:BOOLEAN, false))])\n LogicalJoin(condition=[=($1, $8)], joinType=[left])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[=($1, $4)], joinType=[left])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalProject(DEPTNO=[$0], i=[true])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalProject(DEPTNO=[$0], i=[true])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ true, true ], + "name" : "CATALOG.SALES.DEPTNULLABLES", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "BIGINT" + }, { + "column" : 6, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandFilterScalar.json b/tests/calcite/testExpandFilterScalar.json new file mode 100644 index 0000000..fdd46ca --- /dev/null +++ b/tests/calcite/testExpandFilterScalar.json @@ -0,0 +1,284 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(<($SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), $SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($0, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})), <($5, 100))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(<($9, $10), <($5, 100))])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($0, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "INTEGER", + "operand" : [ ], + "operator" : "$SCALAR_QUERY" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "INTEGER", + "operand" : [ ], + "operator" : "$SCALAR_QUERY" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SINGLE_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SINGLE_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandJoinExists.json b/tests/calcite/testExpandJoinExists.json new file mode 100644 index 0000000..a98f764 --- /dev/null +++ b/tests/calcite/testExpandJoinExists.json @@ -0,0 +1,169 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalJoin(condition=[EXISTS({\nLogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject(i=[true])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandJoinScalar.json b/tests/calcite/testExpandJoinScalar.json new file mode 100644 index 0000000..04cebea --- /dev/null +++ b/tests/calcite/testExpandJoinScalar.json @@ -0,0 +1,316 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalJoin(condition=[<($SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), $SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($0, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}))], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10], $f0=[$11])\n LogicalJoin(condition=[<($11, $12)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($0, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 18, + "type" : "INTEGER" + } ] + } + }, + "type" : "INTEGER", + "operand" : [ ], + "operator" : "$SCALAR_QUERY" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 18, + "type" : "INTEGER" + } ] + } + }, + "type" : "INTEGER", + "operand" : [ ], + "operator" : "$SCALAR_QUERY" + } ], + "operator" : "<" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "<" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SINGLE_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SINGLE_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandProjectExists.json b/tests/calcite/testExpandProjectExists.json new file mode 100644 index 0000000..e527587 --- /dev/null +++ b/tests/calcite/testExpandProjectExists.json @@ -0,0 +1,109 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], D=[EXISTS({\nLogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], D=[IS NOT NULL($9)])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}])\n LogicalProject(i=[true])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "query" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "EXISTS" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandProjectIn.json b/tests/calcite/testExpandProjectIn.json new file mode 100644 index 0000000..788b598 --- /dev/null +++ b/tests/calcite/testExpandProjectIn.json @@ -0,0 +1,143 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], D=[IN($7, {\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], D=[CASE(IS NOT NULL($10), true, false)])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], i=[LITERAL_AGG(true)])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "LITERAL_AGG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandProjectInComposite.json b/tests/calcite/testExpandProjectInComposite.json new file mode 100644 index 0000000..c665c67 --- /dev/null +++ b/tests/calcite/testExpandProjectInComposite.json @@ -0,0 +1,155 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], D=[IN($0, $7, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], D=[CASE(IS NOT NULL($11), true, false)])\n LogicalJoin(condition=[AND(=($0, $9), =($7, $10))], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7], i=[true])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandProjectInNullable.json b/tests/calcite/testExpandProjectInNullable.json new file mode 100644 index 0000000..9f29dca --- /dev/null +++ b/tests/calcite/testExpandProjectInNullable.json @@ -0,0 +1,370 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], D=[IN(CASE(true, CAST($7):INTEGER, null:INTEGER), {\nLogicalProject(DEPTNO=[$1])\n LogicalFilter(condition=[<($0, 20)])\n LogicalProject(EMPNO=[$0], DEPTNO=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], D=[CASE(=($9, 0), false, IS NULL(CASE(true, CAST($7):INTEGER, null:INTEGER)), null:BOOLEAN, IS NOT NULL($12), true, <($10, $9), null:BOOLEAN, false)])\n LogicalJoin(condition=[=(CASE(true, CAST($7):INTEGER, null:INTEGER), $11)], joinType=[left])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(DEPTNO=[$1])\n LogicalFilter(condition=[<($0, 20)])\n LogicalProject(EMPNO=[$0], DEPTNO=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], i=[LITERAL_AGG(true)])\n LogicalProject(DEPTNO=[$1])\n LogicalFilter(condition=[<($0, 20)])\n LogicalProject(EMPNO=[$0], DEPTNO=[CASE(true, CAST($7):INTEGER, null:INTEGER)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 10, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ], + "operator" : "IN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "LITERAL_AGG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandProjectInWithTwoSubQueries.json b/tests/calcite/testExpandProjectInWithTwoSubQueries.json new file mode 100644 index 0000000..eb92285 --- /dev/null +++ b/tests/calcite/testExpandProjectInWithTwoSubQueries.json @@ -0,0 +1,443 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], EXPR$1=[OR(IN($7, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}), IN($7, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0], EXPR$1=[OR(CASE(=($9, 0), false, IS NULL($7), null:BOOLEAN, IS NOT NULL($12), true, <($10, $9), null:BOOLEAN, false), CASE(=($13, 0), false, IS NULL($7), null:BOOLEAN, IS NOT NULL($16), true, <($14, $13), null:BOOLEAN, false))])\n LogicalJoin(condition=[=($7, $15)], joinType=[left])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalProject(DEPTNO=[$0], i=[true])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalAggregate(group=[{}], c=[COUNT()], ck=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalProject(DEPTNO=[$0], i=[true])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ true, true ], + "name" : "CATALOG.SALES.DEPTNULLABLES", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "OR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 13, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 14, + "type" : "BIGINT" + }, { + "column" : 13, + "type" : "BIGINT" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ], + "operator" : "OR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandProjectScalar.json b/tests/calcite/testExpandProjectScalar.json new file mode 100644 index 0000000..429eb1b --- /dev/null +++ b/tests/calcite/testExpandProjectScalar.json @@ -0,0 +1,118 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], D=[$SCALAR_QUERY({\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], D=[$9])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[SINGLE_VALUE($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($0, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "INTEGER", + "operand" : [ ], + "operator" : "$SCALAR_QUERY" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SINGLE_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpandWhereComparisonCorrelated.json b/tests/calcite/testExpandWhereComparisonCorrelated.json new file mode 100644 index 0000000..e8a6ac6 --- /dev/null +++ b/tests/calcite/testExpandWhereComparisonCorrelated.json @@ -0,0 +1,182 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[=($5, $SCALAR_QUERY({\nLogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n LogicalProject(SAL=[$5])\n LogicalFilter(condition=[=($0, $cor0.EMPNO)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}))], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($5, $9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{0}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], EXPR$0=[MAX($0)])\n LogicalProject(SAL=[$5])\n LogicalFilter(condition=[=($0, $cor0.EMPNO)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "query" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 14, + "type" : "INTEGER" + } ] + } + } + } + }, + "type" : "INTEGER", + "operand" : [ ], + "operator" : "$SCALAR_QUERY" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 14, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpressionSimplification1.json b/tests/calcite/testExpressionSimplification1.json new file mode 100644 index 0000000..66b891b --- /dev/null +++ b/tests/calcite/testExpressionSimplification1.json @@ -0,0 +1,127 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(<>($1, ''), <>($1, '3'))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[SEARCH($1, Sarg[(-∞..'':VARCHAR(20)), ('':VARCHAR(20)..'3':VARCHAR(20)), ('3':VARCHAR(20)..+∞)]:VARCHAR(20))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1''" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'3'" + } ], + "operator" : "<>" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "Sarg[(-∞.._ISO-8859-1''), (_ISO-8859-1''.._ISO-8859-1'3'), (_ISO-8859-1'3'..+∞)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExpressionSimplification2.json b/tests/calcite/testExpressionSimplification2.json new file mode 100644 index 0000000..37a1f1b --- /dev/null +++ b/tests/calcite/testExpressionSimplification2.json @@ -0,0 +1,157 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(OR(<($1, ''), >($1, '')), OR(<($1, '3'), >($1, '3')))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[SEARCH($1, Sarg[(-∞..'':CHAR(1)), ('':CHAR(1)..'3'), ('3'..+∞)]:CHAR(1))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1''" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1''" + } ], + "operator" : ">" + } ], + "operator" : "OR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'3'" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'3'" + } ], + "operator" : ">" + } ], + "operator" : "OR" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "Sarg[(-∞.._ISO-8859-1''), (_ISO-8859-1''.._ISO-8859-1'3'), (_ISO-8859-1'3'..+∞)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExtractJoinFilterRule.json b/tests/calcite/testExtractJoinFilterRule.json new file mode 100644 index 0000000..32825ae --- /dev/null +++ b/tests/calcite/testExtractJoinFilterRule.json @@ -0,0 +1,88 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[=($7, $9)])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExtractYearMonthToRange.json b/tests/calcite/testExtractYearMonthToRange.json new file mode 100644 index 0000000..51ab6a8 --- /dev/null +++ b/tests/calcite/testExtractYearMonthToRange.json @@ -0,0 +1,149 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\n LogicalFilter(condition=[AND(=(EXTRACT(FLAG(YEAR), $9), 2014), =(EXTRACT(FLAG(MONTH), $9), 4))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\n LogicalFilter(condition=[SEARCH($9, Sarg[[2014-04-01..2014-05-01)])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN", "DATE" ], + "nullable" : [ false, false, false, true, false, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP_B", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER", "BIRTHDATE" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "SYMBOL", + "operand" : [ ], + "operator" : "YEAR" + }, { + "column" : 9, + "type" : "DATE" + } ], + "operator" : "EXTRACT" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "2014" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "SYMBOL", + "operand" : [ ], + "operator" : "MONTH" + }, { + "column" : 9, + "type" : "DATE" + } ], + "operator" : "EXTRACT" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "DATE" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "DATE" + }, { + "type" : "DATE", + "operand" : [ ], + "operator" : "Sarg[[2014-04-01..2014-05-01)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "DATE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testExtractYearToRange.json b/tests/calcite/testExtractYearToRange.json new file mode 100644 index 0000000..4f1c158 --- /dev/null +++ b/tests/calcite/testExtractYearToRange.json @@ -0,0 +1,126 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\n LogicalFilter(condition=[=(EXTRACT(FLAG(YEAR), $9), 2014)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], BIRTHDATE=[$9])\n LogicalFilter(condition=[SEARCH($9, Sarg[[2014-01-01..2015-01-01)])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP_B]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN", "DATE" ], + "nullable" : [ false, false, false, true, false, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP_B", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER", "BIRTHDATE" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "SYMBOL", + "operand" : [ ], + "operator" : "YEAR" + }, { + "column" : 9, + "type" : "DATE" + } ], + "operator" : "EXTRACT" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "2014" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "DATE" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "DATE" + }, { + "type" : "DATE", + "operand" : [ ], + "operator" : "Sarg[[2014-01-01..2015-01-01)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "DATE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFilterJoinRuleAndIsNotNull.json b/tests/calcite/testFilterJoinRuleAndIsNotNull.json new file mode 100644 index 0000000..124c7ac --- /dev/null +++ b/tests/calcite/testFilterJoinRuleAndIsNotNull.json @@ -0,0 +1,206 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalFilter(condition=[AND(IS NOT NULL($9), IS NOT NULL($10))])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[CAST($9):INTEGER], NAME=[CAST($10):VARCHAR(10)])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFilterJoinRuleOrIsNotNull.json b/tests/calcite/testFilterJoinRuleOrIsNotNull.json new file mode 100644 index 0000000..0695a10 --- /dev/null +++ b/tests/calcite/testFilterJoinRuleOrIsNotNull.json @@ -0,0 +1,206 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalFilter(condition=[OR(IS NOT NULL($9), IS NOT NULL($10))])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[CAST($9):INTEGER], NAME=[CAST($10):VARCHAR(10)])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFilterProjectTranspose.json b/tests/calcite/testFilterProjectTranspose.json new file mode 100644 index 0000000..1720930 --- /dev/null +++ b/tests/calcite/testFilterProjectTranspose.json @@ -0,0 +1,197 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalProject(TWICEDEPTNO=[*($0, 2)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalProject(TWICEDEPTNO=[*($0, 2)])\n LogicalFilter(condition=[=($cor0.DEPTNO, *($0, 2))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + } ] + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFilterRemoveIsNotDistinctFromRule.json b/tests/calcite/testFilterRemoveIsNotDistinctFromRule.json new file mode 100644 index 0000000..46d2b37 --- /dev/null +++ b/tests/calcite/testFilterRemoveIsNotDistinctFromRule.json @@ -0,0 +1,48 @@ +{ + "help" : [ "LogicalFilter(condition=[IS NOT DISTINCT FROM($7, 20)])\n LogicalTableScan(table=[[scott, EMP]])\n", "LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "source" : { + "scan" : 0 + } + } + }, { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFlattenUncorrelatedCallBelowEquals.json b/tests/calcite/testFlattenUncorrelatedCallBelowEquals.json new file mode 100644 index 0000000..f50017d --- /dev/null +++ b/tests/calcite/testFlattenUncorrelatedCallBelowEquals.json @@ -0,0 +1,281 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalFilter(condition=[=($cor0.DEPTNO, +($7, 30))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($cor0.DEPTNO, $9)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "+" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFlattenUncorrelatedTwoLevelCallBelowEqualsSucceeds.json b/tests/calcite/testFlattenUncorrelatedTwoLevelCallBelowEqualsSucceeds.json new file mode 100644 index 0000000..cf9c895 --- /dev/null +++ b/tests/calcite/testFlattenUncorrelatedTwoLevelCallBelowEqualsSucceeds.json @@ -0,0 +1,297 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalFilter(condition=[=($cor0.DEPTNO, +(*(2, $7), 30))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($cor0.DEPTNO, $9)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+(*(2, $7), 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "+" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFullOuterJoinSimplificationToInner.json b/tests/calcite/testFullOuterJoinSimplificationToInner.json new file mode 100644 index 0000000..c3b2b3f --- /dev/null +++ b/tests/calcite/testFullOuterJoinSimplificationToInner.json @@ -0,0 +1,220 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[AND(=($1, 'Charlie'), >($7, 100))])\n LogicalJoin(condition=[=($0, $9)], joinType=[full])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalProject(DEPTNO=[CAST($0):INTEGER], NAME=[CAST($1):VARCHAR(10)], EMPNO=[CAST($2):INTEGER], ENAME=[CAST($3):VARCHAR(20)], JOB=[CAST($4):VARCHAR(10)], MGR=[$5], HIREDATE=[CAST($6):TIMESTAMP(0)], SAL=[CAST($7):INTEGER], COMM=[CAST($8):INTEGER], DEPTNO0=[CAST($9):INTEGER], SLACKER=[CAST($10):BOOLEAN])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalFilter(condition=[=($1, 'Charlie')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "FULL", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 6, + "type" : "TIMESTAMP" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFullOuterJoinSimplificationToLeftOuter.json b/tests/calcite/testFullOuterJoinSimplificationToLeftOuter.json new file mode 100644 index 0000000..f403ede --- /dev/null +++ b/tests/calcite/testFullOuterJoinSimplificationToLeftOuter.json @@ -0,0 +1,157 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[=($1, 'Charlie')])\n LogicalJoin(condition=[=($0, $9)], joinType=[full])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalProject(DEPTNO=[CAST($0):INTEGER], NAME=[CAST($1):VARCHAR(10)], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalFilter(condition=[=($1, 'Charlie')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "FULL", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testFullOuterJoinSimplificationToRightOuter.json b/tests/calcite/testFullOuterJoinSimplificationToRightOuter.json new file mode 100644 index 0000000..4df6e05 --- /dev/null +++ b/tests/calcite/testFullOuterJoinSimplificationToRightOuter.json @@ -0,0 +1,181 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[>($7, 100)])\n LogicalJoin(condition=[=($0, $9)], joinType=[full])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[CAST($2):INTEGER], ENAME=[CAST($3):VARCHAR(20)], JOB=[CAST($4):VARCHAR(10)], MGR=[$5], HIREDATE=[CAST($6):TIMESTAMP(0)], SAL=[CAST($7):INTEGER], COMM=[CAST($8):INTEGER], DEPTNO0=[CAST($9):INTEGER], SLACKER=[CAST($10):BOOLEAN])\n LogicalJoin(condition=[=($0, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "FULL", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 6, + "type" : "TIMESTAMP" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testGroupByBooleanLiteralSimple.json b/tests/calcite/testGroupByBooleanLiteralSimple.json new file mode 100644 index 0000000..fbc5393 --- /dev/null +++ b/tests/calcite/testGroupByBooleanLiteralSimple.json @@ -0,0 +1,111 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1])\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\n LogicalProject($f0=[true], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1])\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\n LogicalProject($f0=[$9], SAL=[$5])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalValues(tuples=[[{ true }]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "values" : { + "schema" : [ "BOOLEAN" ], + "content" : [ [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "BOOLEAN" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testGroupByDateLiteralSimple.json b/tests/calcite/testGroupByDateLiteralSimple.json new file mode 100644 index 0000000..f973e65 --- /dev/null +++ b/tests/calcite/testGroupByDateLiteralSimple.json @@ -0,0 +1,111 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1])\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\n LogicalProject($f0=[2022-01-01], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1])\n LogicalAggregate(group=[{0}], EXPR$0=[AVG($1)])\n LogicalProject($f0=[$9], SAL=[$5])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalValues(tuples=[[{ 2022-01-01 }]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "DATE" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "DATE", + "operand" : [ ], + "operator" : "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "DATE" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "values" : { + "schema" : [ "DATE" ], + "content" : [ [ { + "type" : "DATE", + "operand" : [ ], + "operator" : "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "DATE" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testGroupByMultipleLiterals.json b/tests/calcite/testGroupByMultipleLiterals.json new file mode 100644 index 0000000..298c80c --- /dev/null +++ b/tests/calcite/testGroupByMultipleLiterals.json @@ -0,0 +1,186 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$6])\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5}], EXPR$0=[AVG($6)])\n LogicalProject($f0=[false], DEPTNO=[$7], $f2=[true], EMPNO=[$0], $f4=['ab'], $f5=[2022-01-01], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$6])\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5}], EXPR$0=[AVG($6)])\n LogicalProject($f0=[$9], DEPTNO=[$7], $f2=[$10], EMPNO=[$0], $f4=[$11], $f5=[$12], SAL=[$5])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalValues(tuples=[[{ false, true, 'ab', 2022-01-01 }]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BOOLEAN" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "CHAR" + }, { + "column" : 5, + "type" : "DATE" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'ab'" + }, { + "type" : "DATE", + "operand" : [ ], + "operator" : "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "BOOLEAN" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BOOLEAN" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "CHAR" + }, { + "column" : 5, + "type" : "DATE" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "values" : { + "schema" : [ "BOOLEAN", "BOOLEAN", "CHAR", "DATE" ], + "content" : [ [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'ab'" + }, { + "type" : "DATE", + "operand" : [ ], + "operator" : "java.util.GregorianCalendar[time=1640995200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=1,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "BOOLEAN" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "CHAR" + }, { + "column" : 12, + "type" : "DATE" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testInferringPredicatesWithNotOperatorInJoinCondition.json b/tests/calcite/testInferringPredicatesWithNotOperatorInJoinCondition.json new file mode 100644 index 0000000..095b7de --- /dev/null +++ b/tests/calcite/testInferringPredicatesWithNotOperatorInJoinCondition.json @@ -0,0 +1,257 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\n LogicalJoin(condition=[AND(=($16, $7), NOT(OR(=($7, 4), =($7, 6))))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\n LogicalJoin(condition=[=($16, $7)], joinType=[inner])\n LogicalFilter(condition=[NOT(OR(=($7, 4), =($7, 6)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[SEARCH($7, Sarg[(-∞..4), (4..6), (6..+∞)])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "6" + } ], + "operator" : "=" + } ], + "operator" : "OR" + } ], + "operator" : "NOT" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "6" + } ], + "operator" : "=" + } ], + "operator" : "OR" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[(-∞..4), (4..6), (6..+∞)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testInnerCorrelateWithLeftEmpty.json b/tests/calcite/testInnerCorrelateWithLeftEmpty.json new file mode 100644 index 0000000..82b718e --- /dev/null +++ b/tests/calcite/testInnerCorrelateWithLeftEmpty.json @@ -0,0 +1,45 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{7}])\n LogicalValues(tuples=[[]])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT", "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testInnerCorrelateWithRightEmpty.json b/tests/calcite/testInnerCorrelateWithRightEmpty.json new file mode 100644 index 0000000..8240706 --- /dev/null +++ b/tests/calcite/testInnerCorrelateWithRightEmpty.json @@ -0,0 +1,30 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{7}])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalValues(tuples=[[]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT", "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testIntersectToDistinct.json b/tests/calcite/testIntersectToDistinct.json new file mode 100644 index 0000000..5f07038 --- /dev/null +++ b/tests/calcite/testIntersectToDistinct.json @@ -0,0 +1,522 @@ +{ + "help" : [ "LogicalIntersect(all=[false])\n LogicalIntersect(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($9, 3)])\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5, 6, 7, 8}], agg#0=[COUNT()])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5, 6, 7, 8}], agg#0=[COUNT()])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5, 6, 7, 8}], agg#0=[COUNT()])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1, 2, 3, 4, 5, 6, 7, 8}], agg#0=[COUNT()])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "intersect" : [ { + "intersect" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + } ] + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinAssociateRuleWithBottomAlwaysTrueConditionAllowed.json b/tests/calcite/testJoinAssociateRuleWithBottomAlwaysTrueConditionAllowed.json new file mode 100644 index 0000000..d64785c --- /dev/null +++ b/tests/calcite/testJoinAssociateRuleWithBottomAlwaysTrueConditionAllowed.json @@ -0,0 +1,114 @@ +{ + "help" : [ "LogicalJoin(condition=[=($2, $12)], joinType=[inner])\n LogicalJoin(condition=[=($7, $8)], joinType=[inner])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalTableScan(table=[[scott, BONUS]])\n", "LogicalJoin(condition=[AND(=($2, $12), =($7, $8))], joinType=[inner])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalTableScan(table=[[scott, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + }, { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "DECIMAL", "DECIMAL" ], + "nullable" : [ true, true, true, true ], + "name" : "scott.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ], [ 3 ] ] + } ], + "queries" : [ { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 2 + } + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "scan" : 2 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinAssociateRuleWithTopAlwaysTrueConditionAllowed.json b/tests/calcite/testJoinAssociateRuleWithTopAlwaysTrueConditionAllowed.json new file mode 100644 index 0000000..f5acb23 --- /dev/null +++ b/tests/calcite/testJoinAssociateRuleWithTopAlwaysTrueConditionAllowed.json @@ -0,0 +1,94 @@ +{ + "help" : [ "LogicalJoin(condition=[=($7, $12)], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalTableScan(table=[[scott, BONUS]])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalJoin(condition=[=($7, $12)], joinType=[inner])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[scott, BONUS]])\n LogicalTableScan(table=[[scott, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "DECIMAL", "DECIMAL" ], + "nullable" : [ true, true, true, true ], + "name" : "scott.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ], [ 3 ] ] + }, { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 12, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 2 + } + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 12, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "scan" : 2 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinCommuteRuleWithAlwaysTrueConditionAllowed.json b/tests/calcite/testJoinCommuteRuleWithAlwaysTrueConditionAllowed.json new file mode 100644 index 0000000..54d67e0 --- /dev/null +++ b/tests/calcite/testJoinCommuteRuleWithAlwaysTrueConditionAllowed.json @@ -0,0 +1,87 @@ +{ + "help" : [ "LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalProject(EMPNO=[$3], ENAME=[$4], JOB=[$5], MGR=[$6], HIREDATE=[$7], SAL=[$8], COMM=[$9], DEPTNO=[$10], DEPTNO0=[$0], DNAME=[$1], LOC=[$2])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + }, { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "SMALLINT" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "SMALLINT" + }, { + "column" : 7, + "type" : "DATE" + }, { + "column" : 8, + "type" : "DECIMAL" + }, { + "column" : 9, + "type" : "DECIMAL" + }, { + "column" : 10, + "type" : "TINYINT" + }, { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinConditionPushdown1.json b/tests/calcite/testJoinConditionPushdown1.json new file mode 100644 index 0000000..3fa9c63 --- /dev/null +++ b/tests/calcite/testJoinConditionPushdown1.json @@ -0,0 +1,246 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17], DEPTNO1=[$18], NAME=[$19])\n LogicalFilter(condition=[AND(=($7, $18), =($16, $18))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17], DEPTNO1=[$18], NAME=[$19])\n LogicalJoin(condition=[=($7, $18)], joinType=[inner])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + }, { + "column" : 18, + "type" : "INTEGER" + }, { + "column" : 19, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + }, { + "column" : 18, + "type" : "INTEGER" + }, { + "column" : 19, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinConditionPushdown2.json b/tests/calcite/testJoinConditionPushdown2.json new file mode 100644 index 0000000..bd1f13a --- /dev/null +++ b/tests/calcite/testJoinConditionPushdown2.json @@ -0,0 +1,175 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalFilter(condition=[AND(=($7, $9), =($0, $9))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalFilter(condition=[=($7, $0)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinConditionPushdown4.json b/tests/calcite/testJoinConditionPushdown4.json new file mode 100644 index 0000000..34df359 --- /dev/null +++ b/tests/calcite/testJoinConditionPushdown4.json @@ -0,0 +1,150 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalJoin(condition=[AND(=($0, $2), =($0, $3))], joinType=[semi])\n LogicalProject(DEPTNO=[$7], ENAME=[$1])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalProject(DEPTNO=[$0], DNAME=[$1])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalProject(DEPTNO=[$7], ENAME=[$1])\n LogicalJoin(condition=[=($7, $8)], joinType=[semi])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalFilter(condition=[=($0, $1)])\n LogicalProject(DEPTNO=[$0], DNAME=[$1])\n LogicalTableScan(table=[[scott, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + }, { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 2, + "type" : "TINYINT" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinConditionPushdown6.json b/tests/calcite/testJoinConditionPushdown6.json new file mode 100644 index 0000000..004a944 --- /dev/null +++ b/tests/calcite/testJoinConditionPushdown6.json @@ -0,0 +1,166 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[AND(=($7, $9), =($0, $9))], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalFilter(condition=[=($7, $0)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinDeriveIsNotNullFilterRule1.json b/tests/calcite/testJoinDeriveIsNotNullFilterRule1.json new file mode 100644 index 0000000..75b32c9 --- /dev/null +++ b/tests/calcite/testJoinDeriveIsNotNullFilterRule1.json @@ -0,0 +1,94 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=($3, $12)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=($3, $12)], joinType=[inner])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinDeriveIsNotNullFilterRule12.json b/tests/calcite/testJoinDeriveIsNotNullFilterRule12.json new file mode 100644 index 0000000..033160e --- /dev/null +++ b/tests/calcite/testJoinDeriveIsNotNullFilterRule12.json @@ -0,0 +1,122 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[AND(=($1, $10), IS NOT DISTINCT FROM($3, $12))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[AND(=($1, $10), IS NOT DISTINCT FROM($3, $12))], joinType=[inner])\n LogicalFilter(condition=[IS NOT NULL($1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalFilter(condition=[IS NOT NULL($1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + } ], + "operator" : "AND" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinDeriveIsNotNullFilterRule15.json b/tests/calcite/testJoinDeriveIsNotNullFilterRule15.json new file mode 100644 index 0000000..d38aa4f --- /dev/null +++ b/tests/calcite/testJoinDeriveIsNotNullFilterRule15.json @@ -0,0 +1,120 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=(CASE(=($1, $10), null:VARCHAR(20), $1), 'abc')], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=(CASE(=($1, $10), null:VARCHAR(20), $1), 'abc')], joinType=[inner])\n LogicalFilter(condition=[IS NOT NULL($1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CASE" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'abc'" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CASE" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'abc'" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinDeriveIsNotNullFilterRule2.json b/tests/calcite/testJoinDeriveIsNotNullFilterRule2.json new file mode 100644 index 0000000..de81c4f --- /dev/null +++ b/tests/calcite/testJoinDeriveIsNotNullFilterRule2.json @@ -0,0 +1,170 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=($3, $12)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=($3, $12)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinDeriveIsNotNullFilterRule3.json b/tests/calcite/testJoinDeriveIsNotNullFilterRule3.json new file mode 100644 index 0000000..682e8d3 --- /dev/null +++ b/tests/calcite/testJoinDeriveIsNotNullFilterRule3.json @@ -0,0 +1,94 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[>($3, $12)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[>($3, $12)], joinType=[inner])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : ">" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : ">" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinDeriveIsNotNullFilterRule4.json b/tests/calcite/testJoinDeriveIsNotNullFilterRule4.json new file mode 100644 index 0000000..aa22a02 --- /dev/null +++ b/tests/calcite/testJoinDeriveIsNotNullFilterRule4.json @@ -0,0 +1,144 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[AND(=($1, $10), >($3, $12))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[AND(=($1, $10), >($3, $12))], joinType=[inner])\n LogicalFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($3))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalFilter(condition=[AND(IS NOT NULL($1), IS NOT NULL($3))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinDeriveIsNotNullFilterRule5.json b/tests/calcite/testJoinDeriveIsNotNullFilterRule5.json new file mode 100644 index 0000000..fddb086 --- /dev/null +++ b/tests/calcite/testJoinDeriveIsNotNullFilterRule5.json @@ -0,0 +1,144 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$1])\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\n LogicalProject(ENAME=[$1], DEPTNO=[+($7, 1)])\n LogicalFilter(condition=[IS NOT NULL($1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(DEPTNO=[$1])\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\n LogicalProject(ENAME=[$1], DEPTNO=[+($7, 1)])\n LogicalFilter(condition=[IS NOT NULL($1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalFilter(condition=[IS NOT NULL($1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinProjectTranspose1.json b/tests/calcite/testJoinProjectTranspose1.json new file mode 100644 index 0000000..109cff4 --- /dev/null +++ b/tests/calcite/testJoinProjectTranspose1.json @@ -0,0 +1,159 @@ +{ + "help" : [ "LogicalProject(NAME=[$0])\n LogicalJoin(condition=[$1], joinType=[right])\n LogicalProject(NAME=[$1], $f4=[$5])\n LogicalJoin(condition=[$4], joinType=[left])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[>($0, 10)], $f4=[>($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$1])\n LogicalJoin(condition=[>($2, 10)], joinType=[right])\n LogicalJoin(condition=[>($2, 10)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "column" : 1, + "type" : "BOOLEAN" + }, + "left" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "column" : 4, + "type" : "BOOLEAN" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 0 + } + } + }, + "kind" : "RIGHT", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinProjectTranspose7.json b/tests/calcite/testJoinProjectTranspose7.json new file mode 100644 index 0000000..71a98c0 --- /dev/null +++ b/tests/calcite/testJoinProjectTranspose7.json @@ -0,0 +1,104 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2])\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2])\n LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$3])\n LogicalJoin(condition=[=($1, $3)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinProjectTranspose8.json b/tests/calcite/testJoinProjectTranspose8.json new file mode 100644 index 0000000..9585464 --- /dev/null +++ b/tests/calcite/testJoinProjectTranspose8.json @@ -0,0 +1,148 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2], EXPR$1=[$3])\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$1], EXPR$1=[AND(>($0, 10), null)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$2], EXPR$1=[$3])\n LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[$3], EXPR$1=[AND(>($2, 10), null)])\n LogicalJoin(condition=[=($1, $3)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "AND" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "AND" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinProjectTransposeWindow.json b/tests/calcite/testJoinProjectTransposeWindow.json new file mode 100644 index 0000000..9c6198d --- /dev/null +++ b/tests/calcite/testJoinProjectTransposeWindow.json @@ -0,0 +1,176 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1], R=[$3], EXPR$1=[$4])\n LogicalJoin(condition=[=($2, $3)], joinType=[inner])\n LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[CAST($1):BIGINT NOT NULL])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(R=[RANK() OVER (ORDER BY $1)], EXPR$1=[+(1, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1], R=[$3], EXPR$1=[$4])\n LogicalProject(DEPTNO=[$0], NAME=[$1], NAME0=[CAST($1):BIGINT NOT NULL], R=[$2], EXPR$1=[$3])\n LogicalJoin(condition=[=(CAST($1):BIGINT NOT NULL, $2)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(R=[RANK() OVER (ORDER BY $1)], EXPR$1=[+(1, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "RANK" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 4, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "RANK" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 4, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testJoinPushTransitivePredicatesRule2.json b/tests/calcite/testJoinPushTransitivePredicatesRule2.json new file mode 100644 index 0000000..3d42983 --- /dev/null +++ b/tests/calcite/testJoinPushTransitivePredicatesRule2.json @@ -0,0 +1,646 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalJoin(condition=[AND(=($5, $11), =($9, $12))], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8], SAL0=[$5], $f9=[=($5, 4)])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalFilter(condition=[=($1, $0)])\n LogicalAggregate(group=[{0, 1, 2}])\n LogicalProject(SAL=[$5], SAL0=[$8], $f9=[$9])\n LogicalJoin(condition=[OR(=($8, $5), $9)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(SAL=[$5], $f9=[=($5, 4)])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(SAL=[$5])\n LogicalJoin(condition=[AND(=($5, $11), =($9, $12))], joinType=[inner])\n LogicalFilter(condition=[>($5, 1000)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8], SAL0=[$5], $f9=[=($5, 4)])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalFilter(condition=[=($1, $0)])\n LogicalAggregate(group=[{0, 1, 2}])\n LogicalProject(SAL=[$5], SAL0=[$8], $f9=[$9])\n LogicalJoin(condition=[OR(=($8, $5), $9)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(SAL=[$5], $f9=[=($5, 4)])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + }, { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + } ] + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "OR" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "BOOLEAN" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + }, { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "OR" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BOOLEAN" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "BOOLEAN" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftCorrelateWithBothEmpty1.json b/tests/calcite/testLeftCorrelateWithBothEmpty1.json new file mode 100644 index 0000000..c75541e --- /dev/null +++ b/tests/calcite/testLeftCorrelateWithBothEmpty1.json @@ -0,0 +1,67 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalValues(tuples=[[]])\n LogicalValues(tuples=[[]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], DEPTNO0=[null:TINYINT], DNAME=[null:VARCHAR(14)], LOC=[null:VARCHAR(13)])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "LEFT", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "SMALLINT" + }, { + "column" : 4, + "type" : "DATE" + }, { + "column" : 5, + "type" : "DECIMAL" + }, { + "column" : 6, + "type" : "DECIMAL" + }, { + "column" : 7, + "type" : "TINYINT" + }, { + "type" : "TINYINT", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftCorrelateWithBothEmpty2.json b/tests/calcite/testLeftCorrelateWithBothEmpty2.json new file mode 100644 index 0000000..0f8190c --- /dev/null +++ b/tests/calcite/testLeftCorrelateWithBothEmpty2.json @@ -0,0 +1,26 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalValues(tuples=[[]])\n LogicalValues(tuples=[[]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "LEFT", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT", "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftCorrelateWithBothEmpty3.json b/tests/calcite/testLeftCorrelateWithBothEmpty3.json new file mode 100644 index 0000000..c75541e --- /dev/null +++ b/tests/calcite/testLeftCorrelateWithBothEmpty3.json @@ -0,0 +1,67 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalValues(tuples=[[]])\n LogicalValues(tuples=[[]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], DEPTNO0=[null:TINYINT], DNAME=[null:VARCHAR(14)], LOC=[null:VARCHAR(13)])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "LEFT", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "SMALLINT" + }, { + "column" : 4, + "type" : "DATE" + }, { + "column" : 5, + "type" : "DECIMAL" + }, { + "column" : 6, + "type" : "DECIMAL" + }, { + "column" : 7, + "type" : "TINYINT" + }, { + "type" : "TINYINT", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftCorrelateWithLeftEmpty.json b/tests/calcite/testLeftCorrelateWithLeftEmpty.json new file mode 100644 index 0000000..55449d2 --- /dev/null +++ b/tests/calcite/testLeftCorrelateWithLeftEmpty.json @@ -0,0 +1,45 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalValues(tuples=[[]])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "LEFT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT", "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftCorrelateWithRightEmpty.json b/tests/calcite/testLeftCorrelateWithRightEmpty.json new file mode 100644 index 0000000..1667d56 --- /dev/null +++ b/tests/calcite/testLeftCorrelateWithRightEmpty.json @@ -0,0 +1,68 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalValues(tuples=[[]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], DEPTNO0=[null:TINYINT], DNAME=[null:VARCHAR(14)], LOC=[null:VARCHAR(13)])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "SMALLINT" + }, { + "column" : 4, + "type" : "DATE" + }, { + "column" : 5, + "type" : "DECIMAL" + }, { + "column" : 6, + "type" : "DECIMAL" + }, { + "column" : 7, + "type" : "TINYINT" + }, { + "type" : "TINYINT", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftEmptyAntiJoin.json b/tests/calcite/testLeftEmptyAntiJoin.json new file mode 100644 index 0000000..38d9e60 --- /dev/null +++ b/tests/calcite/testLeftEmptyAntiJoin.json @@ -0,0 +1,57 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalJoin(condition=[=($7, $8)], joinType=[anti])\n LogicalValues(tuples=[[]])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalProject(EMPNO=[$0])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "ANTI", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftEmptyFullJoin.json b/tests/calcite/testLeftEmptyFullJoin.json new file mode 100644 index 0000000..e8a520e --- /dev/null +++ b/tests/calcite/testLeftEmptyFullJoin.json @@ -0,0 +1,214 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[full])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalProject(EMPNO=[null:INTEGER], ENAME=[null:VARCHAR(20)], JOB=[null:VARCHAR(10)], MGR=[null:INTEGER], HIREDATE=[null:TIMESTAMP(0)], SAL=[null:INTEGER], COMM=[null:INTEGER], DEPTNO=[null:INTEGER], SLACKER=[null:BOOLEAN], DEPTNO0=[CAST($0):INTEGER], NAME=[CAST($1):VARCHAR(10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "FULL", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "TIMESTAMP", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftEmptyInnerJoin.json b/tests/calcite/testLeftEmptyInnerJoin.json new file mode 100644 index 0000000..9e73941 --- /dev/null +++ b/tests/calcite/testLeftEmptyInnerJoin.json @@ -0,0 +1,162 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN", "INTEGER", "VARCHAR" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftEmptyLeftJoin.json b/tests/calcite/testLeftEmptyLeftJoin.json new file mode 100644 index 0000000..79bd576 --- /dev/null +++ b/tests/calcite/testLeftEmptyLeftJoin.json @@ -0,0 +1,162 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN", "INTEGER", "VARCHAR" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftEmptyRightJoin.json b/tests/calcite/testLeftEmptyRightJoin.json new file mode 100644 index 0000000..3f923c9 --- /dev/null +++ b/tests/calcite/testLeftEmptyRightJoin.json @@ -0,0 +1,206 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalProject(EMPNO=[null:INTEGER], ENAME=[null:VARCHAR(20)], JOB=[null:VARCHAR(10)], MGR=[null:INTEGER], HIREDATE=[null:TIMESTAMP(0)], SAL=[null:INTEGER], COMM=[null:INTEGER], DEPTNO=[null:INTEGER], SLACKER=[null:BOOLEAN], DEPTNO0=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "TIMESTAMP", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftEmptySemiJoin.json b/tests/calcite/testLeftEmptySemiJoin.json new file mode 100644 index 0000000..5efb37d --- /dev/null +++ b/tests/calcite/testLeftEmptySemiJoin.json @@ -0,0 +1,57 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalJoin(condition=[=($7, $8)], joinType=[semi])\n LogicalValues(tuples=[[]])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalProject(EMPNO=[$0])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "SEMI", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testLeftOuterJoinSimplificationToInner.json b/tests/calcite/testLeftOuterJoinSimplificationToInner.json new file mode 100644 index 0000000..143a3d1 --- /dev/null +++ b/tests/calcite/testLeftOuterJoinSimplificationToInner.json @@ -0,0 +1,181 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[>($7, 100)])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[CAST($2):INTEGER], ENAME=[CAST($3):VARCHAR(20)], JOB=[CAST($4):VARCHAR(10)], MGR=[$5], HIREDATE=[CAST($6):TIMESTAMP(0)], SAL=[CAST($7):INTEGER], COMM=[CAST($8):INTEGER], DEPTNO0=[CAST($9):INTEGER], SLACKER=[CAST($10):BOOLEAN])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 6, + "type" : "TIMESTAMP" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMaxReuseDistinctAttrWithMixedOptionality.json b/tests/calcite/testMaxReuseDistinctAttrWithMixedOptionality.json new file mode 100644 index 0000000..29d218c --- /dev/null +++ b/tests/calcite/testMaxReuseDistinctAttrWithMixedOptionality.json @@ -0,0 +1,107 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[MAX($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT($0)], EXPR$2=[MAX($0)])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMergeFilter.json b/tests/calcite/testMergeFilter.json new file mode 100644 index 0000000..e92467d --- /dev/null +++ b/tests/calcite/testMergeFilter.json @@ -0,0 +1,102 @@ +{ + "help" : [ "LogicalProject(NAME=[$1])\n LogicalFilter(condition=[=($0, 10)])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$1])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMergeIntersect.json b/tests/calcite/testMergeIntersect.json new file mode 100644 index 0000000..5f2cad9 --- /dev/null +++ b/tests/calcite/testMergeIntersect.json @@ -0,0 +1,318 @@ +{ + "help" : [ "LogicalIntersect(all=[false])\n LogicalIntersect(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalIntersect(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "intersect" : [ { + "intersect" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "intersect" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMergeJoinFilter.json b/tests/calcite/testMergeJoinFilter.json new file mode 100644 index 0000000..07d6901 --- /dev/null +++ b/tests/calcite/testMergeJoinFilter.json @@ -0,0 +1,152 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], ENAME=[$1])\n LogicalFilter(condition=[=($0, 10)])\n LogicalProject(DEPTNO=[$9], ENAME=[$1])\n LogicalJoin(condition=[AND(=($7, $9), =($9, 10))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], ENAME=[$1])\n LogicalProject(DEPTNO=[$9], ENAME=[$1])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMergeMinus.json b/tests/calcite/testMergeMinus.json new file mode 100644 index 0000000..68030ad --- /dev/null +++ b/tests/calcite/testMergeMinus.json @@ -0,0 +1,318 @@ +{ + "help" : [ "LogicalMinus(all=[false])\n LogicalMinus(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalMinus(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "except" : [ { + "except" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "except" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMergeUnionAll.json b/tests/calcite/testMergeUnionAll.json new file mode 100644 index 0000000..97a3907 --- /dev/null +++ b/tests/calcite/testMergeUnionAll.json @@ -0,0 +1,318 @@ +{ + "help" : [ "LogicalUnion(all=[true])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "union" : [ { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMergeUnionDistinct.json b/tests/calcite/testMergeUnionDistinct.json new file mode 100644 index 0000000..cebac8c --- /dev/null +++ b/tests/calcite/testMergeUnionDistinct.json @@ -0,0 +1,324 @@ +{ + "help" : [ "LogicalUnion(all=[false])\n LogicalUnion(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalUnion(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "distinct" : { + "union" : [ { + "distinct" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } + }, { + "distinct" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMergeUnionMixed2.json b/tests/calcite/testMergeUnionMixed2.json new file mode 100644 index 0000000..9633529 --- /dev/null +++ b/tests/calcite/testMergeUnionMixed2.json @@ -0,0 +1,322 @@ +{ + "help" : [ "LogicalUnion(all=[false])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalUnion(all=[false])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 30)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "distinct" : { + "union" : [ { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } + }, { + "distinct" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMinReuseDistinctAttrWithMixedOptionality.json b/tests/calcite/testMinReuseDistinctAttrWithMixedOptionality.json new file mode 100644 index 0000000..773f3e1 --- /dev/null +++ b/tests/calcite/testMinReuseDistinctAttrWithMixedOptionality.json @@ -0,0 +1,107 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM(DISTINCT $0)], EXPR$1=[COUNT(DISTINCT $0)], EXPR$2=[MIN($0)])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[COUNT($0)], EXPR$2=[MIN($0)])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testMultipleDistinctWithGrouping.json b/tests/calcite/testMultipleDistinctWithGrouping.json new file mode 100644 index 0000000..addcecf --- /dev/null +++ b/tests/calcite/testMultipleDistinctWithGrouping.json @@ -0,0 +1,234 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[AVG(DISTINCT $1)], EXPR$3=[SUM(DISTINCT $0)])\n LogicalProject(SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$0], EXPR$1=[$1], EXPR$2=[$3], EXPR$3=[$5])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $4)], joinType=[inner])\n LogicalJoin(condition=[IS NOT DISTINCT FROM($0, $2)], joinType=[inner])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$2=[AVG($1)])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$3=[SUM($0)])\n LogicalAggregate(group=[{0}])\n LogicalProject(SAL=[$0])\n LogicalProject(SAL=[$5], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testNoOversimplificationBelowIsNull.json b/tests/calcite/testNoOversimplificationBelowIsNull.json new file mode 100644 index 0000000..a2563fe --- /dev/null +++ b/tests/calcite/testNoOversimplificationBelowIsNull.json @@ -0,0 +1,203 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NULL(OR(AND(=($0, 1), =($3, 1)), AND(=($0, null), =($3, 1))))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NULL(OR(AND(=($0, 1), =($3, 1)), AND(null, =($3, 1))))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ], + "operator" : "IS NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ], + "operator" : "IS NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testOrAlwaysTrue.json b/tests/calcite/testOrAlwaysTrue.json new file mode 100644 index 0000000..8b6f793 --- /dev/null +++ b/tests/calcite/testOrAlwaysTrue.json @@ -0,0 +1,217 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$7])\n LogicalFilter(condition=[OR(IS NULL($5), IS NOT NULL($5))])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$7])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testOrAlwaysTrue2.json b/tests/calcite/testOrAlwaysTrue2.json new file mode 100644 index 0000000..6643153 --- /dev/null +++ b/tests/calcite/testOrAlwaysTrue2.json @@ -0,0 +1,217 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$7])\n LogicalFilter(condition=[OR(IS NOT NULL($5), IS NULL($5))])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$7])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 20), >($5, 1000))])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testOversimplifiedCaseStatement.json b/tests/calcite/testOversimplifiedCaseStatement.json new file mode 100644 index 0000000..2557929 --- /dev/null +++ b/tests/calcite/testOversimplifiedCaseStatement.json @@ -0,0 +1,194 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(>($3, 0), >(CASE(>($3, 0), /($7, $3), null:INTEGER), 1))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(>($3, 0), CASE(>($3, 0), >(/($7, $3), 1), false))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "/" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "/" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectAggregateMerge.json b/tests/calcite/testProjectAggregateMerge.json new file mode 100644 index 0000000..c92a994 --- /dev/null +++ b/tests/calcite/testProjectAggregateMerge.json @@ -0,0 +1,125 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($1, $3)])\n LogicalAggregate(group=[{0, 1}], MS=[MIN($2)], SS=[SUM($2)])\n LogicalProject(JOB=[$2], DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject($f0=[+($1, $2)])\n LogicalAggregate(group=[{0, 1}], SS=[SUM($2)])\n LogicalProject(JOB=[$2], DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectAggregateMergeSum0.json b/tests/calcite/testProjectAggregateMergeSum0.json new file mode 100644 index 0000000..c21a84c --- /dev/null +++ b/tests/calcite/testProjectAggregateMergeSum0.json @@ -0,0 +1,89 @@ +{ + "help" : [ "LogicalProject(SS0=[CASE(IS NOT NULL($0), CAST($0):INTEGER NOT NULL, 0)])\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)])\n LogicalProject(SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], agg#0=[$SUM0($0)])\n LogicalProject(SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "CASE" + } ] + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectAggregateMergeSum0AndSum.json b/tests/calcite/testProjectAggregateMergeSum0AndSum.json new file mode 100644 index 0000000..e3f190b --- /dev/null +++ b/tests/calcite/testProjectAggregateMergeSum0AndSum.json @@ -0,0 +1,128 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[*($0, 2)], SS0=[CASE(IS NOT NULL($0), CAST($0):INTEGER NOT NULL, 0)])\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)])\n LogicalProject(SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject($f0=[*($0, 2)], $f1=[$1])\n LogicalAggregate(group=[{}], SUM_SAL=[SUM($0)], agg#1=[$SUM0($0)])\n LogicalProject(SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "CASE" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectCorrelateTransposeRuleAntiCorrelate.json b/tests/calcite/testProjectCorrelateTransposeRuleAntiCorrelate.json new file mode 100644 index 0000000..1b7d26b --- /dev/null +++ b/tests/calcite/testProjectCorrelateTransposeRuleAntiCorrelate.json @@ -0,0 +1,112 @@ +{ + "help" : [ "LogicalProject(f=[$0])\n LogicalCorrelate(correlation=[$cor0], joinType=[anti], requiredColumns=[{0}])\n LogicalValues(tuples=[[{ '1', '2' }]])\n LogicalProject(f3=[$0], $f1=[$cor0.f])\n LogicalValues(tuples=[[{ '1', '2' }]])\n", "LogicalCorrelate(correlation=[$cor0], joinType=[anti], requiredColumns=[{0}])\n LogicalProject(f=[$0])\n LogicalValues(tuples=[[{ '1', '2' }]])\n LogicalProject\n LogicalProject(f3=[$0], $f1=[$cor0.f])\n LogicalValues(tuples=[[{ '1', '2' }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "kind" : "ANTI", + "right" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "target" : [ { + "column" : 2, + "type" : "CHAR" + }, { + "column" : 0, + "type" : "CHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "CHAR" + } ] + } + }, { + "correlate" : { + "left" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "CHAR" + } ] + } + }, + "kind" : "ANTI", + "right" : { + "project" : { + "source" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "target" : [ { + "column" : 1, + "type" : "CHAR" + }, { + "column" : 0, + "type" : "CHAR" + } ] + } + }, + "target" : [ ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectCorrelateTransposeRuleLeftCorrelate.json b/tests/calcite/testProjectCorrelateTransposeRuleLeftCorrelate.json new file mode 100644 index 0000000..1b7d5de --- /dev/null +++ b/tests/calcite/testProjectCorrelateTransposeRuleLeftCorrelate.json @@ -0,0 +1,195 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[IS NOT NULL($1)])\n LogicalProject(EMPNO=[$0], $f0=[$2])\n LogicalCorrelate(correlation=[$cor2], joinType=[left], requiredColumns=[{1}])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject($f0=[$0])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalFilter(condition=[=($cor2.DEPTNO, $0)])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "project" : { + "source" : { + "correlate" : { + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectCorrelateTransposeRuleSemiCorrelate.json b/tests/calcite/testProjectCorrelateTransposeRuleSemiCorrelate.json new file mode 100644 index 0000000..769484d --- /dev/null +++ b/tests/calcite/testProjectCorrelateTransposeRuleSemiCorrelate.json @@ -0,0 +1,112 @@ +{ + "help" : [ "LogicalProject(f=[$0])\n LogicalCorrelate(correlation=[$cor0], joinType=[semi], requiredColumns=[{0}])\n LogicalValues(tuples=[[{ '1', '2' }]])\n LogicalProject(f3=[$0], $f1=[$cor0.f])\n LogicalValues(tuples=[[{ '1', '2' }]])\n", "LogicalCorrelate(correlation=[$cor0], joinType=[semi], requiredColumns=[{0}])\n LogicalProject(f=[$0])\n LogicalValues(tuples=[[{ '1', '2' }]])\n LogicalProject\n LogicalProject(f3=[$0], $f1=[$cor0.f])\n LogicalValues(tuples=[[{ '1', '2' }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "target" : [ { + "column" : 2, + "type" : "CHAR" + }, { + "column" : 0, + "type" : "CHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "CHAR" + } ] + } + }, { + "correlate" : { + "left" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "CHAR" + } ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "CHAR", "CHAR" ], + "content" : [ [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'1'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'2'" + } ] ] + } + }, + "target" : [ { + "column" : 1, + "type" : "CHAR" + }, { + "column" : 0, + "type" : "CHAR" + } ] + } + }, + "target" : [ ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectFilterTransposeRuleOnEmptyRowType.json b/tests/calcite/testProjectFilterTransposeRuleOnEmptyRowType.json new file mode 100644 index 0000000..7d1ad97 --- /dev/null +++ b/tests/calcite/testProjectFilterTransposeRuleOnEmptyRowType.json @@ -0,0 +1,66 @@ +{ + "help" : [ "LogicalProject\n LogicalFilter(condition=[=($7, 20)])\n LogicalTableScan(table=[[scott, EMP]])\n", "LogicalProject\n LogicalFilter(condition=[=($0, 20)])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "TINYINT" + } ] + } + } + } + }, + "target" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectJoinRemove1.json b/tests/calcite/testProjectJoinRemove1.json new file mode 100644 index 0000000..b6e246d --- /dev/null +++ b/tests/calcite/testProjectJoinRemove1.json @@ -0,0 +1,102 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7], DEPTNO0=[$11])\n LogicalJoin(condition=[=($7, $11)], joinType=[left])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$7], DEPTNO0=[$9])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectJoinRemove10.json b/tests/calcite/testProjectJoinRemove10.json new file mode 100644 index 0000000..d3d698f --- /dev/null +++ b/tests/calcite/testProjectJoinRemove10.json @@ -0,0 +1,64 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectJoinRemove4.json b/tests/calcite/testProjectJoinRemove4.json new file mode 100644 index 0000000..44d19c1 --- /dev/null +++ b/tests/calcite/testProjectJoinRemove4.json @@ -0,0 +1,58 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectJoinRemove7.json b/tests/calcite/testProjectJoinRemove7.json new file mode 100644 index 0000000..93142ef --- /dev/null +++ b/tests/calcite/testProjectJoinRemove7.json @@ -0,0 +1,58 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$9])\n LogicalJoin(condition=[=($9, $0)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectJoinTransposeItem.json b/tests/calcite/testProjectJoinTransposeItem.json new file mode 100644 index 0000000..7414c19 --- /dev/null +++ b/tests/calcite/testProjectJoinTransposeItem.json @@ -0,0 +1,206 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[ITEM($0, 0)], EXPR$1=[ITEM($2, 0)])\n LogicalJoin(condition=[=($1, $3)], joinType=[left])\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$3])\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\n LogicalProject($f1=[$1], EXPR$0=[ITEM($0, 0)])\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\n LogicalProject($f1=[$1], EXPR$0=[ITEM($0, 0)])\n LogicalProject(C_NATIONKEY=[$0], $f1=[ITEM($0, 0)])\n LogicalTableScan(table=[[CATALOG, SALES, CUSTOMER]])\n" ], + "schemas" : [ { + "types" : [ "ANY" ], + "nullable" : [ true ], + "name" : "CATALOG.SALES.CUSTOMER", + "guaranteed" : [ ], + "fields" : [ "C_NATIONKEY" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "ANY" + }, { + "column" : 3, + "type" : "ANY" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "ANY", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "ANY", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + } ] + } + } + } + }, + "target" : [ { + "type" : "ANY", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + }, { + "type" : "ANY", + "operand" : [ { + "column" : 2, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "column" : 2, + "type" : "ANY" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "ANY", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + } ] + } + }, + "target" : [ { + "column" : 1, + "type" : "ANY" + }, { + "type" : "ANY", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "ANY", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + } ] + } + }, + "target" : [ { + "column" : 1, + "type" : "ANY" + }, { + "type" : "ANY", + "operand" : [ { + "column" : 0, + "type" : "ANY" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ITEM" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "ANY" + }, { + "column" : 3, + "type" : "ANY" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testProjectSetOpTranspose.json b/tests/calcite/testProjectSetOpTranspose.json new file mode 100644 index 0000000..7ed8d6e --- /dev/null +++ b/tests/calcite/testProjectSetOpTranspose.json @@ -0,0 +1,234 @@ +{ + "help" : [ "LogicalProject(JOB=[$2], EXPR$1=[SUM(+($5, 100)) OVER (PARTITION BY $7)])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(JOB=[$0], EXPR$1=[SUM($2) OVER (PARTITION BY $1)])\n LogicalUnion(all=[true])\n LogicalProject(JOB=[$2], DEPTNO=[$7], EXPR$0=[+($5, 100)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(JOB=[$2], DEPTNO=[$7], EXPR$0=[+($5, 100)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "+" + } ], + "operator" : "SUM" + } ] + } + }, { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "+" + } ] + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullAggregateThroughUnion.json b/tests/calcite/testPullAggregateThroughUnion.json new file mode 100644 index 0000000..942c0f4 --- /dev/null +++ b/tests/calcite/testPullAggregateThroughUnion.json @@ -0,0 +1,116 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + } ] + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullAggregateThroughUnion2.json b/tests/calcite/testPullAggregateThroughUnion2.json new file mode 100644 index 0000000..942c0f4 --- /dev/null +++ b/tests/calcite/testPullAggregateThroughUnion2.json @@ -0,0 +1,116 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + } ] + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullAggregateThroughUnionAndAddProjects.json b/tests/calcite/testPullAggregateThroughUnionAndAddProjects.json new file mode 100644 index 0000000..2c52a6e --- /dev/null +++ b/tests/calcite/testPullAggregateThroughUnionAndAddProjects.json @@ -0,0 +1,116 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(JOB=[$2], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(JOB=[$2], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalProject(JOB=[$2], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(JOB=[$2], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullAggregateThroughUnionWithAlias.json b/tests/calcite/testPullAggregateThroughUnionWithAlias.json new file mode 100644 index 0000000..fe80dfe --- /dev/null +++ b/tests/calcite/testPullAggregateThroughUnionWithAlias.json @@ -0,0 +1,128 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(JOB=[$2], C=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(JOB=[$2], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}])\n LogicalProject(JOB=[$0], C=[$1])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{2, 7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(JOB=[$2], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantIntoFilter.json b/tests/calcite/testPullConstantIntoFilter.json new file mode 100644 index 0000000..d34c5dd --- /dev/null +++ b/tests/calcite/testPullConstantIntoFilter.json @@ -0,0 +1,215 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[>(+($7, 5), $0)])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[>(15, $0)])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : ">" + }, + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "15" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : ">" + }, + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantIntoJoin.json b/tests/calcite/testPullConstantIntoJoin.json new file mode 100644 index 0000000..2da3e6e --- /dev/null +++ b/tests/calcite/testPullConstantIntoJoin.json @@ -0,0 +1,243 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[true], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantIntoJoin2.json b/tests/calcite/testPullConstantIntoJoin2.json new file mode 100644 index 0000000..88d689d --- /dev/null +++ b/tests/calcite/testPullConstantIntoJoin2.json @@ -0,0 +1,326 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$10], NAME=[$11])\n LogicalJoin(condition=[AND(=($0, $10), =($9, $12))], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[10], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[10], NAME=[$11])\n LogicalJoin(condition=[=($9, 15)], joinType=[inner])\n LogicalProject(EMPNO=[10], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, 10)])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[10], NAME=[$1], $f2=[15])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 10, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "15" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "15" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 11, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantIntoProject.json b/tests/calcite/testPullConstantIntoProject.json new file mode 100644 index 0000000..196731f --- /dev/null +++ b/tests/calcite/testPullConstantIntoProject.json @@ -0,0 +1,101 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7], EXPR$1=[+($7, 1)], EXPR$2=[+($0, $7)])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[10], EXPR$1=[11], EXPR$2=[+($0, 10)])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFrom.json b/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFrom.json new file mode 100644 index 0000000..419f685 --- /dev/null +++ b/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFrom.json @@ -0,0 +1,155 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$7], EXPR$1=[+($7, 1)], EXPR$2=[+($0, $7)])\n LogicalFilter(condition=[OR(AND(IS NULL($7), IS NULL(10)), IS TRUE(=($7, 10)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[10], EXPR$1=[11], EXPR$2=[+($0, 10)])\n LogicalFilter(condition=[OR(AND(IS NULL($7), IS NULL(10)), IS TRUE(=($7, 10)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFromDate.json b/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFromDate.json new file mode 100644 index 0000000..b0dea67 --- /dev/null +++ b/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFromDate.json @@ -0,0 +1,69 @@ +{ + "help" : [ "LogicalProject(HIREDATE=[$4])\n LogicalFilter(condition=[IS NOT DISTINCT FROM($4, 2020-12-11)])\n LogicalTableScan(table=[[scott, EMP]])\n", "LogicalProject(HIREDATE=[CAST(2020-12-11):DATE])\n LogicalFilter(condition=[IS NOT DISTINCT FROM($4, 2020-12-11)])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "DATE" + }, { + "type" : "DATE", + "operand" : [ ], + "operator" : "java.util.GregorianCalendar[time=1607644800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=346,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 4, + "type" : "DATE" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "DATE" + }, { + "type" : "DATE", + "operand" : [ ], + "operator" : "java.util.GregorianCalendar[time=1607644800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=346,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "DATE", + "operand" : [ { + "type" : "DATE", + "operand" : [ ], + "operator" : "java.util.GregorianCalendar[time=1607644800000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"UTC\",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=346,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFromForNull.json b/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFromForNull.json new file mode 100644 index 0000000..5a92a3c --- /dev/null +++ b/tests/calcite/testPullConstantIntoProjectWithIsNotDistinctFromForNull.json @@ -0,0 +1,125 @@ +{ + "help" : [ "LogicalProject(MGR=[$3], DEPTNO=[$7])\n LogicalFilter(condition=[OR(AND(IS NULL($3), IS NULL(null:INTEGER)), IS TRUE(=($3, null)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(MGR=[null:INTEGER], DEPTNO=[$7])\n LogicalFilter(condition=[OR(AND(IS NULL($3), IS NULL(null:INTEGER)), IS TRUE(=($3, null)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughAggregateAllConst.json b/tests/calcite/testPullConstantThroughAggregateAllConst.json new file mode 100644 index 0000000..ab2f07b --- /dev/null +++ b/tests/calcite/testPullConstantThroughAggregateAllConst.json @@ -0,0 +1,116 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\n LogicalProject(EXPR$0=[4], EXPR$1=[+(2, 3)], FIVE=[5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$0], EXPR$1=[+(2, 3)], EXPR$2=[$1])\n LogicalAggregate(group=[{0}], EXPR$2=[MAX($1)])\n LogicalProject(EXPR$0=[4], FIVE=[5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "+" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughAggregateAllLiterals.json b/tests/calcite/testPullConstantThroughAggregateAllLiterals.json new file mode 100644 index 0000000..ce1837b --- /dev/null +++ b/tests/calcite/testPullConstantThroughAggregateAllLiterals.json @@ -0,0 +1,116 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\n LogicalProject(EXPR$0=[4], EXPR$1=[+(2, 3)], $f2=[5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$0], EXPR$1=[+(2, 3)], EXPR$2=[$1])\n LogicalAggregate(group=[{0}], EXPR$2=[MAX($1)])\n LogicalProject(EXPR$0=[4], $f2=[5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "+" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughAggregateConstGroupBy.json b/tests/calcite/testPullConstantThroughAggregateConstGroupBy.json new file mode 100644 index 0000000..1b9518d --- /dev/null +++ b/tests/calcite/testPullConstantThroughAggregateConstGroupBy.json @@ -0,0 +1,114 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\n LogicalProject(EXPR$0=[4], EXPR$1=[+(2, 3)], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$0], EXPR$1=[+(2, 3)], EXPR$2=[$1])\n LogicalAggregate(group=[{0}], EXPR$2=[MAX($1)])\n LogicalProject(EXPR$0=[4], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "+" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "+" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughAggregatePermuted.json b/tests/calcite/testPullConstantThroughAggregatePermuted.json new file mode 100644 index 0000000..9f5db7e --- /dev/null +++ b/tests/calcite/testPullConstantThroughAggregatePermuted.json @@ -0,0 +1,146 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], EXPR$1=[$4])\n LogicalAggregate(group=[{0, 1, 2, 3}], EXPR$1=[MAX($4)])\n LogicalProject(DEPTNO=[$7], FOUR=[4], TWO_PLUS_THREE=[+(2, 3)], DEPTNO42=[+($7, 42)], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\n LogicalProject(DEPTNO=[$7], DEPTNO42=[+($7, 42)], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "42" + } ], + "operator" : "+" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "42" + } ], + "operator" : "+" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughAggregatePermutedConstFirst.json b/tests/calcite/testPullConstantThroughAggregatePermutedConstFirst.json new file mode 100644 index 0000000..aa9c661 --- /dev/null +++ b/tests/calcite/testPullConstantThroughAggregatePermutedConstFirst.json @@ -0,0 +1,92 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$1], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\n LogicalProject(FOUR=[4], DEPTNO=[$7], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalProject(DEPTNO=[$7], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughAggregatePermutedConstGroupBy.json b/tests/calcite/testPullConstantThroughAggregatePermutedConstGroupBy.json new file mode 100644 index 0000000..5832c7e --- /dev/null +++ b/tests/calcite/testPullConstantThroughAggregatePermutedConstGroupBy.json @@ -0,0 +1,100 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$1], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\n LogicalProject($f0=[+(42, 24)], DEPTNO=[$7], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalProject(DEPTNO=[$7], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "42" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "24" + } ], + "operator" : "+" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughAggregateSimpleNonNullable.json b/tests/calcite/testPullConstantThroughAggregateSimpleNonNullable.json new file mode 100644 index 0000000..eb75134 --- /dev/null +++ b/tests/calcite/testPullConstantThroughAggregateSimpleNonNullable.json @@ -0,0 +1,92 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\n LogicalProject(DEPTNO=[$7], FOUR=[4], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalProject(DEPTNO=[$7], ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "VARCHAR", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughConstLast.json b/tests/calcite/testPullConstantThroughConstLast.json new file mode 100644 index 0000000..9432064 --- /dev/null +++ b/tests/calcite/testPullConstantThroughConstLast.json @@ -0,0 +1,92 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], EXPR$1=[$2])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[MAX($2)])\n LogicalProject(DEPTNO=[$7], FOUR=[4], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalProject(DEPTNO=[$7], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughUnion.json b/tests/calcite/testPullConstantThroughUnion.json new file mode 100644 index 0000000..d5b5297 --- /dev/null +++ b/tests/calcite/testPullConstantThroughUnion.json @@ -0,0 +1,91 @@ +{ + "help" : [ "LogicalUnion(all=[true])\n LogicalProject(EXPR$0=[2], DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EXPR$0=[2], DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[2], DEPTNO=[$0], JOB=[$1])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } ] + }, { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } ] + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughUnion3.json b/tests/calcite/testPullConstantThroughUnion3.json new file mode 100644 index 0000000..b62bdfb --- /dev/null +++ b/tests/calcite/testPullConstantThroughUnion3.json @@ -0,0 +1,81 @@ +{ + "help" : [ "LogicalUnion(all=[true])\n LogicalProject(EXPR$0=[2], EXPR$1=[3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EXPR$0=[2], EXPR$1=[3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[2], EXPR$1=[3])\n LogicalUnion(all=[true])\n LogicalProject(EXPR$0=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EXPR$0=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] + } + } ] + }, { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + } ] + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullConstantThroughUnionSameTypeNullableField.json b/tests/calcite/testPullConstantThroughUnionSameTypeNullableField.json new file mode 100644 index 0000000..26c24b7 --- /dev/null +++ b/tests/calcite/testPullConstantThroughUnionSameTypeNullableField.json @@ -0,0 +1,186 @@ +{ + "help" : [ "LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$1], ENAME=[$0])\n LogicalFilter(condition=[=($1, 1)])\n LogicalProject(ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalProject(DEPTNO=[$1], ENAME=[$0])\n LogicalFilter(condition=[=($1, 1)])\n LogicalProject(ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(DEPTNO=[CAST(1):INTEGER], ENAME=[$0])\n LogicalUnion(all=[true])\n LogicalProject(ENAME=[$0])\n LogicalFilter(condition=[=($1, 1)])\n LogicalProject(ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalProject(ENAME=[$0])\n LogicalFilter(condition=[=($1, 1)])\n LogicalProject(ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] + }, { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "CAST" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullFilterThroughAggregate.json b/tests/calcite/testPullFilterThroughAggregate.json new file mode 100644 index 0000000..fd51f3c --- /dev/null +++ b/tests/calcite/testPullFilterThroughAggregate.json @@ -0,0 +1,106 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1, 2}])\n LogicalFilter(condition=[>($1, 5000)])\n LogicalProject(ENAME=[$1], SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalFilter(condition=[>($1, 5000)])\n LogicalAggregate(group=[{0, 1, 2}])\n LogicalProject(ENAME=[$1], SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5000" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5000" + } ], + "operator" : ">" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullFilterThroughAggregateGroupingSets.json b/tests/calcite/testPullFilterThroughAggregateGroupingSets.json new file mode 100644 index 0000000..5d0fae5 --- /dev/null +++ b/tests/calcite/testPullFilterThroughAggregateGroupingSets.json @@ -0,0 +1,121 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1, 2}, {0, 1}, {0}, {}]])\n LogicalFilter(condition=[>($1, 5000)])\n LogicalProject(ENAME=[$1], SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1, 2}], groups=[[{0, 1, 2}, {0, 1}, {0}, {}]])\n LogicalFilter(condition=[>($1, 5000)])\n LogicalAggregate(group=[{0, 1, 2}])\n LogicalProject(ENAME=[$1], SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5000" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5000" + } ], + "operator" : ">" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPullNull.json b/tests/calcite/testPullNull.json new file mode 100644 index 0000000..65a1ea3 --- /dev/null +++ b/tests/calcite/testPullNull.json @@ -0,0 +1,170 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 7), =($0, 10), IS NULL($3), =($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[10], ENAME=[$1], JOB=[$2], MGR=[null:INTEGER], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[7], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 7), =($0, 10), IS NULL($3))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAboveFiltersIntoInnerJoinCondition.json b/tests/calcite/testPushAboveFiltersIntoInnerJoinCondition.json new file mode 100644 index 0000000..efeae46 --- /dev/null +++ b/tests/calcite/testPushAboveFiltersIntoInnerJoinCondition.json @@ -0,0 +1,180 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\n LogicalFilter(condition=[>($0, $5)])\n LogicalJoin(condition=[AND(=($0, $9), >($0, $5))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\n LogicalJoin(condition=[AND(=($0, $9), >($0, $5))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateFunctionsThroughJoin.json b/tests/calcite/testPushAggregateFunctionsThroughJoin.json new file mode 100644 index 0000000..a0591dc --- /dev/null +++ b/tests/calcite/testPushAggregateFunctionsThroughJoin.json @@ -0,0 +1,327 @@ +{ + "help" : [ "LogicalProject(JOB=[$0], MIN_SAL=[$2], MIN_DEPTNO=[$3], SUM_SAL_PLUS=[+($4, 1)], MAX_SAL=[$5], SUM_SAL_2=[$4], COUNT_SAL=[$6], COUNT_MGR=[$7])\n LogicalAggregate(group=[{2, 10}], MIN_SAL=[MIN($5)], MIN_DEPTNO=[MIN($7)], SUM_SAL_2=[SUM($5)], MAX_SAL=[MAX($5)], COUNT_SAL=[COUNT()], COUNT_MGR=[COUNT($3)])\n LogicalJoin(condition=[=($2, $10)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(JOB=[$0], MIN_SAL=[$2], MIN_DEPTNO=[$3], SUM_SAL_PLUS=[+($4, 1)], MAX_SAL=[$5], SUM_SAL_2=[$4], COUNT_SAL=[$6], COUNT_MGR=[$7])\n LogicalProject(JOB=[$0], NAME=[$7], MIN_SAL=[$1], MIN_DEPTNO=[$2], $f9=[CAST(*($3, $8)):INTEGER NOT NULL], MAX_SAL=[$4], $f10=[*($5, $8)], $f11=[*($6, $8)])\n LogicalJoin(condition=[=($0, $7)], joinType=[inner])\n LogicalAggregate(group=[{2}], MIN_SAL=[MIN($5)], MIN_DEPTNO=[MIN($7)], SUM_SAL_2=[SUM($5)], MAX_SAL=[MAX($5)], COUNT_SAL=[COUNT()], COUNT_MGR=[COUNT($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], agg#0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "BIGINT" + }, { + "column" : 7, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BIGINT" + } ], + "operator" : "*" + } ], + "operator" : "CAST" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "column" : 8, + "type" : "BIGINT" + } ], + "operator" : "*" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + }, { + "column" : 8, + "type" : "BIGINT" + } ], + "operator" : "*" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "BIGINT" + }, { + "column" : 7, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateSumNoGroup.json b/tests/calcite/testPushAggregateSumNoGroup.json new file mode 100644 index 0000000..73ba240 --- /dev/null +++ b/tests/calcite/testPushAggregateSumNoGroup.json @@ -0,0 +1,133 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalJoin(condition=[=($2, $10)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{}], EXPR$0=[$SUM0($0)])\n LogicalProject($f4=[*($1, $3)])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalAggregate(group=[{2}], EXPR$0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], EXPR$0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "*" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateSumThroughJoin.json b/tests/calcite/testPushAggregateSumThroughJoin.json new file mode 100644 index 0000000..b36e061 --- /dev/null +++ b/tests/calcite/testPushAggregateSumThroughJoin.json @@ -0,0 +1,258 @@ +{ + "help" : [ "LogicalProject(JOB=[$0], EXPR$1=[$2])\n LogicalAggregate(group=[{2, 10}], EXPR$1=[SUM($5)])\n LogicalJoin(condition=[=($2, $10)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(JOB=[$0], EXPR$1=[$2])\n LogicalProject(JOB=[$0], NAME=[$2], $f4=[CAST(*($1, $3)):INTEGER NOT NULL])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalAggregate(group=[{2}], EXPR$1=[SUM($5)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], agg#0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "*" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateSumThroughJoinAfterAggregateReduce.json b/tests/calcite/testPushAggregateSumThroughJoinAfterAggregateReduce.json new file mode 100644 index 0000000..9de988b --- /dev/null +++ b/tests/calcite/testPushAggregateSumThroughJoinAfterAggregateReduce.json @@ -0,0 +1,291 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM($5)])\n LogicalJoin(condition=[=($2, $10)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EXPR$0=[CASE(=($1, 0), null:INTEGER, $0)])\n LogicalAggregate(group=[{}], EXPR$0=[$SUM0($0)], agg#1=[$SUM0($1)])\n LogicalProject($f5=[CAST(*($1, $4)):INTEGER NOT NULL], $f6=[*($2, $4)])\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\n LogicalAggregate(group=[{2}], EXPR$0=[$SUM0($5)], agg#1=[COUNT()])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], agg#0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "*" + } ], + "operator" : "CAST" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateSumWithoutGroupKeyThroughJoin.json b/tests/calcite/testPushAggregateSumWithoutGroupKeyThroughJoin.json new file mode 100644 index 0000000..0c4fed5 --- /dev/null +++ b/tests/calcite/testPushAggregateSumWithoutGroupKeyThroughJoin.json @@ -0,0 +1,239 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM($5)])\n LogicalJoin(condition=[=($2, $10)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\n LogicalProject($f4=[CAST(*($1, $3)):INTEGER])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalAggregate(group=[{2}], EXPR$0=[SUM($5)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}], agg#0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "*" + } ], + "operator" : "CAST" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoin1.json b/tests/calcite/testPushAggregateThroughJoin1.json new file mode 100644 index 0000000..d462002 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoin1.json @@ -0,0 +1,187 @@ +{ + "help" : [ "LogicalAggregate(group=[{2, 10}])\n LogicalJoin(condition=[=($2, $10)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalAggregate(group=[{2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoin2.json b/tests/calcite/testPushAggregateThroughJoin2.json new file mode 100644 index 0000000..1bd6404 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoin2.json @@ -0,0 +1,297 @@ +{ + "help" : [ "LogicalAggregate(group=[{2, 11}])\n LogicalJoin(condition=[AND(=($2, $11), =($9, $12))], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0, 2}])\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[inner])\n LogicalAggregate(group=[{2, 9}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoin4.json b/tests/calcite/testPushAggregateThroughJoin4.json new file mode 100644 index 0000000..10f02b3 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoin4.json @@ -0,0 +1,95 @@ +{ + "help" : [ "LogicalAggregate(group=[{7}])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalAggregate(group=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoin5.json b/tests/calcite/testPushAggregateThroughJoin5.json new file mode 100644 index 0000000..9e994b7 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoin5.json @@ -0,0 +1,112 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], DEPTNO0=[$1])\n LogicalAggregate(group=[{7, 9}])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0], DEPTNO0=[$1])\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalAggregate(group=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoin6.json b/tests/calcite/testPushAggregateThroughJoin6.json new file mode 100644 index 0000000..59acf0a --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoin6.json @@ -0,0 +1,136 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM($9)])\n LogicalJoin(condition=[=($5, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\n LogicalProject($f3=[CAST(*($1, $2)):INTEGER])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalAggregate(group=[{5}], agg#0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CAST" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoin7.json b/tests/calcite/testPushAggregateThroughJoin7.json new file mode 100644 index 0000000..75381f6 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoin7.json @@ -0,0 +1,111 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[ANY_VALUE($9)])\n LogicalJoin(condition=[=($5, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[ANY_VALUE($1)])\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "ANY_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ANY_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoin8.json b/tests/calcite/testPushAggregateThroughJoin8.json new file mode 100644 index 0000000..d8763a3 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoin8.json @@ -0,0 +1,111 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SINGLE_VALUE($9)])\n LogicalJoin(condition=[=($5, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SINGLE_VALUE($1)])\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{5}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "SINGLE_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SINGLE_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoinDistinct.json b/tests/calcite/testPushAggregateThroughJoinDistinct.json new file mode 100644 index 0000000..cd76209 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoinDistinct.json @@ -0,0 +1,141 @@ +{ + "help" : [ "LogicalAggregate(group=[{9}], SUM_SAL=[SUM($5)], C=[COUNT()])\n LogicalJoin(condition=[=($2, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$3], SUM_SAL=[$1], C=[$2])\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\n LogicalAggregate(group=[{2}], SUM_SAL=[SUM($5)], C=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + } + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoinOnEmptyLogicalValues.json b/tests/calcite/testPushAggregateThroughJoinOnEmptyLogicalValues.json new file mode 100644 index 0000000..ba156af --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoinOnEmptyLogicalValues.json @@ -0,0 +1,191 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], VOLUME=[COUNT()], C1_SUM_SAL=[SUM($0)])\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\n LogicalProject(SAL=[$5], ENAME=[$1])\n LogicalValues(tuples=[[]])\n LogicalProject(ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], VOLUME=[$SUM0($0)], C1_SUM_SAL=[SUM($1)])\n LogicalProject(VOLUME=[$3], $f4=[CAST(*($1, $3)):INTEGER])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalProject(ENAME=[$1], SAL=[$0])\n LogicalProject(SAL=[$5], ENAME=[$1])\n LogicalValues(tuples=[[]])\n LogicalAggregate(group=[{0}], VOLUME=[COUNT()])\n LogicalProject(ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "*" + } ], + "operator" : "CAST" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughJoinWithUniqueInput.json b/tests/calcite/testPushAggregateThroughJoinWithUniqueInput.json new file mode 100644 index 0000000..0ff4de3 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughJoinWithUniqueInput.json @@ -0,0 +1,272 @@ +{ + "help" : [ "LogicalProject(JOB=[$0], MGR0=[$2], DEPTNO=[$1], HIREDATE1=[$3], COMM1=[$4])\n LogicalAggregate(group=[{2, 7, 9}], HIREDATE1=[MAX($11)], COMM1=[SUM($12)])\n LogicalJoin(condition=[=($5, $10)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{3, 5}], HIREDATE1=[MAX($4)], COMM1=[SUM($6)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(JOB=[$0], MGR0=[$2], DEPTNO=[$1], HIREDATE1=[$3], COMM1=[$4])\n LogicalAggregate(group=[{0, 1, 2}], HIREDATE1=[MAX($3)], COMM1=[SUM($4)])\n LogicalProject(JOB=[$0], DEPTNO=[$2], MGR=[$4], HIREDATE1=[$6], $f8=[CAST(*($3, $7)):INTEGER NOT NULL])\n LogicalJoin(condition=[=($1, $5)], joinType=[inner])\n LogicalAggregate(group=[{2, 5, 7}], agg#0=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{3, 5}], HIREDATE1=[MAX($4)], COMM1=[SUM($6)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 11, + "type" : "TIMESTAMP" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 4, + "type" : "TIMESTAMP" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "TIMESTAMP" + }, { + "column" : 4, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 3, + "type" : "TIMESTAMP" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 4, + "type" : "TIMESTAMP" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CAST" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "TIMESTAMP" + }, { + "column" : 4, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin1.json b/tests/calcite/testPushAggregateThroughOuterJoin1.json new file mode 100644 index 0000000..55519bc --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin1.json @@ -0,0 +1,196 @@ +{ + "help" : [ "LogicalAggregate(group=[{1}])\n LogicalJoin(condition=[=($2, $10)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0}])\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin12.json b/tests/calcite/testPushAggregateThroughOuterJoin12.json new file mode 100644 index 0000000..f874fea --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin12.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalAggregate(group=[{2}])\n LogicalJoin(condition=[=($2, $10)], joinType=[right])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0}])\n LogicalJoin(condition=[=($0, $1)], joinType=[right])\n LogicalAggregate(group=[{2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "RIGHT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin13.json b/tests/calcite/testPushAggregateThroughOuterJoin13.json new file mode 100644 index 0000000..590d5bc --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin13.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalAggregate(group=[{2}])\n LogicalJoin(condition=[=($2, $10)], joinType=[full])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0}])\n LogicalJoin(condition=[=($0, $1)], joinType=[full])\n LogicalAggregate(group=[{2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "FULL", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "FULL", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin14.json b/tests/calcite/testPushAggregateThroughOuterJoin14.json new file mode 100644 index 0000000..0657e83 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin14.json @@ -0,0 +1,140 @@ +{ + "help" : [ "LogicalProject(MGR=[$1], MGR0=[$0])\n LogicalProject(MGR0=[$1], MGR=[$0])\n LogicalAggregate(group=[{3, 12}])\n LogicalJoin(condition=[=($3, $12)], joinType=[full])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(MGR=[$1], MGR0=[$0])\n LogicalProject(MGR0=[$1], MGR=[$0])\n LogicalAggregate(group=[{0, 1}])\n LogicalJoin(condition=[=($0, $1)], joinType=[full])\n LogicalAggregate(group=[{3}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{3}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "FULL", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + }, + "kind" : "FULL", + "right" : { + "group" : { + "keys" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin15.json b/tests/calcite/testPushAggregateThroughOuterJoin15.json new file mode 100644 index 0000000..b3dd99e --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin15.json @@ -0,0 +1,198 @@ +{ + "help" : [ "LogicalAggregate(group=[{1, 12}])\n LogicalJoin(condition=[=($2, $11)], joinType=[full])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 3}])\n LogicalJoin(condition=[=($1, $2)], joinType=[full])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{2, 3}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "FULL", + "right" : { + "scan" : 0 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "FULL", + "right" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin16.json b/tests/calcite/testPushAggregateThroughOuterJoin16.json new file mode 100644 index 0000000..3e31d88 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin16.json @@ -0,0 +1,291 @@ +{ + "help" : [ "LogicalAggregate(group=[{2}])\n LogicalJoin(condition=[AND(=($2, $11), =($9, $12))], joinType=[full])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0}])\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[full])\n LogicalAggregate(group=[{2, 9}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "FULL", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "kind" : "FULL", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin2.json b/tests/calcite/testPushAggregateThroughOuterJoin2.json new file mode 100644 index 0000000..5d4f9a8 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin2.json @@ -0,0 +1,189 @@ +{ + "help" : [ "LogicalAggregate(group=[{10}])\n LogicalJoin(condition=[=($2, $11)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{1}])\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\n LogicalAggregate(group=[{2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1, 2}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 0 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin3.json b/tests/calcite/testPushAggregateThroughOuterJoin3.json new file mode 100644 index 0000000..89d45bd --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin3.json @@ -0,0 +1,198 @@ +{ + "help" : [ "LogicalAggregate(group=[{1, 12}])\n LogicalJoin(condition=[=($2, $11)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 3}])\n LogicalJoin(condition=[=($1, $2)], joinType=[left])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{2, 3}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 0 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin4.json b/tests/calcite/testPushAggregateThroughOuterJoin4.json new file mode 100644 index 0000000..96d2b8b --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin4.json @@ -0,0 +1,192 @@ +{ + "help" : [ "LogicalAggregate(group=[{2}])\n LogicalJoin(condition=[=($2, $10)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(JOB=[$0])\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\n LogicalAggregate(group=[{2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin5.json b/tests/calcite/testPushAggregateThroughOuterJoin5.json new file mode 100644 index 0000000..84af362 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin5.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalAggregate(group=[{10}])\n LogicalJoin(condition=[=($2, $10)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{1}])\n LogicalJoin(condition=[=($0, $1)], joinType=[left])\n LogicalAggregate(group=[{2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin6.json b/tests/calcite/testPushAggregateThroughOuterJoin6.json new file mode 100644 index 0000000..ada57ac --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin6.json @@ -0,0 +1,187 @@ +{ + "help" : [ "LogicalAggregate(group=[{2, 10}])\n LogicalJoin(condition=[=($2, $10)], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalJoin(condition=[=($0, $1)], joinType=[left])\n LogicalAggregate(group=[{2}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1}])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "scan" : 1 + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin7.json b/tests/calcite/testPushAggregateThroughOuterJoin7.json new file mode 100644 index 0000000..d92798d --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin7.json @@ -0,0 +1,291 @@ +{ + "help" : [ "LogicalAggregate(group=[{2}])\n LogicalJoin(condition=[AND(=($2, $11), =($9, $12))], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0}])\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\n LogicalAggregate(group=[{2, 9}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin8.json b/tests/calcite/testPushAggregateThroughOuterJoin8.json new file mode 100644 index 0000000..cc4980e --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin8.json @@ -0,0 +1,291 @@ +{ + "help" : [ "LogicalAggregate(group=[{11}])\n LogicalJoin(condition=[AND(=($2, $11), =($9, $12))], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{2}])\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\n LogicalAggregate(group=[{2, 9}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 11, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAggregateThroughOuterJoin9.json b/tests/calcite/testPushAggregateThroughOuterJoin9.json new file mode 100644 index 0000000..74894d3 --- /dev/null +++ b/tests/calcite/testPushAggregateThroughOuterJoin9.json @@ -0,0 +1,297 @@ +{ + "help" : [ "LogicalAggregate(group=[{2, 11}])\n LogicalJoin(condition=[AND(=($2, $11), =($9, $12))], joinType=[left])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0, 2}])\n LogicalJoin(condition=[AND(=($0, $2), =($1, $3))], joinType=[left])\n LogicalAggregate(group=[{2, 9}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, $0)])\n LogicalFilter(condition=[=($1, 'A')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{1, 2}])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 5)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'A'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + } ] + } + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAvgGroupingSetsThroughUnion.json b/tests/calcite/testPushAvgGroupingSetsThroughUnion.json new file mode 100644 index 0000000..64e620d --- /dev/null +++ b/tests/calcite/testPushAvgGroupingSetsThroughUnion.json @@ -0,0 +1,172 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[AVG($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[AVG($2)])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushAvgThroughUnion.json b/tests/calcite/testPushAvgThroughUnion.json new file mode 100644 index 0000000..b640281 --- /dev/null +++ b/tests/calcite/testPushAvgThroughUnion.json @@ -0,0 +1,157 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[AVG($1)])\n LogicalProject(ENAME=[$1], EMPNO=[$0])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[AVG($1)])\n LogicalUnion(all=[true])\n LogicalProject(ENAME=[$1], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$1], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushBoolAndBoolOrThroughUnion.json b/tests/calcite/testPushBoolAndBoolOrThroughUnion.json new file mode 100644 index 0000000..2dd8f57 --- /dev/null +++ b/tests/calcite/testPushBoolAndBoolOrThroughUnion.json @@ -0,0 +1,240 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($1)])\n LogicalUnion(all=[true])\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($1)])\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[BOOL_AND($1)], EXPR$2=[BOOL_OR($1)])\n LogicalProject(ENAME=[$1], EMPBOL=[=(MOD($0, 2), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_AND", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_OR", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "MOD" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "MOD" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + } ] + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_AND", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_OR", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_AND", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_OR", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "MOD" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_AND", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + } ], + "operator" : "BOOL_OR", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "MOD" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushCountFilterThroughUnion.json b/tests/calcite/testPushCountFilterThroughUnion.json new file mode 100644 index 0000000..50c153e --- /dev/null +++ b/tests/calcite/testPushCountFilterThroughUnion.json @@ -0,0 +1,272 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT() FILTER $1])\n LogicalProject(DEPTNO=[$7], $f1=[=($2, 'CLERK')])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[>($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT() FILTER $1])\n LogicalProject(DEPTNO=[$7], $f1=[=($2, 'CLERK')])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT() FILTER $1])\n LogicalProject(DEPTNO=[$7], $f1=[=($2, 'CLERK')])\n LogicalFilter(condition=[>($7, 20)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'CLERK'" + } ], + "operator" : "=" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'CLERK'" + } ], + "operator" : "=" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'CLERK'" + } ], + "operator" : "=" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushCountNullableGroupingSetsThroughUnion.json b/tests/calcite/testPushCountNullableGroupingSetsThroughUnion.json new file mode 100644 index 0000000..84eff4d --- /dev/null +++ b/tests/calcite/testPushCountNullableGroupingSetsThroughUnion.json @@ -0,0 +1,214 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[$SUM0($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushCountNullableThroughUnion.json b/tests/calcite/testPushCountNullableThroughUnion.json new file mode 100644 index 0000000..ecd1110 --- /dev/null +++ b/tests/calcite/testPushCountNullableThroughUnion.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushCountStarGroupingSetsThroughUnion.json b/tests/calcite/testPushCountStarGroupingSetsThroughUnion.json new file mode 100644 index 0000000..1817bd2 --- /dev/null +++ b/tests/calcite/testPushCountStarGroupingSetsThroughUnion.json @@ -0,0 +1,196 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[COUNT()])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[$SUM0($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\n LogicalProject(DEPTNO=[$7], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushCountStarThroughUnion.json b/tests/calcite/testPushCountStarThroughUnion.json new file mode 100644 index 0000000..2b08eb5 --- /dev/null +++ b/tests/calcite/testPushCountStarThroughUnion.json @@ -0,0 +1,175 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\n LogicalProject(ENAME=[$1])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[$SUM0($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\n LogicalProject(ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\n LogicalProject(ENAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterPastAgg.json b/tests/calcite/testPushFilterPastAgg.json new file mode 100644 index 0000000..ae939e9 --- /dev/null +++ b/tests/calcite/testPushFilterPastAgg.json @@ -0,0 +1,116 @@ +{ + "help" : [ "LogicalProject(DNAME=[$0], C=[$1])\n LogicalFilter(condition=[=($0, 'Charlie')])\n LogicalAggregate(group=[{0}], C=[COUNT()])\n LogicalProject(DNAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DNAME=[$0], C=[$1])\n LogicalAggregate(group=[{0}], C=[COUNT()])\n LogicalFilter(condition=[=($0, 'Charlie')])\n LogicalProject(DNAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterPastAggFour.json b/tests/calcite/testPushFilterPastAggFour.json new file mode 100644 index 0000000..f4cf3ff --- /dev/null +++ b/tests/calcite/testPushFilterPastAggFour.json @@ -0,0 +1,124 @@ +{ + "help" : [ "LogicalAggregate(group=[{1}], EXPR$1=[$SUM0($2)])\n LogicalFilter(condition=[>($0, CAST('12'):INTEGER NOT NULL)])\n LogicalAggregate(group=[{5, 7}], EXPR$1=[COUNT()])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{1}], EXPR$1=[$SUM0($2)])\n LogicalAggregate(group=[{5, 7}], EXPR$1=[COUNT()])\n LogicalFilter(condition=[>($5, 12)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'12'" + } ], + "operator" : "CAST" + } ], + "operator" : ">" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "12" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterPastAggTwo.json b/tests/calcite/testPushFilterPastAggTwo.json new file mode 100644 index 0000000..698224b --- /dev/null +++ b/tests/calcite/testPushFilterPastAggTwo.json @@ -0,0 +1,203 @@ +{ + "help" : [ "LogicalProject(C1=[$0])\n LogicalFilter(condition=[AND(>($0, 'c'), OR(>($1, 30), <($0, 'z')))])\n LogicalAggregate(group=[{0}], C2=[COUNT()])\n LogicalProject(C1=[$1])\n LogicalFilter(condition=[>($1, 'b')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(C1=[$0])\n LogicalFilter(condition=[OR(>($1, 30), <($0, 'z'))])\n LogicalAggregate(group=[{0}], C2=[COUNT()])\n LogicalFilter(condition=[>($0, 'c')])\n LogicalProject(C1=[$1])\n LogicalFilter(condition=[>($1, 'b')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'c'" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'z'" + } ], + "operator" : "<" + } ], + "operator" : "OR" + } ], + "operator" : "AND" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'b'" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'z'" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'c'" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'b'" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterPastAggWithGroupingSets2.json b/tests/calcite/testPushFilterPastAggWithGroupingSets2.json new file mode 100644 index 0000000..9e506fb --- /dev/null +++ b/tests/calcite/testPushFilterPastAggWithGroupingSets2.json @@ -0,0 +1,134 @@ +{ + "help" : [ "LogicalProject(DNAME=[$0], DDEPTNO=[$1], C=[$2])\n LogicalFilter(condition=[=($0, 'Charlie')])\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]], C=[COUNT()])\n LogicalProject(DNAME=[$1], DDEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DNAME=[$0], DDEPTNO=[$1], C=[$2])\n LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}]], C=[COUNT()])\n LogicalFilter(condition=[=($0, 'Charlie')])\n LogicalProject(DNAME=[$1], DDEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterPastProject.json b/tests/calcite/testPushFilterPastProject.json new file mode 100644 index 0000000..aaaabd4 --- /dev/null +++ b/tests/calcite/testPushFilterPastProject.json @@ -0,0 +1,246 @@ +{ + "help" : [ "LogicalProject(NAME=[$1])\n LogicalJoin(condition=[$4], joinType=[right])\n LogicalProject(DEPTNO=[$0], NAME=[$1], DEPTNO0=[$2], NAME0=[$3], $f4=[>($2, 10)])\n LogicalJoin(condition=[$4], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[>($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$1])\n LogicalJoin(condition=[true], joinType=[right])\n LogicalProject(DEPTNO=[$0], NAME=[$1], DEPTNO0=[$2], NAME0=[$3], $f4=[>($2, 10)])\n LogicalProject(DEPTNO=[$0], NAME=[$1], DEPTNO0=[CAST($2):INTEGER], NAME0=[CAST($3):VARCHAR(10)], $f2=[CAST($4):BOOLEAN])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[>($0, 10)])\n LogicalFilter(condition=[>($0, 10)])\n LogicalFilter(condition=[>($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "column" : 4, + "type" : "BOOLEAN" + }, + "left" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "column" : 4, + "type" : "BOOLEAN" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BOOLEAN" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterSemijoin.json b/tests/calcite/testPushFilterSemijoin.json new file mode 100644 index 0000000..a838fc4 --- /dev/null +++ b/tests/calcite/testPushFilterSemijoin.json @@ -0,0 +1,108 @@ +{ + "help" : [ "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[AND(=($0, $10), =($8, 100))], joinType=[semi])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalTableScan(table=[[scott, EMP]])\n", "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[=($0, $10)], joinType=[semi])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalFilter(condition=[=($5, 100)])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + }, { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 10, + "type" : "TINYINT" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "DECIMAL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 10, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "DECIMAL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterThroughSemiJoin.json b/tests/calcite/testPushFilterThroughSemiJoin.json new file mode 100644 index 0000000..81a18c5 --- /dev/null +++ b/tests/calcite/testPushFilterThroughSemiJoin.json @@ -0,0 +1,131 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[<=($0, 10)])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalFilter(condition=[<=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "<=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "<=" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushFilterWithIsNotDistinctFromPastJoin.json b/tests/calcite/testPushFilterWithIsNotDistinctFromPastJoin.json new file mode 100644 index 0000000..855bd8b --- /dev/null +++ b/tests/calcite/testPushFilterWithIsNotDistinctFromPastJoin.json @@ -0,0 +1,227 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\n LogicalFilter(condition=[OR(AND(IS NULL($1), IS NULL($10)), IS TRUE(=($1, $10)))])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\n LogicalJoin(condition=[AND(=($7, $16), IS NOT DISTINCT FROM($1, $10))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT DISTINCT FROM" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushJoinCondDownToProject.json b/tests/calcite/testPushJoinCondDownToProject.json new file mode 100644 index 0000000..abf6d01 --- /dev/null +++ b/tests/calcite/testPushJoinCondDownToProject.json @@ -0,0 +1,211 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], DEPTNO0=[$9])\n LogicalFilter(condition=[=(+($0, 10), *($9, 2))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], DEPTNO0=[$9])\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$3], ENAME=[$4], JOB=[$5], MGR=[$6], HIREDATE=[$7], SAL=[$8], COMM=[$9], DEPTNO0=[$10], SLACKER=[$11])\n LogicalJoin(condition=[=($2, $12)], joinType=[inner])\n LogicalProject(DEPTNO=[$0], NAME=[$1], $f2=[+($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[*($7, 2)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "TIMESTAMP" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushJoinThroughUnionOnLeft.json b/tests/calcite/testPushJoinThroughUnionOnLeft.json new file mode 100644 index 0000000..92cd299 --- /dev/null +++ b/tests/calcite/testPushJoinThroughUnionOnLeft.json @@ -0,0 +1,207 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5])\n LogicalUnion(all=[true])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "union" : [ { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } ] + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushJoinThroughUnionOnRight.json b/tests/calcite/testPushJoinThroughUnionOnRight.json new file mode 100644 index 0000000..5a5263b --- /dev/null +++ b/tests/calcite/testPushJoinThroughUnionOnRight.json @@ -0,0 +1,207 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5])\n LogicalUnion(all=[true])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "union" : [ { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } + } + } ] + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushMaxNullableGroupingSetsThroughUnion.json b/tests/calcite/testPushMaxNullableGroupingSetsThroughUnion.json new file mode 100644 index 0000000..41663a3 --- /dev/null +++ b/tests/calcite/testPushMaxNullableGroupingSetsThroughUnion.json @@ -0,0 +1,214 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MAX($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MAX($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MAX($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushMaxNullableThroughUnion.json b/tests/calcite/testPushMaxNullableThroughUnion.json new file mode 100644 index 0000000..85bb915 --- /dev/null +++ b/tests/calcite/testPushMaxNullableThroughUnion.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[MAX($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushMinGroupingSetsThroughUnion.json b/tests/calcite/testPushMinGroupingSetsThroughUnion.json new file mode 100644 index 0000000..2600b2d --- /dev/null +++ b/tests/calcite/testPushMinGroupingSetsThroughUnion.json @@ -0,0 +1,214 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MIN($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[MIN($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MIN($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[MIN($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushMinThroughUnion.json b/tests/calcite/testPushMinThroughUnion.json new file mode 100644 index 0000000..25bba05 --- /dev/null +++ b/tests/calcite/testPushMinThroughUnion.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\n LogicalProject(ENAME=[$1], EMPNO=[$0])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\n LogicalProject(ENAME=[$1], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[MIN($1)])\n LogicalProject(ENAME=[$1], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastFilter.json b/tests/calcite/testPushProjectPastFilter.json new file mode 100644 index 0000000..e6dc0a7 --- /dev/null +++ b/tests/calcite/testPushProjectPastFilter.json @@ -0,0 +1,150 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($0, $7)])\n LogicalFilter(condition=[AND(=($5, *(10, $6)), =(UPPER($1), 'FOO'))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[+($0, $4)])\n LogicalFilter(condition=[AND(=($2, *(10, $3)), =(UPPER($1), 'FOO'))])\n LogicalProject(EMPNO=[$0], ENAME=[$1], SAL=[$5], COMM=[$6], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "UPPER" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'FOO'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "UPPER" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'FOO'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastFilter2.json b/tests/calcite/testPushProjectPastFilter2.json new file mode 100644 index 0000000..15d38a3 --- /dev/null +++ b/tests/calcite/testPushProjectPastFilter2.json @@ -0,0 +1,110 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[0])\n LogicalFilter(condition=[CASE(<($3, 10), true, false)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[0])\n LogicalFilter(condition=[<($0, 10)])\n LogicalProject(MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + } ], + "operator" : "CASE" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "<" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastFilter3b.json b/tests/calcite/testPushProjectPastFilter3b.json new file mode 100644 index 0000000..800af80 --- /dev/null +++ b/tests/calcite/testPushProjectPastFilter3b.json @@ -0,0 +1,204 @@ +{ + "help" : [ "LogicalProject(X=[+($0, $7)], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($5, *(10, $6)), =(UPPER($1), 'FOO'))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(X=[$8], ENAME=[$0], JOB=[$1], MGR=[$2], HIREDATE=[$3], SAL=[$4], COMM=[$5], SLACKER=[$6])\n LogicalFilter(condition=[$7])\n LogicalProject(ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8], $f7=[AND(=($5, *(10, $6)), =(UPPER($1), 'FOO'))], $f8=[+($0, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "UPPER" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'FOO'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "column" : 7, + "type" : "BOOLEAN" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "UPPER" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'FOO'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "TIMESTAMP" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastFilter3c.json b/tests/calcite/testPushProjectPastFilter3c.json new file mode 100644 index 0000000..7274cc0 --- /dev/null +++ b/tests/calcite/testPushProjectPastFilter3c.json @@ -0,0 +1,201 @@ +{ + "help" : [ "LogicalProject(X=[+($0, $7)], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($5, *(10, $6)), =(UPPER($1), 'FOO'))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(X=[$7], ENAME=[$0], JOB=[$1], MGR=[$2], HIREDATE=[$3], SAL=[$4], COMM=[$5], SLACKER=[$6])\n LogicalFilter(condition=[AND(=($4, *(10, $5)), =(UPPER($0), 'FOO'))])\n LogicalProject(ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], SLACKER=[$8], $f7=[+($0, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "UPPER" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'FOO'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "UPPER" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'FOO'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "TIMESTAMP" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastFullJoin.json b/tests/calcite/testPushProjectPastFullJoin.json new file mode 100644 index 0000000..8e2397c --- /dev/null +++ b/tests/calcite/testPushProjectPastFullJoin.json @@ -0,0 +1,205 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($5, 11), 11, *(-1, $5))])\n LogicalJoin(condition=[=($1, $9)], joinType=[full])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE($1, 11, $2)])\n LogicalJoin(condition=[=($0, $3)], joinType=[full])\n LogicalProject(ENAME=[$1], EXPR$0=[<($5, 11)], EXPR$1=[*(-1, $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "FULL", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ] + } + }, + "kind" : "FULL", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastFullJoinStrong.json b/tests/calcite/testPushProjectPastFullJoinStrong.json new file mode 100644 index 0000000..e7bbc5f --- /dev/null +++ b/tests/calcite/testPushProjectPastFullJoinStrong.json @@ -0,0 +1,200 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalJoin(condition=[=($1, $9)], joinType=[full])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[full])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "FULL", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + }, + "kind" : "FULL", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastInnerJoin.json b/tests/calcite/testPushProjectPastInnerJoin.json new file mode 100644 index 0000000..13cd2e1 --- /dev/null +++ b/tests/calcite/testPushProjectPastInnerJoin.json @@ -0,0 +1,202 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($5, 11), 11, *(-1, $5))])\n LogicalJoin(condition=[=($1, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), 11, *(-1, $5))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastInnerJoinStrong.json b/tests/calcite/testPushProjectPastInnerJoinStrong.json new file mode 100644 index 0000000..7c3035c --- /dev/null +++ b/tests/calcite/testPushProjectPastInnerJoinStrong.json @@ -0,0 +1,200 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalJoin(condition=[=($1, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastJoin.json b/tests/calcite/testPushProjectPastJoin.json new file mode 100644 index 0000000..4e9a12f --- /dev/null +++ b/tests/calcite/testPushProjectPastJoin.json @@ -0,0 +1,146 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($5, $12)])\n LogicalJoin(condition=[AND(=($1, $9), =($7, 10))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[+($1, $4)])\n LogicalJoin(condition=[AND(=($0, $3), $2)], joinType=[inner])\n LogicalProject(ENAME=[$1], SAL=[$5], EXPR$0=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0], COMM=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastLeftJoin.json b/tests/calcite/testPushProjectPastLeftJoin.json new file mode 100644 index 0000000..3b7bfe7 --- /dev/null +++ b/tests/calcite/testPushProjectPastLeftJoin.json @@ -0,0 +1,202 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($5, 11), 11, *(-1, $5))])\n LogicalJoin(condition=[=($1, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), 11, *(-1, $5))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastLeftJoinSwap.json b/tests/calcite/testPushProjectPastLeftJoinSwap.json new file mode 100644 index 0000000..1dee042 --- /dev/null +++ b/tests/calcite/testPushProjectPastLeftJoinSwap.json @@ -0,0 +1,205 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($9, 11), 11, *(-1, $9))])\n LogicalJoin(condition=[=($5, $0)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE($2, 11, $3)])\n LogicalJoin(condition=[=($1, $0)], joinType=[left])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalProject(ENAME=[$1], EXPR$0=[<($5, 11)], EXPR$1=[*(-1, $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastLeftJoinSwapStrong.json b/tests/calcite/testPushProjectPastLeftJoinSwapStrong.json new file mode 100644 index 0000000..d17e4cf --- /dev/null +++ b/tests/calcite/testPushProjectPastLeftJoinSwapStrong.json @@ -0,0 +1,200 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($9, 11), *(-1, $9), $9)])\n LogicalJoin(condition=[=($5, $0)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$2])\n LogicalJoin(condition=[=($1, $0)], joinType=[left])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastOutJoinWithCastNonNullExpr.json b/tests/calcite/testPushProjectPastOutJoinWithCastNonNullExpr.json new file mode 100644 index 0000000..18e439a --- /dev/null +++ b/tests/calcite/testPushProjectPastOutJoinWithCastNonNullExpr.json @@ -0,0 +1,263 @@ +{ + "help" : [ "LogicalProject(C1=[+($0, 1)], C2=[CASE(IS NOT NULL($14), CAST($14):VARCHAR(10) NOT NULL, IS NOT NULL($10), CAST($10):VARCHAR(10) NOT NULL, '':VARCHAR(10))])\n LogicalJoin(condition=[=($7, $13)], joinType=[left])\n LogicalJoin(condition=[=($1, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(C1=[$2], C2=[CASE(IS NOT NULL($5), CAST($5):VARCHAR(10) NOT NULL, $3, CAST($1):VARCHAR(10) NOT NULL, '':VARCHAR(10))])\n LogicalJoin(condition=[=($0, $4)], joinType=[left])\n LogicalProject(DEPTNO=[$1], JOB0=[$4], C1=[$2], EXPR$1=[IS NOT NULL($4)])\n LogicalJoin(condition=[=($0, $3)], joinType=[left])\n LogicalProject(ENAME=[$1], DEPTNO=[$7], C1=[+($0, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0], JOB=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 2 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + }, { + "type" : "VARCHAR", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 14, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 14, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1''" + } ], + "operator" : "CASE" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 2 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "VARCHAR", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 5, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 3, + "type" : "BOOLEAN" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1''" + } ], + "operator" : "CASE" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastRightJoin.json b/tests/calcite/testPushProjectPastRightJoin.json new file mode 100644 index 0000000..14776b1 --- /dev/null +++ b/tests/calcite/testPushProjectPastRightJoin.json @@ -0,0 +1,205 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($5, 11), 11, *(-1, $5))])\n LogicalJoin(condition=[=($1, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE($1, 11, $2)])\n LogicalJoin(condition=[=($0, $3)], joinType=[right])\n LogicalProject(ENAME=[$1], EXPR$0=[<($5, 11)], EXPR$1=[*(-1, $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastRightJoinStrong.json b/tests/calcite/testPushProjectPastRightJoinStrong.json new file mode 100644 index 0000000..d64d539 --- /dev/null +++ b/tests/calcite/testPushProjectPastRightJoinStrong.json @@ -0,0 +1,200 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalJoin(condition=[=($1, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[right])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastRightJoinSwap.json b/tests/calcite/testPushProjectPastRightJoinSwap.json new file mode 100644 index 0000000..87b51bf --- /dev/null +++ b/tests/calcite/testPushProjectPastRightJoinSwap.json @@ -0,0 +1,202 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($9, 11), 11, *(-1, $9))])\n LogicalJoin(condition=[=($5, $0)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$2])\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), 11, *(-1, $5))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastRightJoinSwapStrong.json b/tests/calcite/testPushProjectPastRightJoinSwapStrong.json new file mode 100644 index 0000000..50f8681 --- /dev/null +++ b/tests/calcite/testPushProjectPastRightJoinSwapStrong.json @@ -0,0 +1,200 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[CASE(<($9, 11), *(-1, $9), $9)])\n LogicalJoin(condition=[=($5, $0)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$1], EXPR$1=[$0])\n LogicalAggregate(group=[{0}], EXPR$0=[COUNT()])\n LogicalProject(EXPR$1=[$2])\n LogicalJoin(condition=[=($1, $0)], joinType=[right])\n LogicalProject(ENAME=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalProject(ENAME=[$1], EXPR$1=[CASE(<($5, 11), *(-1, $5), $5)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], + "operator" : "<" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CASE" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectPastSetOp.json b/tests/calcite/testPushProjectPastSetOp.json new file mode 100644 index 0000000..38ad500 --- /dev/null +++ b/tests/calcite/testPushProjectPastSetOp.json @@ -0,0 +1,176 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalUnion(all=[true])\n LogicalProject(SAL=[$5])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(SAL=[$5])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "union" : [ { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectWithIsNotDistinctFromPastJoin.json b/tests/calcite/testPushProjectWithIsNotDistinctFromPastJoin.json new file mode 100644 index 0000000..6e533b7 --- /dev/null +++ b/tests/calcite/testPushProjectWithIsNotDistinctFromPastJoin.json @@ -0,0 +1,284 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($5, $13)])\n LogicalJoin(condition=[AND(IS NOT DISTINCT FROM($9, $14), =($7, 10))], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[||($1, $2)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0], JOB=[$1], SAL=[$2], COMM=[$3], $f4=[||($0, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[+($0, $3)])\n LogicalJoin(condition=[AND(IS NOT DISTINCT FROM($1, $4), $2)], joinType=[inner])\n LogicalProject(SAL=[$5], $f9=[$9], EXPR$0=[=($7, 10)])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[||($1, $2)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(COMM=[$3], $f4=[$4])\n LogicalProject(ENAME=[$0], JOB=[$1], SAL=[$2], COMM=[$3], $f4=[||($0, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "VARCHAR" + }, { + "column" : 14, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "||" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "||" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "||" + } ] + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "||" + } ] + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectWithOverPastJoin1.json b/tests/calcite/testPushProjectWithOverPastJoin1.json new file mode 100644 index 0000000..100ba6c --- /dev/null +++ b/tests/calcite/testPushProjectWithOverPastJoin1.json @@ -0,0 +1,166 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($5, $12)], EXPR$1=[COUNT($0) OVER (PARTITION BY $7)])\n LogicalJoin(condition=[AND(=($1, $9), =($7, 10))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[+($2, $6)], EXPR$1=[COUNT($0) OVER (PARTITION BY $3)])\n LogicalJoin(condition=[AND(=($1, $5), $4)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], SAL=[$5], DEPTNO=[$7], EXPR$0=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0], COMM=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "column" : 4, + "type" : "BOOLEAN" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectWithOverPastJoin2.json b/tests/calcite/testPushProjectWithOverPastJoin2.json new file mode 100644 index 0000000..fabc7ec --- /dev/null +++ b/tests/calcite/testPushProjectWithOverPastJoin2.json @@ -0,0 +1,166 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($5, $12)], EXPR$1=[COUNT($11) OVER (PARTITION BY $10)])\n LogicalJoin(condition=[AND(=($1, $9), =($7, 10))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[+($1, $6)], EXPR$1=[COUNT($5) OVER (PARTITION BY $4)])\n LogicalJoin(condition=[AND(=($0, $3), $2)], joinType=[inner])\n LogicalProject(ENAME=[$1], SAL=[$5], EXPR$0=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0], JOB=[$1], SAL=[$2], COMM=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "COUNT" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "COUNT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushProjectWithOverPastJoin3.json b/tests/calcite/testPushProjectWithOverPastJoin3.json new file mode 100644 index 0000000..1f78163 --- /dev/null +++ b/tests/calcite/testPushProjectWithOverPastJoin3.json @@ -0,0 +1,196 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($5, $12)], EXPR$1=[SUM(+(+($11, $11), 100)) OVER (PARTITION BY $10)])\n LogicalJoin(condition=[AND(=($1, $9), =($7, 10))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(EXPR$0=[+($1, $5)], EXPR$1=[SUM($6) OVER (PARTITION BY $4)])\n LogicalJoin(condition=[AND(=($0, $3), $2)], joinType=[inner])\n LogicalProject(ENAME=[$1], SAL=[$5], EXPR$0=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ENAME=[$0], JOB=[$1], COMM=[$3], EXPR$0=[+(+($2, $2), 100)])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "+" + } ], + "operator" : "SUM" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "column" : 2, + "type" : "BOOLEAN" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "SUM" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSemiJoinConditions.json b/tests/calcite/testPushSemiJoinConditions.json new file mode 100644 index 0000000..f1044ff --- /dev/null +++ b/tests/calcite/testPushSemiJoinConditions.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalJoin(condition=[AND(OR(=($0, $2), AND(IS NULL($0), IS NULL($2))), OR(=($1, $3), AND(IS NULL($1), IS NULL($3))))], joinType=[semi])\n LogicalProject(DEPTNO=[$7], ENAME=[$1])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalProject(DEPTNO=[$0], DNAME=[$1])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalProject(DEPTNO=[$7], ENAME=[$1])\n LogicalJoin(condition=[AND(IS NOT DISTINCT FROM($7, $8), IS NOT DISTINCT FROM($1, $9))], joinType=[semi])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalProject(DEPTNO=[$0], DNAME=[$1])\n LogicalTableScan(table=[[scott, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + }, { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 2, + "type" : "TINYINT" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "TINYINT" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "IS NOT DISTINCT FROM" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "IS NOT DISTINCT FROM" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSemiJoinPastFilter.json b/tests/calcite/testPushSemiJoinPastFilter.json new file mode 100644 index 0000000..0fe6d71 --- /dev/null +++ b/tests/calcite/testPushSemiJoinPastFilter.json @@ -0,0 +1,136 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[AND(=($7, $9), =($1, 'foo'))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalFilter(condition=[=($1, 'foo')])\n LogicalJoin(condition=[=($7, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'foo'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'foo'" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "scan" : 1 + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSemiJoinPastJoinRuleLeft.json b/tests/calcite/testPushSemiJoinPastJoinRuleLeft.json new file mode 100644 index 0000000..5544830 --- /dev/null +++ b/tests/calcite/testPushSemiJoinPastJoinRuleLeft.json @@ -0,0 +1,170 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[AND(=($7, $9), =($0, $11))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[=($0, $11)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($0, $9)], joinType=[semi])\n LogicalJoin(condition=[=($7, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "SEMI", + "right" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSemiJoinPastJoinRuleNotHappensJoinKeysDifferentOrigin.json b/tests/calcite/testPushSemiJoinPastJoinRuleNotHappensJoinKeysDifferentOrigin.json new file mode 100644 index 0000000..3e69635 --- /dev/null +++ b/tests/calcite/testPushSemiJoinPastJoinRuleNotHappensJoinKeysDifferentOrigin.json @@ -0,0 +1,215 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[AND(=($7, $9), =($1, $11), =($10, $12))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[AND(=($1, $11), =($10, $12))], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[AND(=($1, $11), =($10, $12))], joinType=[semi])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($7, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n LogicalTableScan(table=[[CATALOG, SALES, BONUS]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "VARCHAR", "VARCHAR", "INTEGER", "INTEGER" ], + "nullable" : [ false, false, false, false ], + "name" : "CATALOG.SALES.BONUS", + "guaranteed" : [ ], + "fields" : [ "ENAME", "JOB", "SAL", "COMM" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 2 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "SEMI", + "right" : { + "scan" : 2 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 2 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSemiJoinPastJoinRuleRight.json b/tests/calcite/testPushSemiJoinPastJoinRuleRight.json new file mode 100644 index 0000000..56b31ed --- /dev/null +++ b/tests/calcite/testPushSemiJoinPastJoinRuleRight.json @@ -0,0 +1,170 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[AND(=($7, $9), =($9, $18))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[=($9, $18)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($7, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalJoin(condition=[=($0, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 1 + }, + "kind" : "SEMI", + "right" : { + "scan" : 0 + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSemiJoinPastProject.json b/tests/calcite/testPushSemiJoinPastProject.json new file mode 100644 index 0000000..552598c --- /dev/null +++ b/tests/calcite/testPushSemiJoinPastProject.json @@ -0,0 +1,197 @@ +{ + "help" : [ "LogicalProject(ENAME=[$0], EXPR$1=[$1], EXPR$2=[$2], DEPTNO=[$3])\n LogicalFilter(condition=[=($3, $4)])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalProject(ENAME=[$1], EXPR$1=[TRIM(FLAG(BOTH), ' ', $2)], EXPR$2=[*($5, 2)], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(ENAME=[$0], EXPR$1=[$1], EXPR$2=[$2], DEPTNO=[$3])\n LogicalJoin(condition=[=($3, $4)], joinType=[inner], semiJoinDone=[true])\n LogicalProject(ENAME=[$1], EXPR$1=[TRIM(FLAG(BOTH), ' ', $2)], EXPR$2=[*($5, 2)], DEPTNO=[$7])\n LogicalJoin(condition=[=($7, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "type" : "SYMBOL", + "operand" : [ ], + "operator" : "BOTH" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1' '" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "TRIM" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "type" : "SYMBOL", + "operand" : [ ], + "operator" : "BOTH" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1' '" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "TRIM" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "*" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumConstantGroupingSetsThroughUnion.json b/tests/calcite/testPushSumConstantGroupingSetsThroughUnion.json new file mode 100644 index 0000000..3925b23 --- /dev/null +++ b/tests/calcite/testPushSumConstantGroupingSetsThroughUnion.json @@ -0,0 +1,224 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], U=[$9])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], U=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], U=[3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumConstantThroughUnion.json b/tests/calcite/testPushSumConstantThroughUnion.json new file mode 100644 index 0000000..c8ac48c --- /dev/null +++ b/tests/calcite/testPushSumConstantThroughUnion.json @@ -0,0 +1,203 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], U=[$9])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], U=[2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], U=[3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumCountStarGroupingSetsThroughUnion.json b/tests/calcite/testPushSumCountStarGroupingSetsThroughUnion.json new file mode 100644 index 0000000..e35e053 --- /dev/null +++ b/tests/calcite/testPushSumCountStarGroupingSetsThroughUnion.json @@ -0,0 +1,313 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)], EXPR$3=[COUNT()], EXPR$4=[MIN($0)], EXPR$5=[MAX($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)], EXPR$3=[$SUM0($3)], EXPR$4=[MIN($4)], EXPR$5=[MAX($5)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)], EXPR$3=[COUNT()], EXPR$4=[MIN($0)], EXPR$5=[MAX($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)], EXPR$3=[COUNT()], EXPR$4=[MIN($0)], EXPR$5=[MAX($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], EMPNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumCountStarThroughUnion.json b/tests/calcite/testPushSumCountStarThroughUnion.json new file mode 100644 index 0000000..ce0a3dc --- /dev/null +++ b/tests/calcite/testPushSumCountStarThroughUnion.json @@ -0,0 +1,301 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT()], EXPR$3=[MIN($2)], EXPR$4=[MAX($1)])\n LogicalProject(ENAME=[$1], EMPNO=[$0], DEPTNO=[$7])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[$SUM0($2)], EXPR$3=[MIN($3)], EXPR$4=[MAX($4)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT()], EXPR$3=[MIN($2)], EXPR$4=[MAX($1)])\n LogicalProject(ENAME=[$1], EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[COUNT()], EXPR$3=[MIN($2)], EXPR$4=[MAX($1)])\n LogicalProject(ENAME=[$1], EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumNullConstantGroupingSetsThroughUnion.json b/tests/calcite/testPushSumNullConstantGroupingSetsThroughUnion.json new file mode 100644 index 0000000..dbbc885 --- /dev/null +++ b/tests/calcite/testPushSumNullConstantGroupingSetsThroughUnion.json @@ -0,0 +1,224 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], U=[$9])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumNullConstantThroughUnion.json b/tests/calcite/testPushSumNullConstantThroughUnion.json new file mode 100644 index 0000000..5a23090 --- /dev/null +++ b/tests/calcite/testPushSumNullConstantThroughUnion.json @@ -0,0 +1,203 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], U=[$9])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], U=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumNullableGroupingSetsThroughUnion.json b/tests/calcite/testPushSumNullableGroupingSetsThroughUnion.json new file mode 100644 index 0000000..d7fd9fa --- /dev/null +++ b/tests/calcite/testPushSumNullableGroupingSetsThroughUnion.json @@ -0,0 +1,214 @@ +{ + "help" : [ "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0, 1}], groups=[[{0, 1}, {0}, {}]], EXPR$2=[SUM($2)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[SUM($2)])\n LogicalProject(DEPTNO=[$7], JOB=[$2], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumNullableNOGBYThroughUnion.json b/tests/calcite/testPushSumNullableNOGBYThroughUnion.json new file mode 100644 index 0000000..04a00ff --- /dev/null +++ b/tests/calcite/testPushSumNullableNOGBYThroughUnion.json @@ -0,0 +1,172 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\n LogicalProject(MGR=[$3])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\n LogicalProject(MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], EXPR$0=[SUM($0)])\n LogicalProject(MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testPushSumNullableThroughUnion.json b/tests/calcite/testPushSumNullableThroughUnion.json new file mode 100644 index 0000000..128cbc3 --- /dev/null +++ b/tests/calcite/testPushSumNullableThroughUnion.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalUnion(all=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)])\n LogicalProject(ENAME=[$1], MGR=[$3])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceAggregateFunctionsByGroup.json b/tests/calcite/testReduceAggregateFunctionsByGroup.json new file mode 100644 index 0000000..234c1f7 --- /dev/null +++ b/tests/calcite/testReduceAggregateFunctionsByGroup.json @@ -0,0 +1,168 @@ +{ + "help" : [ "LogicalProject(SAL=[$0], SAL_MAX=[$2], SAL_MIN=[$3], SAL_AVG=[$4], SAL_VAL=[$5], SAL_FIRST=[$6], SAL_LAST=[$7])\n LogicalAggregate(group=[{0, 1}], SAL_MAX=[MAX($0)], SAL_MIN=[MIN($0)], SAL_AVG=[AVG($0)], SAL_VAL=[ANY_VALUE($0)], SAL_FIRST=[FIRST_VALUE($0)], SAL_LAST=[LAST_VALUE($0)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$0], SAL_MAX=[$0], SAL_MIN=[$0], SAL_AVG=[$0], SAL_VAL=[$0], SAL_FIRST=[$0], SAL_LAST=[$0])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "ANY_VALUE", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "FIRST_VALUE", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "LAST_VALUE", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceAllAggregateFunctions.json b/tests/calcite/testReduceAllAggregateFunctions.json new file mode 100644 index 0000000..31a4a0d --- /dev/null +++ b/tests/calcite/testReduceAllAggregateFunctions.json @@ -0,0 +1,378 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[STDDEV_SAMP($1)], EXPR$4=[VAR_POP($1)], EXPR$5=[VAR_SAMP($1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$4=[CAST(/(-($1, /(*($2, $2), $3)), $3)):INTEGER NOT NULL], EXPR$5=[CAST(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3, 1)))):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($1)], agg#2=[COUNT()])\n LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_SAMP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "VAR_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "VAR_SAMP", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "DOUBLE", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "0.5" + } ], + "operator" : "POWER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "DOUBLE", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "-" + } ], + "operator" : "CASE" + } ], + "operator" : "/" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "0.5" + } ], + "operator" : "POWER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "-" + } ], + "operator" : "CASE" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceAverage.json b/tests/calcite/testReduceAverage.json new file mode 100644 index 0000000..66511d5 --- /dev/null +++ b/tests/calcite/testReduceAverage.json @@ -0,0 +1,126 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[MAX($0)], EXPR$2=[AVG($1)], EXPR$3=[MIN($0)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0], EXPR$1=[$0], EXPR$2=[CAST(/($1, $2)):INTEGER NOT NULL], EXPR$3=[$0])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1)], agg#1=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "VARCHAR", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "VARCHAR", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceAverageAndSumWithNoReduceStddevAndVar.json b/tests/calcite/testReduceAverageAndSumWithNoReduceStddevAndVar.json new file mode 100644 index 0000000..6711e52 --- /dev/null +++ b/tests/calcite/testReduceAverageAndSumWithNoReduceStddevAndVar.json @@ -0,0 +1,144 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[VAR_POP($1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[$4])\n LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], agg#1=[$SUM0($1)], agg#2=[COUNT()], EXPR$3=[VAR_POP($1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "VAR_POP", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "VAR_POP", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "column" : 4, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceAverageAndVarWithNoReduceStddev.json b/tests/calcite/testReduceAverageAndVarWithNoReduceStddev.json new file mode 100644 index 0000000..905e8ac --- /dev/null +++ b/tests/calcite/testReduceAverageAndVarWithNoReduceStddev.json @@ -0,0 +1,197 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], EXPR$2=[AVG($1)], EXPR$3=[VAR_POP($1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL], EXPR$3=[CAST(/(-($4, /(*($2, $2), $3)), $3)):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)], agg#1=[SUM($1)], agg#2=[COUNT()], agg#3=[SUM($2)])\n LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "VAR_POP", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "STDDEV_POP", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "*" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "-" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceAverageWithNoReduceSum.json b/tests/calcite/testReduceAverageWithNoReduceSum.json new file mode 100644 index 0000000..17d7780 --- /dev/null +++ b/tests/calcite/testReduceAverageWithNoReduceSum.json @@ -0,0 +1,126 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[MAX($0)], EXPR$2=[AVG($1)], EXPR$3=[MIN($0)])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0], EXPR$1=[$0], EXPR$2=[CAST(/($1, $2)):INTEGER NOT NULL], EXPR$3=[$0])\n LogicalAggregate(group=[{0}], agg#0=[SUM($1)], agg#1=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "VARCHAR", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "VARCHAR", + "operand" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceCase.json b/tests/calcite/testReduceCase.json new file mode 100644 index 0000000..8f251f1 --- /dev/null +++ b/tests/calcite/testReduceCase.json @@ -0,0 +1,46 @@ +{ + "help" : [ "LogicalProject(NEWCOL=[CASE(false, 2.1:FLOAT, 1:FLOAT)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(NEWCOL=[1E0:FLOAT])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "FLOAT", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "FLOAT", + "operand" : [ ], + "operator" : "2.1" + }, { + "type" : "FLOAT", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "CASE" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "FLOAT", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceCaseNullabilityChange.json b/tests/calcite/testReduceCaseNullabilityChange.json new file mode 100644 index 0000000..68c4d6b --- /dev/null +++ b/tests/calcite/testReduceCaseNullabilityChange.json @@ -0,0 +1,88 @@ +{ + "help" : [ "LogicalProject(QX=[CASE(=($0, 1), 1, IS NOT NULL(1), 2, null:INTEGER)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(QX=[CAST(CASE(=($0, 1), 1, 2)):INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "CASE" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceCastAndConsts.json b/tests/calcite/testReduceCastAndConsts.json new file mode 100644 index 0000000..810a038 --- /dev/null +++ b/tests/calcite/testReduceCastAndConsts.json @@ -0,0 +1,140 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=(CAST(+($0, /(10, 2))):INTEGER NOT NULL, 13)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[=(+($0, 5), 13)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "/" + } ], + "operator" : "+" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "13" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "13" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceCasts.json b/tests/calcite/testReduceCasts.json new file mode 100644 index 0000000..3ef4522 --- /dev/null +++ b/tests/calcite/testReduceCasts.json @@ -0,0 +1,325 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[CAST($1):VARCHAR(128) NOT NULL], EXPR$1=[CAST($2):INTEGER NOT NULL])\n LogicalFilter(condition=[=(CAST(CAST($4):VARCHAR(1) NOT NULL):VARCHAR(7) NOT NULL, 'Manager')])\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$3], ENAME=[$4], JOB=[$5], MGR=[$6], HIREDATE=[$7], SAL=[$8], COMM=[$9], DEPTNO1=[$10], SLACKER=[$11])\n LogicalJoin(condition=[=($2, $12)], joinType=[inner])\n LogicalProject(DEPTNO=[$0], NAME=[$1], DEPTNO0=[CAST($0):INTEGER NOT NULL])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[CAST($7):INTEGER NOT NULL])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[CAST($1):VARCHAR(128) NOT NULL], EXPR$1=[$2])\n LogicalFilter(condition=[=(CAST(CAST($4):VARCHAR(1) NOT NULL):VARCHAR(7) NOT NULL, 'Manager')])\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$3], ENAME=[$4], JOB=[$5], MGR=[$6], HIREDATE=[$7], SAL=[$8], COMM=[$9], DEPTNO1=[$10], SLACKER=[$11])\n LogicalJoin(condition=[=($2, $12)], joinType=[inner])\n LogicalProject(DEPTNO=[$0], NAME=[$1], DEPTNO0=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Manager'" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "TIMESTAMP" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "target" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Manager'" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "TIMESTAMP" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "target" : [ { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceCompositeInSubQuery.json b/tests/calcite/testReduceCompositeInSubQuery.json new file mode 100644 index 0000000..1562a55 --- /dev/null +++ b/tests/calcite/testReduceCompositeInSubQuery.json @@ -0,0 +1,222 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(IN($0, $7, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$1])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), <($7, +(40, 60)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(IN($0, $7, {\nLogicalProject(EMPNO=[$0], DEPTNO=[$1])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}), <($7, 100))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "40" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "60" + } ], + "operator" : "+" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "<" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstants.json b/tests/calcite/testReduceConstants.json new file mode 100644 index 0000000..532af0a --- /dev/null +++ b/tests/calcite/testReduceConstants.json @@ -0,0 +1,340 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+(1, 2)], EXPR$1=[+($0, +(3, 4))], EXPR$2=[+(+(5, 6), $0)], EXPR$3=[null:INTEGER], EXPR$4=[CASE(IS NOT NULL(2), 2, null:INTEGER)], EXPR$5=[ROW(+(7, 8))])\n LogicalFilter(condition=[AND(=($0, +(7, 8)), =($0, +(8, 7)), =($0, CASE(IS NOT NULL(2), 2, null:INTEGER)))])\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\n LogicalJoin(condition=[=($0, $11)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+($7, -(5, 5))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[3], EXPR$1=[22], EXPR$2=[26], EXPR$3=[null:INTEGER], EXPR$4=[CAST(2):INTEGER], EXPR$5=[ROW(15)])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "+" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "+" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : "-" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + } ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "+" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "6" + } ], + "operator" : "+" + }, { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "ROW", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "+" + } ], + "operator" : "ROW" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "22" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "26" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "CAST" + }, { + "type" : "ROW", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "15" + } ], + "operator" : "ROW" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstants3.json b/tests/calcite/testReduceConstants3.json new file mode 100644 index 0000000..af51a4d --- /dev/null +++ b/tests/calcite/testReduceConstants3.json @@ -0,0 +1,131 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[OR(AND(IS NULL($3), IS NULL($12)), IS TRUE(=($3, $12)))])\n LogicalFilter(condition=[IS NULL($3)])\n LogicalJoin(condition=[=($3, $12)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[IS NULL($12)])\n LogicalFilter(condition=[IS NULL($3)])\n LogicalJoin(condition=[=($3, $12)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsCaseEquals.json b/tests/calcite/testReduceConstantsCaseEquals.json new file mode 100644 index 0000000..677d4e4 --- /dev/null +++ b/tests/calcite/testReduceConstantsCaseEquals.json @@ -0,0 +1,125 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalFilter(condition=[=(CASE(=($7, 20), 2, =($7, 10), 1, 3), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsCaseEquals2.json b/tests/calcite/testReduceConstantsCaseEquals2.json new file mode 100644 index 0000000..8e1b431 --- /dev/null +++ b/tests/calcite/testReduceConstantsCaseEquals2.json @@ -0,0 +1,125 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalFilter(condition=[=(CASE(=($7, 20), 2, =($7, 10), 1, null:INTEGER), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsCaseEquals3.json b/tests/calcite/testReduceConstantsCaseEquals3.json new file mode 100644 index 0000000..18244ef --- /dev/null +++ b/tests/calcite/testReduceConstantsCaseEquals3.json @@ -0,0 +1,155 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalFilter(condition=[=(CASE(=($7, 30), 1, =($7, 20), 2, =($7, 10), 1, =($7, 30), 111, 0), 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalFilter(condition=[SEARCH($7, Sarg[10, 30])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "111" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[10, 30]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDup.json b/tests/calcite/testReduceConstantsDup.json new file mode 100644 index 0000000..252ee69 --- /dev/null +++ b/tests/calcite/testReduceConstantsDup.json @@ -0,0 +1,66 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($0, 7), =($0, 8))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDup2.json b/tests/calcite/testReduceConstantsDup2.json new file mode 100644 index 0000000..b7833f6 --- /dev/null +++ b/tests/calcite/testReduceConstantsDup2.json @@ -0,0 +1,145 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(=($7, 7), =($7, 8), =($0, 10), IS NULL($3), =($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[10], ENAME=[$1], JOB=[$2], MGR=[null:INTEGER], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDup3.json b/tests/calcite/testReduceConstantsDup3.json new file mode 100644 index 0000000..1de88f2 --- /dev/null +++ b/tests/calcite/testReduceConstantsDup3.json @@ -0,0 +1,63 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[OR(<>($0, 7), <>($0, 8))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "<>" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDup3Null.json b/tests/calcite/testReduceConstantsDup3Null.json new file mode 100644 index 0000000..0f265f9 --- /dev/null +++ b/tests/calcite/testReduceConstantsDup3Null.json @@ -0,0 +1,75 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(<>($3, 7), <>($3, 8))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "<>" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDupNot.json b/tests/calcite/testReduceConstantsDupNot.json new file mode 100644 index 0000000..f2015f2 --- /dev/null +++ b/tests/calcite/testReduceConstantsDupNot.json @@ -0,0 +1,67 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[NOT(AND(=($0, 7), =($0, 8)))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "=" + } ], + "operator" : "AND" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDupNot2.json b/tests/calcite/testReduceConstantsDupNot2.json new file mode 100644 index 0000000..a95ccbc --- /dev/null +++ b/tests/calcite/testReduceConstantsDupNot2.json @@ -0,0 +1,78 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[NOT(AND(=($0, 7), =($1, 'foo'), =($0, 8)))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'foo'" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "=" + } ], + "operator" : "AND" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDupNot2Null.json b/tests/calcite/testReduceConstantsDupNot2Null.json new file mode 100644 index 0000000..0bf9b86 --- /dev/null +++ b/tests/calcite/testReduceConstantsDupNot2Null.json @@ -0,0 +1,105 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[NOT(AND(=($3, 7), =($7, 8), =($3, 8)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(IS NOT NULL($3), <>($7, 8))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "=" + } ], + "operator" : "AND" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "<>" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsDupNotNull.json b/tests/calcite/testReduceConstantsDupNotNull.json new file mode 100644 index 0000000..627a010 --- /dev/null +++ b/tests/calcite/testReduceConstantsDupNotNull.json @@ -0,0 +1,79 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[NOT(AND(=($3, 7), =($3, 8)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[IS NOT NULL($3)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "8" + } ], + "operator" : "=" + } ], + "operator" : "AND" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsEliminatesFilter.json b/tests/calcite/testReduceConstantsEliminatesFilter.json new file mode 100644 index 0000000..58354c1 --- /dev/null +++ b/tests/calcite/testReduceConstantsEliminatesFilter.json @@ -0,0 +1,78 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalFilter(condition=[>(+(1, 2), +(3, null))])\n LogicalValues(tuples=[[{ 1, 2 }]])\n", "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "+" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsIsNotNull.json b/tests/calcite/testReduceConstantsIsNotNull.json new file mode 100644 index 0000000..0605170 --- /dev/null +++ b/tests/calcite/testReduceConstantsIsNotNull.json @@ -0,0 +1,75 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[AND(=($0, 10), IS NOT NULL($0))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[=($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsIsNull.json b/tests/calcite/testReduceConstantsIsNull.json new file mode 100644 index 0000000..712c3c1 --- /dev/null +++ b/tests/calcite/testReduceConstantsIsNull.json @@ -0,0 +1,62 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[AND(=($0, 10), IS NULL($0))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsNegated.json b/tests/calcite/testReduceConstantsNegated.json new file mode 100644 index 0000000..a1dc381 --- /dev/null +++ b/tests/calcite/testReduceConstantsNegated.json @@ -0,0 +1,70 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[AND(=($0, 10), NOT(=($0, 10)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + } ], + "operator" : "NOT" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsNegatedInverted.json b/tests/calcite/testReduceConstantsNegatedInverted.json new file mode 100644 index 0000000..8e23588 --- /dev/null +++ b/tests/calcite/testReduceConstantsNegatedInverted.json @@ -0,0 +1,66 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[AND(>($0, 10), <=($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "<=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsNull.json b/tests/calcite/testReduceConstantsNull.json new file mode 100644 index 0000000..fd427b7 --- /dev/null +++ b/tests/calcite/testReduceConstantsNull.json @@ -0,0 +1,101 @@ +{ + "help" : [ "LogicalProject(N=[$0])\n LogicalFilter(condition=[IS NULL($0)])\n LogicalProject(N=[$0])\n LogicalFilter(condition=[AND(IS NULL($0), IS NULL($0))])\n LogicalProject(N=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(N=[$0])\n LogicalProject(N=[$0])\n LogicalProject(N=[null:INTEGER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsNullEqualsOne.json b/tests/calcite/testReduceConstantsNullEqualsOne.json new file mode 100644 index 0000000..26dbdbf --- /dev/null +++ b/tests/calcite/testReduceConstantsNullEqualsOne.json @@ -0,0 +1,78 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalFilter(condition=[=(null, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalAggregate(group=[{}], EXPR$0=[COUNT()])\n LogicalProject($f0=[1])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "content" : [ ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsProjectNullable.json b/tests/calcite/testReduceConstantsProjectNullable.json new file mode 100644 index 0000000..9d53762 --- /dev/null +++ b/tests/calcite/testReduceConstantsProjectNullable.json @@ -0,0 +1,69 @@ +{ + "help" : [ "LogicalProject(MGR=[$3])\n LogicalFilter(condition=[=($3, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(MGR=[CAST(10):INTEGER])\n LogicalFilter(condition=[=($3, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceConstantsRequiresExecutor.json b/tests/calcite/testReduceConstantsRequiresExecutor.json new file mode 100644 index 0000000..58354c1 --- /dev/null +++ b/tests/calcite/testReduceConstantsRequiresExecutor.json @@ -0,0 +1,78 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalFilter(condition=[>(+(1, 2), +(3, null))])\n LogicalValues(tuples=[[{ 1, 2 }]])\n", "LogicalProject(EXPR$0=[$0], EXPR$1=[$1])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "+" + } ], + "operator" : ">" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceDynamic.json b/tests/calcite/testReduceDynamic.json new file mode 100644 index 0000000..bc6af4b --- /dev/null +++ b/tests/calcite/testReduceDynamic.json @@ -0,0 +1,34 @@ +{ + "help" : [ "LogicalProject(USER=[USER])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(USER=['happyCalciteUser':VARCHAR(2000)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "USER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'happyCalciteUser'" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceNestedCaseWhen.json b/tests/calcite/testReduceNestedCaseWhen.json new file mode 100644 index 0000000..4a0e3be --- /dev/null +++ b/tests/calcite/testReduceNestedCaseWhen.json @@ -0,0 +1,126 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[IS TRUE(CASE(=($5, 1000), IS NULL(CASE(=($5, 1000), null:INTEGER, 1)), IS NULL(CASE(=($5, 2000), null:INTEGER, 1))))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[SEARCH($5, Sarg[1000, 2000])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "CASE" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2000" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "CASE" + } ], + "operator" : "IS NULL" + } ], + "operator" : "CASE" + } ], + "operator" : "IS TRUE" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[1000, 2000]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceNullableToNotNull.json b/tests/calcite/testReduceNullableToNotNull.json new file mode 100644 index 0000000..4ffb1e8 --- /dev/null +++ b/tests/calcite/testReduceNullableToNotNull.json @@ -0,0 +1,68 @@ +{ + "help" : [ "LogicalProject(NEWCOL=[+($0, CASE(=('a', 'a'), 1, null:INTEGER))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(NEWCOL=[+($0, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'a'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'a'" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceNullableToNotNull2.json b/tests/calcite/testReduceNullableToNotNull2.json new file mode 100644 index 0000000..4ffb1e8 --- /dev/null +++ b/tests/calcite/testReduceNullableToNotNull2.json @@ -0,0 +1,68 @@ +{ + "help" : [ "LogicalProject(NEWCOL=[+($0, CASE(=('a', 'a'), 1, null:INTEGER))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(NEWCOL=[+($0, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'a'" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'a'" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "CASE" + } ], + "operator" : "+" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceOrCaseWhen.json b/tests/calcite/testReduceOrCaseWhen.json new file mode 100644 index 0000000..0070d9b --- /dev/null +++ b/tests/calcite/testReduceOrCaseWhen.json @@ -0,0 +1,111 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[OR(IS NULL(CASE(=($5, 1000), null:INTEGER, 1)), IS NULL(CASE(=($5, 2000), null:INTEGER, 1)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[SEARCH($5, Sarg[1000, 2000])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "CASE" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2000" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "CASE" + } ], + "operator" : "IS NULL" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[1000, 2000]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceValuesToEmpty.json b/tests/calcite/testReduceValuesToEmpty.json new file mode 100644 index 0000000..70e9030 --- /dev/null +++ b/tests/calcite/testReduceValuesToEmpty.json @@ -0,0 +1,75 @@ +{ + "help" : [ "LogicalProject(X=[+($0, $1)], B=[$1], A=[$0])\n LogicalFilter(condition=[<(-($0, $1), 0)])\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 7 }]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "-" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ] ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER", "INTEGER", "INTEGER" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceValuesUnderFilter.json b/tests/calcite/testReduceValuesUnderFilter.json new file mode 100644 index 0000000..4b78018 --- /dev/null +++ b/tests/calcite/testReduceValuesUnderFilter.json @@ -0,0 +1,77 @@ +{ + "help" : [ "LogicalProject(A=[$0], B=[$1])\n LogicalFilter(condition=[<($0, 15)])\n LogicalValues(tuples=[[{ 10, 'x' }, { 20, 'y' }]])\n", "LogicalProject(A=[$0], B=[$1])\n LogicalValues(tuples=[[{ 10, 'x' }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "15" + } ], + "operator" : "<" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "CHAR" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'x'" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'y'" + } ] ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "CHAR" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "CHAR" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'x'" + } ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "CHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceValuesUnderProject.json b/tests/calcite/testReduceValuesUnderProject.json new file mode 100644 index 0000000..f7a8459 --- /dev/null +++ b/tests/calcite/testReduceValuesUnderProject.json @@ -0,0 +1,54 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[+($0, $1)])\n LogicalValues(tuples=[[{ 10, 1 }, { 20, 3 }]])\n", "LogicalValues(tuples=[[{ 11 }, { 23 }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "23" + } ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceValuesUnderProjectFilter.json b/tests/calcite/testReduceValuesUnderProjectFilter.json new file mode 100644 index 0000000..a30fa44 --- /dev/null +++ b/tests/calcite/testReduceValuesUnderProjectFilter.json @@ -0,0 +1,107 @@ +{ + "help" : [ "LogicalProject(X=[+($0, $1)], B=[$1], A=[$0])\n LogicalFilter(condition=[<(-($0, $1), 21)])\n LogicalValues(tuples=[[{ 10, 1 }, { 30, 7 }, { 20, 3 }]])\n", "LogicalValues(tuples=[[{ 11, 1, 10 }, { 23, 3, 20 }]])\n" ], + "schemas" : [ ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "-" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "21" + } ], + "operator" : "<" + }, + "source" : { + "values" : { + "schema" : [ "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ] ] + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "values" : { + "schema" : [ "INTEGER", "INTEGER", "INTEGER" ], + "content" : [ [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "11" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "23" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testReduceWithNonTypePredicate.json b/tests/calcite/testReduceWithNonTypePredicate.json new file mode 100644 index 0000000..9060a7c --- /dev/null +++ b/tests/calcite/testReduceWithNonTypePredicate.json @@ -0,0 +1,147 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[AVG($0)], EXPR$1=[AVG($0) WITHIN DISTINCT ($1)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[$0], EXPR$1=[CAST(/($1, $2)):INTEGER])\n LogicalProject(EXPR$0=[$0], $f1=[CASE(=($2, 0), null:INTEGER, $1)], $f2=[$2])\n LogicalAggregate(group=[{}], EXPR$0=[AVG($0)], agg#1=[$SUM0($0) WITHIN DISTINCT ($1)], agg#2=[COUNT() WITHIN DISTINCT ($1)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "column" : 2, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRemoveDistinctOnAgg.json b/tests/calcite/testRemoveDistinctOnAgg.json new file mode 100644 index 0000000..1951bfb --- /dev/null +++ b/tests/calcite/testRemoveDistinctOnAgg.json @@ -0,0 +1,155 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], EXPR$1=[$2], EXPR$2=[$3], EXPR$3=[$3], EXPR$4=[$4], EXPR$5=[$5], EXPR$6=[$6], EXPR$7=[$7])\n LogicalAggregate(group=[{0, 1}], EXPR$1=[SUM(DISTINCT $2)], EXPR$2=[MIN($2)], EXPR$4=[MAX($2)], EXPR$5=[BIT_AND($2)], EXPR$6=[BIT_OR($2)], EXPR$7=[COUNT(DISTINCT $2)])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7], SAL=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], EXPR$1=[$5], EXPR$2=[$5], EXPR$3=[$5], EXPR$4=[$5], EXPR$5=[$5], EXPR$6=[$5], EXPR$7=[1:BIGINT])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : true, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "BIT_AND", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "BIT_OR", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BIGINT", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRemoveSemiJoin.json b/tests/calcite/testRemoveSemiJoin.json new file mode 100644 index 0000000..ad63a2c --- /dev/null +++ b/tests/calcite/testRemoveSemiJoin.json @@ -0,0 +1,86 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[=($7, $9)])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRemoveSemiJoinRight.json b/tests/calcite/testRemoveSemiJoinRight.json new file mode 100644 index 0000000..0ca35d3 --- /dev/null +++ b/tests/calcite/testRemoveSemiJoinRight.json @@ -0,0 +1,132 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[AND(=($7, $9), =($9, $18))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[=($9, $18)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRemoveSemiJoinRightWithFilter.json b/tests/calcite/testRemoveSemiJoinRightWithFilter.json new file mode 100644 index 0000000..1bc27ab --- /dev/null +++ b/tests/calcite/testRemoveSemiJoinRightWithFilter.json @@ -0,0 +1,159 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[AND(=($7, $9), =($9, $18), =($10, 'foo'))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[=($9, $18)], joinType=[inner], semiJoinDone=[true])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[=($1, 'foo')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'foo'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'foo'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRemoveSemiJoinWithFilter.json b/tests/calcite/testRemoveSemiJoinWithFilter.json new file mode 100644 index 0000000..c321988 --- /dev/null +++ b/tests/calcite/testRemoveSemiJoinWithFilter.json @@ -0,0 +1,117 @@ +{ + "help" : [ "LogicalProject(ENAME=[$1])\n LogicalFilter(condition=[AND(=($7, $9), =($1, 'foo'))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(ENAME=[$1])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner], semiJoinDone=[true])\n LogicalFilter(condition=[=($1, 'foo')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'foo'" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'foo'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightEmptyAntiJoin.json b/tests/calcite/testRightEmptyAntiJoin.json new file mode 100644 index 0000000..991caf5 --- /dev/null +++ b/tests/calcite/testRightEmptyAntiJoin.json @@ -0,0 +1,54 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalJoin(condition=[=($7, $8)], joinType=[anti])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalValues(tuples=[[]])\n", "LogicalProject(EMPNO=[$0])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "ANTI", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightEmptyAntiJoinNonEqui.json b/tests/calcite/testRightEmptyAntiJoinNonEqui.json new file mode 100644 index 0000000..438d1e6 --- /dev/null +++ b/tests/calcite/testRightEmptyAntiJoinNonEqui.json @@ -0,0 +1,69 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalJoin(condition=[AND(=($7, $8), =($5, 2000))], joinType=[anti])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalValues(tuples=[[]])\n", "LogicalProject(EMPNO=[$0])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "DECIMAL" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2000" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 0 + }, + "kind" : "ANTI", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightEmptyFullJoin.json b/tests/calcite/testRightEmptyFullJoin.json new file mode 100644 index 0000000..ba37c0b --- /dev/null +++ b/tests/calcite/testRightEmptyFullJoin.json @@ -0,0 +1,210 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[full])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalProject(EMPNO=[CAST($0):INTEGER], ENAME=[CAST($1):VARCHAR(20)], JOB=[CAST($2):VARCHAR(10)], MGR=[$3], HIREDATE=[CAST($4):TIMESTAMP(0)], SAL=[CAST($5):INTEGER], COMM=[CAST($6):INTEGER], DEPTNO=[CAST($7):INTEGER], SLACKER=[CAST($8):BOOLEAN], DEPTNO0=[null:INTEGER], NAME=[null:VARCHAR(10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "FULL", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 4, + "type" : "TIMESTAMP" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BOOLEAN" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightEmptyInnerJoin.json b/tests/calcite/testRightEmptyInnerJoin.json new file mode 100644 index 0000000..25863f1 --- /dev/null +++ b/tests/calcite/testRightEmptyInnerJoin.json @@ -0,0 +1,141 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN", "INTEGER", "VARCHAR" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightEmptyLeftJoin.json b/tests/calcite/testRightEmptyLeftJoin.json new file mode 100644 index 0000000..3a2fa4c --- /dev/null +++ b/tests/calcite/testRightEmptyLeftJoin.json @@ -0,0 +1,178 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[null:INTEGER], NAME=[null:VARCHAR(10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "NULL" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightEmptyRightJoin.json b/tests/calcite/testRightEmptyRightJoin.json new file mode 100644 index 0000000..0603c0e --- /dev/null +++ b/tests/calcite/testRightEmptyRightJoin.json @@ -0,0 +1,141 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalFilter(condition=[false])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN", "INTEGER", "VARCHAR" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightEmptySemiJoin.json b/tests/calcite/testRightEmptySemiJoin.json new file mode 100644 index 0000000..d76257c --- /dev/null +++ b/tests/calcite/testRightEmptySemiJoin.json @@ -0,0 +1,57 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalJoin(condition=[=($7, $8)], joinType=[semi])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalValues(tuples=[[]])\n", "LogicalProject(EMPNO=[$0])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "SMALLINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testRightOuterJoinSimplificationToInner.json b/tests/calcite/testRightOuterJoinSimplificationToInner.json new file mode 100644 index 0000000..ef8e17c --- /dev/null +++ b/tests/calcite/testRightOuterJoinSimplificationToInner.json @@ -0,0 +1,157 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[=($1, 'Charlie')])\n LogicalJoin(condition=[=($0, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalProject(DEPTNO=[CAST($0):INTEGER], NAME=[CAST($1):VARCHAR(10)], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalFilter(condition=[=($1, 'Charlie')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'Charlie'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSelectAnyCorrelated.json b/tests/calcite/testSelectAnyCorrelated.json new file mode 100644 index 0000000..516d50f --- /dev/null +++ b/tests/calcite/testSelectAnyCorrelated.json @@ -0,0 +1,323 @@ +{ + "help" : [ "LogicalProject(variablesSet=[[$cor0]], EXPR$0=[> SOME($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($cor0.JOB, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[CAST(OR(AND(IS TRUE(>($0, $9)), IS NOT TRUE(OR(IS NULL($12), =($10, 0)))), AND(IS TRUE(>($10, $11)), null, IS NOT TRUE(OR(IS NULL($12), =($10, 0))), IS NOT TRUE(>($0, $9))), AND(>($0, $9), IS NOT TRUE(OR(IS NULL($12), =($10, 0))), IS NOT TRUE(>($0, $9)), IS NOT TRUE(>($10, $11))))):BOOLEAN NOT NULL])\n LogicalJoin(condition=[=($2, $13)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(m=[$1], c=[$2], d=[$2], trueLiteral=[true], NAME=[$0])\n LogicalAggregate(group=[{0}], m=[MIN($1)], c=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "> SOME" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 13, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 1 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ], + "operator" : "OR" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : ">" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ], + "operator" : "OR" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ], + "operator" : "OR" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSelectNotInCorrelated.json b/tests/calcite/testSelectNotInCorrelated.json new file mode 100644 index 0000000..2f8f104 --- /dev/null +++ b/tests/calcite/testSelectNotInCorrelated.json @@ -0,0 +1,131 @@ +{ + "help" : [ "LogicalProject(variablesSet=[[$cor0]], SAL=[$5], EXPR$1=[NOT(IN($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($cor0.JOB, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n}))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5], EXPR$1=[IS NULL($10)])\n LogicalJoin(condition=[AND(=($0, $9), =($2, $11))], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], i=[true], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "NOT" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 1 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiCorrelateWithLeftEmpty.json b/tests/calcite/testSemiCorrelateWithLeftEmpty.json new file mode 100644 index 0000000..9b2c9bf --- /dev/null +++ b/tests/calcite/testSemiCorrelateWithLeftEmpty.json @@ -0,0 +1,45 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[semi], requiredColumns=[{7}])\n LogicalValues(tuples=[[]])\n LogicalFilter(condition=[=($cor0.DEPTNO, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + }, + "kind" : "SEMI", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "TINYINT" + }, { + "column" : 8, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiCorrelateWithRightEmpty.json b/tests/calcite/testSemiCorrelateWithRightEmpty.json new file mode 100644 index 0000000..82789b5 --- /dev/null +++ b/tests/calcite/testSemiCorrelateWithRightEmpty.json @@ -0,0 +1,30 @@ +{ + "help" : [ "LogicalCorrelate(correlation=[$cor0], joinType=[semi], requiredColumns=[{7}])\n LogicalTableScan(table=[[scott, EMP]])\n LogicalValues(tuples=[[]])\n", "LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "values" : { + "schema" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "content" : [ ] + } + } + } + }, { + "values" : { + "schema" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "content" : [ ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinProjectTranspose.json b/tests/calcite/testSemiJoinProjectTranspose.json new file mode 100644 index 0000000..d9e44b4 --- /dev/null +++ b/tests/calcite/testSemiJoinProjectTranspose.json @@ -0,0 +1,139 @@ +{ + "help" : [ "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[=($0, $3)], joinType=[semi])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject($f0=[*(2, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n", "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalProject(DEPTNO=[$0], DNAME=[$1])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalProject($f0=[$0])\n LogicalAggregate(group=[{0}])\n LogicalProject($f0=[*(2, $0)])\n LogicalTableScan(table=[[scott, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 0, + "type" : "TINYINT" + } ], + "operator" : "*" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, { + "column" : 0, + "type" : "TINYINT" + } ], + "operator" : "*" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinReduceConstants.json b/tests/calcite/testSemiJoinReduceConstants.json new file mode 100644 index 0000000..24a6ad1 --- /dev/null +++ b/tests/calcite/testSemiJoinReduceConstants.json @@ -0,0 +1,195 @@ +{ + "help" : [ "LogicalProject(SAL=[$0])\n LogicalJoin(condition=[=($1, $2)], joinType=[semi])\n LogicalFilter(condition=[=($1, 200)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$1])\n LogicalFilter(condition=[=($0, 100)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$0])\n LogicalJoin(condition=[=(200, $2)], joinType=[semi])\n LogicalFilter(condition=[=($1, 200)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$1])\n LogicalFilter(condition=[=($0, 100)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "200" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "200" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "200" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : "=" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinRule.json b/tests/calcite/testSemiJoinRule.json new file mode 100644 index 0000000..47794d0 --- /dev/null +++ b/tests/calcite/testSemiJoinRule.json @@ -0,0 +1,129 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinRuleExists.json b/tests/calcite/testSemiJoinRuleExists.json new file mode 100644 index 0000000..47794d0 --- /dev/null +++ b/tests/calcite/testSemiJoinRuleExists.json @@ -0,0 +1,129 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinRuleLeft.json b/tests/calcite/testSemiJoinRuleLeft.json new file mode 100644 index 0000000..0584c17 --- /dev/null +++ b/tests/calcite/testSemiJoinRuleLeft.json @@ -0,0 +1,91 @@ +{ + "help" : [ "LogicalProject(NAME=[$1])\n LogicalJoin(condition=[=($0, $2)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinRuleWithHint.json b/tests/calcite/testSemiJoinRuleWithHint.json new file mode 100644 index 0000000..347ede9 --- /dev/null +++ b/tests/calcite/testSemiJoinRuleWithHint.json @@ -0,0 +1,102 @@ +{ + "help" : [ "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[=($0, $3)], joinType=[inner])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[scott, EMP]])\n", "LogicalProject(DNAME=[$1])\n LogicalJoin(condition=[=($0, $3)], joinType=[semi])\n LogicalTableScan(table=[[scott, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[scott, EMP]])\n" ], + "schemas" : [ { + "types" : [ "TINYINT", "VARCHAR", "VARCHAR" ], + "nullable" : [ false, true, true ], + "name" : "scott.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "DNAME", "LOC" ], + "key" : [ [ 0 ], [ 1 ], [ 2 ] ] + }, { + "types" : [ "SMALLINT", "VARCHAR", "VARCHAR", "SMALLINT", "DATE", "DECIMAL", "DECIMAL", "TINYINT" ], + "nullable" : [ false, true, true, true, true, true, true, true ], + "name" : "scott.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO" ], + "key" : [ [ 0 ], [ 1 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 3, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "TINYINT" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "TINYINT" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "TINYINT" + }, { + "column" : 3, + "type" : "TINYINT" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "TINYINT" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinRuleWithJoinOnUniqueInput.json b/tests/calcite/testSemiJoinRuleWithJoinOnUniqueInput.json new file mode 100644 index 0000000..798b23c --- /dev/null +++ b/tests/calcite/testSemiJoinRuleWithJoinOnUniqueInput.json @@ -0,0 +1,109 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalJoin(condition=[=($7, $9)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinRuleWithJoinOnUniqueInputWithAlias.json b/tests/calcite/testSemiJoinRuleWithJoinOnUniqueInputWithAlias.json new file mode 100644 index 0000000..2d788dc --- /dev/null +++ b/tests/calcite/testSemiJoinRuleWithJoinOnUniqueInputWithAlias.json @@ -0,0 +1,121 @@ +{ + "help" : [ "LogicalProject(DEPARTMENT_ID=[$1], SALARY=[$0])\n LogicalJoin(condition=[=($1, $2)], joinType=[inner])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPARTMENT_ID=[$1], SALARY=[$0])\n LogicalJoin(condition=[=($1, $2)], joinType=[semi])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSemiJoinTrim.json b/tests/calcite/testSemiJoinTrim.json new file mode 100644 index 0000000..a8eab5d --- /dev/null +++ b/tests/calcite/testSemiJoinTrim.json @@ -0,0 +1,201 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalJoin(condition=[=($0, $2)], joinType=[inner])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7], $f0=[true])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, CUSTOMER, ACCOUNT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalJoin(condition=[=($0, $1)], joinType=[semi])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$1])\n LogicalFilter(condition=[>($0, 100)])\n LogicalProject(SAL=[$5], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(ACCTNO=[$0])\n LogicalTableScan(table=[[CATALOG, CUSTOMER, ACCOUNT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "INTEGER" ], + "nullable" : [ false, false, false ], + "name" : "CATALOG.CUSTOMER.ACCOUNT", + "guaranteed" : [ ], + "fields" : [ "ACCTNO", "TYPE", "BALANCE" ], + "key" : [ ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 2 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 2 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSimplifyFilter.json b/tests/calcite/testSimplifyFilter.json new file mode 100644 index 0000000..747dbec --- /dev/null +++ b/tests/calcite/testSimplifyFilter.json @@ -0,0 +1,223 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(>($0, 3), >($7, 5))])\n LogicalFilter(condition=[>($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[>($0, 3)])\n LogicalFilter(condition=[>($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "5" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "3" + } ], + "operator" : ">" + }, + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSkipReduceConstantsCaseEquals.json b/tests/calcite/testSkipReduceConstantsCaseEquals.json new file mode 100644 index 0000000..2962ff9 --- /dev/null +++ b/tests/calcite/testSkipReduceConstantsCaseEquals.json @@ -0,0 +1,257 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\n LogicalFilter(condition=[=(CASE(IS NOT NULL($3), CAST($3):INTEGER NOT NULL, -1), CASE(IS NOT NULL($12), CAST($12):INTEGER NOT NULL, -1))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], EMPNO0=[$9], ENAME0=[$10], JOB0=[$11], MGR0=[$12], HIREDATE0=[$13], SAL0=[$14], COMM0=[$15], DEPTNO0=[$16], SLACKER0=[$17])\n LogicalJoin(condition=[=(CASE(IS NOT NULL($3), CAST($3):INTEGER NOT NULL, -1), CASE(IS NOT NULL($12), CAST($12):INTEGER NOT NULL, -1))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + } ], + "operator" : "CASE" + } ], + "operator" : "=" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-1" + } ], + "operator" : "CASE" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSome.json b/tests/calcite/testSome.json new file mode 100644 index 0000000..df350d5 --- /dev/null +++ b/tests/calcite/testSome.json @@ -0,0 +1,328 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[> SOME($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(AND(IS TRUE(>($0, $9)), <>($10, 0)), AND(>($10, $11), null, <>($10, 0), IS NOT TRUE(>($0, $9))), AND(>($0, $9), <>($10, 0), IS NOT TRUE(>($0, $9)), <=($10, $11)))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(m=[$0], c=[$1], d=[$1])\n LogicalAggregate(group=[{}], m=[MIN($0)], c=[COUNT()])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "> SOME" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : "<=" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSomeWithEquality.json b/tests/calcite/testSomeWithEquality.json new file mode 100644 index 0000000..a87be23 --- /dev/null +++ b/tests/calcite/testSomeWithEquality.json @@ -0,0 +1,169 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IN($7, {\nLogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSomeWithEquality2.json b/tests/calcite/testSomeWithEquality2.json new file mode 100644 index 0000000..a182d4f --- /dev/null +++ b/tests/calcite/testSomeWithEquality2.json @@ -0,0 +1,178 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IN($1, {\nLogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($1, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0}])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + } ], + "operator" : "IN" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSomeWithNotEquality.json b/tests/calcite/testSomeWithNotEquality.json new file mode 100644 index 0000000..9707126 --- /dev/null +++ b/tests/calcite/testSomeWithNotEquality.json @@ -0,0 +1,373 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[<> SOME($7, {\nLogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(AND(<>($10, $9), <=($10, 1), OR(<>($7, $11), null), <>($9, 0)), AND(=($10, 1), <>($7, $11), <>($9, 0), OR(=($10, $9), >($10, 1))), AND(<>($9, 0), OR(=($10, $9), >($10, 1)), <>($10, 1)))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(c=[$0], d=[$0], m=[$1])\n LogicalAggregate(group=[{}], c=[COUNT()], m=[MAX($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "<> SOME" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "<=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + } ], + "operator" : "OR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : ">" + } ], + "operator" : "OR" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : ">" + } ], + "operator" : "OR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "<>" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSomeWithTwoCorrelatedSubQueries.json b/tests/calcite/testSomeWithTwoCorrelatedSubQueries.json new file mode 100644 index 0000000..ef72a40 --- /dev/null +++ b/tests/calcite/testSomeWithTwoCorrelatedSubQueries.json @@ -0,0 +1,543 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(> SOME($2, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), >($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}), < SOME($2, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), <($0, 20))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}))], variablesSet=[[$cor0]])\n LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$2])\n LogicalFilter(condition=[OR(CASE(IS NULL($6), false, =($4, 0), false, IS TRUE(>($2, $3)), true, >($4, $5), null:BOOLEAN, >($2, $3)), CASE(IS NULL($10), false, =($8, 0), false, IS TRUE(<($2, $7)), true, >($8, $9), null:BOOLEAN, <($2, $7)))])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1}])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{1}])\n LogicalProject(EMPNO=[$0], ENAME=[$1], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalProject(m=[$0], c=[$1], d=[$2], trueLiteral=[true])\n LogicalAggregate(group=[{}], m=[MIN($0)], c=[COUNT()], d=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), >($0, 10))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalProject(m=[$0], c=[$1], d=[$2], trueLiteral=[true])\n LogicalAggregate(group=[{}], m=[MAX($0)], c=[COUNT()], d=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[AND(=($cor0.ENAME, CAST($1):VARCHAR(20)), <($0, 20))])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ true, true ], + "name" : "CATALOG.SALES.DEPTNULLABLES", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "> SOME" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "< SOME" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "column" : 5, + "type" : "BIGINT" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "<" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "<" + } ], + "operator" : "CASE" + } ], + "operator" : "OR" + }, + "source" : { + "correlate" : { + "left" : { + "correlate" : { + "left" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "BIGINT" + }, { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 8, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSomeWithTwoSubQueries.json b/tests/calcite/testSomeWithTwoSubQueries.json new file mode 100644 index 0000000..3a6ec22 --- /dev/null +++ b/tests/calcite/testSomeWithTwoSubQueries.json @@ -0,0 +1,414 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[OR(> SOME($1, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}), < SOME($1, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n}))])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], DEPTNO=[$1])\n LogicalFilter(condition=[OR(CASE(=($3, 0), false, IS TRUE(>($1, $2)), true, >($3, $4), null:BOOLEAN, >($1, $2)), CASE(=($6, 0), false, IS TRUE(<($1, $5)), true, >($6, $7), null:BOOLEAN, <($1, $5)))])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalJoin(condition=[true], joinType=[inner])\n LogicalProject(EMPNO=[$0], DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMPNULLABLES]])\n LogicalAggregate(group=[{}], m=[MIN($0)], c=[COUNT()], d=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept1')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n LogicalAggregate(group=[{}], m=[MAX($0)], c=[COUNT()], d=[COUNT($0)])\n LogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($1, 'dept2')])\n LogicalTableScan(table=[[CATALOG, SALES, DEPTNULLABLES]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ true, true ], + "name" : "CATALOG.SALES.DEPTNULLABLES", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, true, true, true, true, true, true, true, true ], + "name" : "CATALOG.SALES.EMPNULLABLES", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "> SOME" + }, { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "< SOME" + } ], + "operator" : "OR" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "CASE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "false" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "<" + } ], + "operator" : "IS TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + }, { + "column" : 7, + "type" : "BIGINT" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "<" + } ], + "operator" : "CASE" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, + "left" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept1'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "VARCHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'dept2'" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinCopyInnerJoinOrderBy.json b/tests/calcite/testSortJoinCopyInnerJoinOrderBy.json new file mode 100644 index 0000000..9635fc5 --- /dev/null +++ b/tests/calcite/testSortJoinCopyInnerJoinOrderBy.json @@ -0,0 +1,158 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], dir0=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], dir0=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalSort(sort0=[$5], dir0=[ASC])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinCopyInnerJoinOrderByLimit.json b/tests/calcite/testSortJoinCopyInnerJoinOrderByLimit.json new file mode 100644 index 0000000..bb5790b --- /dev/null +++ b/tests/calcite/testSortJoinCopyInnerJoinOrderByLimit.json @@ -0,0 +1,188 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalSort(sort0=[$5], dir0=[ASC])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinCopyInnerJoinOrderByTwoFields.json b/tests/calcite/testSortJoinCopyInnerJoinOrderByTwoFields.json new file mode 100644 index 0000000..ad03778 --- /dev/null +++ b/tests/calcite/testSortJoinCopyInnerJoinOrderByTwoFields.json @@ -0,0 +1,165 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], sort1=[$10], dir0=[ASC], dir1=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], sort1=[$10], dir0=[ASC], dir1=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalSort(sort0=[$5], dir0=[ASC])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalSort(sort0=[$1], dir0=[ASC])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ], [ 10, "VARCHAR", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "kind" : "INNER", + "right" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "scan" : 1 + }, + "collation" : [ [ 1, "VARCHAR", "ASCENDING" ] ] + } + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ], [ 10, "VARCHAR", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinCopySemiJoinOrderBy.json b/tests/calcite/testSortJoinCopySemiJoinOrderBy.json new file mode 100644 index 0000000..d9b0699 --- /dev/null +++ b/tests/calcite/testSortJoinCopySemiJoinOrderBy.json @@ -0,0 +1,98 @@ +{ + "help" : [ "LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinCopySemiJoinOrderByLimitOffset.json b/tests/calcite/testSortJoinCopySemiJoinOrderByLimitOffset.json new file mode 100644 index 0000000..672b72f --- /dev/null +++ b/tests/calcite/testSortJoinCopySemiJoinOrderByLimitOffset.json @@ -0,0 +1,114 @@ +{ + "help" : [ "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2], fetch=[10])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2], fetch=[10])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinCopySemiJoinOrderByOffset.json b/tests/calcite/testSortJoinCopySemiJoinOrderByOffset.json new file mode 100644 index 0000000..a57b0ba --- /dev/null +++ b/tests/calcite/testSortJoinCopySemiJoinOrderByOffset.json @@ -0,0 +1,106 @@ +{ + "help" : [ "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalSort(sort0=[$0], dir0=[ASC], offset=[2])\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])\n LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, + "kind" : "SEMI", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinTranspose1.json b/tests/calcite/testSortJoinTranspose1.json new file mode 100644 index 0000000..b37a3e3 --- /dev/null +++ b/tests/calcite/testSortJoinTranspose1.json @@ -0,0 +1,192 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\n LogicalJoin(condition=[=($7, $9)], joinType=[left])\n LogicalSort(sort0=[$5], dir0=[ASC], fetch=[10])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "collation" : [ [ 5, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinTranspose2.json b/tests/calcite/testSortJoinTranspose2.json new file mode 100644 index 0000000..63d4a2c --- /dev/null +++ b/tests/calcite/testSortJoinTranspose2.json @@ -0,0 +1,180 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$10], dir0=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$10], dir0=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalSort(sort0=[$1], dir0=[ASC])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "collation" : [ [ 10, "VARCHAR", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 1, "VARCHAR", "ASCENDING" ] ] + } + } + } + }, + "collation" : [ [ 10, "VARCHAR", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinTranspose4.json b/tests/calcite/testSortJoinTranspose4.json new file mode 100644 index 0000000..63d4a2c --- /dev/null +++ b/tests/calcite/testSortJoinTranspose4.json @@ -0,0 +1,180 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$10], dir0=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalSort(sort0=[$10], dir0=[ASC])\n LogicalJoin(condition=[=($7, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalSort(sort0=[$1], dir0=[ASC])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "collation" : [ [ 10, "VARCHAR", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 1, "VARCHAR", "ASCENDING" ] ] + } + } + } + }, + "collation" : [ [ 10, "VARCHAR", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortJoinTranspose6.json b/tests/calcite/testSortJoinTranspose6.json new file mode 100644 index 0000000..b306622 --- /dev/null +++ b/tests/calcite/testSortJoinTranspose6.json @@ -0,0 +1,128 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], EMPNO=[$2])\n LogicalSort(offset=[2], fetch=[10])\n LogicalJoin(condition=[=($0, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EMPNO=[$2])\n LogicalSort(offset=[2], fetch=[10])\n LogicalJoin(condition=[=($0, $9)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalSort(offset=[2], fetch=[10])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 1 + } + } + }, + "collation" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + }, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "scan" : 1 + }, + "collation" : [ ] + } + } + } + }, + "collation" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortProjectTranspose1.json b/tests/calcite/testSortProjectTranspose1.json new file mode 100644 index 0000000..5878fb1 --- /dev/null +++ b/tests/calcite/testSortProjectTranspose1.json @@ -0,0 +1,76 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalSort(sort0=[$1], dir0=[ASC], offset=[1])\n LogicalProject(DEPTNO=[$0], EXPR$1=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalProject(DEPTNO=[$0], EXPR$1=[$0])\n LogicalSort(sort0=[$0], dir0=[ASC], offset=[1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, + "limit" : null, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "collation" : [ [ 1, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortProjectTranspose2.json b/tests/calcite/testSortProjectTranspose2.json new file mode 100644 index 0000000..4161fbc --- /dev/null +++ b/tests/calcite/testSortProjectTranspose2.json @@ -0,0 +1,84 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0])\n LogicalSort(sort0=[$1], dir0=[ASC], offset=[1])\n LogicalProject(DEPTNO=[$0], EXPR$1=[CAST($0):DOUBLE NOT NULL])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(DEPTNO=[$0])\n LogicalProject(DEPTNO=[$0], EXPR$1=[CAST($0):DOUBLE NOT NULL])\n LogicalSort(sort0=[$0], dir0=[ASC], offset=[1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, + "limit" : null, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "DOUBLE", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + }, + "collation" : [ [ 1, "DOUBLE", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "sort" : { + "offset" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, + "limit" : null, + "source" : { + "scan" : 0 + }, + "collation" : [ [ 0, "INTEGER", "ASCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "DOUBLE", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortRemovalAllKeysConstant.json b/tests/calcite/testSortRemovalAllKeysConstant.json new file mode 100644 index 0000000..937e430 --- /dev/null +++ b/tests/calcite/testSortRemovalAllKeysConstant.json @@ -0,0 +1,151 @@ +{ + "help" : [ "LogicalProject(C=[$0])\n LogicalSort(sort0=[$1], dir0=[DESC-nulls-last])\n LogicalProject(C=[$2], DEPTNO=[$0])\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(C=[$0])\n LogicalProject(C=[$2], DEPTNO=[$0])\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "collation" : [ [ 1, "INTEGER", "DESCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortRemovalOneKeyConstant.json b/tests/calcite/testSortRemovalOneKeyConstant.json new file mode 100644 index 0000000..3aa8201 --- /dev/null +++ b/tests/calcite/testSortRemovalOneKeyConstant.json @@ -0,0 +1,164 @@ +{ + "help" : [ "LogicalProject(C=[$0])\n LogicalSort(sort0=[$1], sort1=[$2], dir0=[ASC], dir1=[DESC])\n LogicalProject(C=[$2], DEPTNO=[$0], SAL=[$1])\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(C=[$0])\n LogicalSort(sort0=[$2], dir0=[DESC])\n LogicalProject(C=[$2], DEPTNO=[$0], SAL=[$1])\n LogicalAggregate(group=[{0, 1}], C=[COUNT()])\n LogicalProject(DEPTNO=[$7], SAL=[$5])\n LogicalFilter(condition=[=($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, + "collation" : [ [ 1, "INTEGER", "ASCENDING" ], [ 2, "INTEGER", "DESCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, + "collation" : [ [ 2, "INTEGER", "DESCENDING" ] ] + } + }, + "target" : [ { + "column" : 0, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortUnionTranspose.json b/tests/calcite/testSortUnionTranspose.json new file mode 100644 index 0000000..49a58ce --- /dev/null +++ b/tests/calcite/testSortUnionTranspose.json @@ -0,0 +1,108 @@ +{ + "help" : [ "LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\n LogicalProject(NAME=[$0])\n LogicalUnion(all=[true])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\n LogicalUnion(all=[true])\n LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalSort(sort0=[$0], dir0=[ASC], fetch=[10])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "union" : [ { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + } ] + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortUnionTranspose2.json b/tests/calcite/testSortUnionTranspose2.json new file mode 100644 index 0000000..8e0e98d --- /dev/null +++ b/tests/calcite/testSortUnionTranspose2.json @@ -0,0 +1,92 @@ +{ + "help" : [ "LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalProject(NAME=[$0])\n LogicalUnion(all=[true])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalUnion(all=[true])\n LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalSort(sort0=[$0], dir0=[ASC])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "union" : [ { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : null, + "limit" : null, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + } ] + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSortUnionTranspose3.json b/tests/calcite/testSortUnionTranspose3.json new file mode 100644 index 0000000..65a6cdd --- /dev/null +++ b/tests/calcite/testSortUnionTranspose3.json @@ -0,0 +1,108 @@ +{ + "help" : [ "LogicalSort(sort0=[$0], dir0=[ASC], fetch=[0])\n LogicalProject(NAME=[$0])\n LogicalUnion(all=[true])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalSort(sort0=[$0], dir0=[ASC], fetch=[0])\n LogicalUnion(all=[true])\n LogicalSort(sort0=[$0], dir0=[ASC], fetch=[0])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalSort(sort0=[$0], dir0=[ASC], fetch=[0])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + }, + "source" : { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + }, + "source" : { + "union" : [ { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + }, { + "sort" : { + "offset" : null, + "limit" : { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + } ] + }, + "collation" : [ [ 0, "VARCHAR", "ASCENDING" ] ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSpatialContainsPoint.json b/tests/calcite/testSpatialContainsPoint.json new file mode 100644 index 0000000..db0110f --- /dev/null +++ b/tests/calcite/testSpatialContainsPoint.json @@ -0,0 +1,133 @@ +{ + "help" : [ "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[ST_CONTAINS(ST_BUFFER(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), 6), ST_POINT($2, $1))])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n", "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]), ST_CONTAINS(POLYGON ((16 20, 15.884711682419383 18.829458067903232, 15.54327719506772 17.703899405809462, 14.988817673815271 16.666578601882385, 14.242640687119286 15.757359312880716, 13.333421398117615 15.011182326184729, 12.29610059419054 14.45672280493228, 11.17054193209677 14.115288317580617, 10 14, 8.82945806790323 14.115288317580617, 7.703899405809461 14.45672280493228, 6.666578601882389 15.011182326184727, 5.757359312880715 15.757359312880714, 5.011182326184728 16.666578601882385, 4.45672280493228 17.70389940580946, 4.115288317580617 18.82945806790323, 4 20, 4.115288317580617 21.17054193209677, 4.456722804932279 22.296100594190538, 5.011182326184727 23.33342139811761, 5.757359312880714 24.242640687119284, 6.666578601882387 24.98881767381527, 7.703899405809458 25.54327719506772, 8.829458067903229 25.884711682419383, 9.999999999999998 26, 11.17054193209677 25.884711682419383, 12.29610059419054 25.54327719506772, 13.333421398117611 24.988817673815273, 14.242640687119284 24.242640687119284, 14.988817673815271 23.333421398117615, 15.54327719506772 22.29610059419054, 15.884711682419383 21.17054193209677, 16 20)):GEOMETRY, ST_POINT($2, $1)))])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "nullable" : [ false, false, false, false, false ], + "name" : "CATALOG.GEO.RESTAURANTS", + "guaranteed" : [ ], + "fields" : [ "NAME", "LATITUDE", "LONGITUDE", "CUISINE", "HILBERT" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "10.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "20.0" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "6" + } ], + "operator" : "ST_BUFFER" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + } ], + "operator" : "ST_CONTAINS" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]" + } ], + "operator" : "SEARCH" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ ], + "operator" : "POLYGON ((16 20, 15.884711682419383 18.829458067903232, 15.54327719506772 17.703899405809462, 14.988817673815271 16.666578601882385, 14.242640687119286 15.757359312880716, 13.333421398117615 15.011182326184729, 12.29610059419054 14.45672280493228, 11.17054193209677 14.115288317580617, 10 14, 8.82945806790323 14.115288317580617, 7.703899405809461 14.45672280493228, 6.666578601882389 15.011182326184727, 5.757359312880715 15.757359312880714, 5.011182326184728 16.666578601882385, 4.45672280493228 17.70389940580946, 4.115288317580617 18.82945806790323, 4 20, 4.115288317580617 21.17054193209677, 4.456722804932279 22.296100594190538, 5.011182326184727 23.33342139811761, 5.757359312880714 24.242640687119284, 6.666578601882387 24.98881767381527, 7.703899405809458 25.54327719506772, 8.829458067903229 25.884711682419383, 9.999999999999998 26, 11.17054193209677 25.884711682419383, 12.29610059419054 25.54327719506772, 13.333421398117611 24.988817673815273, 14.242640687119284 24.242640687119284, 14.988817673815271 23.333421398117615, 15.54327719506772 22.29610059419054, 15.884711682419383 21.17054193209677, 16 20))" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + } ], + "operator" : "ST_CONTAINS" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSpatialDWithinLine.json b/tests/calcite/testSpatialDWithinLine.json new file mode 100644 index 0000000..2c09295 --- /dev/null +++ b/tests/calcite/testSpatialDWithinLine.json @@ -0,0 +1,149 @@ +{ + "help" : [ "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[ST_DWITHIN(ST_MAKELINE(ST_POINT(8.0:DECIMAL(2, 1), 20.0:DECIMAL(3, 1)), ST_POINT(12.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1))), ST_POINT($2, $1), 4)])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n", "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[33064..33076], [33092..33100], [33112..33156], [33164..33176], [33236..33240], [36457..36459], [36501..36503], [36505..36507], [36517..36519]]), ST_DWITHIN(LINESTRING (8 20, 12 20):GEOMETRY, ST_POINT($2, $1), 4))])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "nullable" : [ false, false, false, false, false ], + "name" : "CATALOG.GEO.RESTAURANTS", + "guaranteed" : [ ], + "fields" : [ "NAME", "LATITUDE", "LONGITUDE", "CUISINE", "HILBERT" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "8.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "20.0" + } ], + "operator" : "ST_POINT" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "12.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "20.0" + } ], + "operator" : "ST_POINT" + } ], + "operator" : "ST_MAKELINE" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "ST_DWITHIN" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[[33064..33076], [33092..33100], [33112..33156], [33164..33176], [33236..33240], [36457..36459], [36501..36503], [36505..36507], [36517..36519]]" + } ], + "operator" : "SEARCH" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ ], + "operator" : "LINESTRING (8 20, 12 20)" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "ST_DWITHIN" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSpatialDWithinReversed.json b/tests/calcite/testSpatialDWithinReversed.json new file mode 100644 index 0000000..04d12ed --- /dev/null +++ b/tests/calcite/testSpatialDWithinReversed.json @@ -0,0 +1,133 @@ +{ + "help" : [ "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT($2, $1), ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), 6)])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n", "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]), ST_DWITHIN(ST_POINT($2, $1), POINT (10 20):GEOMETRY, 6))])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "nullable" : [ false, false, false, false, false ], + "name" : "CATALOG.GEO.RESTAURANTS", + "guaranteed" : [ ], + "fields" : [ "NAME", "LATITUDE", "LONGITUDE", "CUISINE", "HILBERT" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "10.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "20.0" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "6" + } ], + "operator" : "ST_DWITHIN" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[[33033..33035], [33050..33053], [33055..33080], [33092..33100], [33112..33156], [33164..33176], [33236..33244], [33252..33254], [36456..36464], [36496..36520]]" + } ], + "operator" : "SEARCH" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "GEOMETRY", + "operand" : [ ], + "operator" : "POINT (10 20)" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "6" + } ], + "operator" : "ST_DWITHIN" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSpatialDWithinToHilbert.json b/tests/calcite/testSpatialDWithinToHilbert.json new file mode 100644 index 0000000..fb7ac49 --- /dev/null +++ b/tests/calcite/testSpatialDWithinToHilbert.json @@ -0,0 +1,133 @@ +{ + "help" : [ "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), ST_POINT($2, $1), 10)])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n", "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[AND(SEARCH($4, Sarg[[28988..28989], [28991..28994], [29006..29009], [29011..29014], [32426..32429], [32431..32434], [32446..32449], [32451..32454], [32506..32509], [32511..32514], [32526..32527], [32929..32930], [32942..32949], [32951..32953], [32955..32970], [32973..32975], [33009..33011], [33014..33185], [33187..33190], [33205..33207], [33209..33211], [33226..33229], [33231..33265], [33267..33270], [36392..36401], [36403..36404], [36421..36423], [36425..36427], [36442..36445], [36447..36548], [36556..36568]]), ST_DWITHIN(POINT (10 20):GEOMETRY, ST_POINT($2, $1), 10))])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "nullable" : [ false, false, false, false, false ], + "name" : "CATALOG.GEO.RESTAURANTS", + "guaranteed" : [ ], + "fields" : [ "NAME", "LATITUDE", "LONGITUDE", "CUISINE", "HILBERT" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "10.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "20.0" + } ], + "operator" : "ST_POINT" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "ST_DWITHIN" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[[28988..28989], [28991..28994], [29006..29009], [29011..29014], [32426..32429], [32431..32434], [32446..32449], [32451..32454], [32506..32509], [32511..32514], [32526..32527], [32929..32930], [32942..32949], [32951..32953], [32955..32970], [32973..32975], [33009..33011], [33014..33185], [33187..33190], [33205..33207], [33209..33211], [33226..33229], [33231..33265], [33267..33270], [36392..36401], [36403..36404], [36421..36423], [36425..36427], [36442..36445], [36447..36548], [36556..36568]]" + } ], + "operator" : "SEARCH" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ ], + "operator" : "POINT (10 20)" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "ST_DWITHIN" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSpatialDWithinToHilbertNegative.json b/tests/calcite/testSpatialDWithinToHilbertNegative.json new file mode 100644 index 0000000..135e4e6 --- /dev/null +++ b/tests/calcite/testSpatialDWithinToHilbertNegative.json @@ -0,0 +1,94 @@ +{ + "help" : [ "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), ST_POINT($2, $1), -2)])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n", "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalValues(tuples=[[]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "nullable" : [ false, false, false, false, false ], + "name" : "CATALOG.GEO.RESTAURANTS", + "guaranteed" : [ ], + "fields" : [ "NAME", "LATITUDE", "LONGITUDE", "CUISINE", "HILBERT" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "10.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "20.0" + } ], + "operator" : "ST_POINT" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "-2" + } ], + "operator" : "ST_DWITHIN" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "values" : { + "schema" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "content" : [ ] + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSpatialDWithinToHilbertZero.json b/tests/calcite/testSpatialDWithinToHilbertZero.json new file mode 100644 index 0000000..7217983 --- /dev/null +++ b/tests/calcite/testSpatialDWithinToHilbertZero.json @@ -0,0 +1,129 @@ +{ + "help" : [ "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[ST_DWITHIN(ST_POINT(10.0:DECIMAL(3, 1), 20.0:DECIMAL(3, 1)), ST_POINT($2, $1), 0)])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n", "LogicalProject(NAME=[$0], LATITUDE=[$1], LONGITUDE=[$2], CUISINE=[$3], HILBERT=[$4])\n LogicalFilter(condition=[AND(=($4, 33139), =(POINT (10 20), ST_POINT($2, $1)))])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "nullable" : [ false, false, false, false, false ], + "name" : "CATALOG.GEO.RESTAURANTS", + "guaranteed" : [ ], + "fields" : [ "NAME", "LATITUDE", "LONGITUDE", "CUISINE", "HILBERT" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "10.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "20.0" + } ], + "operator" : "ST_POINT" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "ST_DWITHIN" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "33139" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ ], + "operator" : "POINT (10 20)" + }, { + "type" : "GEOMETRY", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "ST_POINT" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSpatialReduce.json b/tests/calcite/testSpatialReduce.json new file mode 100644 index 0000000..b8c4764 --- /dev/null +++ b/tests/calcite/testSpatialReduce.json @@ -0,0 +1,58 @@ +{ + "help" : [ "LogicalProject(B=[ST_BUFFER(ST_POINT(0.0:DECIMAL(2, 1), 0.0:DECIMAL(2, 1)), 1, 4)])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n", "LogicalProject(B=[CAST(POLYGON ((1 0, 0.9238795325112867 -0.3826834323650898, 0.7071067811865476 -0.7071067811865475, 0.3826834323650898 -0.9238795325112867, 0.0000000000000001 -1, -0.3826834323650897 -0.9238795325112867, -0.7071067811865475 -0.7071067811865476, -0.9238795325112867 -0.3826834323650899, -1 -0.0000000000000001, -0.9238795325112868 0.3826834323650897, -0.7071067811865477 0.7071067811865475, -0.3826834323650903 0.9238795325112865, -0.0000000000000002 1, 0.38268343236509 0.9238795325112866, 0.7071067811865474 0.7071067811865477, 0.9238795325112865 0.3826834323650904, 1 0)):GEOMETRY):GEOMETRY])\n LogicalTableScan(table=[[CATALOG, GEO, RESTAURANTS]])\n" ], + "schemas" : [ { + "types" : [ "VARCHAR", "INTEGER", "INTEGER", "VARCHAR", "BIGINT" ], + "nullable" : [ false, false, false, false, false ], + "name" : "CATALOG.GEO.RESTAURANTS", + "guaranteed" : [ ], + "fields" : [ "NAME", "LATITUDE", "LONGITUDE", "CUISINE", "HILBERT" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "0.0" + }, { + "type" : "DECIMAL", + "operand" : [ ], + "operator" : "0.0" + } ], + "operator" : "ST_POINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "ST_BUFFER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "type" : "GEOMETRY", + "operand" : [ { + "type" : "GEOMETRY", + "operand" : [ ], + "operator" : "POLYGON ((1 0, 0.9238795325112867 -0.3826834323650898, 0.7071067811865476 -0.7071067811865475, 0.3826834323650898 -0.9238795325112867, 0.0000000000000001 -1, -0.3826834323650897 -0.9238795325112867, -0.7071067811865475 -0.7071067811865476, -0.9238795325112867 -0.3826834323650899, -1 -0.0000000000000001, -0.9238795325112868 0.3826834323650897, -0.7071067811865477 0.7071067811865475, -0.3826834323650903 0.9238795325112865, -0.0000000000000002 1, 0.38268343236509 0.9238795325112866, 0.7071067811865474 0.7071067811865477, 0.9238795325112865 0.3826834323650904, 1 0))" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testStrengthenJoinType.json b/tests/calcite/testStrengthenJoinType.json new file mode 100644 index 0000000..18f5aad --- /dev/null +++ b/tests/calcite/testStrengthenJoinType.json @@ -0,0 +1,250 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\n LogicalFilter(condition=[AND(IS NOT NULL($9), >($7, 100))])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[$2], ENAME=[$3], JOB=[$4], MGR=[$5], HIREDATE=[$6], SAL=[$7], COMM=[$8], DEPTNO0=[$9], SLACKER=[$10])\n LogicalProject(DEPTNO=[$0], NAME=[$1], EMPNO=[CAST($2):INTEGER], ENAME=[CAST($3):VARCHAR(20)], JOB=[CAST($4):VARCHAR(10)], MGR=[$5], HIREDATE=[CAST($6):TIMESTAMP(0)], SAL=[CAST($7):INTEGER], COMM=[CAST($8):INTEGER], DEPTNO0=[CAST($9):INTEGER], SLACKER=[CAST($10):BOOLEAN])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalFilter(condition=[>($5, 100)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "100" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 4, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "TIMESTAMP", + "operand" : [ { + "column" : 6, + "type" : "TIMESTAMP" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "TIMESTAMP" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSumAndDistinctSumWithExpandSumType.json b/tests/calcite/testSumAndDistinctSumWithExpandSumType.json new file mode 100644 index 0000000..5ba1536 --- /dev/null +++ b/tests/calcite/testSumAndDistinctSumWithExpandSumType.json @@ -0,0 +1,113 @@ +{ + "help" : [ "LogicalAggregate(group=[{}], EXPR$0=[SUM($0)], EXPR$1=[SUM(DISTINCT $0)])\n LogicalProject(COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[CAST($0):BIGINT], EXPR$1=[$1])\n LogicalAggregate(group=[{}], EXPR$0=[SUM($1)], EXPR$1=[SUM($0)])\n LogicalAggregate(group=[{0}], EXPR$0=[SUM($0)])\n LogicalProject(COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "DECIMAL", + "operand" : [ { + "column" : 1, + "type" : "BIGINT" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "DECIMAL" + } ], + "operator" : "CAST" + }, { + "column" : 1, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testSwapOuterJoin.json b/tests/calcite/testSwapOuterJoin.json new file mode 100644 index 0000000..96e6f5f --- /dev/null +++ b/tests/calcite/testSwapOuterJoin.json @@ -0,0 +1,117 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalProject(DEPTNO=[$9], NAME=[$10], EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO0=[$7], SLACKER=[$8])\n LogicalJoin(condition=[=($9, $7)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "scan" : 1 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 1 + }, + "kind" : "RIGHT", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceAggregate.json b/tests/calcite/testTransitiveInferenceAggregate.json new file mode 100644 index 0000000..33cb83f --- /dev/null +++ b/tests/calcite/testTransitiveInferenceAggregate.json @@ -0,0 +1,166 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceComplexPredicate.json b/tests/calcite/testTransitiveInferenceComplexPredicate.json new file mode 100644 index 0000000..6a60a5c --- /dev/null +++ b/tests/calcite/testTransitiveInferenceComplexPredicate.json @@ -0,0 +1,228 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalFilter(condition=[AND(>($7, 7), =($6, $7), >(+($6, $7), /($6, 2)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[=($5, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalFilter(condition=[AND(>($7, 7), =($6, $7), >(+($6, $7), /($6, 2)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalFilter(condition=[=($5, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "/" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "/" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceConjunctInPullUp.json b/tests/calcite/testTransitiveInferenceConjunctInPullUp.json new file mode 100644 index 0000000..a281769 --- /dev/null +++ b/tests/calcite/testTransitiveInferenceConjunctInPullUp.json @@ -0,0 +1,120 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalFilter(condition=[SEARCH($7, Sarg[7, 9, (10..+∞)])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalFilter(condition=[SEARCH($7, Sarg[7, 9, (10..+∞)])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[SEARCH($7, Sarg[7, 9, (10..+∞)])])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[7, 9, (10..+∞)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[7, 9, (10..+∞)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "Sarg[7, 9, (10..+∞)]" + } ], + "operator" : "SEARCH" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceJoin.json b/tests/calcite/testTransitiveInferenceJoin.json new file mode 100644 index 0000000..972f1ef --- /dev/null +++ b/tests/calcite/testTransitiveInferenceJoin.json @@ -0,0 +1,120 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceJoin3way.json b/tests/calcite/testTransitiveInferenceJoin3way.json new file mode 100644 index 0000000..4a93970 --- /dev/null +++ b/tests/calcite/testTransitiveInferenceJoin3way.json @@ -0,0 +1,174 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($16, $25)], joinType=[inner])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($16, $25)], joinType=[inner])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 25, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 25, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceJoin3wayAgg.json b/tests/calcite/testTransitiveInferenceJoin3wayAgg.json new file mode 100644 index 0000000..056558f --- /dev/null +++ b/tests/calcite/testTransitiveInferenceJoin3wayAgg.json @@ -0,0 +1,220 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($9, $18)], joinType=[inner])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($9, $18)], joinType=[inner])\n LogicalJoin(condition=[=($0, $9)], joinType=[inner])\n LogicalAggregate(group=[{0}], EXPR$1=[COUNT()])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceLeftOuterJoin.json b/tests/calcite/testTransitiveInferenceLeftOuterJoin.json new file mode 100644 index 0000000..44c709e --- /dev/null +++ b/tests/calcite/testTransitiveInferenceLeftOuterJoin.json @@ -0,0 +1,152 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[>($16, 9)])\n LogicalJoin(condition=[=($7, $16)], joinType=[left])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[>($16, 9)])\n LogicalJoin(condition=[=($7, $16)], joinType=[left])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "9" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "LEFT", + "right" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 16, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "9" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "LEFT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceProject.json b/tests/calcite/testTransitiveInferenceProject.json new file mode 100644 index 0000000..0b6f6e7 --- /dev/null +++ b/tests/calcite/testTransitiveInferenceProject.json @@ -0,0 +1,184 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($7, $16)], joinType=[inner])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferencePullUpThruAlias.json b/tests/calcite/testTransitiveInferencePullUpThruAlias.json new file mode 100644 index 0000000..8bf9de9 --- /dev/null +++ b/tests/calcite/testTransitiveInferencePullUpThruAlias.json @@ -0,0 +1,136 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $8)], joinType=[inner])\n LogicalProject(DEPTNO=[$6])\n LogicalFilter(condition=[>($6, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $8)], joinType=[inner])\n LogicalProject(DEPTNO=[$6])\n LogicalFilter(condition=[>($6, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 6, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceRightOuterJoin.json b/tests/calcite/testTransitiveInferenceRightOuterJoin.json new file mode 100644 index 0000000..23bb042 --- /dev/null +++ b/tests/calcite/testTransitiveInferenceRightOuterJoin.json @@ -0,0 +1,152 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[>($7, 7)])\n LogicalJoin(condition=[=($7, $16)], joinType=[right])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 9)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalFilter(condition=[>($7, 7)])\n LogicalJoin(condition=[=($7, $16)], joinType=[right])\n LogicalFilter(condition=[>($7, 9)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 9)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "RIGHT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "9" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "9" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "kind" : "RIGHT", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "9" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceUnion.json b/tests/calcite/testTransitiveInferenceUnion.json new file mode 100644 index 0000000..a36c284 --- /dev/null +++ b/tests/calcite/testTransitiveInferenceUnion.json @@ -0,0 +1,192 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $8)], joinType=[inner])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $8)], joinType=[inner])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceUnion3way.json b/tests/calcite/testTransitiveInferenceUnion3way.json new file mode 100644 index 0000000..5d25222 --- /dev/null +++ b/tests/calcite/testTransitiveInferenceUnion3way.json @@ -0,0 +1,248 @@ +{ + "help" : [ "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $8)], joinType=[inner])\n LogicalUnion(all=[true])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EXPR$0=[1])\n LogicalJoin(condition=[=($0, $8)], joinType=[inner])\n LogicalUnion(all=[true])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[>($7, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "union" : [ { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + }, + "kind" : "INNER", + "right" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "union" : [ { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + } + } + }, + "target" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testTransitiveInferenceUnionAlwaysTrue.json b/tests/calcite/testTransitiveInferenceUnionAlwaysTrue.json new file mode 100644 index 0000000..58d8efd --- /dev/null +++ b/tests/calcite/testTransitiveInferenceUnionAlwaysTrue.json @@ -0,0 +1,212 @@ +{ + "help" : [ "LogicalProject(DEPTNO=[$0], DEPTNO0=[$1])\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($7, 4)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], DEPTNO0=[$1])\n LogicalJoin(condition=[=($0, $1)], joinType=[inner])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[<($7, 4)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalFilter(condition=[<($0, 4)])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[>($7, 7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$7])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "<" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, + "kind" : "INNER", + "right" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "<" + }, + "source" : { + "union" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "7" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + } ] + } + } ] + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testUncorrelatedCallInConjunctionIsFlattenedOnlyIfSiblingOfCorrelation.json b/tests/calcite/testUncorrelatedCallInConjunctionIsFlattenedOnlyIfSiblingOfCorrelation.json new file mode 100644 index 0000000..7e79093 --- /dev/null +++ b/tests/calcite/testUncorrelatedCallInConjunctionIsFlattenedOnlyIfSiblingOfCorrelation.json @@ -0,0 +1,327 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalFilter(condition=[AND(<(+($0, 50), 20), >=($cor0.DEPTNO, +(30, $7)))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[IS NOT NULL($9)])\n LogicalCorrelate(correlation=[$cor0], joinType=[left], requiredColumns=[{7}])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{}], agg#0=[MIN($0)])\n LogicalProject($f0=[true])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[AND(<(+($0, 50), 20), >=($cor0.DEPTNO, $9))])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], $f9=[+(30, $7)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "+" + } ], + "operator" : ">=" + } ], + "operator" : "AND" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, + "source" : { + "correlate" : { + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "group" : { + "keys" : [ ], + "function" : [ { + "distinct" : false, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BOOLEAN" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "50" + } ], + "operator" : "+" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "20" + } ], + "operator" : "<" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 18, + "type" : "INTEGER" + } ], + "operator" : ">=" + } ], + "operator" : "AND" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "30" + }, { + "column" : 16, + "type" : "INTEGER" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + }, { + "column" : 12, + "type" : "INTEGER" + }, { + "column" : 13, + "type" : "TIMESTAMP" + }, { + "column" : 14, + "type" : "INTEGER" + }, { + "column" : 15, + "type" : "INTEGER" + }, { + "column" : 16, + "type" : "INTEGER" + }, { + "column" : 17, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testUnionMergeRule.json b/tests/calcite/testUnionMergeRule.json new file mode 100644 index 0000000..d343704 --- /dev/null +++ b/tests/calcite/testUnionMergeRule.json @@ -0,0 +1,267 @@ +{ + "help" : [ "LogicalProject(NAME=[$0], DEPTNO=[$1])\n LogicalUnion(all=[true])\n LogicalProject(NAME=[$0], DEPTNO=[$1])\n LogicalUnion(all=[true])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$0], DEPTNO=[$1])\n LogicalUnion(all=[true])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0], $f2=[1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0], $f2=[1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalUnion(all=[true])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$0], DEPTNO=[$1])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0], $f2=[1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$0], DEPTNO=[$1])\n LogicalAggregate(group=[{0, 1}], EXPR$2=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0], $f2=[1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "union" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + }, { + "column" : 1, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] + } ] +} \ No newline at end of file diff --git a/tests/calcite/testUnionToDistinctRule.json b/tests/calcite/testUnionToDistinctRule.json new file mode 100644 index 0000000..2c76425 --- /dev/null +++ b/tests/calcite/testUnionToDistinctRule.json @@ -0,0 +1,82 @@ +{ + "help" : [ "LogicalUnion(all=[false])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalAggregate(group=[{0, 1}])\n LogicalUnion(all=[true])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "distinct" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] + } + }, { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ], + "function" : [ ], + "source" : { + "union" : [ { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } ] + } + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereAnyCorrelatedInSelect.json b/tests/calcite/testWhereAnyCorrelatedInSelect.json new file mode 100644 index 0000000..e7b5bfb --- /dev/null +++ b/tests/calcite/testWhereAnyCorrelatedInSelect.json @@ -0,0 +1,383 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[> SOME($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($cor0.JOB, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], m=[CAST($9):INTEGER], c=[CAST($10):BIGINT], d=[CAST($11):BIGINT], trueLiteral=[CAST($12):BOOLEAN], NAME=[CAST($13):VARCHAR(10)])\n LogicalJoin(condition=[AND(=($2, $13), OR(AND(>($0, $9), IS NOT TRUE(OR(IS NULL($12), =($10, 0)))), AND(>($0, $9), IS NOT TRUE(OR(IS NULL($12), =($10, 0))), IS NOT TRUE(>($0, $9)), IS NOT TRUE(>($10, $11)))))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(m=[$1], c=[$2], d=[$2], trueLiteral=[true], NAME=[$0])\n LogicalAggregate(group=[{0}], m=[MIN($1)], c=[COUNT()])\n LogicalProject(NAME=[$1], DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "> SOME" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 13, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ], + "operator" : "OR" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ], + "operator" : "OR" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : ">" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "AND" + } ], + "operator" : "OR" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + } ], + "operator" : "CAST" + }, { + "type" : "BIGINT", + "operand" : [ { + "column" : 11, + "type" : "BIGINT" + } ], + "operator" : "CAST" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 12, + "type" : "BOOLEAN" + } ], + "operator" : "CAST" + }, { + "type" : "VARCHAR", + "operand" : [ { + "column" : 13, + "type" : "VARCHAR" + } ], + "operator" : "CAST" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereExpressionInCorrelated.json b/tests/calcite/testWhereExpressionInCorrelated.json new file mode 100644 index 0000000..ad7f0be --- /dev/null +++ b/tests/calcite/testWhereExpressionInCorrelated.json @@ -0,0 +1,186 @@ +{ + "help" : [ "LogicalProject(ENAME=[$0])\n LogicalFilter(condition=[IN($1, {\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[=(+($5, 1), $cor0.SALPLUS)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})], variablesSet=[[$cor0]])\n LogicalProject(ENAME=[$1], DEPTNO=[$7], SALPLUS=[+($5, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(ENAME=[$0])\n LogicalJoin(condition=[AND(=($2, $4), =($1, $3))], joinType=[inner])\n LogicalProject(ENAME=[$1], DEPTNO=[$7], SALPLUS=[+($5, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], $f9=[+($5, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 10, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereExpressionInCorrelated2.json b/tests/calcite/testWhereExpressionInCorrelated2.json new file mode 100644 index 0000000..bbc0ef6 --- /dev/null +++ b/tests/calcite/testWhereExpressionInCorrelated2.json @@ -0,0 +1,193 @@ +{ + "help" : [ "LogicalProject(NAME=[$0])\n LogicalFilter(condition=[IN($1, {\nLogicalProject(DEPTNO=[$7])\n LogicalFilter(condition=[=(+($5, 1), $cor0.DEPTNOMINUS)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})], variablesSet=[[$cor0]])\n LogicalProject(NAME=[$1], DEPTNO=[$0], DEPTNOMINUS=[-($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(NAME=[$0])\n LogicalJoin(condition=[AND(=($2, $4), =($1, $3))], joinType=[inner])\n LogicalProject(NAME=[$1], DEPTNO=[$0], DEPTNOMINUS=[-($0, 10)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{0, 1}])\n LogicalProject(DEPTNO=[$7], $f9=[+($5, 1)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "INTEGER", + "operand" : [ { + "column" : 8, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + }, { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 10, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, + "source" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "-" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "project" : { + "source" : { + "scan" : 1 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : "-" + } ] + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "+" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereInCorrelated.json b/tests/calcite/testWhereInCorrelated.json new file mode 100644 index 0000000..eb77c77 --- /dev/null +++ b/tests/calcite/testWhereInCorrelated.json @@ -0,0 +1,121 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[IN($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($cor0.JOB, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5])\n LogicalJoin(condition=[AND(=($2, $10), =($0, $9))], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "scan" : 1 + }, + "kind" : "INNER", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereInJoinCorrelated.json b/tests/calcite/testWhereInJoinCorrelated.json new file mode 100644 index 0000000..1ec80ff --- /dev/null +++ b/tests/calcite/testWhereInJoinCorrelated.json @@ -0,0 +1,208 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0])\n LogicalFilter(condition=[IN($5, {\nLogicalProject(SAL=[$5])\n LogicalFilter(condition=[>($7, $cor0.DEPTNO)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n})], variablesSet=[[$cor0]])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n", "LogicalProject(EMPNO=[$0])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8], DEPTNO0=[$9], NAME=[$10])\n LogicalFilter(condition=[=($5, $11)])\n LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{7}])\n LogicalJoin(condition=[=($7, $9)], joinType=[inner])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalAggregate(group=[{0}])\n LogicalProject(SAL=[$5])\n LogicalFilter(condition=[>($7, $cor0.DEPTNO)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 18, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 16, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "IN" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 11, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "source" : { + "correlate" : { + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "INNER", + "right" : { + "scan" : 1 + } + } + }, + "kind" : "INNER", + "right" : { + "group" : { + "keys" : [ { + "column" : 11, + "type" : "INTEGER" + } ], + "function" : [ ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 18, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : ">" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 16, + "type" : "INTEGER" + } ] + } + } + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 10, + "type" : "VARCHAR" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereNotInCorrelated.json b/tests/calcite/testWhereNotInCorrelated.json new file mode 100644 index 0000000..328b3e0 --- /dev/null +++ b/tests/calcite/testWhereNotInCorrelated.json @@ -0,0 +1,230 @@ +{ + "help" : [ "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[NOT(IN($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalFilter(condition=[=($cor0.JOB, $1)])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n}))], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(SAL=[$5])\n LogicalFilter(condition=[OR(=($9, 0), IS NOT TRUE(OR(IS NOT NULL($13), <($10, $9))))])\n LogicalJoin(condition=[AND(=($0, $12), =($2, $14))], joinType=[left])\n LogicalJoin(condition=[=($2, $11)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(c=[$1], ck=[$1], NAME=[$0])\n LogicalAggregate(group=[{0}], c=[COUNT()])\n LogicalProject(NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n LogicalProject(DEPTNO=[$0], i=[true], NAME=[$1])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 10, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 13, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "<" + } ], + "operator" : "OR" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 14, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 1 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "column" : 1, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 5, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereNotInCorrelated2.json b/tests/calcite/testWhereNotInCorrelated2.json new file mode 100644 index 0000000..b61240f --- /dev/null +++ b/tests/calcite/testWhereNotInCorrelated2.json @@ -0,0 +1,360 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[NOT(IN($0, {\nLogicalProject(EMPNO=[$1])\n LogicalFilter(condition=[AND(>($2, 2), =($cor0.ENAME, $0))])\n LogicalProject(ENAME=[$1], EMPNO=[$0], R=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n}))], variablesSet=[[$cor0]])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(=($9, 0), IS NOT TRUE(OR(IS NOT NULL($13), <($10, $9))))])\n LogicalJoin(condition=[AND(=($0, $12), =($1, $14))], joinType=[left])\n LogicalJoin(condition=[=($1, $11)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(c=[$1], ck=[$1], ENAME=[$0])\n LogicalAggregate(group=[{0}], c=[COUNT()])\n LogicalProject(ENAME=[$0])\n LogicalFilter(condition=[>($2, 2)])\n LogicalProject(ENAME=[$1], EMPNO=[$0], R=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(EMPNO=[$1], i=[true], ENAME=[$0])\n LogicalFilter(condition=[>($2, 2)])\n LogicalProject(ENAME=[$1], EMPNO=[$0], R=[$5])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 11, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 10, + "type" : "VARCHAR" + }, { + "column" : 9, + "type" : "INTEGER" + }, { + "column" : 14, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 10, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "NOT" + }, + "source" : { + "scan" : 0 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 13, + "type" : "BOOLEAN" + } ], + "operator" : "IS NOT NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BIGINT" + }, { + "column" : 9, + "type" : "BIGINT" + } ], + "operator" : "<" + } ], + "operator" : "OR" + } ], + "operator" : "IS NOT TRUE" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 12, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 14, + "type" : "VARCHAR" + } ], + "operator" : "=" + } ], + "operator" : "AND" + }, + "left" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 11, + "type" : "VARCHAR" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 0 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 1, + "type" : "BIGINT" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : ">" + }, + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + }, { + "column" : 0, + "type" : "VARCHAR" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWhereOrSubQuery.json b/tests/calcite/testWhereOrSubQuery.json new file mode 100644 index 0000000..1385e10 --- /dev/null +++ b/tests/calcite/testWhereOrSubQuery.json @@ -0,0 +1,219 @@ +{ + "help" : [ "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(=($5, 4), NOT(IN($0, {\nLogicalProject(DEPTNO=[$0])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n})))])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalProject(EMPNO=[$0], ENAME=[$1], JOB=[$2], MGR=[$3], HIREDATE=[$4], SAL=[$5], COMM=[$6], DEPTNO=[$7], SLACKER=[$8])\n LogicalFilter(condition=[OR(=($5, 4), IS NULL($10))])\n LogicalJoin(condition=[=($0, $9)], joinType=[left])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n LogicalProject(DEPTNO=[$0], i=[true])\n LogicalTableScan(table=[[CATALOG, SALES, DEPT]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR" ], + "nullable" : [ false, false ], + "name" : "CATALOG.SALES.DEPT", + "guaranteed" : [ ], + "fields" : [ "DEPTNO", "NAME" ], + "key" : [ [ 0 ] ] + }, { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "query" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 9, + "type" : "INTEGER" + } ] + } + }, + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "operator" : "IN" + } ], + "operator" : "NOT" + } ], + "operator" : "OR" + }, + "source" : { + "scan" : 1 + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "filter" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "4" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 10, + "type" : "BOOLEAN" + } ], + "operator" : "IS NULL" + } ], + "operator" : "OR" + }, + "source" : { + "join" : { + "condition" : { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 9, + "type" : "INTEGER" + } ], + "operator" : "=" + }, + "left" : { + "scan" : 1 + }, + "kind" : "LEFT", + "right" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ ], + "operator" : "true" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "VARCHAR" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "TIMESTAMP" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 8, + "type" : "BOOLEAN" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinct.json b/tests/calcite/testWithinDistinct.json new file mode 100644 index 0000000..379db28 --- /dev/null +++ b/tests/calcite/testWithinDistinct.json @@ -0,0 +1,240 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[SUM($1) WITHIN DISTINCT ($2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], $f1=[CAST($1):INTEGER NOT NULL], $f2=[$2])\n LogicalAggregate(group=[{0}], agg#0=[MIN($1) FILTER $3], agg#1=[$SUM0($2) FILTER $4])\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f3=[$3], $f6=[=($5, 1)], $f7=[AND(=($5, 0), $THROW_UNLESS(OR(<>($5, 0), =($3, $4)), 'more than one distinct value in agg UNIQUE_VALUE'))])\n LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {0}]], agg#0=[$SUM0($1)], agg#1=[MIN($1)], agg#2=[MAX($1)], agg#3=[GROUPING($0, $2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "OR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ], + "operator" : "AND" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctCountDistinct.json b/tests/calcite/testWithinDistinctCountDistinct.json new file mode 100644 index 0000000..0688a3a --- /dev/null +++ b/tests/calcite/testWithinDistinctCountDistinct.json @@ -0,0 +1,295 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], SS_C=[SUM($1) WITHIN DISTINCT ($2)], CDJ=[COUNT(DISTINCT $3)], CJ_J=[COUNT() WITHIN DISTINCT ($3)], CDJ_J=[COUNT(DISTINCT $3) WITHIN DISTINCT ($3)], CDJ_FILTERED=[COUNT(DISTINCT $3) FILTER $4])\n LogicalProject(DEPTNO=[$7], SAL=[$5], COMM=[$6], JOB=[$2], $f4=[>($5, 1000)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], $f1=[$1], $f2=[$2], $f20=[$2], $f21=[$2], $f3=[$3])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[COUNT($2) FILTER $5])\n LogicalProject(DEPTNO=[$0], $f3=[$3], $f4=[$4], $f7=[=($6, 1)], $f8=[=($6, 2)], $f9=[AND(=($6, 2), >($5, 0))])\n LogicalAggregate(group=[{0, 2, 3}], groups=[[{0, 2}, {0, 3}]], agg#0=[MIN($1)], agg#1=[MIN($3) FILTER $4], agg#2=[COUNT() FILTER $4], agg#3=[GROUPING($0, $2, $3)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], COMM=[$6], JOB=[$2], $f4=[>($5, 1000)])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : true, + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "VARCHAR", + "operand" : [ { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1000" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "VARCHAR" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + } ], + "operator" : "AND" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "column" : 3, + "type" : "BIGINT" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctFilteredAggs.json b/tests/calcite/testWithinDistinctFilteredAggs.json new file mode 100644 index 0000000..0d73770 --- /dev/null +++ b/tests/calcite/testWithinDistinctFilteredAggs.json @@ -0,0 +1,549 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($1) FILTER $5])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[>($6, 10)], JOB=[$2], COMM=[$6], $f5=[LIKE($1, '%ok%')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[$SUM0($2) FILTER $5], agg#3=[COUNT() FILTER $6])\n LogicalProject(DEPTNO=[$0], $f3=[$3], $f6=[$6], $f10=[AND(=($9, 2), >($5, 0), $THROW_UNLESS(OR(<>($9, 2), AND(IS NULL($3), IS NULL($4)), IS TRUE(=($3, $4))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f11=[AND(=($9, 2), >($5, 0))], $f12=[AND(=($9, 1), >($8, 0), $THROW_UNLESS(OR(<>($9, 1), AND(IS NULL($6), IS NULL($7)), IS TRUE(=($6, $7))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f13=[AND(=($9, 1), >($8, 0))])\n LogicalAggregate(group=[{0, 1, 3}], groups=[[{0, 1}, {0, 3}]], agg#0=[MIN($1) FILTER $2], agg#1=[MAX($1) FILTER $2], agg#2=[COUNT() FILTER $2], agg#3=[MIN($4) FILTER $5], agg#4=[MAX($4) FILTER $5], agg#5=[COUNT() FILTER $5], agg#6=[GROUPING($0, $1, $3)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[>($6, 10)], JOB=[$2], COMM=[$6], $f5=[LIKE($1, '%ok%')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + } ] + } + } + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 9, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + } ], + "operator" : "AND" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctFilteredAggsSameFilter.json b/tests/calcite/testWithinDistinctFilteredAggsSameFilter.json new file mode 100644 index 0000000..738fe18 --- /dev/null +++ b/tests/calcite/testWithinDistinctFilteredAggsSameFilter.json @@ -0,0 +1,521 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($1) FILTER $2])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[LIKE($1, '%ok%')], JOB=[$2], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[$SUM0($2) FILTER $5], agg#3=[COUNT() FILTER $6])\n LogicalProject(DEPTNO=[$0], $f3=[$3], $f6=[$6], $f9=[AND(=($8, 2), >($5, 0), $THROW_UNLESS(OR(<>($8, 2), AND(IS NULL($3), IS NULL($4)), IS TRUE(=($3, $4))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f10=[AND(=($8, 2), >($5, 0))], $f11=[AND(=($8, 1), >($5, 0), $THROW_UNLESS(OR(<>($8, 1), AND(IS NULL($6), IS NULL($7)), IS TRUE(=($6, $7))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f12=[AND(=($8, 1), >($5, 0))])\n LogicalAggregate(group=[{0, 1, 3}], groups=[[{0, 1}, {0, 3}]], agg#0=[MIN($1) FILTER $2], agg#1=[MAX($1) FILTER $2], agg#2=[COUNT() FILTER $2], agg#3=[MIN($4) FILTER $2], agg#4=[MAX($4) FILTER $2], agg#5=[GROUPING($0, $1, $3)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[LIKE($1, '%ok%')], JOB=[$2], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "2" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "<>" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "column" : 7, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 8, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + } ], + "operator" : "AND" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctFilteredAggsUniformDistinctKeys.json b/tests/calcite/testWithinDistinctFilteredAggsUniformDistinctKeys.json new file mode 100644 index 0000000..7257c77 --- /dev/null +++ b/tests/calcite/testWithinDistinctFilteredAggsUniformDistinctKeys.json @@ -0,0 +1,457 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($3) FILTER $5])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[>($6, 10)], JOB=[$2], COMM=[$6], $f5=[LIKE($1, '%ok%')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $4], agg#2=[$SUM0($2) FILTER $5], agg#3=[COUNT() FILTER $6])\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f5=[$5], $f8=[AND(>($4, 0), $THROW_UNLESS(OR(AND(IS NULL($2), IS NULL($3)), IS TRUE(=($2, $3))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f9=[>($4, 0)], $f10=[AND(>($7, 0), $THROW_UNLESS(OR(AND(IS NULL($5), IS NULL($6)), IS TRUE(=($5, $6))), 'more than one distinct value in agg UNIQUE_VALUE'))], $f11=[>($7, 0)])\n LogicalAggregate(group=[{0, 3}], agg#0=[MIN($1) FILTER $2], agg#1=[MAX($1) FILTER $2], agg#2=[COUNT() FILTER $2], agg#3=[MIN($4) FILTER $5], agg#4=[MAX($4) FILTER $5], agg#5=[COUNT() FILTER $5])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[>($6, 10)], JOB=[$2], COMM=[$6], $f5=[LIKE($1, '%ok%')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + } ] + } + } + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "IS NULL" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 6, + "type" : "INTEGER" + } ], + "operator" : "=" + } ], + "operator" : "IS TRUE" + } ], + "operator" : "OR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ], + "operator" : "AND" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 7, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctFilteredAggsUniformDistinctKeysNoThrow.json b/tests/calcite/testWithinDistinctFilteredAggsUniformDistinctKeysNoThrow.json new file mode 100644 index 0000000..1a3660c --- /dev/null +++ b/tests/calcite/testWithinDistinctFilteredAggsUniformDistinctKeysNoThrow.json @@ -0,0 +1,321 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($3) FILTER $2], EXPR$2=[AVG($4) WITHIN DISTINCT ($3) FILTER $5])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[>($6, 10)], JOB=[$2], COMM=[$6], $f5=[LIKE($1, '%ok%')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[CASE(=($2, 0), null:INTEGER, $1)], EXPR$2=[CAST(/($3, $4)):INTEGER])\n LogicalProject(DEPTNO=[$0], EXPR$1=[$1], $f2=[$2], $f3=[CASE(=($4, 0), null:INTEGER, $3)], $f4=[$4])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[COUNT() FILTER $3], agg#2=[$SUM0($2) FILTER $4], agg#3=[COUNT() FILTER $4])\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f4=[$4], $f6=[>($3, 0)], $f7=[>($5, 0)])\n LogicalAggregate(group=[{0, 3}], agg#0=[MIN($1) FILTER $2], agg#1=[COUNT() FILTER $2], agg#2=[MIN($4) FILTER $5], agg#3=[COUNT() FILTER $5])\n LogicalProject(DEPTNO=[$7], SAL=[$5], $f2=[>($6, 10)], JOB=[$2], COMM=[$6], $f5=[LIKE($1, '%ok%')])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + } ] + } + } + } + }, { + "project" : { + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "10" + } ], + "operator" : ">" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 1, + "type" : "VARCHAR" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'%ok%'" + } ], + "operator" : "LIKE" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 3, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 5, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : ">" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "column" : 4, + "type" : "BIGINT" + } ] + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "NULL" + }, { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CASE" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctNoThrow.json b/tests/calcite/testWithinDistinctNoThrow.json new file mode 100644 index 0000000..50d3982 --- /dev/null +++ b/tests/calcite/testWithinDistinctNoThrow.json @@ -0,0 +1,194 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1)], EXPR$2=[SUM($1) WITHIN DISTINCT ($2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], $f1=[CAST($1):INTEGER NOT NULL], $f2=[$2])\n LogicalAggregate(group=[{0}], agg#0=[MIN($1) FILTER $3], agg#1=[$SUM0($2) FILTER $4])\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f3=[$3], $f5=[=($4, 1)], $f6=[=($4, 0)])\n LogicalAggregate(group=[{0, 2}], groups=[[{0, 2}, {0}]], agg#0=[$SUM0($1)], agg#1=[MIN($1)], agg#2=[GROUPING($0, $2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "operator" : "GROUPING", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "1" + } ], + "operator" : "=" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "BIGINT" + }, { + "type" : "INTEGER", + "operand" : [ ], + "operator" : "0" + } ], + "operator" : "=" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "CAST" + }, { + "column" : 2, + "type" : "INTEGER" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctUniformDistinctKeys.json b/tests/calcite/testWithinDistinctUniformDistinctKeys.json new file mode 100644 index 0000000..ecceab2 --- /dev/null +++ b/tests/calcite/testWithinDistinctUniformDistinctKeys.json @@ -0,0 +1,233 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($2)], EXPR$2=[AVG($3) WITHIN DISTINCT ($2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($1) FILTER $3], agg#1=[$SUM0($2) FILTER $4], agg#2=[COUNT()])\n LogicalProject(DEPTNO=[$0], $f2=[$2], $f4=[$4], $f6=[$THROW_UNLESS(=($2, $3), 'more than one distinct value in agg UNIQUE_VALUE')], $f7=[$THROW_UNLESS(=($4, $5), 'more than one distinct value in agg UNIQUE_VALUE')])\n LogicalAggregate(group=[{0, 2}], agg#0=[MIN($1)], agg#1=[MAX($1)], agg#2=[MIN($3)], agg#3=[MAX($3)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MAX", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 4, + "type" : "INTEGER" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + }, { + "type" : "BOOLEAN", + "operand" : [ { + "type" : "BOOLEAN", + "operand" : [ { + "column" : 4, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + } ], + "operator" : "=" + }, { + "type" : "CHAR", + "operand" : [ ], + "operator" : "_ISO-8859-1'more than one distinct value in agg UNIQUE_VALUE'" + } ], + "operator" : "$THROW_UNLESS" + } ] + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file diff --git a/tests/calcite/testWithinDistinctUniformDistinctKeysNoThrow.json b/tests/calcite/testWithinDistinctUniformDistinctKeysNoThrow.json new file mode 100644 index 0000000..1c06078 --- /dev/null +++ b/tests/calcite/testWithinDistinctUniformDistinctKeysNoThrow.json @@ -0,0 +1,165 @@ +{ + "help" : [ "LogicalAggregate(group=[{0}], EXPR$1=[SUM($1) WITHIN DISTINCT ($2)], EXPR$2=[AVG($3) WITHIN DISTINCT ($2)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n", "LogicalProject(DEPTNO=[$0], EXPR$1=[$1], EXPR$2=[CAST(/($2, $3)):INTEGER NOT NULL])\n LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($3)], agg#2=[COUNT()])\n LogicalAggregate(group=[{0, 2}], agg#0=[MIN($1)], agg#1=[MIN($3)])\n LogicalProject(DEPTNO=[$7], SAL=[$5], JOB=[$2], COMM=[$6])\n LogicalTableScan(table=[[CATALOG, SALES, EMP]])\n" ], + "schemas" : [ { + "types" : [ "INTEGER", "VARCHAR", "VARCHAR", "INTEGER", "TIMESTAMP", "INTEGER", "INTEGER", "INTEGER", "BOOLEAN" ], + "nullable" : [ false, false, false, true, false, false, false, false, false ], + "name" : "CATALOG.SALES.EMP", + "guaranteed" : [ ], + "fields" : [ "EMPNO", "ENAME", "JOB", "MGR", "HIREDATE", "SAL", "COMM", "DEPTNO", "SLACKER" ], + "key" : [ [ 0 ] ] + } ], + "queries" : [ { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "SUM", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "AVG", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + }, { + "project" : { + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "$SUM0", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "BIGINT", + "operand" : [ ], + "operator" : "COUNT", + "ignoreNulls" : false + } ], + "source" : { + "group" : { + "keys" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + } ], + "function" : [ { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 1, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + }, { + "distinct" : false, + "type" : "INTEGER", + "operand" : [ { + "column" : 3, + "type" : "INTEGER" + } ], + "operator" : "MIN", + "ignoreNulls" : false + } ], + "source" : { + "project" : { + "source" : { + "scan" : 0 + }, + "target" : [ { + "column" : 7, + "type" : "INTEGER" + }, { + "column" : 5, + "type" : "INTEGER" + }, { + "column" : 2, + "type" : "VARCHAR" + }, { + "column" : 6, + "type" : "INTEGER" + } ] + } + } + } + } + } + }, + "target" : [ { + "column" : 0, + "type" : "INTEGER" + }, { + "column" : 1, + "type" : "INTEGER" + }, { + "type" : "INTEGER", + "operand" : [ { + "type" : "BIGINT", + "operand" : [ { + "column" : 2, + "type" : "INTEGER" + }, { + "column" : 3, + "type" : "BIGINT" + } ], + "operator" : "/" + } ], + "operator" : "CAST" + } ] + } + } ] +} \ No newline at end of file