use of org.knime.core.node.port.database.DatabaseUtility in project knime-core by knime.
the class DBDropTableNodeModel method execute.
/**
* {@inheritDoc}
*/
@Override
protected PortObject[] execute(final PortObject[] inObjects, final ExecutionContext exec) throws Exception {
exec.setMessage("Droping table");
final DatabaseConnectionPortObject incomingConnection = (DatabaseConnectionPortObject) inObjects[0];
final CredentialsProvider cp = getCredentialsProvider();
final DatabaseConnectionSettings connSettings = incomingConnection.getConnectionSettings(cp);
final DatabaseUtility dbUtility = connSettings.getUtility();
final StatementManipulator manipulator = dbUtility.getStatementManipulator();
final String table2Drop = m_tableName.getStringValue();
try {
if (m_failIfNotExists.getBooleanValue() || connSettings.execute(cp, conn -> {
return dbUtility.tableExists(conn, table2Drop);
})) {
connSettings.execute(manipulator.dropTable(table2Drop, m_cascade.getBooleanValue()), cp);
exec.setMessage("Table " + table2Drop + " sucessful droped");
} else {
exec.setMessage("Table " + table2Drop + " does not exist in db");
}
} catch (SQLException ex) {
Throwable cause = ExceptionUtils.getRootCause(ex);
if (cause == null) {
cause = ex;
}
throw new InvalidSettingsException("Error while validating drop statement: " + cause.getMessage(), ex);
}
return inObjects;
}
use of org.knime.core.node.port.database.DatabaseUtility in project knime-core by knime.
the class DBGroupByNodeModel2 method createOutSpec.
/**
* @param inSpec Spec of the input table
* @param manipulator
* @param checkRetrieveMetadata
* @return Spec of the output table
* @throws InvalidSettingsException if settings do not match the input specification
*/
private DataTableSpec createOutSpec(final DataTableSpec inSpec, final DatabaseConnectionSettings settings, final String query, final StatementManipulator manipulator, final boolean ignoreExceptions) throws InvalidSettingsException {
// Try get spec from database
try {
DatabaseQueryConnectionSettings querySettings = new DatabaseQueryConnectionSettings(settings, query);
DBReader conn = querySettings.getUtility().getReader(querySettings);
return conn.getDataTableSpec(getCredentialsProvider());
} catch (SQLException e) {
NodeLogger.getLogger(getClass()).info("Could not determine table spec from database, trying to guess now", e);
if (!ignoreExceptions) {
throw new InvalidSettingsException("Error in automatically build sql statement: " + e.getMessage());
}
// Otherwise guess spec
}
final List<DataColumnSpec> colSpecs = new ArrayList<>();
// Add all group by columns
for (String col : m_groupByCols.getIncludeList()) {
final DataColumnSpec columnSpec = inSpec.getColumnSpec(col);
if (columnSpec == null) {
throw new InvalidSettingsException("Group column '" + col + "' not found in input table");
}
colSpecs.add(columnSpec);
}
if (m_addCountStar.getBooleanValue()) {
colSpecs.add(new DataColumnSpecCreator(manipulator.getValidColumnName(m_countStarColName.getStringValue()), LongCell.TYPE).createSpec());
}
final ColumnNamePolicy columnNamePolicy = ColumnNamePolicy.getPolicy4Label(m_columnNamePolicy.getStringValue());
// Add aggregated columns
for (int i = 0; i < m_aggregationFunction2Use.size(); i++) {
final DBColumnAggregationFunctionRow row = m_aggregationFunction2Use.get(i);
final String col = row.getColumnSpec().getName();
final String methodId = row.getFunction().getId();
if (inSpec.getColumnSpec(col) == null) {
throw new InvalidSettingsException("Column '" + col + "' for aggregation function " + row.getFunction().getLabel() + " does not exist");
}
final DatabaseUtility databaseUtility = settings.getUtility();
final DBAggregationFunction function = databaseUtility.getAggregationFunction(methodId);
// Get type of column after aggregation
final DataType type = function.getType(inSpec.getColumnSpec(col).getType());
colSpecs.add(new DataColumnSpecCreator(manipulator.getValidColumnName(generateColumnName(columnNamePolicy, row)), type).createSpec());
}
return new DataTableSpec(colSpecs.toArray(new DataColumnSpec[colSpecs.size()]));
}
use of org.knime.core.node.port.database.DatabaseUtility in project knime-core by knime.
the class DBColumnAggregationFunctionRow method loadFunctions.
/**
* Loads the functions and handles invalid aggregation functions graceful.
* @param settings {@link NodeSettingsRO}
* @param key the config key
* @param dbIdentifier the {@link AggregationFunctionProvider}
* @param tableSpec the input {@link DataTableSpec}
* @return {@link List} of {@link DBColumnAggregationFunctionRow}s
* @throws InvalidSettingsException if the settings are invalid
*/
public static List<DBColumnAggregationFunctionRow> loadFunctions(final NodeSettingsRO settings, final String key, final String dbIdentifier, final DataTableSpec tableSpec) throws InvalidSettingsException {
if (key == null || key.isEmpty()) {
throw new IllegalArgumentException("key must not be null");
}
if (dbIdentifier == null || dbIdentifier.isEmpty()) {
throw new IllegalArgumentException("dbIdentifier must not be empty");
}
if (settings == null || !settings.containsKey(key)) {
return Collections.EMPTY_LIST;
}
final DatabaseUtility utility = DatabaseUtility.getUtility(dbIdentifier);
DBAggregationFunctionProvider functionProvider = new DBAggregationFunctionProvider(utility);
final NodeSettingsRO root = settings.getNodeSettings(key);
final Set<String> settingsKeys = root.keySet();
final List<DBColumnAggregationFunctionRow> colAggrList = new ArrayList<>(settingsKeys.size());
for (String settingsKey : settingsKeys) {
final NodeSettingsRO cfg = root.getNodeSettings(settingsKey);
final String colName = cfg.getString(CNFG_COL_NAMES);
final DataType colType = cfg.getDataType(CNFG_COL_TYPES);
final DataColumnSpec colSpec = new DataColumnSpecCreator(colName, colType).createSpec();
DBAggregationFunction function = AbstractDBAggregationFunctionRow.loadFunction(tableSpec, functionProvider, cfg);
final DBColumnAggregationFunctionRow aggrFunctionRow = new DBColumnAggregationFunctionRow(colSpec, function);
colAggrList.add(aggrFunctionRow);
}
return colAggrList;
}
use of org.knime.core.node.port.database.DatabaseUtility in project knime-core by knime.
the class DBDataTypeAggregationFunctionPanel method loadSettingsFrom.
/**
* @param settings the settings to read from
* @param dbIdentifier the database identifier
* @param spec initializes the component
* @throws InvalidSettingsException if the settings are invalid
*/
public void loadSettingsFrom(final NodeSettingsRO settings, final String dbIdentifier, final DataTableSpec spec) throws InvalidSettingsException {
final DatabaseUtility utility = DatabaseUtility.getUtility(dbIdentifier);
setAggregationFunctionProvider(new DBAggregationFunctionProvider(utility));
initialize(spec, DBDataTypeAggregationFunctionRow.loadFunctions(settings, m_key, dbIdentifier, spec));
}
use of org.knime.core.node.port.database.DatabaseUtility in project knime-core by knime.
the class DBDataTypeAggregationFunctionRow method loadFunctions.
/**
* Loads the functions and handles invalid aggregation functions graceful.
* @param settings {@link NodeSettingsRO}
* @param key the config key
* @param dbIdentifier the {@link AggregationFunctionProvider}
* @param tableSpec the input {@link DataTableSpec}
* @return {@link List} of {@link DBDataTypeAggregationFunctionRow}s
* @throws InvalidSettingsException if the settings are invalid
*/
public static List<DBDataTypeAggregationFunctionRow> loadFunctions(final NodeSettingsRO settings, final String key, final String dbIdentifier, final DataTableSpec tableSpec) throws InvalidSettingsException {
if (key == null || key.isEmpty()) {
throw new IllegalArgumentException("key must not be null");
}
if (dbIdentifier == null || dbIdentifier.isEmpty()) {
throw new IllegalArgumentException("dbIdentifier must not be empty");
}
if (settings == null || !settings.containsKey(key)) {
return Collections.EMPTY_LIST;
}
final DatabaseUtility utility = DatabaseUtility.getUtility(dbIdentifier);
DBAggregationFunctionProvider functionProvider = new DBAggregationFunctionProvider(utility);
final NodeSettingsRO root = settings.getNodeSettings(key);
final Set<String> settingsKeys = root.keySet();
final List<DBDataTypeAggregationFunctionRow> colAggrList = new ArrayList<>(settingsKeys.size());
for (String settingsKey : settingsKeys) {
final NodeSettingsRO cfg = root.getNodeSettings(settingsKey);
final DataType dataType = cfg.getDataType(CNFG_DATA_TYPE);
DBAggregationFunction function = AbstractDBAggregationFunctionRow.loadFunction(tableSpec, functionProvider, cfg);
final DBDataTypeAggregationFunctionRow aggrFunctionRow = new DBDataTypeAggregationFunctionRow(dataType, function);
colAggrList.add(aggrFunctionRow);
}
return colAggrList;
}
Aggregations