package nebula.data.db;
import java.io.StringReader;
import junit.framework.TestCase;
import nebula.data.db.DbConfiguration;
import nebula.data.db.DbSqlHelper;
import nebula.data.db.derby.DerbyConfiguration;
import nebula.lang.Type;
import nebula.lang.TypeLoaderForTest;
public class DbTransactionDataSqlHelperTest extends TestCase {
TypeLoaderForTest loader;
Type t;
DbSqlHelper h;
DbConfiguration config;
protected void setUp() throws Exception {
loader = new TypeLoaderForTest();
config = new DerbyConfiguration("", "", "", "");
super.setUp();
}
protected void tearDown() throws Exception {
try {
config.shutdown();
super.tearDown();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public final void testInlineType() {
//@formatter:off
String text = "" +
"type Person { " +
" !!Name;" +
" !!Test{" +
" !Key Name;" +
" *Core Age;" +
" #Require Age;" +
" ?Ignore Age;" +
" };" +
"};";
//@formatter:on
t = loader.testDefineNebula(new StringReader(text)).get(0);
h = new DbSqlHelper(config, t);
assertEquals("NPerson", h.getTableName());
assertEquals(5, h.userColumns.length);
int i = 0;
assertEquals("Name", h.userColumns[i].fieldName);
assertEquals(true, h.userColumns[i].key);
i++;
assertEquals("TestKey", h.userColumns[i].fieldName);
assertEquals(true, h.userColumns[i].key);
i++;
assertEquals("TestCore", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("TestRequire", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("TestIgnore", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
assertEquals("SELECT count(1) FROM NPerson ", h.builderCount());
assertEquals("CREATE TABLE NPerson(NAME varchar(60) NOT NULL," + "TEST_KEY varchar(60) NOT NULL,"
+ "TEST_CORE bigint," + "TEST_REQUIRE bigint," + "TEST_IGNORE bigint,"
+ "PRIMARY KEY ( NAME,TEST_KEY)," + "TIMESTAMP_ TIMESTAMP)", h.builderCreate());
}
public final void testRefType() {
//@formatter:off
String text = "" +
"type TestPerson { " +
" !Name;" +
" Test{" +
" !Key Name;" +
" *Core Age;" +
" #Require Age;" +
" ?Ignore Age;" +
" };" +
" TestRef;" +
"};";
//@formatter:on
t = loader.testDefineNebula(new StringReader(text)).get(0);
h = new DbSqlHelper(config, t);
assertEquals("NTestPerson", h.getTableName());
int i = 0;
assertEquals("Name", h.userColumns[i].fieldName);
assertEquals(true, h.userColumns[i].key);
i++;
assertEquals("TestKey", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("TestCore", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("TestRequire", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("TestIgnore", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("TestRefKey", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("TestRefCore", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
assertEquals(i + 1, h.userColumns.length);
assertEquals("SELECT count(1) FROM NTestPerson ", h.builderCount());
assertEquals("CREATE TABLE NTestPerson(" + "NAME varchar(60) NOT NULL," + "TEST_KEY varchar(60),"
+ "TEST_CORE bigint," + "TEST_REQUIRE bigint," + "TEST_IGNORE bigint," + "TESTREF_KEY varchar(60),"
+ "TESTREF_CORE varchar(60)," + "PRIMARY KEY ( NAME)," + "TIMESTAMP_ TIMESTAMP)", h.builderCreate());
}
public final void testNestArrayType() {
//@formatter:off
String textRef = "" +
"type Company { " +
" !Rb1 Name;" +
"};";
String text = "" +
"type TestPerson { " +
" !A1 Name;" +
" A2{" +
" !B1 Name;" +
" *B2{" +
" C1 Name;" +
" };" +
" #B3 Company;" +
" %B4 Company;" +
" B5[] Name;" +
" B6[]{" +
" D1 Name;" +
" };" +
" };" +
" A3 Company;" +
" %A4 Company;" +
" A5[] Name;" +
" A6[]{" +
" E1 Name;" +
" E2{" +
" F1 Name;" +
" };" +
" E3 Company;" +
" %E4 Company;" +
" };" +
"};";
//@formatter:on
t = loader.testDefineNebula(new StringReader(textRef)).get(0);
t = loader.testDefineNebula(new StringReader(text)).get(0);
h = new DbSqlHelper(config, t);
assertEquals("NTestPerson", h.getTableName());
int i = 0;
assertEquals("A1", h.userColumns[i].fieldName);
assertEquals(true, h.userColumns[i].key);
i++;
assertEquals("A2B1", h.userColumns[i].fieldName);
assertEquals("A2_B1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A2B2C1", h.userColumns[i].fieldName);
assertEquals("A2_B2C1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A2B3Rb1", h.userColumns[i].fieldName);
assertEquals("A2_B3RB1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A2B4Rb1", h.userColumns[i].fieldName);
assertEquals("A2_B4RB1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A2B5", h.userColumns[i].fieldName);
assertEquals("A2_B5", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A2B6D1", h.userColumns[i].fieldName);
assertEquals("A2B6_D1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A3Rb1", h.userColumns[i].fieldName);
assertEquals("A3_RB1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A4Rb1", h.userColumns[i].fieldName);
assertEquals("A4_RB1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A5", h.userColumns[i].fieldName);
assertEquals("A5", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A6E1", h.userColumns[i].fieldName);
assertEquals("A6_E1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A6E2F1", h.userColumns[i].fieldName);
assertEquals("A6_E2F1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A6E3Rb1", h.userColumns[i].fieldName);
assertEquals("A6_E3RB1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("A6E4Rb1", h.userColumns[i].fieldName);
assertEquals("A6_E4RB1", h.userColumns[i].columnName);
assertEquals(false, h.userColumns[i].key);
assertEquals(i + 1, h.userColumns.length);
assertEquals("SELECT count(1) FROM NTestPerson ", h.builderCount());
//@formatter:off
assertEquals("CREATE TABLE NTestPerson(" +
"A1 varchar(60) NOT NULL," +
"A2_B1 varchar(60)," +
"A2_B2C1 varchar(60)," +
"A2_B3RB1 varchar(60)," +
"A2_B4RB1 varchar(60)," +
"A2_B5 varchar(4000)," +
"A2B6_D1 varchar(4000)," +
"A3_RB1 varchar(60)," +
"A4_RB1 varchar(60)," +
"A5 varchar(4000)," +
"A6_E1 varchar(4000)," +
"A6_E2F1 varchar(4000)," +
"A6_E3RB1 varchar(4000)," +
"A6_E4RB1 varchar(4000)," +
"PRIMARY KEY ( A1)," +
"TIMESTAMP_ TIMESTAMP)",
h.builderCreate());
//@formatter:on
}
public final void testTypse() {
//@formatter:off
String text = "" +
"type TestPerson { " +
" !Name;" +
" Date;" +
" Time;" +
" Datetime;" +
" Timestamp;" +
" Quantity;" +
" Amount;" +
"};";
//@formatter:on
t = loader.testDefineNebula(new StringReader(text)).get(0);
h = new DbSqlHelper(config, t);
assertEquals("NTestPerson", h.getTableName());
int i = 0;
assertEquals("Name", h.userColumns[i].fieldName);
assertEquals(true, h.userColumns[i].key);
i++;
assertEquals("Date", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("Time", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("Datetime", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("Timestamp", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("Quantity", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
i++;
assertEquals("Amount", h.userColumns[i].fieldName);
assertEquals(false, h.userColumns[i].key);
assertEquals(i + 1, h.userColumns.length);
assertEquals("SELECT count(1) FROM NTestPerson ", h.builderCount());
assertEquals("CREATE TABLE NTestPerson(" + "NAME varchar(60) NOT NULL," + "DATE date," + "TIME time,"
+ "DATETIME timestamp," + "TIMESTAMP timestamp," + "QUANTITY bigint," + "AMOUNT numeric(10,2),"
+ "PRIMARY KEY ( NAME)," + "TIMESTAMP_ TIMESTAMP)", h.builderCreate());
}
}