package com.eas.client.queries;
import com.eas.client.DatabasesClient;
import com.eas.client.DatabasesClientWithResource;
import com.eas.client.SqlCompiledQuery;
import com.eas.client.SqlQuery;
import com.eas.client.TestConstants;
import com.eas.client.settings.DbConnectionSettings;
import com.eas.script.Scripts;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
* @author pk
*/
public class SqlQueryTest {
public static final String PARAM2_VALUE = "qwerty";
private static final String TWO_PARAMS_QUERY = "select * from ATABLE where FIELD1 > :param1 and FIELD2 = :param2 or FIELD1 < :param1";
private static DatabasesClientWithResource resource;
public SqlQueryTest() {
}
@BeforeClass
public static void init() throws Exception {
String url = System.getProperty(TestConstants.DATASOURCE_URL_1);
if (url == null) {
throw new IllegalStateException(TestConstants.DATASOURCE_URL_1 + TestConstants.PROPERTY_ERROR);
}
String user = System.getProperty(TestConstants.DATASOURCE_USER_1);
if (user == null) {
throw new IllegalStateException(TestConstants.DATASOURCE_USER_1 + TestConstants.PROPERTY_ERROR);
}
String passwd = System.getProperty(TestConstants.DATASOURCE_PASSWORD_1);
if (passwd == null) {
throw new IllegalStateException(TestConstants.DATASOURCE_PASSWORD_1 + TestConstants.PROPERTY_ERROR);
}
String schema = System.getProperty(TestConstants.DATASOURCE_SCHEMA_1);
if (schema == null) {
throw new IllegalStateException(TestConstants.DATASOURCE_SCHEMA_1 + TestConstants.PROPERTY_ERROR);
}
DbConnectionSettings settings = new DbConnectionSettings();
settings.setUrl(url);
settings.setUser(user);
settings.setPassword(passwd);
settings.setSchema(schema);
settings.setMaxConnections(1);
settings.setMaxStatements(1);
resource = new DatabasesClientWithResource(settings);
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void testCreation() {
SqlQuery b = new SqlQuery((DatabasesClient) null);
assertNull(b.getSqlText());
assertTrue(b.getParametersBinds().isEmpty());
b.setSqlText(TWO_PARAMS_QUERY);
assertEquals(b.getSqlText(), TWO_PARAMS_QUERY);
assertTrue(b.getParametersBinds().isEmpty());
b.putParameter("param1", Scripts.NUMBER_TYPE_NAME, 1);
b.putParameter("param2", Scripts.STRING_TYPE_NAME, PARAM2_VALUE);
assertEquals(2, b.getParameters().getParametersCount());
}
@Test
public void testCompiling() throws Exception {
SqlQuery b = new SqlQuery(resource.getClient());
b.setSqlText(TWO_PARAMS_QUERY);
b.putParameter("param1", Scripts.NUMBER_TYPE_NAME, 1);
b.putParameter("param2", Scripts.STRING_TYPE_NAME, PARAM2_VALUE);
SqlCompiledQuery q = b.compile();
assertEquals(q.getSqlClause(), "select * from ATABLE where FIELD1 > ? and FIELD2 = ? or FIELD1 < ?");
assertEquals(3, q.getParameters().getParametersCount());
assertEquals(Scripts.NUMBER_TYPE_NAME, q.getParameters().get(1).getType());
assertEquals(1, q.getParameters().get(1).getValue());
assertEquals(Scripts.STRING_TYPE_NAME, q.getParameters().get(2).getType());
assertEquals(PARAM2_VALUE, q.getParameters().get(2).getValue());
assertEquals(Scripts.NUMBER_TYPE_NAME, q.getParameters().get(3).getType());
assertEquals(1, q.getParameters().get(3).getValue());
}
}