From ecf4f6e7939b03e61504ff2a29bafab42648fbb7 Mon Sep 17 00:00:00 2001 From: Pontus Melke Date: Wed, 16 May 2018 09:45:26 +0200 Subject: [PATCH] Move slice to ListValue --- .../commands/expressions/ListSlice.scala | 11 +++++------ .../java/org/neo4j/values/virtual/ListValue.java | 15 +++++++++++++++ .../org/neo4j/values/virtual/VirtualValues.java | 14 -------------- .../org/neo4j/values/virtual/ListSliceTest.java | 9 ++++----- .../java/org/neo4j/values/virtual/ListTest.java | 4 ++-- 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/commands/expressions/ListSlice.scala b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/commands/expressions/ListSlice.scala index 985bd91dead19..374e56fb15d5a 100644 --- a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/commands/expressions/ListSlice.scala +++ b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/commands/expressions/ListSlice.scala @@ -19,9 +19,8 @@ */ package org.neo4j.cypher.internal.runtime.interpreted.commands.expressions -import org.neo4j.cypher.internal.runtime.interpreted.ExecutionContext -import org.neo4j.cypher.internal.runtime.interpreted.{CastSupport, ListSupport} import org.neo4j.cypher.internal.runtime.interpreted.pipes.QueryState +import org.neo4j.cypher.internal.runtime.interpreted.{CastSupport, ExecutionContext, ListSupport} import org.neo4j.values.AnyValue import org.neo4j.values.storable.{NumberValue, Values} import org.neo4j.values.virtual.{ListValue, VirtualValues} @@ -47,17 +46,17 @@ case class ListSlice(collection: Expression, from: Option[Expression], to: Optio case (Some(fromValue), Some(toValue)) => val size = collectionValue.size if (fromValue >= 0 && toValue >= 0) - VirtualValues.slice(collectionValue, fromValue, toValue) + collectionValue.slice(fromValue, toValue) else if (fromValue >= 0) { val end = size + toValue - VirtualValues.slice(collectionValue, fromValue, end) + collectionValue.slice(fromValue, end) } else if (toValue >= 0) { val start = size + fromValue - VirtualValues.slice(collectionValue, start, toValue) + collectionValue.slice(start, toValue) } else { val start = size + fromValue val end = size + toValue - VirtualValues.slice(collectionValue, start, end) + collectionValue.slice(start, end) } } } diff --git a/community/values/src/main/java/org/neo4j/values/virtual/ListValue.java b/community/values/src/main/java/org/neo4j/values/virtual/ListValue.java index 3a1bb2ed48c6a..5d66b368466f7 100644 --- a/community/values/src/main/java/org/neo4j/values/virtual/ListValue.java +++ b/community/values/src/main/java/org/neo4j/values/virtual/ListValue.java @@ -35,6 +35,7 @@ import static org.neo4j.values.storable.Values.NO_VALUE; import static org.neo4j.values.virtual.ArrayHelpers.containsNull; +import static org.neo4j.values.virtual.VirtualValues.EMPTY_LIST; public abstract class ListValue extends VirtualValue implements SequenceValue, Iterable { @@ -896,4 +897,18 @@ public ListValue dropNoValues() { return new DropNoValuesListValue( this ); } + + public ListValue slice( int from, int to ) + { + int f = Math.max( from, 0 ); + int t = Math.min( to, size() ); + if ( f > t ) + { + return EMPTY_LIST; + } + else + { + return new ListSlice( this, f, t ); + } + } } diff --git a/community/values/src/main/java/org/neo4j/values/virtual/VirtualValues.java b/community/values/src/main/java/org/neo4j/values/virtual/VirtualValues.java index 454038ac2ffa4..1176bba98e9d9 100644 --- a/community/values/src/main/java/org/neo4j/values/virtual/VirtualValues.java +++ b/community/values/src/main/java/org/neo4j/values/virtual/VirtualValues.java @@ -63,20 +63,6 @@ public static ListValue fromArray( ArrayValue arrayValue ) return new ListValue.ArrayValueListValue( arrayValue ); } - public static ListValue slice( ListValue list, int from, int to ) - { - int f = Math.max( from, 0 ); - int t = Math.min( to, list.size() ); - if ( f > t ) - { - return EMPTY_LIST; - } - else - { - return new ListValue.ListSlice( list, f, t ); - } - } - public static ListValue drop( ListValue list, int n ) { int start = Math.max( 0, Math.min( n, list.size() ) ); diff --git a/community/values/src/test/java/org/neo4j/values/virtual/ListSliceTest.java b/community/values/src/test/java/org/neo4j/values/virtual/ListSliceTest.java index 3ce1d57281ed0..a8d23f7985c56 100644 --- a/community/values/src/test/java/org/neo4j/values/virtual/ListSliceTest.java +++ b/community/values/src/test/java/org/neo4j/values/virtual/ListSliceTest.java @@ -27,7 +27,6 @@ import static org.neo4j.values.virtual.VirtualValues.EMPTY_LIST; import static org.neo4j.values.virtual.VirtualValues.drop; import static org.neo4j.values.virtual.VirtualValues.list; -import static org.neo4j.values.virtual.VirtualValues.slice; import static org.neo4j.values.virtual.VirtualValues.take; public class ListSliceTest @@ -40,7 +39,7 @@ public void shouldSliceList() longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When - ListValue slice = slice( inner, 2, 4 ); + ListValue slice = inner.slice(2, 4 ); // Then ListValue expected = list( longValue( 7L ), longValue( 8L ) ); @@ -57,7 +56,7 @@ public void shouldReturnEmptyListIfEmptyRange() longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When - ListValue slice = slice( inner, 4, 2 ); + ListValue slice = inner.slice( 4, 2 ); // Then assertEquals( slice, EMPTY_LIST ); @@ -71,7 +70,7 @@ public void shouldHandleExceedingRange() longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When - ListValue slice = slice( inner, 2, 400000 ); + ListValue slice = inner.slice( 2, 400000 ); // Then ListValue expected = @@ -89,7 +88,7 @@ public void shouldHandleNegativeStart() longValue( 8L ), longValue( 9L ), longValue( 10L ), longValue( 11L ) ); // When - ListValue slice = slice( inner, -2, 400000 ); + ListValue slice = inner.slice( -2, 400000 ); // Then assertEquals( inner, slice ); diff --git a/community/values/src/test/java/org/neo4j/values/virtual/ListTest.java b/community/values/src/test/java/org/neo4j/values/virtual/ListTest.java index 5d63b36c3cfab..7f27042b2b74f 100644 --- a/community/values/src/test/java/org/neo4j/values/virtual/ListTest.java +++ b/community/values/src/test/java/org/neo4j/values/virtual/ListTest.java @@ -225,7 +225,7 @@ public void shouldRecurseAndCoerce() longValue( 4L ), longValue( 7L ), NO_VALUE ).dropNoValues(), - VirtualValues.slice( list( -2L, 1L, 4L, 7L, 10L ), 1, 4 ), + list( -2L, 1L, 4L, 7L, 10L ).slice( 1, 4 ), VirtualValues.drop( list( -2L, 1L, 4L, 7L ), 1 ), VirtualValues.take( list( 1L, 4L, 7L, 10L, 13L ), 3 ), VirtualValues.reverse( list( 7L, 4L, 1L ) ), @@ -243,7 +243,7 @@ public void shouldRecurseAndCoerce() longValue( 5L ), longValue( 7L ), NO_VALUE ).dropNoValues(), - VirtualValues.slice( list( -2L, 1L, 5L, 8L, 11L ), 1, 4 ), + list( -2L, 1L, 5L, 8L, 11L ).slice( 1, 4 ), VirtualValues.drop( list( -2L, 6L, 9L, 12L ), 1 ), VirtualValues.take( list( 7L, 10L, 13L, 10L, 13L ), 3 ), VirtualValues.reverse( list( 15L, 12L, 9L ) ),