/**
*
*/
package edu.washington.escience.myria.operator;
import com.google.common.collect.ImmutableMap;
import edu.washington.escience.myria.DbException;
import edu.washington.escience.myria.MyriaConstants;
import edu.washington.escience.myria.accessmethod.AccessMethod;
import edu.washington.escience.myria.accessmethod.ConnectionInfo;
import edu.washington.escience.myria.storage.TupleBatch;
/**
*
*/
public class DbCreateView extends RootOperator {
/** Required for Java serialization. */
private static final long serialVersionUID = 1L;
/** The connection to the database database. */
private AccessMethod accessMethod;
/** The information for the database connection. */
private ConnectionInfo connectionInfo;
private final String viewName;
private final String viewQuery;
private final boolean isMaterialized;
public DbCreateView(
final Operator child,
final String viewName,
final String viewQuery,
final boolean isMaterialized,
final ConnectionInfo connectionInfo) {
super(child);
this.connectionInfo = connectionInfo;
this.viewName = viewName;
this.viewQuery = viewQuery;
this.isMaterialized = isMaterialized;
}
@Override
protected void init(final ImmutableMap<String, Object> execEnvVars) throws DbException {
/* Retrieve connection information from the environment variables, if not already set */
if (connectionInfo == null && execEnvVars != null) {
connectionInfo =
(ConnectionInfo) execEnvVars.get(MyriaConstants.EXEC_ENV_VAR_DATABASE_CONN_INFO);
}
/* Open the database connection */
accessMethod = AccessMethod.of(connectionInfo.getDbms(), connectionInfo, false);
/* Add the indexes to the relation */
if (isMaterialized) {
accessMethod.createMaterializedView(viewName, viewQuery);
} else {
accessMethod.createView(viewName, viewQuery);
}
}
@Override
protected void consumeTuples(final TupleBatch tuples) throws DbException {}
@Override
protected void childEOS() throws DbException {}
@Override
protected void childEOI() throws DbException {}
}