|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object net.sf.taverna.t2.provenance.lineageservice.ProvenanceQuery
public abstract class ProvenanceQuery
Handles all the querying of provenance items in the database layer. Uses standard SQL so all specific instances of this class can extend this writer to handle all of the db queries
Field Summary | |
---|---|
static java.lang.String |
DATAFLOW_TYPE
|
protected org.apache.log4j.Logger |
logger
|
Constructor Summary | |
---|---|
ProvenanceQuery()
|
Method Summary | |
---|---|
protected java.lang.String |
addOrderByToQuery(java.lang.String q0,
java.util.List<java.lang.String> orderAttr,
boolean terminate)
|
protected java.lang.String |
addWhereClauseToQuery(java.lang.String q0,
java.util.Map<java.lang.String,java.lang.String> queryConstraints,
boolean terminate)
implements a set of query constraints of the form var = value into a WHERE clause |
java.sql.Statement |
execQuery(java.lang.String q)
pass-through query method |
LineageSQLQuery |
generateSQL(java.lang.String wfInstance,
java.lang.String proc,
java.lang.String effectivePath,
boolean returnOutputs)
if effectivePath is not null: query varBinding using: wfInstanceRef = wfInstance, iteration = effectivePath, PNameRef = proc if input vars is null, then use the output var this returns the bindings for the set of input vars at the correct iteration if effectivePath is null: fetch VarBindings for all input vars, without constraint on the iteration added outer join with Data additionally, try querying the collection table first -- if the query succeeds, it means the path is pointing to an internal node in the collection, and we just got the right node. |
protected LineageSQLQuery |
generateSQL2(java.lang.String wfInstance,
java.lang.String proc,
java.lang.String var,
java.lang.String path,
boolean returnInput)
|
java.util.List<java.lang.String> |
getAllWFnames()
|
java.util.ArrayList<Workflow> |
getAllWorkflowRecords(java.util.ArrayList<java.lang.String> workflowIDList)
|
java.util.List<Arc> |
getArcs(java.util.Map<java.lang.String,java.lang.String> queryConstraints)
selects all Arcs |
java.util.List<java.lang.String> |
getChildrenOfWorkflow(java.lang.String parentWFName)
|
java.util.List<Collection> |
getCollectionsForRun(java.lang.String wfInstanceID)
|
java.sql.Connection |
getConnection()
|
java.util.List<java.lang.String> |
getContainedProcessors(java.lang.String dataflowName)
returns the set of all processors that are structurally contained within the wf corresponding to the input dataflow name |
java.lang.String |
getContainingCollection(LineageQueryResultRecord record)
|
java.util.List<Workflow> |
getContainingWorkflowsForProcessor(java.lang.String pname)
|
java.lang.String |
getDataValue(java.lang.String valueRef)
|
java.util.List<Var> |
getInputVars(java.lang.String pname,
java.lang.String wfID,
java.lang.String wfInstanceID)
return the input variables for a given processor and a wfInstanceId |
java.lang.String |
getLatestRunID()
|
java.util.List<NestedListNode> |
getNestedListNodes(java.util.Map<java.lang.String,java.lang.String> constraints)
|
java.util.List<Var> |
getOutputVars(java.lang.String pname,
java.lang.String wfID,
java.lang.String wfInstanceID)
return the output variables for a given processor and a wfInstanceId |
java.lang.String |
getParentOfWorkflow(java.lang.String childWFName)
fetch children of parentWFName from the Workflow table |
java.util.Map<java.lang.String,java.lang.Integer> |
getPredecessorsCount(java.lang.String wfInstanceID)
|
java.util.Map<java.lang.String,java.lang.Integer> |
getPredecessorsCountOld(java.lang.String wfInstanceID)
new impl of getProcessorsIncomingLinks whicih avoids complications due to nesting, and relies on the wfInstanceID rather than the wfnameRef |
java.util.List<ProcBinding> |
getProcBindings(java.util.Map<java.lang.String,java.lang.String> constraints)
all ProCBinding records that satisfy the input constraints |
java.util.List<ProvenanceProcessor> |
getProcessors(java.util.Map<java.lang.String,java.lang.String> constraints)
generic method to fetch processors subject to additional query constraints |
java.util.Map<java.lang.String,java.util.List<ProvenanceProcessor>> |
getProcessorsDeep(java.lang.String type,
java.lang.String wfnameRef)
this is similar to getProcessorsShallow(String, String) but it recursively fetches all processors
within nested workflows. |
java.util.List<ProvenanceProcessor> |
getProcessorsForWorkflow(java.lang.String workflowID)
|
java.util.Map<java.lang.String,java.lang.Integer> |
getProcessorsIncomingLinks(java.lang.String wfnameRef)
used in the toposort phase -- propagation of anl() values through the graph |
java.util.List<ProvenanceProcessor> |
getProcessorsShallow(java.lang.String type,
java.lang.String wfnameRef)
get all processors of a given type within a structure identified by wfnameRef (reference to dataflow). |
java.util.List<WorkflowInstance> |
getRuns(java.lang.String dataflowID,
java.util.Map<java.lang.String,java.lang.String> conditions)
|
java.util.List<java.lang.String> |
getSuccProcessors(java.lang.String pName,
java.lang.String wfNameRef,
java.lang.String wfInstanceId)
|
java.util.List<Var> |
getSuccVars(java.lang.String pName,
java.lang.String vName,
java.lang.String wfInstanceRef)
|
java.lang.String |
getTopDataflow(java.lang.String wfInstanceID)
|
java.lang.String |
getTopLevelDataflowName(java.lang.String wfInstanceID)
|
java.lang.String |
getTopLevelWfName(java.lang.String runID)
|
java.util.List<VarBinding> |
getVarBindings(java.util.Map<java.lang.String,java.lang.String> constraints)
TODO this currently returns the data value as a string, which is incorrect as it is an untyped byte array |
java.util.List<Var> |
getVars(java.util.Map<java.lang.String,java.lang.String> queryConstraints)
select Var records that satisfy constraints |
java.util.List<java.lang.String> |
getVarValues(java.lang.String wfInstance,
java.lang.String pname,
java.lang.String vname)
|
Workflow |
getWfFromDataflowID(java.lang.String dataflowID)
|
java.lang.String |
getWfNameForDataflow(java.lang.String dataflowName)
returns the internal ID of a dataflow given its external name |
java.util.List<java.lang.String> |
getWfNames(java.lang.String runID)
returns the names of all workflows (top level + nested) for a given runID |
java.util.List<java.lang.String> |
getWFNamesByTime()
|
Workflow |
getWorkflow(java.lang.String dataflowID)
returns a Workflow record from the DB given the workflow internal ID |
java.util.List<Workflow> |
getWorkflowForRun(java.lang.String runID)
returns the workflows associated to a single runID |
boolean |
isDataflow(java.lang.String procName)
|
boolean |
isRootProcessorOfWorkflow(java.lang.String procName,
java.lang.String wfName,
java.lang.String wfInstanceId)
|
boolean |
isTopLevelDataflow(java.lang.String wfNameID)
|
java.util.List<LineageSQLQuery> |
lineageQueryGen(java.lang.String wfInstanceID,
java.lang.String proc,
java.util.Map<Var,java.lang.String> var2Path,
Var outputVar,
java.lang.String path,
boolean returnOutputs)
if var2Path is null this generates a trivial query for the current output var and current path |
java.util.Set<DDRecord> |
queryAllFromValues(java.lang.String wfInstance)
|
java.util.Set<DDRecord> |
queryArcsForDD(java.lang.String p,
java.lang.String v,
java.lang.String val,
java.lang.String wfInstance)
|
java.util.List<DDRecord> |
queryDD(java.lang.String p,
java.lang.String var,
java.lang.String value,
java.lang.String iteration,
java.lang.String wfInstance)
|
org.jdom.Document |
recordsToCollection(Dependencies lqr)
takes an ordered set of records for the same variable with iteration indexes and builds a collection out of it |
Dependencies |
runCollectionQuery(LineageSQLQuery lq)
|
java.util.List<Dependencies> |
runLineageQueries(java.util.List<LineageSQLQuery> lqList,
boolean includeDataValue)
|
Dependencies |
runLineageQuery(LineageSQLQuery lq,
boolean includeDataValue)
executes one of the lineage queries produced by the graph visit algorithm. |
Dependencies |
runVBQuery(LineageSQLQuery lq,
boolean includeDataValue)
|
LineageSQLQuery |
simpleLineageQuery(java.lang.String wfInstance,
java.lang.String wfNameRef,
java.lang.String pname,
java.lang.String vname,
java.lang.String iteration)
simplest possible pinpoint query. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected org.apache.log4j.Logger logger
public static java.lang.String DATAFLOW_TYPE
Constructor Detail |
---|
public ProvenanceQuery()
Method Detail |
---|
public java.sql.Connection getConnection() throws java.lang.InstantiationException, java.lang.IllegalAccessException, java.lang.ClassNotFoundException, java.sql.SQLException
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.ClassNotFoundException
java.sql.SQLException
protected java.lang.String addWhereClauseToQuery(java.lang.String q0, java.util.Map<java.lang.String,java.lang.String> queryConstraints, boolean terminate)
q0
- queryConstraints
-
protected java.lang.String addOrderByToQuery(java.lang.String q0, java.util.List<java.lang.String> orderAttr, boolean terminate)
public java.sql.Statement execQuery(java.lang.String q) throws java.lang.InstantiationException, java.lang.IllegalAccessException, java.lang.ClassNotFoundException, java.sql.SQLException
q
- valid JDBC query string for the T2provenance schema
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.ClassNotFoundException
java.sql.SQLException
public java.util.List<Var> getVars(java.util.Map<java.lang.String,java.lang.String> queryConstraints) throws java.sql.SQLException
java.sql.SQLException
public java.util.List<java.lang.String> getVarValues(java.lang.String wfInstance, java.lang.String pname, java.lang.String vname) throws java.sql.SQLException
java.sql.SQLException
public java.util.List<Var> getInputVars(java.lang.String pname, java.lang.String wfID, java.lang.String wfInstanceID) throws java.sql.SQLException
pname
- wfInstanceId
-
java.sql.SQLException
public java.util.List<Var> getOutputVars(java.lang.String pname, java.lang.String wfID, java.lang.String wfInstanceID) throws java.sql.SQLException
pname
- wfInstanceId
-
java.sql.SQLException
public java.util.List<Arc> getArcs(java.util.Map<java.lang.String,java.lang.String> queryConstraints) throws java.sql.SQLException
queryConstraints
-
java.sql.SQLException
public java.lang.String getTopLevelWfName(java.lang.String runID) throws java.sql.SQLException
java.sql.SQLException
public java.util.List<java.lang.String> getWfNames(java.lang.String runID) throws java.sql.SQLException
runID
-
java.sql.SQLException
public java.util.List<Workflow> getWorkflowForRun(java.lang.String runID) throws java.sql.SQLException
runID
-
java.sql.SQLException
public java.lang.String getLatestRunID() throws java.sql.SQLException
java.sql.SQLException
public java.util.List<WorkflowInstance> getRuns(java.lang.String dataflowID, java.util.Map<java.lang.String,java.lang.String> conditions) throws java.sql.SQLException
dataflowID
- conditions
- currently only understands "from" and "to" as timestamps for range queries
java.sql.SQLException
public java.util.List<java.lang.String> getWFNamesByTime() throws java.sql.SQLException
java.sql.SQLException
public java.util.List<ProcBinding> getProcBindings(java.util.Map<java.lang.String,java.lang.String> constraints) throws java.sql.SQLException
constraints
-
java.sql.SQLException
public java.util.List<VarBinding> getVarBindings(java.util.Map<java.lang.String,java.lang.String> constraints) throws java.sql.SQLException
constraints
- a Map columnName -> value that defines the query constraints.
Note: columnName must be fully qualified. This is not done
well at the moment, i.e., PNameRef should be
VarBinding.PNameRef to avoid ambiguities
java.sql.SQLException
public java.util.List<NestedListNode> getNestedListNodes(java.util.Map<java.lang.String,java.lang.String> constraints) throws java.sql.SQLException
java.sql.SQLException
public java.util.Map<java.lang.String,java.lang.Integer> getPredecessorsCount(java.lang.String wfInstanceID)
public java.util.Map<java.lang.String,java.lang.Integer> getPredecessorsCountOld(java.lang.String wfInstanceID)
wfInstanceID
-
public java.util.Map<java.lang.String,java.lang.Integer> getProcessorsIncomingLinks(java.lang.String wfnameRef) throws java.sql.SQLException
wfnameRef
- reference to static wf name
java.sql.SQLException
public java.util.List<Var> getSuccVars(java.lang.String pName, java.lang.String vName, java.lang.String wfInstanceRef) throws java.sql.SQLException
java.sql.SQLException
public java.util.List<java.lang.String> getSuccProcessors(java.lang.String pName, java.lang.String wfNameRef, java.lang.String wfInstanceId) throws java.sql.SQLException
java.sql.SQLException
public java.util.List<ProvenanceProcessor> getProcessorsShallow(java.lang.String type, java.lang.String wfnameRef) throws java.sql.SQLException
wfnameRef
- type
-
java.sql.SQLException
public java.util.Map<java.lang.String,java.util.List<ProvenanceProcessor>> getProcessorsDeep(java.lang.String type, java.lang.String wfnameRef)
getProcessorsShallow(String, String)
but it recursively fetches all processors
within nested workflows. The result is collected in the form of a map: wfName -> {ProvenanceProcessor}
type
- wfnameRef
-
public java.lang.String getDataValue(java.lang.String valueRef)
public java.util.List<ProvenanceProcessor> getProcessors(java.util.Map<java.lang.String,java.lang.String> constraints) throws java.sql.SQLException
constraints
-
java.sql.SQLException
public java.util.List<ProvenanceProcessor> getProcessorsForWorkflow(java.lang.String workflowID)
public LineageSQLQuery simpleLineageQuery(java.lang.String wfInstance, java.lang.String wfNameRef, java.lang.String pname, java.lang.String vname, java.lang.String iteration)
wfInstance
- pname
- vname
- iteration
-
public java.util.List<LineageSQLQuery> lineageQueryGen(java.lang.String wfInstanceID, java.lang.String proc, java.util.Map<Var,java.lang.String> var2Path, Var outputVar, java.lang.String path, boolean returnOutputs)
wfInstanceID
- proc
- var2Path
- outputVar
- path
- returnOutputs
- returns inputs *and* outputs if set to true
protected LineageSQLQuery generateSQL2(java.lang.String wfInstance, java.lang.String proc, java.lang.String var, java.lang.String path, boolean returnInput)
public LineageSQLQuery generateSQL(java.lang.String wfInstance, java.lang.String proc, java.lang.String effectivePath, boolean returnOutputs)
wfInstance
- proc
- effectivePath
- returnOutputs
- returns both inputs and outputs if set to true
public Dependencies runCollectionQuery(LineageSQLQuery lq) throws java.sql.SQLException
java.sql.SQLException
public Dependencies runVBQuery(LineageSQLQuery lq, boolean includeDataValue) throws java.sql.SQLException
lq
- includeDataValue
- IGNORED. always false
java.sql.SQLException
public Dependencies runLineageQuery(LineageSQLQuery lq, boolean includeDataValue) throws java.sql.SQLException
lq
- a lineage query computed during the graph traversalincludeDataValue
- if true, then the referenced value is included in the result.
This may only be necessary for testing: the data reference in
field value (which is a misleading field name, and actually
refers to the data reference) should be sufficient
java.sql.SQLException
public java.util.List<Dependencies> runLineageQueries(java.util.List<LineageSQLQuery> lqList, boolean includeDataValue) throws java.sql.SQLException
java.sql.SQLException
public org.jdom.Document recordsToCollection(Dependencies lqr)
lqr
-
public java.util.List<java.lang.String> getContainedProcessors(java.lang.String dataflowName)
dataflowName
- the name of a processor of type DataFlowActivity
public java.lang.String getTopLevelDataflowName(java.lang.String wfInstanceID)
public Workflow getWfFromDataflowID(java.lang.String dataflowID)
dataflowID
- internal dataflow ID
public java.lang.String getWfNameForDataflow(java.lang.String dataflowName)
dataflowName
- instanceID
-
public java.util.List<java.lang.String> getChildrenOfWorkflow(java.lang.String parentWFName) throws java.sql.SQLException
java.sql.SQLException
public java.lang.String getParentOfWorkflow(java.lang.String childWFName) throws java.sql.SQLException
childWFName
-
java.sql.SQLException
public java.util.List<java.lang.String> getAllWFnames() throws java.sql.SQLException
java.sql.SQLException
public boolean isDataflow(java.lang.String procName) throws java.sql.SQLException
procName
-
java.sql.SQLException
public boolean isTopLevelDataflow(java.lang.String wfNameID)
public java.lang.String getTopDataflow(java.lang.String wfInstanceID)
public java.util.List<DDRecord> queryDD(java.lang.String p, java.lang.String var, java.lang.String value, java.lang.String iteration, java.lang.String wfInstance) throws java.sql.SQLException
p
- pTo processorvar
- vTovalue
- valTo
java.sql.SQLException
public java.util.Set<DDRecord> queryArcsForDD(java.lang.String p, java.lang.String v, java.lang.String val, java.lang.String wfInstance) throws java.sql.SQLException
java.sql.SQLException
public java.util.Set<DDRecord> queryAllFromValues(java.lang.String wfInstance) throws java.sql.SQLException
java.sql.SQLException
public boolean isRootProcessorOfWorkflow(java.lang.String procName, java.lang.String wfName, java.lang.String wfInstanceId)
public java.util.List<Workflow> getContainingWorkflowsForProcessor(java.lang.String pname)
public Workflow getWorkflow(java.lang.String dataflowID)
dataflowID
-
public java.lang.String getContainingCollection(LineageQueryResultRecord record)
record
- a record representing a single value -- possibly within a list hierarchy
public java.util.ArrayList<Workflow> getAllWorkflowRecords(java.util.ArrayList<java.lang.String> workflowIDList)
public java.util.List<Collection> getCollectionsForRun(java.lang.String wfInstanceID)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |