package org.teiid.designer.vdb.dynamic; /* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.when; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.teiid.core.designer.EclipseMock; import org.teiid.core.designer.util.StringConstants; import org.teiid.designer.core.ModelWorkspaceMock; import org.teiid.designer.core.workspace.MockFileBuilder; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.core.workspace.ModelUtil; import org.teiid.designer.core.workspace.ModelWorkspaceException; import org.teiid.designer.core.workspace.ModelWorkspaceManager; import org.teiid.designer.ddl.importer.DdlImporter; import org.teiid.designer.metamodels.core.ModelAnnotation; import org.teiid.designer.metamodels.core.ModelType; import org.teiid.designer.transformation.ddl.TeiidModelToDdlGenerator; /** * */ @SuppressWarnings( {"nls", "javadoc"} ) public class TestModelToDdlGenerator implements StringConstants { private static final String TEIID_DIALECT = "TEIID"; //$NON-NLS-1$ private static final String EMPTY_XMI_CONTENTS = EMPTY_STRING + "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + NEW_LINE + "<xmi:XMI xmi:version=\"2.0\" xmlns:xmi=\"http://www.omg.org/XMI\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:diagram=\"http://www.metamatrix.com/metamodels/Diagram\" " + "xmlns:mmcore=\"http://www.metamatrix.com/metamodels/Core\" " + "xmlns:relational=\"http://www.metamatrix.com/metamodels/Relational\">" + NEW_LINE + "<mmcore:ModelAnnotation xmi:uuid=\"mmuuid:0863dd9d-c34b-4291-9099-0b84910fa4e5\" " + "modelType=\"VIRTUAL\" " + "primaryMetamodelUri=\"http://www.metamatrix.com/metamodels/Relational\"/>" + NEW_LINE + "</xmi:XMI>"; private interface BQT2_TYPE_DDL { String TYPE_INT = "type_int integer OPTIONS(NAMEINSOURCE '\"type_int\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_INTEGER = "type_integer integer OPTIONS(NAMEINSOURCE '\"type_integer\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_SMALLINT = "type_smallint short OPTIONS(NAMEINSOURCE '\"type_smallint\"', NATIVE_TYPE 'smallint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_TINYINT = "type_tinyint byte OPTIONS(NAMEINSOURCE '\"type_tinyint\"', NATIVE_TYPE 'tinyint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL = "type_decimal bigdecimal OPTIONS(NAMEINSOURCE '\"type_decimal\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL_5 = "type_decimal_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_decimal_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL_5_5 = "type_decimal_5_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_decimal_5_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL_PRECISION = "type_double_precision float OPTIONS(NAMEINSOURCE '\"type_double_precision\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_FLOAT = "type_float float OPTIONS(NAMEINSOURCE '\"type_float\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_FLOAT_10 = "type_float_10 float OPTIONS(NAMEINSOURCE '\"type_float_10\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_NUMERIC = "type_numeric bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_NUMERIC_5 = "type_numeric_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_NUMERIC_5_5 = "type_numeric_5_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric_5_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_REAL = "type_real float OPTIONS(NAMEINSOURCE '\"type_real\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_BIT = "type_bit boolean OPTIONS(NAMEINSOURCE '\"type_bit\"', NATIVE_TYPE 'bit', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_CHARACTER = "type_character char(1) OPTIONS(NAMEINSOURCE '\"type_character\"', NATIVE_TYPE 'char', FIXED_LENGTH true)"; String TYPE_CHARACTER_10 = "type_character_10 string(10) OPTIONS(NAMEINSOURCE '\"type_character_10\"', NATIVE_TYPE 'char', FIXED_LENGTH true)"; String TYPE_CHAR = "type_char char(1) OPTIONS(NAMEINSOURCE '\"type_char\"', NATIVE_TYPE 'char', FIXED_LENGTH true)"; String TYPE_CHAR_10 = "type_char_10 string(10) OPTIONS(NAMEINSOURCE '\"type_char_10\"', NATIVE_TYPE 'char', FIXED_LENGTH true)"; String TYPE_NCHAR = "type_nchar string(1) OPTIONS(NAMEINSOURCE '\"type_nchar\"', NATIVE_TYPE 'nchar', FIXED_LENGTH true)"; String TYPE_NCHAR_10 = "type_nchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_nchar_10\"', NATIVE_TYPE 'nchar', FIXED_LENGTH true)"; String TYPE_VARCHAR = "type_varchar string(1) OPTIONS(NAMEINSOURCE '\"type_varchar\"', NATIVE_TYPE 'varchar')"; String TYPE_VARCHAR_10 = "type_varchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_varchar_10\"', NATIVE_TYPE 'varchar')"; String TYPE_LONG_NVARCHAR = "type_long_nvarchar string(1) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH true)"; String TYPE_LONG_NVARCHAR_10 = "type_long_nvarchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar_10\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH true)"; String TYPE_TEXT = "type_text clob(2147483647) OPTIONS(NAMEINSOURCE '\"type_text\"', NATIVE_TYPE 'text', CASE_SENSITIVE 'FALSE', SEARCHABLE 'LIKE_ONLY')"; String TYPE_MONEY = "type_money bigdecimal OPTIONS(NAMEINSOURCE '\"type_money\"', NATIVE_TYPE 'money', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_SMALLMONEY = "type_smallmoney bigdecimal OPTIONS(NAMEINSOURCE '\"type_smallmoney\"', NATIVE_TYPE 'smallmoney', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DATETIME = "type_datetime timestamp OPTIONS(NAMEINSOURCE '\"type_datetime\"', NATIVE_TYPE 'datetime', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_BINARY = "type_binary object(1) OPTIONS(NAMEINSOURCE '\"type_binary\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')"; String TYPE_BINARY_2 = "type_binary_2 object(2) OPTIONS(NAMEINSOURCE '\"type_binary_2\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')"; String TYPE_IMAGE = "type_image blob(2147483647) OPTIONS(NAMEINSOURCE '\"type_image\"', NATIVE_TYPE 'image', CASE_SENSITIVE 'FALSE', SEARCHABLE 'UNSEARCHABLE')"; String TYPE_VARBINARY = "type_varbinary string(1) OPTIONS(NAMEINSOURCE '\"type_varbinary\"', NATIVE_TYPE 'varbinary')"; } private interface EXPECTED_BQT2_TYPE_DDL { String TYPE_INT = "type_int integer OPTIONS(NAMEINSOURCE '\"type_int\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_INTEGER = "type_integer integer OPTIONS(NAMEINSOURCE '\"type_integer\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_SMALLINT = "type_smallint short OPTIONS(NAMEINSOURCE '\"type_smallint\"', NATIVE_TYPE 'smallint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_TINYINT = "type_tinyint byte OPTIONS(NAMEINSOURCE '\"type_tinyint\"', NATIVE_TYPE 'tinyint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL = "type_decimal bigdecimal(1) OPTIONS(NAMEINSOURCE '\"type_decimal\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL_5 = "type_decimal_5 bigdecimal(1) OPTIONS(NAMEINSOURCE '\"type_decimal_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL_5_5 = "type_decimal_5_5 bigdecimal(1) OPTIONS(NAMEINSOURCE '\"type_decimal_5_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DECIMAL_PRECISION = "type_double_precision float OPTIONS(NAMEINSOURCE '\"type_double_precision\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_FLOAT = "type_float float OPTIONS(NAMEINSOURCE '\"type_float\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_FLOAT_10 = "type_float_10 float OPTIONS(NAMEINSOURCE '\"type_float_10\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_NUMERIC = "type_numeric bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_NUMERIC_5 = "type_numeric_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_NUMERIC_5_5 = "type_numeric_5_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric_5_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_REAL = "type_real float OPTIONS(NAMEINSOURCE '\"type_real\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_BIT = "type_bit boolean OPTIONS(NAMEINSOURCE '\"type_bit\"', NATIVE_TYPE 'bit', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_CHARACTER = "type_character char(1) OPTIONS(NAMEINSOURCE '\"type_character\"', NATIVE_TYPE 'char', FIXED_LENGTH 'TRUE')"; String TYPE_CHARACTER_10 = "type_character_10 string(10) OPTIONS(NAMEINSOURCE '\"type_character_10\"', NATIVE_TYPE 'char', FIXED_LENGTH 'TRUE')"; String TYPE_CHAR = "type_char char(1) OPTIONS(NAMEINSOURCE '\"type_char\"', NATIVE_TYPE 'char', FIXED_LENGTH 'TRUE')"; String TYPE_CHAR_10 = "type_char_10 string(10) OPTIONS(NAMEINSOURCE '\"type_char_10\"', NATIVE_TYPE 'char', FIXED_LENGTH 'TRUE')"; String TYPE_NCHAR = "type_nchar string(1) OPTIONS(NAMEINSOURCE '\"type_nchar\"', NATIVE_TYPE 'nchar', FIXED_LENGTH 'TRUE')"; String TYPE_NCHAR_10 = "type_nchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_nchar_10\"', NATIVE_TYPE 'nchar', FIXED_LENGTH 'TRUE')"; String TYPE_VARCHAR = "type_varchar string(1) OPTIONS(NAMEINSOURCE '\"type_varchar\"', NATIVE_TYPE 'varchar')"; String TYPE_VARCHAR_10 = "type_varchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_varchar_10\"', NATIVE_TYPE 'varchar')"; String TYPE_LONG_NVARCHAR = "type_long_nvarchar string(1) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH 'TRUE')"; String TYPE_LONG_NVARCHAR_10 = "type_long_nvarchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar_10\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH 'TRUE')"; String TYPE_TEXT = "type_text clob(2147483647) OPTIONS(NAMEINSOURCE '\"type_text\"', NATIVE_TYPE 'text', CASE_SENSITIVE 'FALSE', SEARCHABLE 'LIKE_ONLY')"; String TYPE_MONEY = "type_money bigdecimal OPTIONS(NAMEINSOURCE '\"type_money\"', NATIVE_TYPE 'money', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_SMALLMONEY = "type_smallmoney bigdecimal OPTIONS(NAMEINSOURCE '\"type_smallmoney\"', NATIVE_TYPE 'smallmoney', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_DATETIME = "type_datetime timestamp OPTIONS(NAMEINSOURCE '\"type_datetime\"', NATIVE_TYPE 'datetime', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')"; String TYPE_BINARY = "type_binary object(1) OPTIONS(NAMEINSOURCE '\"type_binary\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')"; String TYPE_BINARY_2 = "type_binary_2 object(2) OPTIONS(NAMEINSOURCE '\"type_binary_2\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')"; String TYPE_IMAGE = "type_image blob(2147483647) OPTIONS(NAMEINSOURCE '\"type_image\"', NATIVE_TYPE 'image', CASE_SENSITIVE 'FALSE', SEARCHABLE 'UNSEARCHABLE')"; String TYPE_VARBINARY = "type_varbinary string(1) OPTIONS(NAMEINSOURCE '\"type_varbinary\"', NATIVE_TYPE 'varbinary')"; } private String resourceName = "testModel"; private TeiidModelToDdlGenerator generator; private EclipseMock eclipseMock; private ModelWorkspaceMock modelWorkspaceMock; @Before public void setup() throws Exception { generator = new TeiidModelToDdlGenerator(); eclipseMock = new EclipseMock(); modelWorkspaceMock = new ModelWorkspaceMock(eclipseMock); } @After public void tearDown() throws Exception { // Disposes the eclipse mock as well modelWorkspaceMock.dispose(); modelWorkspaceMock = null; eclipseMock = null; } private String removeWhitespace(String value) { value = value.replaceAll("\\s+", SPACE); value = value.replaceAll("\\s\\)", CLOSE_BRACKET); value = value.replaceAll("\\(\\s", OPEN_BRACKET); return value.trim(); } private MockFileBuilder createEmptyXmiFile() throws Exception, IOException { // // Set up the mock resource using a temp file. // In order for it to qualify as a model file, need to copy into it // some preliminary xml so that's its header is identifiable. // MockFileBuilder modelBuilder = new MockFileBuilder(resourceName, XMI); FileWriter writer = null; try { writer = new FileWriter(modelBuilder.getRealFile()); writer.write(EMPTY_XMI_CONTENTS); } finally { if (writer != null) writer.close(); } assertTrue(ModelUtil.isModelFile(modelBuilder.getPath())); return modelBuilder; } private ModelResource createModelResource(String ddl, boolean isVirtual) throws Exception { NullProgressMonitor monitor = new NullProgressMonitor(); MockFileBuilder modelBuilder = createEmptyXmiFile(); IPath path = new Path(File.separator + modelBuilder.getProject().getName() + File.separator + modelBuilder.getName()); when(eclipseMock.workspaceRoot().findMember(path)).thenReturn(modelBuilder.getResourceFile()); when(eclipseMock.workspace().validateName(isA(String.class), anyInt())).thenReturn(Status.OK_STATUS); ModelWorkspaceManager workspaceManager = ModelWorkspaceManager.getModelWorkspaceManager(); ModelResource modelResource = (ModelResource) workspaceManager.findModelWorkspaceItem(modelBuilder.getResourceFile(), true); assertNotNull(modelResource); // // Apply the model annotation, necessary to allow the ddl importer to setModelName() correctly // ModelAnnotation annotation = modelResource.getModelAnnotation(); assertNotNull(annotation); // // Save the model resource just in case // modelResource.save(monitor, false); // // Import the ddl using the ddl importer // DdlImporter importer = new DdlImporter(new IProject[] { modelBuilder.getProject() }); importer.setSpecifiedParser(TEIID_DIALECT); importer.setModelFolder(modelBuilder.getProject()); importer.setModelName(modelBuilder.getName()); if( isVirtual ) { importer.setModelType(ModelType.VIRTUAL_LITERAL); } else { importer.setModelType(ModelType.PHYSICAL_LITERAL); } importer.importDdl(ddl, monitor, 1, new Properties()); assertFalse(importer.noDdlImported()); assertNull(importer.getParseErrorMessage()); importer.save(monitor, 1); assertTrue(importer.getImportStatus().isOK()); ModelResource mResource = modelWorkspaceMock.getModelEditor().findModelResource(modelBuilder.getResourceFile()); assertNotNull(mResource); return mResource; } private String roundTrip(String ddl, boolean isVirtual) throws Exception, ModelWorkspaceException { ModelResource modelResource = createModelResource(ddl, isVirtual); String generatedDdl = generator.generate(modelResource); generatedDdl = removeWhitespace(generatedDdl); return generatedDdl; } @Test public void testSimpleColumns() throws Exception { String ddl = "CREATE VIEW StockPrices (" + NEW_LINE + "symbol string," + NEW_LINE + "price bigdecimal" + NEW_LINE + ") AS SELECT * FROM Stock;"; // TODO // Should these column option clauses be included if all the values are defaults??? String expectedDdl = "CREATE VIEW StockPrices (" + "symbol string" + COMMA + SPACE + "price bigdecimal" + ") AS SELECT * FROM Stock;"; String generatedDdl = roundTrip(ddl, true); assertEquals(expectedDdl, generatedDdl); } @Test public void testColumnProperties() throws Exception { String ddl = "CREATE VIEW StockPrices (" + NEW_LINE + "symbol string(10) NOT NULL AUTO_INCREMENT, " + NEW_LINE + "price bigdecimal(1) DEFAULT 10, " + NEW_LINE + "company string(10) NOT NULL, " + NEW_LINE + "companyID string(10) NOT NULL INDEX," + NEW_LINE + "CONSTRAINT STOCK_PK PRIMARY KEY(symbol)," + NEW_LINE + "CONSTRAINT STOCK_UC UNIQUE(company)" + NEW_LINE + ") AS SELECT * FROM Stock;"; String expectedDdl = "CREATE VIEW StockPrices (" + "symbol string(10) NOT NULL AUTO_INCREMENT" + COMMA + SPACE + "price bigdecimal(1) DEFAULT '10'" + COMMA + SPACE + "company string(10) NOT NULL" + COMMA + SPACE + "companyID string(10) NOT NULL INDEX" + COMMA + SPACE + "CONSTRAINT STOCK_PK PRIMARY KEY(symbol)" + COMMA + SPACE + "CONSTRAINT STOCK_UC UNIQUE(company)" + ") AS SELECT * FROM Stock;"; String generatedDdl = roundTrip(ddl, true); assertEquals(expectedDdl, generatedDdl); } // @Test // public void testBqt2ColumnProperties() throws Exception { // String ddl = "CREATE FOREIGN TABLE ALL_TYPES (" + // "type_int integer OPTIONS(NAMEINSOURCE '\"type_int\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_integer integer OPTIONS(NAMEINSOURCE '\"type_integer\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_smallint short OPTIONS(NAMEINSOURCE '\"type_smallint\"', NATIVE_TYPE 'smallint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_tinyint byte OPTIONS(NAMEINSOURCE '\"type_tinyint\"', NATIVE_TYPE 'tinyint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_decimal bigdecimal OPTIONS(NAMEINSOURCE '\"type_decimal\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_decimal_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_decimal_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_decimal_5_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_decimal_5_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_double_precision float OPTIONS(NAMEINSOURCE '\"type_double_precision\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_float float OPTIONS(NAMEINSOURCE '\"type_float\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_float_10 float OPTIONS(NAMEINSOURCE '\"type_float_10\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_numeric bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_numeric_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_numeric_5_5 bigdecimal OPTIONS(NAMEINSOURCE '\"type_numeric_5_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_real float OPTIONS(NAMEINSOURCE '\"type_real\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_bit boolean OPTIONS(NAMEINSOURCE '\"type_bit\"', NATIVE_TYPE 'bit', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_character char(1) OPTIONS(NAMEINSOURCE '\"type_character\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_character_10 string(10) OPTIONS(NAMEINSOURCE '\"type_character_10\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_char char(1) OPTIONS(NAMEINSOURCE '\"type_char\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_char_10 string(10) OPTIONS(NAMEINSOURCE '\"type_char_10\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_nchar string(1) OPTIONS(NAMEINSOURCE '\"type_nchar\"', NATIVE_TYPE 'nchar', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_nchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_nchar_10\"', NATIVE_TYPE 'nchar', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_varchar string(1) OPTIONS(NAMEINSOURCE '\"type_varchar\"', NATIVE_TYPE 'varchar')" + COMMA + NEW_LINE + // "type_varchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_varchar_10\"', NATIVE_TYPE 'varchar')" + COMMA + NEW_LINE + // "type_long_nvarchar string(1) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_long_nvarchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar_10\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH true)" + COMMA + NEW_LINE + // "type_text clob(2147483647) OPTIONS(NAMEINSOURCE '\"type_text\"', NATIVE_TYPE 'text', CASE_SENSITIVE 'FALSE', SEARCHABLE 'LIKE_ONLY')" + COMMA + NEW_LINE + // "type_money bigdecimal OPTIONS(NAMEINSOURCE '\"type_money\"', NATIVE_TYPE 'money', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_smallmoney bigdecimal OPTIONS(NAMEINSOURCE '\"type_smallmoney\"', NATIVE_TYPE 'smallmoney', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_datetime timestamp OPTIONS(NAMEINSOURCE '\"type_datetime\"', NATIVE_TYPE 'datetime', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + NEW_LINE + // "type_binary object(1) OPTIONS(NAMEINSOURCE '\"type_binary\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')" + COMMA + NEW_LINE + // "type_binary_2 object(2) OPTIONS(NAMEINSOURCE '\"type_binary_2\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')" + COMMA + NEW_LINE + // "type_image blob(2147483647) OPTIONS(NAMEINSOURCE '\"type_image\"', NATIVE_TYPE 'image', CASE_SENSITIVE 'FALSE', SEARCHABLE 'UNSEARCHABLE')" + COMMA + NEW_LINE + // "type_varbinary string(1) OPTIONS(NAMEINSOURCE '\"type_varbinary\"', NATIVE_TYPE 'varbinary')" //") OPTIONS(NAMEINSOURCE '\"bqt2\".\"BQT2\".\"ALL_TYPES\"')"; // String expectedDdl = "CREATE FOREIGN TABLE ALL_TYPES (" + // "type_int integer OPTIONS(NAMEINSOURCE '\"type_int\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_integer integer OPTIONS(NAMEINSOURCE '\"type_integer\"', NATIVE_TYPE 'int', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_smallint short OPTIONS(NAMEINSOURCE '\"type_smallint\"', NATIVE_TYPE 'smallint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_tinyint byte OPTIONS(NAMEINSOURCE '\"type_tinyint\"', NATIVE_TYPE 'tinyint', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_decimal bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_decimal\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_decimal_5 bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_decimal_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_decimal_5_5 bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_decimal_5_5\"', NATIVE_TYPE 'decimal', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_double_precision float OPTIONS(NAMEINSOURCE '\"type_double_precision\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_float float OPTIONS(NAMEINSOURCE '\"type_float\"', NATIVE_TYPE 'float', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_float_10 float OPTIONS(NAMEINSOURCE '\"type_float_10\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_numeric bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_numeric\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_numeric_5 bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_numeric_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_numeric_5_5 bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_numeric_5_5\"', NATIVE_TYPE 'numeric', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_real float OPTIONS(NAMEINSOURCE '\"type_real\"', NATIVE_TYPE 'real', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_bit boolean OPTIONS(NAMEINSOURCE '\"type_bit\"', NATIVE_TYPE 'bit', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_character char(1) OPTIONS(NAMEINSOURCE '\"type_character\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + SPACE + // "type_character_10 string(10) OPTIONS(NAMEINSOURCE '\"type_character_10\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + SPACE + // "type_char char(1) OPTIONS(NAMEINSOURCE '\"type_char\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + SPACE + // "type_char_10 string(10) OPTIONS(NAMEINSOURCE '\"type_char_10\"', NATIVE_TYPE 'char', FIXED_LENGTH true)" + COMMA + SPACE + // "type_nchar string(1) OPTIONS(NAMEINSOURCE '\"type_nchar\"', NATIVE_TYPE 'nchar', FIXED_LENGTH true)" + COMMA + SPACE + // "type_nchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_nchar_10\"', NATIVE_TYPE 'nchar', FIXED_LENGTH true)" + COMMA + SPACE + // "type_varchar string(1) OPTIONS(NAMEINSOURCE '\"type_varchar\"', NATIVE_TYPE 'varchar')" + COMMA + SPACE + // "type_varchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_varchar_10\"', NATIVE_TYPE 'varchar')" + COMMA + SPACE + // "type_long_nvarchar string(1) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH true)" + COMMA + SPACE + // "type_long_nvarchar_10 string(10) OPTIONS(NAMEINSOURCE '\"type_long_nvarchar_10\"', NATIVE_TYPE 'nvarchar', FIXED_LENGTH true)" + COMMA + SPACE + // "type_text clob(2147483647) OPTIONS(NAMEINSOURCE '\"type_text\"', NATIVE_TYPE 'text', CASE_SENSITIVE 'FALSE', SEARCHABLE 'LIKE_ONLY')" + COMMA + SPACE + // "type_money bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_money\"', NATIVE_TYPE 'money', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_smallmoney bigDecimal(1) OPTIONS(NAMEINSOURCE '\"type_smallmoney\"', NATIVE_TYPE 'smallmoney', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_datetime timestamp OPTIONS(NAMEINSOURCE '\"type_datetime\"', NATIVE_TYPE 'datetime', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'ALL_EXCEPT_LIKE')" + COMMA + SPACE + // "type_binary object(1) OPTIONS(NAMEINSOURCE '\"type_binary\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')" + COMMA + SPACE + // "type_binary_2 object(2) OPTIONS(NAMEINSOURCE '\"type_binary_2\"', NATIVE_TYPE 'binary', CASE_SENSITIVE 'FALSE', FIXED_LENGTH 'TRUE', SEARCHABLE 'UNSEARCHABLE')" + COMMA + SPACE + // "type_image blob(2147483647) OPTIONS(NAMEINSOURCE '\"type_image\"', NATIVE_TYPE 'image', CASE_SENSITIVE 'FALSE', SEARCHABLE 'UNSEARCHABLE')" + COMMA + SPACE + // "type_varbinary string(1) OPTIONS(NAMEINSOURCE '\"type_varbinary\"', NATIVE_TYPE 'varbinary')"+ // ") OPTIONS(NAMEINSOURCE '\"bqt2\".\"BQT2\".\"ALL_TYPES\"')"; // // String generatedDdl = roundTrip(ddl, false); // assertEquals(expectedDdl, generatedDdl); // } private void print_2_strings(String str1, String str2) { System.out.println("\n[1] =>> " + str1 ); System.out.println("[2] =>> " + str2 + "\n"); } @Test public void testDdl_TYPE_BINARY() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_BINARY + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_BINARY + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_BINARY_2() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_BINARY_2 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_BINARY_2 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_BIT() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_BIT + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_BIT + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_CHAR() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_CHAR + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_CHAR + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_CHAR_10() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_CHAR_10 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_CHAR_10 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_CHARACTER() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_CHARACTER + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_CHARACTER + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_CHARACTER_10() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_CHARACTER_10 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_CHARACTER_10 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_DATETIME() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_DATETIME + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_DATETIME + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_DECIMAL() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_DECIMAL + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_DECIMAL + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_DECIMAL_5() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_DECIMAL_5 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_DECIMAL_5 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_DECIMAL_5_5() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_DECIMAL_5_5 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_DECIMAL_5_5 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_DECIMAL_PRECISION() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_DECIMAL_PRECISION + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_DECIMAL_PRECISION + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_FLOAT() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_FLOAT + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_FLOAT + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_FLOAT_10() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_FLOAT_10 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_FLOAT_10 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_IMAGE() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_IMAGE + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_IMAGE + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_INT() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_INT + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_INT + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_INTEGER() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_INTEGER + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_INTEGER + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_LONG_NVARCHAR() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_LONG_NVARCHAR + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_LONG_NVARCHAR + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_LONG_NVARCHAR_10() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_LONG_NVARCHAR_10 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_LONG_NVARCHAR_10 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_MONEY() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_MONEY + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_MONEY + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_NCHAR() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_NCHAR + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_NCHAR + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_NCHAR_10() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_NCHAR_10 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_NCHAR_10 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_NUMERIC() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_NUMERIC + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_NUMERIC + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_NUMERIC_5() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_NUMERIC_5 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_NUMERIC_5 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_NUMERIC_5_5() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_NUMERIC_5_5 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_NUMERIC_5_5 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_REAL() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_REAL + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_REAL + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_SMALLINT() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_SMALLINT + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_SMALLINT + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_SMALLMONEY() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_SMALLMONEY + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_SMALLMONEY + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_TEXT() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_TEXT + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_TEXT + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_TINYINT() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_TINYINT + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_TINYINT + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_VARBINARY() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_VARBINARY + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_VARBINARY + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_VARCHAR() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_VARCHAR + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_VARCHAR + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testDdl_TYPE_VARCHAR_10() throws Exception { String ddl = "CREATE FOREIGN TABLE ONE_TYPE (" + BQT2_TYPE_DDL.TYPE_VARCHAR_10 + ");"; String expectedDdl = "CREATE FOREIGN TABLE ONE_TYPE (" + EXPECTED_BQT2_TYPE_DDL.TYPE_VARCHAR_10 + ")"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testFIXED_LENGTH_ON_COLUMN() throws Exception { String ddl = "CREATE FOREIGN TABLE STATUS (" + "STATUS_ID bigdecimal NOT NULL OPTIONS(NAMEINSOURCE '\"STATUS_ID\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE')" + ") OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"STATUS\"')"; String expectedDdl = "CREATE FOREIGN TABLE STATUS (" + "STATUS_ID bigdecimal NOT NULL OPTIONS(NAMEINSOURCE '\"STATUS_ID\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE')" + ") OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"STATUS\"')"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testStatusTable() throws Exception { String ddl = "CREATE FOREIGN TABLE STATUS (" + "\n\tSTATUS_ID bigdecimal NOT NULL OPTIONS(NAMEINSOURCE '\"STATUS_ID\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE')," + "\n\tSTATUS_NAME string(30) OPTIONS(NAMEINSOURCE '\"STATUS_NAME\"', NATIVE_TYPE 'VARCHAR2')," + "\n\tCONSTRAINT PK_STATUS PRIMARY KEY(STATUS_ID)" + ") OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"STATUS\"')"; String expectedDdl = "CREATE FOREIGN TABLE STATUS (STATUS_ID bigdecimal NOT NULL OPTIONS(NAMEINSOURCE '\"STATUS_ID\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE'), " + "STATUS_NAME string(30) OPTIONS(NAMEINSOURCE '\"STATUS_NAME\"', NATIVE_TYPE 'VARCHAR2'), " + "CONSTRAINT PK_STATUS PRIMARY KEY(STATUS_ID)) OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"STATUS\"')"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } @Test public void testFKUseCase() throws Exception { String ddl = "CREATE FOREIGN TABLE STATUS (" + "\n\tSTATUS_ID bigdecimal NOT NULL OPTIONS(NAMEINSOURCE '\"STATUS_ID\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE')," + "\n\tSTATUS_NAME string(30) OPTIONS(NAMEINSOURCE '\"STATUS_NAME\"', NATIVE_TYPE 'VARCHAR2')," + "\n\tCONSTRAINT PK_STATUS PRIMARY KEY(STATUS_ID)" + ") OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"STATUS\"')" + "\n" + "\nCREATE FOREIGN TABLE SUPPLIER (" + "\n\tSUPPLIER_ID string(10) NOT NULL OPTIONS(NAMEINSOURCE '\"SUPPLIER_ID\"', NATIVE_TYPE 'VARCHAR2')," + "\n\tSUPPLIER_NAME string(30) OPTIONS(NAMEINSOURCE '\"SUPPLIER_NAME\"', NATIVE_TYPE 'VARCHAR2')," + "\n\tSUPPLIER_STATUS bigdecimal OPTIONS(NAMEINSOURCE '\"SUPPLIER_STATUS\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE')," + "\n\tSUPPLIER_CITY string(30) OPTIONS(NAMEINSOURCE '\"SUPPLIER_CITY\"', NATIVE_TYPE 'VARCHAR2')," + "\n\tSUPPLIER_STATE string(2) OPTIONS(NAMEINSOURCE '\"SUPPLIER_STATE\"', NATIVE_TYPE 'VARCHAR2')," + "\n\tCONSTRAINT PK_SUPPLIER PRIMARY KEY(SUPPLIER_ID)," + "\n\tCONSTRAINT FK_SPLIER_STATS FOREIGN KEY(SUPPLIER_STATUS) REFERENCES STATUS(STATUS_ID)" + "\n) OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"SUPPLIER\"')"; String expectedDdl = "CREATE FOREIGN TABLE STATUS (" + "STATUS_ID bigdecimal NOT NULL OPTIONS(NAMEINSOURCE '\"STATUS_ID\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE'), " + "STATUS_NAME string(30) OPTIONS(NAMEINSOURCE '\"STATUS_NAME\"', NATIVE_TYPE 'VARCHAR2'), " + "CONSTRAINT PK_STATUS PRIMARY KEY(STATUS_ID)" + ") OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"STATUS\"') " + "CREATE FOREIGN TABLE SUPPLIER (" + "SUPPLIER_ID string(10) NOT NULL OPTIONS(NAMEINSOURCE '\"SUPPLIER_ID\"', NATIVE_TYPE 'VARCHAR2'), " + "SUPPLIER_NAME string(30) OPTIONS(NAMEINSOURCE '\"SUPPLIER_NAME\"', NATIVE_TYPE 'VARCHAR2'), " + "SUPPLIER_STATUS bigdecimal OPTIONS(NAMEINSOURCE '\"SUPPLIER_STATUS\"', NATIVE_TYPE 'NUMBER', FIXED_LENGTH 'TRUE'), " + "SUPPLIER_CITY string(30) OPTIONS(NAMEINSOURCE '\"SUPPLIER_CITY\"', NATIVE_TYPE 'VARCHAR2'), " + "SUPPLIER_STATE string(2) OPTIONS(NAMEINSOURCE '\"SUPPLIER_STATE\"', NATIVE_TYPE 'VARCHAR2'), " + "CONSTRAINT PK_SUPPLIER PRIMARY KEY(SUPPLIER_ID), " + "CONSTRAINT FK_SPLIER_STATS FOREIGN KEY(SUPPLIER_STATUS) REFERENCES STATUS(STATUS_ID)) OPTIONS(NAMEINSOURCE '\"PARTSSUPPLIER\".\"SUPPLIER\"')"; String generatedDdl = roundTrip(ddl, false); assertEquals(expectedDdl, generatedDdl); } }