code: package it.unibz.inf.ontop.docker.mysql;
  
  
  import it.unibz.inf.ontop.docker.AbstractVirtualModeTest;
  import it.unibz.inf.ontop.owlapi.OntopOWLEngine;
  import it.unibz.inf.ontop.owlapi.connection.OntopOWLConnection;
  import it.unibz.inf.ontop.owlapi.connection.OntopOWLStatement;
  import org.junit.AfterClass;
  import org.junit.BeforeClass;
  import org.junit.Test;
  import org.semanticweb.owlapi.model.OWLException;
  import org.semanticweb.owlapi.model.OWLOntologyCreationException;
  
  
  /**
   * Class to check the translation of the combination of Optional/Union in SPARQL into Datalog, and finally 
   * SQL
   * @author Minda, Guohui, mrezk
   */
  public class LeftJoin3VirtualTest extends AbstractVirtualModeTest {
  
  	private static final String owlfile = "/mysql/person/person.owl";
  	private static final String obdafile = "/mysql/person/person3.obda";
  	private static final String propertyfile = "/mysql/person/person3.properties";
  
  	private static OntopOWLEngine REASONER;
  	private static OntopOWLConnection CONNECTION;
  
  	@BeforeClass
  	public static void before() throws OWLOntologyCreationException {
  		REASONER = createReasoner(owlfile, obdafile, propertyfile);
  		CONNECTION = REASONER.getConnection();
  	}
  
  	@Override
  	protected OntopOWLStatement createStatement() throws OWLException {
  		return CONNECTION.createStatement();
  	}
  
  	@AfterClass
  	public static void after() throws Exception {
  		CONNECTION.close();
  		REASONER.close();
  	}
  
  	@Test
  	public void testLeftJoin() throws Exception {
  		String query_multi1 = "PREFIX : <http://www.example.org/test#> "
  				+ "SELECT DISTINCT * "
  				+ "WHERE {"
  				+ "  ?p a :Person . "
  				+ "  ?p :name ?name . "
  				+ "  OPTIONAL {?p :nick ?nick} }";
  		countResults(5, query_multi1);
  	}
  
  }
  