diff --git a/yaml-tests/src/test/resources/enum.metrics.binpb b/yaml-tests/src/test/resources/enum.metrics.binpb new file mode 100644 index 0000000000..3b5bac65b0 --- /dev/null +++ b/yaml-tests/src/test/resources/enum.metrics.binpb @@ -0,0 +1,101 @@ + +E + +enum-tests7EXPLAIN SELECT * From TABLE_A where "mood" = 'CONFUSED' +0 (088@SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood EQUALS promote(@c8 AS ENUM)digraph G { + fontname=courier; + rankdir=BT; + splines=polyline; + 1 [ label=<
Predicate Filter
WHERE q2.mood EQUALS promote(@c8 AS ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)>)
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 [ label=<
Type Filter
WHERE record IS [TABLE_A]
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 3 [ label=<
Scan
range: <-∞, ∞>
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 4 [ label=<
Primary Storage
record types: [TABLE_A, TABLE_B]
> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 3 -> 2 [ label=< q19> label="q19" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 4 -> 3 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 2 -> 1 [ label=< q2> label="q2" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; +} +H + +enum-tests:EXPLAIN SELECT * From TABLE_A where "mood" > 'INDIFFERENT' +Ҩ0 (08@SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood GREATER_THAN promote(@c8 AS ENUM)digraph G { + fontname=courier; + rankdir=BT; + splines=polyline; + 1 [ label=<
Predicate Filter
WHERE q2.mood GREATER_THAN promote(@c8 AS ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)>)
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 [ label=<
Type Filter
WHERE record IS [TABLE_A]
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 3 [ label=<
Scan
range: <-∞, ∞>
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 4 [ label=<
Primary Storage
record types: [TABLE_A, TABLE_B]
> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 3 -> 2 [ label=< q19> label="q19" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 4 -> 3 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 2 -> 1 [ label=< q2> label="q2" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; +} +I + +enum-tests;EXPLAIN SELECT * From TABLE_A where "mood" >= 'INDIFFERENT' +90 ,(08@SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood GREATER_THAN_OR_EQUALS promote(@c9 AS ENUM)digraph G { + fontname=courier; + rankdir=BT; + splines=polyline; + 1 [ label=<
Predicate Filter
WHERE q2.mood GREATER_THAN_OR_EQUALS promote(@c9 AS ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)>)
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 [ label=<
Type Filter
WHERE record IS [TABLE_A]
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 3 [ label=<
Scan
range: <-∞, ∞>
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 4 [ label=<
Primary Storage
record types: [TABLE_A, TABLE_B]
> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 3 -> 2 [ label=< q19> label="q19" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 4 -> 3 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 2 -> 1 [ label=< q2> label="q2" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; +} +A + +enum-tests3EXPLAIN SELECT * From TABLE_A where "mood" < "mood" +Տ90 ,(0ȯ8@) | TFILTER TABLE_A | FILTER _.mood LESS_THAN _.mooddigraph G { + fontname=courier; + rankdir=BT; + splines=polyline; + 1 [ label=<
Predicate Filter
WHERE q2.mood LESS_THAN q2.mood
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 [ label=<
Type Filter
WHERE record IS [TABLE_A]
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 3 [ label=<
Scan
range: <-∞, ∞>
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 4 [ label=<
Primary Storage
record types: [TABLE_A, TABLE_B]
> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 3 -> 2 [ label=< q19> label="q19" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 4 -> 3 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 2 -> 1 [ label=< q2> label="q2" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; +} + +E + +enum-tests7EXPLAIN SELECT * From TABLE_B where "mood" = 'CONFUSED' + +֤FM ͕7(08"@ISCAN(B$MOOD [EQUALS promote(@c8 AS ENUM)]) digraph G { + fontname=courier; + rankdir=BT; + splines=polyline; + 1 [ label=<
Index Scan
comparisons: [EQUALS promote(@c8 AS ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)>)]
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 [ label=<
Index
B$MOOD
> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 -> 1 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; +} +H + +enum-tests:EXPLAIN SELECT * From TABLE_B where "mood" > 'INDIFFERENT' + +ٲ N (0Q8"@ISCAN(B$MOOD [[GREATER_THAN promote(@c8 AS ENUM)]]) digraph G { + fontname=courier; + rankdir=BT; + splines=polyline; + 1 [ label=<
Index Scan
comparisons: [[GREATER_THAN promote(@c8 AS ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)>)]]
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 [ label=<
Index
B$MOOD
> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 -> 1 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; +} +I + +enum-tests;EXPLAIN SELECT * From TABLE_A where "mood" != 'INDIFFERENT' +>0 ֖2(0̻8@SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood NOT_EQUALS promote(@c9 AS ENUM)digraph G { + fontname=courier; + rankdir=BT; + splines=polyline; + 1 [ label=<
Predicate Filter
WHERE q2.mood NOT_EQUALS promote(@c9 AS ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)>)
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 2 [ label=<
Type Filter
WHERE record IS [TABLE_A]
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(LONG AS id, STRING AS name, ENUM<JOYFUL(0), HAPPY(1), RELAXED(2), INDIFFERENT(3), CONFUSED(4), SAD(5), ANXIOUS(6), ANGRY(7)> AS mood)" ]; + 3 [ label=<
Scan
range: <-∞, ∞>
> color="black" shape="plain" style="solid" fillcolor="black" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 4 [ label=<
Primary Storage
record types: [TABLE_A, TABLE_B]
> color="black" shape="plain" style="filled" fillcolor="lightblue" fontname="courier" fontsize="8" tooltip="RELATION(RECORD)" ]; + 3 -> 2 [ label=< q19> label="q19" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 4 -> 3 [ color="gray20" style="solid" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; + 2 -> 1 [ label=< q2> label="q2" color="gray20" style="bold" fontname="courier" fontsize="8" arrowhead="normal" arrowtail="none" dir="both" ]; +} \ No newline at end of file diff --git a/yaml-tests/src/test/resources/enum.metrics.yaml b/yaml-tests/src/test/resources/enum.metrics.yaml new file mode 100644 index 0000000000..888637eb1f --- /dev/null +++ b/yaml-tests/src/test/resources/enum.metrics.yaml @@ -0,0 +1,80 @@ +enum-tests: +- query: EXPLAIN SELECT * From TABLE_A where "mood" = 'CONFUSED' + explain: SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood EQUALS promote(@c8 AS ENUM) + task_count: 187 + task_total_time_ms: 12 + transform_count: 48 + transform_time_ms: 7 + transform_yield_count: 14 + insert_time_ms: 0 + insert_new_count: 17 + insert_reused_count: 2 +- query: EXPLAIN SELECT * From TABLE_A where "mood" > 'INDIFFERENT' + explain: SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood GREATER_THAN promote(@c8 + AS ENUM) + task_count: 187 + task_total_time_ms: 14 + transform_count: 48 + transform_time_ms: 6 + transform_yield_count: 14 + insert_time_ms: 0 + insert_new_count: 17 + insert_reused_count: 2 +- query: EXPLAIN SELECT * From TABLE_A where "mood" >= 'INDIFFERENT' + explain: SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood GREATER_THAN_OR_EQUALS promote(@c9 + AS ENUM) + task_count: 187 + task_total_time_ms: 119 + transform_count: 48 + transform_time_ms: 93 + transform_yield_count: 14 + insert_time_ms: 2 + insert_new_count: 17 + insert_reused_count: 2 +- query: EXPLAIN SELECT * From TABLE_A where "mood" < "mood" + explain: SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood LESS_THAN _.mood + task_count: 187 + task_total_time_ms: 119 + transform_count: 48 + transform_time_ms: 94 + transform_yield_count: 14 + insert_time_ms: 2 + insert_new_count: 17 + insert_reused_count: 2 +- query: EXPLAIN SELECT * From TABLE_B where "mood" = 'CONFUSED' + explain: ISCAN(B$MOOD [EQUALS promote(@c8 AS ENUM)]) + task_count: 335 + task_total_time_ms: 147 + transform_count: 77 + transform_time_ms: 115 + transform_yield_count: 30 + insert_time_ms: 2 + insert_new_count: 34 + insert_reused_count: 4 +- query: EXPLAIN SELECT * From TABLE_B where "mood" > 'INDIFFERENT' + explain: ISCAN(B$MOOD [[GREATER_THAN promote(@c8 AS ENUM)]]) + task_count: 335 + task_total_time_ms: 28 + transform_count: 78 + transform_time_ms: 10 + transform_yield_count: 30 + insert_time_ms: 1 + insert_new_count: 34 + insert_reused_count: 4 +- query: EXPLAIN SELECT * From TABLE_A where "mood" != 'INDIFFERENT' + explain: SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood NOT_EQUALS promote(@c9 AS + ENUM) + task_count: 187 + task_total_time_ms: 130 + transform_count: 48 + transform_time_ms: 105 + transform_yield_count: 14 + insert_time_ms: 3 + insert_new_count: 17 + insert_reused_count: 2 diff --git a/yaml-tests/src/test/resources/enum.yamsql b/yaml-tests/src/test/resources/enum.yamsql index 5f341b88d0..86e5ddae09 100644 --- a/yaml-tests/src/test/resources/enum.yamsql +++ b/yaml-tests/src/test/resources/enum.yamsql @@ -25,6 +25,10 @@ options: schema_template: CREATE TYPE AS ENUM MOOD ( 'JOYFUL', 'HAPPY', 'RELAXED', 'INDIFFERENT', 'CONFUSED', 'SAD', 'ANXIOUS', 'ANGRY' ) CREATE TABLE TABLE_A ("id" BIGINT, "name" STRING, "mood" MOOD, PRIMARY KEY("id") ) + + CREATE TABLE TABLE_B ("id" BIGINT, "name" STRING, "mood" MOOD, PRIMARY KEY("id") ) + CREATE INDEX "B$MOOD" AS SELECT "mood" FROM TABLE_B + WITH OPTIONS(ENABLE_LONG_ROWS=true) --- setup: @@ -46,16 +50,32 @@ setup: - query: INSERT INTO TABLE_A("id", "name") VALUES (14, 'alice'), (15, 'bob') + - query: INSERT INTO TABLE_B + VALUES (1, 'foo', 'HAPPY'), + (2, 'bar', 'CONFUSED'), + (3, 'baz', 'JOYFUL'), + (4, 'qux', 'ANGRY'), + (5, 'quux', 'RELAXED'), + (6, 'corge', 'JOYFUL'), + (7, 'grault', 'ANXIOUS'), + (8, 'garply', 'SAD'), + (9, 'waldo', 'JOYFUL'), + (10, 'fred', 'INDIFFERENT'), + (11, 'plugh', 'CONFUSED'), + (12, 'xyzzy', 'INDIFFERENT'), + (13, 'thud', 'SAD') --- test_block: name: enum-tests tests: - - query: SELECT * From TABLE_A where "mood" = 'CONFUSED' + - explain: "SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood EQUALS promote(@c8 AS ENUM)" - unorderedResult: [{2, 'bar', 'CONFUSED'}, {11, 'plugh', 'CONFUSED'}] - - query: SELECT * From TABLE_A where "mood" > 'INDIFFERENT' + - explain: "SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood GREATER_THAN promote(@c8 AS ENUM)" - unorderedResult: [{2, 'bar', 'CONFUSED'}, {4, 'qux', 'ANGRY'}, {7, 'grault', 'ANXIOUS'}, @@ -64,6 +84,7 @@ test_block: {13, 'thud', 'SAD'}] - - query: SELECT * From TABLE_A where "mood" >= 'INDIFFERENT' + - explain: "SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood GREATER_THAN_OR_EQUALS promote(@c9 AS ENUM)" - unorderedResult: [{2, 'bar', 'CONFUSED'}, {4, 'qux', 'ANGRY'}, {7, 'grault', 'ANXIOUS'}, @@ -106,6 +127,7 @@ test_block: - unorderedResult: [] - - query: SELECT * From TABLE_A where "mood" < "mood" + - explain: "SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood LESS_THAN _.mood" - unorderedResult: [] - - query: SELECT * From TABLE_A where "mood" IS NOT NULL AND "id" < 5 @@ -129,4 +151,37 @@ test_block: - error: "XX000" - initialVersionLessThan: 4.7.3.0 - error: "XXXXX" + + - + - query: SELECT * From TABLE_B where "mood" = 'CONFUSED' + - explain: "ISCAN(B$MOOD [EQUALS promote(@c8 AS ENUM)])" + # Disable force_continuations on this plan until we resolve: https://github.com/FoundationDB/fdb-record-layer/issues/3734 + - maxRows: 0 + - unorderedResult: [{2, 'bar', 'CONFUSED'}, + {11, 'plugh', 'CONFUSED'}] + - + - query: SELECT * From TABLE_B where "mood" > 'INDIFFERENT' + - explain: "ISCAN(B$MOOD [[GREATER_THAN promote(@c8 AS ENUM)]])" + # Disable force_continuations on this plan until we resolve: https://github.com/FoundationDB/fdb-record-layer/issues/3734 + - maxRows: 0 + - unorderedResult: [{2, 'bar', 'CONFUSED'}, + {4, 'qux', 'ANGRY'}, + {7, 'grault', 'ANXIOUS'}, + {8, 'garply', 'SAD'}, + {11, 'plugh', 'CONFUSED'}, + {13, 'thud', 'SAD'}] + - + - query: SELECT * From TABLE_A where "mood" != 'INDIFFERENT' + - explain: "SCAN(<,>) | TFILTER TABLE_A | FILTER _.mood NOT_EQUALS promote(@c9 AS ENUM)" + - unorderedResult: [{1, 'foo', 'HAPPY'}, + {2, 'bar', 'CONFUSED'}, + {3, 'baz', 'JOYFUL'}, + {4, 'qux', 'ANGRY'}, + {5, 'quux', 'RELAXED'}, + {6, 'corge', 'JOYFUL'}, + {7, 'grault', 'ANXIOUS'}, + {8, 'garply', 'SAD'}, + {9, 'waldo', 'JOYFUL'}, + {11, 'plugh', 'CONFUSED'}, + {13, 'thud', 'SAD'}] ...