diff --git a/examples/corpus_templates/corpus_templates_cyphertck.json b/examples/corpus_templates/corpus_templates_cyphertck.json new file mode 100644 index 0000000..7d7d315 --- /dev/null +++ b/examples/corpus_templates/corpus_templates_cyphertck.json @@ -0,0 +1,154 @@ +[ + "MATCH (n:label_1) RETURN n.prop_1 AS value ORDER BY value ASC SKIP 2 LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS value ORDER BY value DESC SKIP 2 LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 IN [\"value_1\", \"value_2\"] RETURN n.prop_1 AS value, n.prop_2 AS detail LIMIT 5", + "MATCH (n:label_1) WHERE NOT n.prop_1 IN [\"value_1\", \"value_2\"] RETURN n.prop_1 AS value, n.prop_2 AS detail LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 IS NULL RETURN n.prop_2 AS fallback_value LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 IS NOT NULL RETURN n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 ENDS WITH \"value_1\" RETURN n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS value, CASE WHEN n.prop_2 > value_1 THEN \"high\" ELSE \"low\" END AS bucket LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS value, CASE n.prop_2 WHEN \"value_1\" THEN \"matched\" ELSE \"other\" END AS bucket LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS group_value, collect(n.prop_2) AS collected_values LIMIT 5", + "MATCH (n:label_1) RETURN collect(DISTINCT n.prop_1) AS distinct_values LIMIT 5", + "MATCH (n:label_1) RETURN COUNT(DISTINCT n.prop_1) AS distinct_count LIMIT 5", + "MATCH (n:label_1) RETURN id(n) AS internal_id, n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) RETURN labels(n) AS labels, n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) RETURN coalesce(n.prop_1, n.prop_2) AS resolved_value LIMIT 5", + "MATCH (n:label_1) RETURN toString(n.prop_1) AS value_as_string LIMIT 5", + "MATCH (n:label_1) RETURN round(n.prop_1) AS rounded_value LIMIT 5", + "MATCH (n:label_1) RETURN abs(n.prop_1 - value_1) AS distance_from_value LIMIT 5", + "MATCH (a:label_1)-[r:edge_1]->(b:label_2) RETURN type(r) AS relationship_type, a.prop_1 AS source_value, b.prop_2 AS target_value LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_1 AS source_value, b.prop_2 AS target_value, length(p) AS path_length LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1]->(b:label_2) RETURN nodes(p) AS path_nodes LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1]->(b:label_2) RETURN relationships(p) AS path_relationships LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_1 AS group_value, collect(b.prop_2) AS connected_values LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN COUNT(DISTINCT b.prop_2) AS distinct_connected_count LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_1 AS source_value, b.prop_2 AS target_value, abs(a.prop_3 - b.prop_4) AS numeric_gap LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_1 AS source_value, b.prop_2 AS target_value, a.prop_3 + b.prop_4 AS combined_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE a.prop_1 IN [\"value_1\", \"value_2\"] RETURN a.prop_1 AS source_value, b.prop_2 AS target_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE b.prop_2 IS NOT NULL RETURN a.prop_1 AS source_value, b.prop_2 AS target_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_1 AS source_value, CASE WHEN b.prop_3 > value_1 THEN \"large\" ELSE \"small\" END AS target_bucket LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) RETURN a.prop_1 AS first_value, b.prop_2 AS middle_value, c.prop_3 AS last_value, labels(c) AS last_labels LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) RETURN a.prop_1 AS first_value, c.prop_3 AS last_value, length(p) AS path_length LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)<-[:edge_2]-(c:label_3) WHERE a <> c RETURN a.prop_1 AS first_value, c.prop_3 AS second_value, b.prop_2 AS shared_value LIMIT 5", + "UNWIND [\"value_1\", \"value_2\"] AS selected_value MATCH (n:label_1) WHERE n.prop_1 = selected_value RETURN selected_value, COUNT(n) AS cnt LIMIT 5", + "UNWIND range(1, 3) AS bucket MATCH (n:label_1) RETURN bucket, COUNT(n) AS cnt LIMIT 5", + "MATCH (a:label_1) RETURN a.prop_1 AS value LIMIT 2 UNION ALL MATCH (b:label_2) RETURN b.prop_2 AS value LIMIT 2", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_1 AS value LIMIT 2 UNION ALL MATCH (c:label_3)-[:edge_2]->(d:label_4) RETURN d.prop_4 AS value LIMIT 2", + + "MATCH (n:label_1) RETURN [\"value_1\", \"value_2\", n.prop_1][0] AS first_value, [\"value_1\", \"value_2\", n.prop_1][1] AS second_value LIMIT 5", + "MATCH (n:label_1) RETURN split(n.prop_1, \"value_1\")[0] AS first_piece LIMIT 5", + "MATCH (n:label_1) RETURN split(n.prop_1, \"value_1\")[0..1] AS leading_pieces LIMIT 5", + "MATCH (n:label_1) RETURN [n.prop_1, n.prop_2, \"value_1\"][1..3] AS sampled_values LIMIT 5", + "MATCH (n:label_1) RETURN {label: \"value_1\", sample: n.prop_1} AS value_map LIMIT 5", + "MATCH (n:label_1) RETURN properties(n) AS node_properties LIMIT 5", + "MATCH (n:label_1) RETURN keys(n) AS property_names LIMIT 5", + "MATCH (n) WHERE n:label_1 RETURN labels(n) AS matched_labels, id(n) AS internal_id LIMIT 5", + "MATCH (n:label_1) WHERE exists(n.prop_1) RETURN n.prop_1 AS existing_value LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 <> \"\" RETURN n.prop_1 AS non_empty_value LIMIT 5", + "MATCH (n:label_1) RETURN toInteger(n.prop_1) % value_1 AS remainder_value LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 ^ 2 AS squared_value LIMIT 5", + "MATCH (n:label_1) RETURN toInteger(n.prop_1) / value_1 AS bucket_value LIMIT 5", + "MATCH (n:label_1) RETURN [n.prop_1, reverse(n.prop_1), toUpper(n.prop_1)] AS string_variants LIMIT 5", + "MATCH (a:label_1)<-[:edge_1]-(b:label_2) RETURN a.prop_1 AS target_value, b.prop_2 AS source_value LIMIT 5", + "MATCH (a:label_1)-[r:edge_1]-(b:label_2) RETURN a.prop_1 AS first_value, b.prop_2 AS second_value, type(r) AS relationship_type LIMIT 5", + "MATCH (a:label_1)-[r]->(b) RETURN a.prop_1 AS source_value, labels(b) AS target_labels, type(r) AS relationship_type LIMIT 5", + "MATCH (a:label_1)-[r]->(b) WHERE type(r) IN [\"edge_1\", \"edge_2\"] RETURN type(r) AS relationship_type, labels(b) AS target_labels LIMIT 5", + "MATCH (a:label_1)-[r:edge_1]->(b:label_2) RETURN startNode(r) AS start_node, endNode(r) AS end_node LIMIT 5", + "MATCH (a:label_1)-[r:edge_1]->(b:label_2) RETURN id(startNode(r)) AS start_id, id(endNode(r)) AS end_id, type(r) AS relationship_type LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1*1]->(b:label_2) RETURN length(p) AS path_length, a.prop_1 AS source_value, b.prop_2 AS target_value LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1*1..2]->(b:label_2) RETURN length(p) AS path_length, nodes(p) AS path_nodes LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1*1..2]->(b:label_2) RETURN size(relationships(p)) AS relationship_count, relationships(p) AS path_relationships LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) RETURN head(nodes(p)) AS start_node, last(nodes(p)) AS end_node, length(p) AS path_length LIMIT 5", + "MATCH p=(a:label_1)<-[:edge_1]-(b:label_2)-[:edge_2]->(c:label_3) RETURN a.prop_1 AS left_value, b.prop_2 AS middle_value, c.prop_3 AS right_value, length(p) AS path_length LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)<-[:edge_2]-(c:label_3) RETURN {first: a.prop_1, shared: b.prop_2, second: c.prop_3} AS shared_connection LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN split(a.prop_1, \"value_1\")[0] AS source_piece, split(b.prop_2, \"value_2\")[0] AS target_piece LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN [left(a.prop_1, value_1), right(b.prop_2, value_2)] AS boundary_values LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN toInteger(a.prop_3) % value_1 AS source_bucket, toInteger(b.prop_4) % value_2 AS target_bucket LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_3 ^ 2 AS source_square, b.prop_4 ^ 2 AS target_square LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE exists(b.prop_2) RETURN properties(b) AS target_properties LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN keys(a) AS source_keys, keys(b) AS target_keys LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WITH collect(DISTINCT b.prop_2) AS values RETURN head(values) AS first_value, last(values) AS last_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WITH collect(DISTINCT b.prop_2) AS values UNWIND values AS value RETURN value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN {source: a.prop_1, target: b.prop_2, rel: \"edge_1\"} AS connection_map LIMIT 5", + "MATCH (a:label_1) RETURN properties(a) AS value LIMIT 2 UNION ALL MATCH (b:label_2) RETURN properties(b) AS value LIMIT 2", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN keys(a) AS value LIMIT 2 UNION ALL MATCH (c:label_3)-[:edge_2]->(d:label_4) RETURN keys(d) AS value LIMIT 2", + + "MATCH (n:label_1) RETURN toLower(n.prop_1) AS normalized_value LIMIT 5", + "MATCH (n:label_1) RETURN toUpper(n.prop_1) AS normalized_value LIMIT 5", + "MATCH (n:label_1) RETURN trim(n.prop_1) AS trimmed_value LIMIT 5", + "MATCH (n:label_1) RETURN lTrim(n.prop_1) AS left_trimmed_value LIMIT 5", + "MATCH (n:label_1) RETURN rTrim(n.prop_1) AS right_trimmed_value LIMIT 5", + "MATCH (n:label_1) RETURN substring(n.prop_1, 1, value_1) AS prefix_value LIMIT 5", + "MATCH (n:label_1) RETURN left(n.prop_1, value_1) AS left_part, right(n.prop_1, value_2) AS right_part LIMIT 5", + "MATCH (n:label_1) RETURN replace(n.prop_1, \"value_1\", \"value_2\") AS replaced_value LIMIT 5", + "MATCH (n:label_1) RETURN reverse(n.prop_1) AS reversed_value LIMIT 5", + "MATCH (n:label_1) RETURN size(n.prop_1) AS string_length, n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) RETURN split(n.prop_1, \"value_1\") AS pieces LIMIT 5", + "MATCH (n:label_1) RETURN head(split(n.prop_1, \"value_1\")) AS first_piece LIMIT 5", + "MATCH (n:label_1) RETURN last(split(n.prop_1, \"value_1\")) AS last_piece LIMIT 5", + "MATCH (n:label_1) WHERE toLower(n.prop_1) CONTAINS \"value_1\" RETURN n.prop_1 AS matched_value LIMIT 5", + "MATCH (n:label_1) WHERE size(n.prop_1) > value_1 RETURN n.prop_1 AS long_value, size(n.prop_1) AS value_length LIMIT 5", + "MATCH (n:label_1) RETURN ceil(n.prop_1) AS rounded_up, floor(n.prop_1) AS rounded_down LIMIT 5", + "MATCH (n:label_1) RETURN sign(n.prop_1 - value_1) AS direction, n.prop_1 AS numeric_value LIMIT 5", + "MATCH (n:label_1) RETURN toInteger(n.prop_1) AS integer_value, toFloat(n.prop_1) AS float_value LIMIT 5", + "MATCH (n:label_1) RETURN percentileDisc(n.prop_1, 0.5) AS median_like_value LIMIT 5", + "MATCH (n:label_1) RETURN stDev(n.prop_1) AS sample_stdev, stDevP(n.prop_1) AS population_stdev LIMIT 5", + "MATCH (n:label_1) RETURN AVG(CASE WHEN n.prop_1 = \"value_1\" THEN n.prop_2 ELSE 0 END) AS conditional_average LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 > date(\"value_1\") RETURN n.prop_2 AS value, n.prop_1 AS date_value ORDER BY date_value DESC LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 > datetime(\"value_1\") RETURN n.prop_2 AS value, n.prop_1 AS datetime_value ORDER BY datetime_value DESC LIMIT 5", + "MATCH (n:label_1) RETURN date(\"value_1\") AS reference_date, COUNT(n) AS cnt LIMIT 5", + "MATCH (n:label_1) RETURN datetime(\"value_1\") AS reference_datetime, COUNT(n) AS cnt LIMIT 5", + "UNWIND [\"value_1\", \"value_2\", \"value_3\"] AS selected_value MATCH (n:label_1) WHERE n.prop_1 = selected_value RETURN selected_value, COUNT(n) AS cnt LIMIT 5", + "MATCH (n:label_1) WITH collect(DISTINCT n.prop_1) AS values UNWIND values AS value RETURN value LIMIT 5", + "UNWIND range(value_1, value_2) AS bucket MATCH (n:label_1) RETURN bucket, COUNT(n) AS cnt LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN toLower(a.prop_1) AS source_norm, toUpper(b.prop_2) AS target_norm LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN left(a.prop_1, value_1) AS source_prefix, right(b.prop_2, value_2) AS target_suffix LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE size(a.prop_1) > value_1 RETURN a.prop_1 AS source_value, b.prop_2 AS target_value, size(a.prop_1) AS source_length LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN abs(a.prop_3 - b.prop_4) AS numeric_gap, sign(a.prop_3 - b.prop_4) AS gap_direction LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN ceil(a.prop_3 + b.prop_4) AS rounded_combined_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN AVG(CASE WHEN b.prop_2 = \"value_1\" THEN a.prop_3 ELSE 0 END) AS conditional_average LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1]->(b:label_2) RETURN length(p) AS path_length, head(nodes(p)) AS start_node, last(nodes(p)) AS end_node LIMIT 5", + "MATCH p=(a:label_1)-[:edge_1]->(b:label_2) RETURN size(relationships(p)) AS relationship_count, relationships(p) AS path_relationships LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) RETURN replace(a.prop_1, \"value_1\", \"value_2\") AS rewritten_first_value, reverse(c.prop_3) AS reversed_last_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) RETURN a.prop_1 AS first_value, b.prop_2 AS middle_value, c.prop_3 AS last_value, CASE WHEN size(c.prop_3) > value_1 THEN \"long\" ELSE \"short\" END AS last_value_bucket LIMIT 5", + "MATCH (a:label_1) RETURN toLower(a.prop_1) AS value LIMIT 2 UNION ALL MATCH (b:label_2) RETURN toLower(b.prop_2) AS value LIMIT 2", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN left(a.prop_1, value_1) AS value LIMIT 2 UNION ALL MATCH (c:label_3)-[:edge_2]->(d:label_4) RETURN right(d.prop_4, value_2) AS value LIMIT 2", + + "MATCH (n:label_1) RETURN n LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS value ORDER BY value ASC LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS value ORDER BY value DESC LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 = \"value_1\" RETURN n LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 <> \"value_1\" RETURN n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 > value_1 RETURN n.prop_1 AS value ORDER BY value DESC LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 >= value_1 AND n.prop_1 <= value_2 RETURN n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 CONTAINS \"value_1\" RETURN n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) WHERE n.prop_1 STARTS WITH \"value_1\" RETURN n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) RETURN DISTINCT n.prop_1 AS value LIMIT 5", + "MATCH (n:label_1) RETURN n.prop_1 AS group_value, COUNT(n) AS cnt ORDER BY cnt DESC LIMIT 5", + "MATCH (n:label_1) RETURN COUNT(n) AS cnt LIMIT 5", + "MATCH (n:label_1) RETURN SUM(n.prop_1) AS total LIMIT 5", + "MATCH (n:label_1) RETURN AVG(n.prop_1) AS average_value LIMIT 5", + "MATCH (n:label_1) RETURN MIN(n.prop_1) AS min_value, MAX(n.prop_1) AS max_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a, b LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN a.prop_1 AS source_value, b.prop_2 AS target_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE a.prop_1 = \"value_1\" RETURN b LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE b.prop_1 = \"value_1\" RETURN a LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE a.prop_1 <> b.prop_2 RETURN a.prop_1 AS source_value, b.prop_2 AS target_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE a.prop_1 > b.prop_2 RETURN a.prop_1 AS source_value, b.prop_2 AS target_value ORDER BY source_value DESC LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN DISTINCT b.prop_1 AS target_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WITH b, COUNT(a) AS cnt RETURN b.prop_1 AS target_value, cnt ORDER BY cnt DESC LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WITH a, COUNT(b) AS cnt RETURN a.prop_1 AS source_value, cnt ORDER BY cnt DESC LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN b.prop_1 AS group_value, COUNT(a) AS cnt ORDER BY cnt DESC LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN b.prop_1 AS group_value, SUM(a.prop_2) AS total ORDER BY total DESC LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) RETURN b.prop_1 AS group_value, AVG(a.prop_2) AS average_value ORDER BY average_value DESC LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)<-[:edge_1]-(c:label_1) WHERE a <> c RETURN a.prop_1 AS first_value, c.prop_1 AS second_value, b.prop_2 AS shared_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) RETURN a.prop_1 AS first_value, b.prop_2 AS middle_value, c.prop_3 AS last_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) WHERE a.prop_1 = \"value_1\" RETURN b, c LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2)-[:edge_2]->(c:label_3) WITH c, COUNT(a) AS cnt RETURN c.prop_1 AS final_value, cnt ORDER BY cnt DESC LIMIT 5", + "MATCH (a:label_1)-[r:edge_1]->(b:label_2) RETURN TYPE(r) AS relationship_type, COUNT(r) AS cnt ORDER BY cnt DESC LIMIT 5", + "MATCH (a:label_1)-[r:edge_1]->(b:label_2) WHERE a.prop_1 = \"value_1\" RETURN TYPE(r) AS relationship_type, b.prop_2 AS target_value LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE a.prop_1 = \"value_1\" OR b.prop_2 = \"value_2\" RETURN a, b LIMIT 5", + "MATCH (a:label_1)-[:edge_1]->(b:label_2) WHERE a.prop_1 = \"value_1\" AND b.prop_2 <> \"value_2\" RETURN a.prop_1 AS source_value, b.prop_2 AS target_value LIMIT 5" +]