package com.w11k.lsql.tests; import com.w11k.lsql.query.RowQuery; import com.w11k.lsql.Row; import com.w11k.lsql.Table; import com.w11k.lsql.converter.predefined.JavaBoolToSqlStringConverter; import com.w11k.lsql.converter.sqltypes.IntConverter; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class RowQueryConverterTest extends AbstractLSqlTest { @Test public void normalColumn() { createTable("CREATE TABLE table1 (id INT PRIMARY KEY , field VARCHAR(10))"); Table table1 = lSql.table("table1"); table1.column("field").setConverter(new JavaBoolToSqlStringConverter("ja", "nein")); lSql.executeRawSql("INSERT INTO table1 (id, field) VALUES (1, 'ja')"); Row row = lSql.executeRawQuery("SELECT * FROM table1").first().get(); assertEquals(row.getBoolean("field"), Boolean.TRUE); } @Test public void aliasedColumn() { JavaBoolToSqlStringConverter converter = new JavaBoolToSqlStringConverter("ja", "nein"); createTable("CREATE TABLE table1 (id INT PRIMARY KEY , field VARCHAR(10))"); Table table1 = lSql.table("table1"); table1.column("field").setConverter(converter); lSql.executeRawSql("INSERT INTO table1 (id, field) VALUES (1, 'ja')"); RowQuery query = lSql.executeRawQuery("SELECT id, field as aaa FROM table1"); // Set converter for aliased column query.addConverter("aaa", converter); Row row = query.first().get(); assertEquals(row.getBoolean("aaa"), Boolean.TRUE); } @Test public void settingNullAsConverterUsesTypeBasedConverter() { createTable("CREATE TABLE table1 (id INT PRIMARY KEY , field INT)"); lSql.executeRawSql("INSERT INTO table1 (id, field) VALUES (1, 2)"); RowQuery query = lSql.executeRawQuery("SELECT id, field as aaa FROM table1"); // Set converter for aliased column query.addConverter("aaa", null); Row row = query.first().get(); assertEquals(row.getInt("aaa"), new Integer(2)); } @Test(expectedExceptions = IllegalStateException.class) public void failOnMissingConverter() { createTable("CREATE TABLE table1 (id INT PRIMARY KEY , field INT)"); lSql.executeRawSql("INSERT INTO table1 (id, field) VALUES (1, 2)"); RowQuery query = lSql.executeRawQuery("SELECT id, field as aaa FROM table1"); query.first().get(); } @Test public void configSettingsToUseColumnTypeForConverter() { createTable("CREATE TABLE table1 (id INT PRIMARY KEY , field INT)"); lSql.executeRawSql("INSERT INTO table1 (id, field) VALUES (1, 2)"); RowQuery query = lSql.executeRawQuery("SELECT id, field as aaa FROM table1"); Row row; try { lSql.getConfig().setUseColumnTypeForConverterLookupInQueries(true); row = query.first().get(); } finally { lSql.getConfig().setUseColumnTypeForConverterLookupInQueries(false); } assertEquals(row.getInt("aaa"), new Integer(2)); } @Test public void aliasedColumnForAggregationFunction() { createTable("CREATE TABLE table1 (name TEXT, age INT)"); lSql.executeRawSql("INSERT INTO table1 (name, age) VALUES ('cus1', 20)"); lSql.executeRawSql("INSERT INTO table1 (name, age) VALUES ('cus1', 20)"); RowQuery query = lSql.executeRawQuery("SELECT count(*) AS c FROM table1"); query.addConverter("c", IntConverter.INSTANCE); Row row = query.first().get(); assertEquals(row.getInt("c"), (Integer) 2); } @Test public void canUseCalculatedColumnsTogetherWithNormalColumnsOneTable() { createTable("CREATE TABLE table1 (id INT PRIMARY KEY, name TEXT, age INT)"); lSql.executeRawSql("INSERT INTO table1 (id, name, age) VALUES (1, 'cus1', 20)"); RowQuery query = lSql.executeRawQuery("SELECT id, name, age, count(*) AS c FROM table1 GROUP BY id;"); query.addConverter("c", IntConverter.INSTANCE); Row row = query.first().get(); assertEquals(row.getString("name"), "cus1"); assertEquals(row.getInt("age"), (Integer) 20); assertEquals(row.getInt("c"), (Integer) 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void failOnUnusedConverter() { createTable("CREATE TABLE table1 (id INT PRIMARY KEY , field INT)"); lSql.executeRawSql("INSERT INTO table1 (id, field) VALUES (1, 2)"); RowQuery query = lSql.executeRawQuery("SELECT id, field FROM table1"); query.addConverter("aaa", null); query.first().get(); } }