Skip to content

Index doesn't work as expected with partial NULL keys #152

@PhantomYdn

Description

@PhantomYdn

ArcadeDB Version: 10.2021

JDK Version: 11

OS: win

The following testcase is failing if executed first time and pretty OK if executed second and etc.

@Test
	public void testDocumentAfterCreation() {
		DocumentType typeRoot = database.getSchema().getOrCreateDocumentType("TestRoot");
		typeRoot.getOrCreateProperty("name", String.class);
		typeRoot.getOrCreateTypeIndex(INDEX_TYPE.FULL_TEXT, true, "name");
		database.command("sql", "delete from TestRoot");
		
		DocumentType typeChild = database.getSchema().getOrCreateDocumentType("TestChild");
		typeChild.setParentTypes(Arrays.asList(typeRoot));
		MutableDocument doc =  database.newDocument("TestChild");
		doc.set("name", "Document Name");
		assertEquals("Document Name", doc.get("name"));
		doc.save();
		assertEquals("Document Name", doc.get("name"));
		try(ResultSet rs = database.query("sql", "select from TestChild where name = :name", CommonUtils.toMap("arg0", "Test2", "name", "Document Name"))) {
			assertTrue(rs.hasNext());
			Document docRetrieved = rs.next().getElement().orElse(null);
			assertEquals("Document Name", docRetrieved.get("name"));
			assertFalse(rs.hasNext());
		}
	}

Type of the index and uniqueness doesn't matter here.

Moreover, slight modification of indexes leads to the testcase which always fail: first, second and etc.

	@Test
	public void testDocumentAfterCreation2() {
		DocumentType typeRoot = database.getSchema().getOrCreateDocumentType("TestRoot2");
		typeRoot.getOrCreateProperty("name", String.class);
		typeRoot.getOrCreateProperty("parent", Type.LINK);
		typeRoot.getOrCreateTypeIndex(INDEX_TYPE.LSM_TREE, true, "name", "parent");
		database.command("sql", "delete from TestRoot2");
		
		DocumentType typeChild = database.getSchema().getOrCreateDocumentType("TestChild2");
		typeChild.setParentTypes(Arrays.asList(typeRoot));
		MutableDocument doc =  database.newDocument("TestChild2");
		doc.set("name", "Document Name");
		assertEquals("Document Name", doc.get("name"));
		doc.save();
		assertEquals("Document Name", doc.get("name"));
		try(ResultSet rs = database.query("sql", "select from TestChild2 where name = :name", CommonUtils.toMap("arg0", "Test2", "name", "Document Name"))) {
			assertTrue(rs.hasNext());
			Document docRetrieved = rs.next().getElement().orElse(null);
			assertEquals("Document Name", docRetrieved.get("name"));
			assertFalse(rs.hasNext());
		}
	}

Both test cases become successful if delete line with the creation of an index.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions