RepositoryFederatedServiceTest.java

/*******************************************************************************
 * Copyright (c) 2019 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/
package org.eclipse.rdf4j.repository.sparql.federation;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;

public class RepositoryFederatedServiceTest {

	@Test
	public void testInsertValuesClause() {

		// dummy instance for test
		RepositoryFederatedService inst = new RepositoryFederatedService(null);

		assertEquals(
				"SELECT ?s ?var ?__rowIdx WHERE { VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) } ?s ?p ?var }",
				inst.insertValuesClause("SELECT ?s ?var ?__rowIdx WHERE { ?s ?p ?var }",
						"VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) }"));

		assertEquals(
				"SELECT ?s ?var ?__rowIdx WHERE { VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) }?s ?p ?var}",
				inst.insertValuesClause("SELECT ?s ?var ?__rowIdx WHERE {?s ?p ?var}",
						"VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) }"));

		assertEquals(
				"SELECT ?s ?var ?__rowIdx { VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) } ?s ?p ?varv}",
				inst.insertValuesClause("SELECT ?s ?var ?__rowIdx { ?s ?p ?varv}",
						"VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) }"));

		// test insertion of ?__rowIdx projection
		assertEquals(
				"SELECT ?__rowIdx ?s ?var WHERE { VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) } ?s ?p ?var }",
				inst.insertValuesClause("SELECT ?s ?var WHERE { ?s ?p ?var }",
						"VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) }"));

		assertEquals(
				"SELECT * WHERE { VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) } ?s ?p ?var }",
				inst.insertValuesClause("SELECT * WHERE { ?s ?p ?var }",
						"VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) }"));

		// Query pattern contains "SELECT *" with whitespace, which we do not match
		// => we currently generate an invalid query which is then evaluated using
		// the fallback to simple evaluation
		assertEquals(
				"SELECT ?__rowIdx   * WHERE { VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) } ?s ?p ?var }",
				inst.insertValuesClause("SELECT   * WHERE { ?s ?p ?var }",
						"VALUES (?var ?__rowIdx) { (:val1 1) (:val2 2) }"));
	}
}