use of org.apache.hop.core.database.Database in project hop by apache.
the class PGBulkLoaderMeta method getRequiredFields.
@Override
public IRowMeta getRequiredFields(IVariables variables) throws HopException {
String realTableName = variables.resolve(tableName);
String realSchemaName = variables.resolve(schemaName);
if (databaseMeta != null) {
Database db = new Database(loggingObject, variables, databaseMeta);
try {
db.connect();
if (!Utils.isEmpty(realTableName)) {
String schemaTable = databaseMeta.getQuotedSchemaTableCombination(variables, realSchemaName, realTableName);
// Check if this table exists...
if (db.checkTableExists(realSchemaName, realTableName)) {
return db.getTableFields(schemaTable);
} else {
throw new HopException(BaseMessages.getString(PKG, "GPBulkLoaderMeta.Exception.TableNotFound"));
}
} else {
throw new HopException(BaseMessages.getString(PKG, "GPBulkLoaderMeta.Exception.TableNotSpecified"));
}
} catch (Exception e) {
throw new HopException(BaseMessages.getString(PKG, "GPBulkLoaderMeta.Exception.ErrorGettingFields"), e);
} finally {
db.disconnect();
}
} else {
throw new HopException(BaseMessages.getString(PKG, "GPBulkLoaderMeta.Exception.ConnectionNotDefined"));
}
}
use of org.apache.hop.core.database.Database in project hop by apache.
the class PGBulkLoaderTest method testDBNameNOTOverridden_IfDbNameOverrideEmpty.
@Test
public void testDBNameNOTOverridden_IfDbNameOverrideEmpty() throws Exception {
// Db Name Override is empty
PGBulkLoaderMeta pgBulkLoaderMock = getPgBulkLoaderMock(DB_NAME_EMPTY);
Database database = pgBulkLoader.getDatabase(pgBulkLoader, pgBulkLoaderMock);
assertNotNull(database);
// Verify DB name is NOT overridden
assertEquals(CONNECTION_DB_NAME, database.getDatabaseMeta().getDatabaseName());
// Check additionally other connection information
assertEquals(CONNECTION_NAME, database.getDatabaseMeta().getName());
assertEquals(CONNECTION_DB_HOST, database.getDatabaseMeta().getHostname());
assertEquals(CONNECTION_DB_PORT, database.getDatabaseMeta().getPort());
assertEquals(CONNECTION_DB_USERNAME, database.getDatabaseMeta().getUsername());
assertEquals(CONNECTION_DB_PASSWORD, database.getDatabaseMeta().getPassword());
}
use of org.apache.hop.core.database.Database in project hop by apache.
the class PGBulkLoaderTest method testDBNameNOTOverridden_IfDbNameOverrideNull.
@Test
public void testDBNameNOTOverridden_IfDbNameOverrideNull() throws Exception {
// Db Name Override is null
PGBulkLoaderMeta pgBulkLoaderMock = getPgBulkLoaderMock(null);
Database database = pgBulkLoader.getDatabase(pgBulkLoader, pgBulkLoaderMock);
assertNotNull(database);
// Verify DB name is NOT overridden
assertEquals(CONNECTION_DB_NAME, database.getDatabaseMeta().getDatabaseName());
// Check additionally other connection information
assertEquals(CONNECTION_NAME, database.getDatabaseMeta().getName());
assertEquals(CONNECTION_DB_HOST, database.getDatabaseMeta().getHostname());
assertEquals(CONNECTION_DB_PORT, database.getDatabaseMeta().getPort());
assertEquals(CONNECTION_DB_USERNAME, database.getDatabaseMeta().getUsername());
assertEquals(CONNECTION_DB_PASSWORD, database.getDatabaseMeta().getPassword());
}
use of org.apache.hop.core.database.Database in project hop by apache.
the class LocalPipelineEngine method prepareExecution.
@Override
public void prepareExecution() throws HopException {
if (!(pipelineRunConfiguration.getEngineRunConfiguration() instanceof LocalPipelineRunConfiguration)) {
throw new HopException("A local pipeline execution expects a local pipeline configuration, not an instance of class " + pipelineRunConfiguration.getEngineRunConfiguration().getClass().getName());
}
LocalPipelineRunConfiguration config = (LocalPipelineRunConfiguration) pipelineRunConfiguration.getEngineRunConfiguration();
int sizeRowsSet = Const.toInt(resolve(config.getRowSetSize()), Const.ROWS_IN_ROWSET);
setRowSetSize(sizeRowsSet);
setSafeModeEnabled(config.isSafeModeEnabled());
setSortingTransformsTopologically(config.isSortingTransformsTopologically());
setGatheringMetrics(config.isGatheringMetrics());
setFeedbackShown(config.isFeedbackShown());
setFeedbackSize(Const.toInt(resolve(config.getFeedbackSize()), Const.ROWS_UPDATE));
// See if we need to enable transactions...
//
IExtensionData parentExtensionData = getParentPipeline();
if (parentExtensionData == null) {
parentExtensionData = getParentWorkflow();
}
String connectionGroup = null;
if (parentExtensionData != null) {
connectionGroup = (String) parentExtensionData.getExtensionDataMap().get(Const.CONNECTION_GROUP);
}
//
if (config.isTransactional() && connectionGroup == null) {
// Store a value in the parent...
//
connectionGroup = getPipelineMeta().getName() + " - " + UUID.randomUUID();
// We also need to commit/rollback at the end of this pipeline...
// We only do this when we created a new group. Never in a child
//
addExecutionFinishedListener((IExecutionFinishedListener<IPipelineEngine>) pipeline -> {
String group = (String) pipeline.getExtensionDataMap().get(Const.CONNECTION_GROUP);
List<Database> databases = DatabaseConnectionMap.getInstance().getDatabases(group);
Result result = pipeline.getResult();
for (Database database : databases) {
try {
if (result.getResult() && !result.isStopped() && result.getNrErrors() == 0) {
try {
database.commit(true);
pipeline.getLogChannel().logBasic("All transactions of database connection '" + database.getDatabaseMeta().getName() + "' were committed at the end of the pipeline!");
} catch (HopDatabaseException e) {
throw new HopException("Error committing database connection " + database.getDatabaseMeta().getName(), e);
}
} else {
try {
database.rollback(true);
pipeline.getLogChannel().logBasic("All transactions of database connection '" + database.getDatabaseMeta().getName() + "' were rolled back at the end of the pipeline!");
} catch (HopDatabaseException e) {
throw new HopException("Error rolling back database connection " + database.getDatabaseMeta().getName(), e);
}
}
} finally {
try {
database.closeConnectionOnly();
pipeline.getLogChannel().logDebug("Database connection '" + database.getDatabaseMeta().getName() + "' closed successfully!");
} catch (HopDatabaseException hde) {
pipeline.getLogChannel().logError("Error disconnecting from database - closeConnectionOnly failed:" + Const.CR + hde.getMessage());
pipeline.getLogChannel().logError(Const.getStackTracker(hde));
}
}
DatabaseConnectionMap.getInstance().removeConnection(group, null, database);
}
});
}
//
if (connectionGroup != null && getExtensionDataMap() != null) {
// Set the connection group for this pipeline
//
getExtensionDataMap().put(Const.CONNECTION_GROUP, connectionGroup);
}
super.prepareExecution();
}
use of org.apache.hop.core.database.Database in project hop by apache.
the class CombinationLookup method init.
@Override
public boolean init() {
if (super.init()) {
data.realSchemaName = resolve(meta.getSchemaName());
data.realTableName = resolve(meta.getTableName());
if (meta.getCacheSize() > 0) {
data.cache = new HashMap<>((int) (meta.getCacheSize() * 1.5));
} else {
data.cache = new HashMap<>();
}
if (meta.getDatabaseMeta() == null) {
logError(BaseMessages.getString(PKG, "CombinationLookup.Init.ConnectionMissing", getTransformName()));
return false;
}
data.db = new Database(this, this, meta.getDatabaseMeta());
try {
data.db.connect();
if (log.isDetailed()) {
logDetailed(BaseMessages.getString(PKG, "CombinationLookup.Log.ConnectedToDB"));
}
data.db.setCommit(meta.getCommitSize());
return true;
} catch (HopDatabaseException dbe) {
logError(BaseMessages.getString(PKG, "CombinationLookup.Log.UnableToConnectDB") + dbe.getMessage());
}
}
return false;
}
Aggregations