@Before public void setup() { when( unusableDatabaseDialect.getDatabaseType() ).thenReturn( unusableDatabaseType ); when( unusableDatabaseDialect.isUsable() ).thenReturn( false ); when( usableDatabaseDialect.getDatabaseType() ).thenReturn( usableDatabaseType ); when( usableDatabaseDialect.isUsable() ).thenReturn( true ); when( unusableIDialect.getDatabaseType() ).thenReturn( unusableIDialectType ); when( unusableIDialect.getNativeDriver() ).thenReturn( "fake.class" ); when( usableIDialect.getDatabaseType() ).thenReturn( usableIDialectType ); when( usableIDialect.getNativeDriver() ).thenReturn( Object.class.getCanonicalName() ); Function<Class<IDatabaseDialect>, List<IDatabaseDialect>> dialectGetter = mock( Function.class ); databaseDialects = new ArrayList<>( Arrays.asList( unusableDatabaseDialect, unusableIDialect, usableDatabaseDialect, usableIDialect ) ); when( dialectGetter.apply( IDatabaseDialect.class ) ).thenReturn( databaseDialects ); pentahoSystemDatabaseDialectProvider = new PentahoSystemDatabaseDialectProvider( dialectGetter ); }
@Before public void before() throws DatabaseDialectException { when( dialectService.getDialect( connection ) ).thenReturn( driverLocatorDialect ); when( connection.getDatabaseType() ).thenReturn( databaseType ); when( connection.getDatabaseType().getShortName() ).thenReturn( "SomeDBType" ); when( driverLocatorDialect.getNativeDriver() ).thenReturn( nativeDriverName ); when( driverLocatorDialect.getURLWithExtraOptions( connection ) ).thenReturn( jdbcUrl ); when( plainDialect.getNativeDriver() ).thenReturn( nativeDriverName ); when( plainDialect.getURLWithExtraOptions( connection ) ).thenReturn( jdbcUrl ); }
/** * Create a database connection * * @param driver * String name of the driver to use * @param url * String name of the url used to create the connection. * * @return IDatabaseConnection for the given parameters */ @GET @Path( "/createDatabaseConnection" ) @Produces( { APPLICATION_JSON } ) @Facet( name = "Unsupported" ) public IDatabaseConnection createDatabaseConnection( @QueryParam( "driver" ) String driver, @QueryParam( "url" ) String url ) { for ( IDatabaseDialect dialect : dialectService.getDatabaseDialects() ) { if ( dialect.getNativeDriver() != null && dialect.getNativeDriver().equals( driver ) ) { if ( dialect.getNativeJdbcPre() != null && url.startsWith( dialect.getNativeJdbcPre() ) ) { return dialect.createNativeConnection( url ); } } } // if no native driver was found, create a custom dialect object. IDatabaseConnection conn = genericDialect.createNativeConnection( url ); conn.getAttributes().put( GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS, driver ); return conn; }
/** * Will resolve a database type based on the prefix of the jdbc URL, which we assume originated from one of these * classes * * @param urlPrefix * @return */ private IDatabaseType resolveDatabaseType( String urlPrefix ) { DatabaseDialectService databaseDialectService = new DatabaseDialectService( false ); List<IDatabaseDialect> databaseDialects = databaseDialectService.getDatabaseDialects(); String nativePre = null; for ( IDatabaseDialect databaseDialect : databaseDialects ) { // // NOTE - The GenericDatabaseDialect and the AccessDatabaseDialect // both return null for the value of getNativeJdbcPre - so - this // requires a null-check. // // MB // nativePre = databaseDialect.getNativeJdbcPre(); if ( ( nativePre != null ) && ( nativePre.startsWith( urlPrefix ) ) ) { return databaseDialect.getDatabaseType(); } } return null; }
if ( dialect == null || dialect.getDatabaseType() == null ) { throw new DBDatasourceServiceException( Messages.getInstance().getErrorString( "PooledDatasourceHelper.ERROR_0004_UNABLE_TO_POOL_DATASOURCE_NO_DIALECT", databaseConnection.getName() ) ); driverClass = dialect.getNativeDriver(); if ( StringUtils.isEmpty( driverClass ) ) { throw new DBDatasourceServiceException( Messages.getInstance().getErrorString( url = dialect.getURLWithExtraOptions( databaseConnection ); } catch ( DatabaseDialectException e ) { url = null;
private Stream<IDatabaseDialect> filterUsableDialects( Stream<IDatabaseDialect> stream, boolean usableOnly ) { if ( usableOnly ) { return stream.filter( dialect -> { if ( dialect instanceof IDriverLocator ) { return ( (IDriverLocator) dialect ).isUsable(); } else { return ClassUtil.canLoadClass( dialect.getNativeDriver() ); } } ); } return stream; }
/** * Returns database dialect registered to the Pentaho System for specified database type. * * @param usableOnly * @param databaseType * @return database dialect or null. */ @Override public IDatabaseDialect getDialect( boolean usableOnly, IDatabaseType databaseType ) { if ( databaseType == null ) { return null; } Stream<IDatabaseDialect> dialects = getDialectStream().filter( dialect -> dialect.getDatabaseType().equals( databaseType ) ); return filterUsableDialects( dialects, usableOnly ).findFirst().orElse( null ); } }
IDatabaseDialect dialect = dialectService.getDialect( connection ); conn = DriverManager.getConnection( dialect.getURLWithExtraOptions( connection ), connection.getUsername(), connection.getPassword() ); return conn;
@Test public void testDialectWithNoDriverSpecified() throws DBDatasourceServiceException { when( dialectService.getDialect( connection ) ).thenReturn( driverLocatorDialect ); when( driverLocatorDialect.getNativeDriver() ).thenReturn( "" ); try { PooledDatasourceHelper.convert( connection, () -> dialectService ); fail( "Expected exception, driver class not specified in dialect." ); } catch ( Exception e ) { assertThat( e, instanceOf( DBDatasourceServiceException.class ) ); } }
public static SQLConnection getConnection( String connectionName ) throws DatasourceServiceException { IDatabaseConnection connection = null; try { ConnectionServiceImpl service = new ConnectionServiceImpl(); connection = service.getConnectionByName( connectionName ); DatabaseDialectService dialectService = new DatabaseDialectService(); IDatabaseDialect dialect = dialectService.getDialect( connection ); String driverClass = null; if ( connection.getDatabaseType().getShortName().equals( "GENERIC" ) ) { driverClass = connection.getAttributes().get( GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS ); } else { driverClass = dialect.getNativeDriver(); } return new SQLConnection( driverClass, dialect.getURLWithExtraOptions( connection ), connection.getUsername(), connection.getPassword(), null ); } catch ( ConnectionServiceException e1 ) { return null; } catch ( DatabaseDialectException e ) { return null; } }
if ( !StringUtils.isEmpty( dialect.getNativeDriver() ) ) { initDriverClass( basicDatasource, dialect, dialect.getNativeDriver(), databaseConnection.getName() ); } else { basicDatasource.setUrl( dialect.getURLWithExtraOptions( databaseConnection ) ); } catch ( DatabaseDialectException e ) { basicDatasource.setUrl( null );
driverClass = connection.getAttributes().get( GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS ); } else { driverClass = dialect.getNativeDriver(); conn = DriverManager.getConnection( dialect.getURLWithExtraOptions( connection ), connection.getUsername(), connection.getPassword() ); return conn;
driverClass = connection.getAttributes().get( GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS ); } else { driverClass = dialect.getNativeDriver(); } else { pentahoConnection = PentahoConnectionFactory.getConnection( IPentahoConnection.SQL_DATASOURCE, driverClass, dialect.getURLWithExtraOptions( connection ), connection.getUsername(), getConnectionPassword( connection.getName(), connection.getPassword() ), null, this );