Skip to content

Commit

Permalink
Port db.propertySchema() procedure to 3.4
Browse files Browse the repository at this point in the history
  • Loading branch information
SaschaPeukert committed Jul 26, 2018
1 parent 40d29f4 commit a9e2d93
Show file tree
Hide file tree
Showing 45 changed files with 1,420 additions and 19 deletions.
Expand Up @@ -19,6 +19,7 @@
*/
package org.neo4j.internal.kernel.api;

import java.util.Arrays;
import java.util.NoSuchElementException;

/**
Expand Down Expand Up @@ -64,5 +65,21 @@ public long[] all()
{
return EMPTY;
}

@Override
public int hashCode()
{
return Arrays.hashCode( EMPTY );
}

@Override
public boolean equals( Object obj )
{
if ( obj instanceof LabelSet )
{
return ((LabelSet) obj).all().length == 0;
}
return false;
}
};
}
Expand Up @@ -19,6 +19,7 @@
*/
package org.neo4j.internal.kernel.api.helpers;

import java.util.Arrays;
import java.util.Map;

import org.neo4j.internal.kernel.api.LabelSet;
Expand All @@ -32,8 +33,14 @@ class NodeData

NodeData( long id, long[] labels, Map<Integer,Value> properties )
{
if ( labels == null )
{
throw new IllegalArgumentException();
}

this.id = id;
this.labels = labels;
Arrays.sort( labels ); // needed for quick equality check, most of the time, its already sorted anyway
this.properties = properties;
}

Expand All @@ -50,7 +57,7 @@ public int numberOfLabels()
@Override
public int label( int offset )
{
return labels.length;
return (int) labels[offset];
}

@Override
Expand All @@ -71,6 +78,33 @@ public long[] all()
{
return labels;
}

@Override
public int hashCode()
{
return Arrays.hashCode( labels );
}

@Override
public boolean equals( Object obj )
{
if ( obj instanceof LabelSet )
{
long[] input = ((LabelSet) obj).all();

if ( labels == input )
{
return true;
}
if ( input.length != labels.length )
{
return false;
}

return Arrays.equals( labels, input );
}
return false;
}
};
}
}
@@ -0,0 +1,66 @@
/*
* Copyright (c) 2002-2018 "Neo4j,"
* Neo4j Sweden AB [http://neo4j.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.internal.kernel.api.helpers;

import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;

public class NodeDataTest
{
@Test
public void testEqualityOfLabelSets()
{
long[] longsA = new long[]{1L,2L,3L};
long[] longsB = new long[]{3L,2L,1L};
long[] longsC = new long[]{1L,2L,3L,4L};
NodeData a = new NodeData( 1, longsA, null );
NodeData b = new NodeData( 1, longsB, null );
NodeData c = new NodeData( 1, longsC, null );

// self
assertTrue(a.labelSet().equals( a.labelSet() ));

// unordered self
assertTrue(a.labelSet().equals( b.labelSet() ));
assertTrue(b.labelSet().equals( a.labelSet() ));

// other
assertFalse(a.labelSet().equals( c.labelSet() ));
assertFalse(c.labelSet().equals( a.labelSet() ));
}

@Test
public void testHashCodeOfLabelSet()
{
long[] longsA = new long[]{1L,2L,3L};
long[] longsB = new long[]{3L,2L,1L};
long[] longsC = new long[]{1L,2L,3L,4L};
NodeData a = new NodeData( 1, longsA, null );
NodeData b = new NodeData( 1, longsB, null );
NodeData c = new NodeData( 1, longsC, null );

assertEquals( a.labelSet().hashCode(), b.labelSet().hashCode() );
assertNotEquals( a.labelSet().hashCode(), c.labelSet().hashCode() );
}
}
Expand Up @@ -200,6 +200,13 @@ public void resampleOutdatedIndexes()
}
}

@Procedure( name = "db.propertySchema", mode = READ )
@Description( "Show the derived property schema of the data in tabular form." )
public Stream<SchemaInfoResult> propertySchema()
{
return new SchemaCalculator( tx ).calculateTabularResultStream();
}

@Description( "Show the schema of the data." )
@Procedure( name = "db.schema", mode = READ )
public Stream<SchemaProcedure.GraphResult> metaGraph()
Expand Down

0 comments on commit a9e2d93

Please sign in to comment.