@Test public void testDefaultSettings() throws Exception { // Note - this method should only use native or odbc. // The jndi meta is used for mutations of the meta, and it would // not be threadsafe in a multi-threaded testing environment // (each test run in its own thread). assertEquals(-1, nativeMeta.getDefaultDatabasePort()); assertTrue(nativeMeta.supportsSetCharacterStream()); assertTrue(nativeMeta.supportsAutoInc()); assertEquals("", nativeMeta.getLimitClause(5)); assertEquals(0, nativeMeta.getNotFoundTK(true)); assertEquals("", nativeMeta.getSQLNextSequenceValue("FOO")); assertEquals("", nativeMeta.getSQLCurrentSequenceValue("FOO")); assertEquals("", nativeMeta.getSQLSequenceExists("FOO")); assertTrue(nativeMeta.isFetchSizeSupported()); assertFalse(nativeMeta.needsPlaceHolder()); assertTrue(nativeMeta.supportsSchemas()); assertTrue(nativeMeta.supportsCatalogs()); assertTrue(nativeMeta.supportsEmptyTransactions()); assertEquals("SUM", nativeMeta.getFunctionSum()); assertEquals("AVG", nativeMeta.getFunctionAverage()); assertEquals("MIN", nativeMeta.getFunctionMinimum()); assertEquals("MAX", nativeMeta.getFunctionMaximum()); assertEquals("COUNT", nativeMeta.getFunctionCount()); assertEquals("\"", nativeMeta.getStartQuote()); assertEquals("\"", nativeMeta.getEndQuote()); assertEquals("FOO.BAR", nativeMeta.getSchemaTableCombination("FOO", "BAR")); assertEquals(DatabaseMeta.CLOB_LENGTH, nativeMeta.getMaxTextFieldLength()); assertEquals(DatabaseMeta.CLOB_LENGTH, nativeMeta.getMaxVARCHARLength()); assertTrue(nativeMeta.supportsTransactions()); assertFalse(nativeMeta.supportsSequences()); assertTrue(nativeMeta.supportsBitmapIndex()); assertTrue(nativeMeta.supportsSetLong()); assertArrayEquals(new String[] {}, nativeMeta.getReservedWords()); assertTrue(nativeMeta.quoteReservedWords()); assertFalse(nativeMeta.supportsRepository()); assertArrayEquals(new String[] {"TABLE"}, nativeMeta.getTableTypes()); assertArrayEquals(new String[] {"VIEW"}, nativeMeta.getViewTypes()); assertArrayEquals(new String[] {"SYNONYM"}, nativeMeta.getSynonymTypes()); assertFalse(nativeMeta.useSchemaNameForTableList()); assertTrue(nativeMeta.supportsViews()); assertFalse(nativeMeta.supportsSynonyms()); assertNull(nativeMeta.getSQLListOfProcedures()); assertNull(nativeMeta.getSQLListOfSequences()); assertTrue(nativeMeta.supportsFloatRoundingOnUpdate()); assertNull(nativeMeta.getSQLLockTables(new String[] {"FOO"})); assertNull(nativeMeta.getSQLUnlockTables(new String[] {"FOO"})); assertTrue(nativeMeta.supportsTimeStampToDateConversion()); assertTrue(nativeMeta.supportsBatchUpdates()); assertFalse(nativeMeta.supportsBooleanDataType()); assertFalse(nativeMeta.supportsTimestampDataType()); assertTrue(nativeMeta.preserveReservedCase()); assertTrue(nativeMeta.isDefaultingToUppercase()); Map<String, String> emptyMap = new HashMap<String, String>(); assertEquals(emptyMap, nativeMeta.getExtraOptions()); assertEquals(";", nativeMeta.getExtraOptionSeparator()); assertEquals("=", nativeMeta.getExtraOptionValueSeparator()); assertEquals(";", nativeMeta.getExtraOptionIndicator()); assertTrue(nativeMeta.supportsOptionsInURL()); assertNull(nativeMeta.getExtraOptionsHelpText()); assertTrue(nativeMeta.supportsGetBlob()); assertNull(nativeMeta.getConnectSQL()); assertTrue(nativeMeta.supportsSetMaxRows()); assertFalse(nativeMeta.isUsingConnectionPool()); assertEquals(ConnectionPoolUtil.defaultMaximumNrOfConnections, nativeMeta.getMaximumPoolSize()); assertEquals(ConnectionPoolUtil.defaultInitialNrOfConnections, nativeMeta.getInitialPoolSize()); assertFalse(nativeMeta.isPartitioned()); assertArrayEquals(new PartitionDatabaseMeta[0], nativeMeta.getPartitioningInformation()); Properties emptyProps = new Properties(); assertEquals(emptyProps, nativeMeta.getConnectionPoolingProperties()); assertTrue(nativeMeta.needsToLockAllTables()); assertTrue(nativeMeta.isStreamingResults()); assertFalse(nativeMeta.isQuoteAllFields()); assertFalse(nativeMeta.isForcingIdentifiersToLowerCase()); assertFalse(nativeMeta.isForcingIdentifiersToUpperCase()); assertFalse(nativeMeta.isUsingDoubleDecimalAsSchemaTableSeparator()); assertTrue(nativeMeta.isRequiringTransactionsOnQueries()); assertEquals( "org.pentaho.di.core.database.DatabaseFactory", nativeMeta.getDatabaseFactoryName()); assertNull(nativeMeta.getPreferredSchemaName()); assertFalse(nativeMeta.supportsSequenceNoMaxValueOption()); assertFalse(nativeMeta.requiresCreateTablePrimaryKeyAppend()); assertFalse(nativeMeta.requiresCastToVariousForIsNull()); assertFalse(nativeMeta.isDisplaySizeTwiceThePrecision()); assertTrue(nativeMeta.supportsPreparedStatementMetadataRetrieval()); assertFalse(nativeMeta.supportsResultSetMetadataRetrievalOnly()); assertFalse(nativeMeta.isSystemTable("FOO")); assertTrue(nativeMeta.supportsNewLinesInSQL()); assertNull(nativeMeta.getSQLListOfSchemas()); assertEquals(0, nativeMeta.getMaxColumnsInIndex()); assertTrue(nativeMeta.supportsErrorHandlingOnBatchUpdates()); assertTrue(nativeMeta.isExplorable()); assertNull(nativeMeta.getXulOverlayFile()); assertTrue(nativeMeta.onlySpaces(" \t \n \r ")); assertFalse(nativeMeta.isMySQLVariant()); assertTrue(nativeMeta.canTest()); assertTrue(nativeMeta.requiresName()); assertTrue(nativeMeta.releaseSavepoint()); Variables v = new Variables(); v.setVariable("FOOVARIABLE", "FOOVALUE"); DatabaseMeta dm = new DatabaseMeta(); dm.setDatabaseInterface(nativeMeta); assertEquals("", nativeMeta.getDataTablespaceDDL(v, dm)); assertEquals("", nativeMeta.getIndexTablespaceDDL(v, dm)); assertFalse(nativeMeta.useSafePoints()); assertTrue(nativeMeta.supportsErrorHandling()); assertEquals("'DATA'", nativeMeta.getSQLValue(new ValueMetaString("FOO"), "DATA", null)); assertEquals("'15'", nativeMeta.getSQLValue(new ValueMetaString("FOO"), "15", null)); assertEquals("_", nativeMeta.getFieldnameProtector()); assertEquals("_1ABC_123", nativeMeta.getSafeFieldname("1ABC 123")); BaseDatabaseMeta tmpSC = new ConcreteBaseDatabaseMeta() { @Override public String[] getReservedWords() { return new String[] {"SELECT"}; } }; assertEquals("SELECT_", tmpSC.getSafeFieldname("SELECT")); assertEquals("NOMAXVALUE", nativeMeta.getSequenceNoMaxValueOption()); assertTrue(nativeMeta.supportsAutoGeneratedKeys()); assertNull(nativeMeta.customizeValueFromSQLType(new ValueMetaString("FOO"), null, 0)); assertTrue(nativeMeta.fullExceptionLog(new RuntimeException("xxxx"))); }
@Test public void testGettersSetters() { // Note - this method should *ONLY* use the jndi meta and not the odbc or native ones. // This is the only method in this test class that mutates the meta. jndiMeta.setUsername("FOO"); assertEquals("FOO", jndiMeta.getUsername()); jndiMeta.setPassword("BAR"); assertEquals("BAR", jndiMeta.getPassword()); jndiMeta.setAccessType(DatabaseMeta.TYPE_ACCESS_JNDI); assertEquals("", jndiMeta.getUsername()); assertEquals("", jndiMeta.getPassword()); assertFalse(jndiMeta.isChanged()); jndiMeta.setChanged(true); assertTrue(jndiMeta.isChanged()); jndiMeta.setName("FOO"); assertEquals("FOO", jndiMeta.getName()); assertEquals("FOO", jndiMeta.getDisplayName()); jndiMeta.setName(null); assertNull(jndiMeta.getName()); assertEquals("FOO", jndiMeta.getDisplayName()); jndiMeta.setDisplayName(null); assertNull(jndiMeta.getDisplayName()); jndiMeta.setDatabaseName("FOO"); assertEquals("FOO", jndiMeta.getDatabaseName()); assertEquals("-1", jndiMeta.getDatabasePortNumberString()); jndiMeta.setDatabasePortNumberString("9876"); assertEquals("9876", jndiMeta.getDatabasePortNumberString()); jndiMeta.setDatabasePortNumberString(null); assertEquals( "9876", jndiMeta.getDatabasePortNumberString()); // not sure I agree with this behavior jndiMeta.setHostname("FOO"); assertEquals("FOO", jndiMeta.getHostname()); LongObjectId id = new LongObjectId(9876); jndiMeta.setObjectId(id); assertEquals(id, jndiMeta.getObjectId()); jndiMeta.setServername("FOO"); assertEquals("FOO", jndiMeta.getServername()); jndiMeta.setDataTablespace("FOO"); assertEquals("FOO", jndiMeta.getDataTablespace()); jndiMeta.setIndexTablespace("FOO"); assertEquals("FOO", jndiMeta.getIndexTablespace()); Properties attrs = jndiMeta.getAttributes(); Properties testAttrs = new Properties(); testAttrs.setProperty("FOO", "BAR"); jndiMeta.setAttributes(testAttrs); assertEquals(testAttrs, jndiMeta.getAttributes()); jndiMeta.setAttributes(attrs); // reset attributes back to what they were... jndiMeta.setSupportsBooleanDataType(true); assertTrue(jndiMeta.supportsBooleanDataType()); jndiMeta.setSupportsTimestampDataType(true); assertTrue(jndiMeta.supportsTimestampDataType()); jndiMeta.setPreserveReservedCase(false); assertFalse(jndiMeta.preserveReservedCase()); jndiMeta.addExtraOption("JNDI", "FOO", "BAR"); Map<String, String> expectedOptionsMap = new HashMap<String, String>(); expectedOptionsMap.put("JNDI.FOO", "BAR"); assertEquals(expectedOptionsMap, jndiMeta.getExtraOptions()); jndiMeta.setConnectSQL("SELECT COUNT(*) FROM FOO"); assertEquals("SELECT COUNT(*) FROM FOO", jndiMeta.getConnectSQL()); jndiMeta.setUsingConnectionPool(true); assertTrue(jndiMeta.isUsingConnectionPool()); jndiMeta.setMaximumPoolSize(15); assertEquals(15, jndiMeta.getMaximumPoolSize()); jndiMeta.setInitialPoolSize(5); assertEquals(5, jndiMeta.getInitialPoolSize()); jndiMeta.setPartitioned(true); assertTrue(jndiMeta.isPartitioned()); PartitionDatabaseMeta[] clusterInfo = new PartitionDatabaseMeta[1]; PartitionDatabaseMeta aClusterDef = new PartitionDatabaseMeta("FOO", "BAR", "WIBBLE", "NATTIE"); aClusterDef.setUsername("FOOUSER"); aClusterDef.setPassword("BARPASSWORD"); clusterInfo[0] = aClusterDef; jndiMeta.setPartitioningInformation(clusterInfo); PartitionDatabaseMeta[] gotPartitions = jndiMeta.getPartitioningInformation(); // MB: Can't use arrayEquals because the PartitionDatabaseMeta doesn't have a toString. :( // assertArrayEquals( clusterInfo, gotPartitions ); assertTrue(gotPartitions != null); if (gotPartitions != null) { assertEquals(1, gotPartitions.length); PartitionDatabaseMeta compareWith = gotPartitions[0]; // MB: Can't use x.equals(y) because PartitionDatabaseMeta doesn't override equals... :( assertEquals(aClusterDef.getClass(), compareWith.getClass()); assertEquals(aClusterDef.getDatabaseName(), compareWith.getDatabaseName()); assertEquals(aClusterDef.getHostname(), compareWith.getHostname()); assertEquals(aClusterDef.getPartitionId(), compareWith.getPartitionId()); assertEquals(aClusterDef.getPassword(), compareWith.getPassword()); assertEquals(aClusterDef.getPort(), compareWith.getPort()); assertEquals(aClusterDef.getUsername(), compareWith.getUsername()); } Properties poolProperties = new Properties(); poolProperties.put("FOO", "BAR"); poolProperties.put("BAR", "FOO"); poolProperties.put("ZZZZZZZZZZZZZZ", "Z.Z.Z.Z.Z.Z.Z.Z.a.a.a.a.a.a.a.a.a"); poolProperties.put("TOM", "JANE"); poolProperties.put("AAAAAAAAAAAAA", "BBBBB.BBB.BBBBBBB.BBBBBBBB.BBBBBBBBBBBBBB"); jndiMeta.setConnectionPoolingProperties(poolProperties); Properties compareWithProps = jndiMeta.getConnectionPoolingProperties(); assertEquals(poolProperties, compareWithProps); jndiMeta.setStreamingResults(false); assertFalse(jndiMeta.isStreamingResults()); jndiMeta.setQuoteAllFields(true); jndiMeta.setForcingIdentifiersToLowerCase(true); jndiMeta.setForcingIdentifiersToUpperCase(true); assertTrue(jndiMeta.isQuoteAllFields()); assertTrue(jndiMeta.isForcingIdentifiersToLowerCase()); assertTrue(jndiMeta.isForcingIdentifiersToUpperCase()); jndiMeta.setUsingDoubleDecimalAsSchemaTableSeparator(true); assertTrue(jndiMeta.isUsingDoubleDecimalAsSchemaTableSeparator()); jndiMeta.setPreferredSchemaName("FOO"); assertEquals("FOO", jndiMeta.getPreferredSchemaName()); }