Skip to content
Snippets Groups Projects
Commit 5b1b4cad authored by tjc's avatar tjc
Browse files

changes to allow for FeatureCvTerm.rank column to be absent

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@9753 ee4ac58c-ac51-4696-9907-e4b3aa274f04
parent 8d1ba6d8
No related branches found
No related tags found
No related merge requests found
......@@ -25,7 +25,9 @@
<parameter property="featureCvTerms" javaType="java.util.List"/>
</parameterMap>
<resultMap id="map-basicfeature" class="Feature">
<!-- resultMap templates below -->
<resultMap id="template-basicfeature" class="Feature">
<result property="timeLastModified" column="timelastmodified"/>
<result property="featureId" column="id"/>
<result property="uniqueName" column="uniquename"/>
......@@ -33,9 +35,30 @@
<result property="seqLen" column="seqlen" nullValue="-1" />
<result property="obsolete" column="obsolete" />
</resultMap>
<resultMap id="map-feature" class="Feature"
groupBy="featureId" extends="map-basicfeature">
<resultMap id="template-basicfeature-all-lazy" class="Feature"
extends="template-basicfeature">
<result property="cvTerm" column="type_id" select="getCvtermByCvTermId" />
<result property="dbXRef" column="dbXRefId"
select="getDbXRefByDbXRefId" />
<result property="featureLocsForFeatureId" column="{id=id}"
select="getFeatureLoc" />
<result property="featureProps" column="{feature_id=id}"
select="getFeaturePropByFeatureId" />
<result property="featureDbXRefs" column="{featureId=id}"
select="getFeatureDbXRef" />
<result property="featureRelationshipsForObjectId" column="{object_id=id}"
select="getFeatureRelationship" />
<result property="featureRelationshipsForSubjectId" column="{subject_id=id}"
select="getFeatureRelationship" />
<result property="featureSynonyms" column="{feature.uniqueName=uniqueName}"
select="getLazyFeatureSynonymsByUniquename" />
<result property="organism" column="{organismId=organismId}"
select="getOrganism" />
</resultMap>
<resultMap id="template-feature" class="Feature"
extends="template-basicfeature">
<result property="organism.organismId" column="organism_id"/>
<result property="dbXRef" resultMap="DbXRef.select-dbxref" />
<result property="featureProps" resultMap="FeatureProp.map-featureprop" />
......@@ -51,42 +74,44 @@
select="getLazyFeatureSynonymsByUniquename" />
<result property="featureDbXRefs" column="{featureId=id}"
select="getFeatureDbXRef" />
<result property="featureCvTerms" column="{{uniqueName=uniquename}}"
select="getFeatureCvTermsByFeature"/>
<result property="featurePubs" column="{featureId=id}" select="getFeaturePubsByFeature"/>
</resultMap>
<!-- resultMap proper below -->
<resultMap id="map-feature" class="Feature"
groupBy="featureId" extends="template-feature">
<result property="featureCvTerms" column="{{uniqueName=uniquename}}"
select="getFeatureCvTermsByFeature"/>
</resultMap>
<resultMap id="map-feature-no-rank" class="Feature"
groupBy="featureId" extends="template-feature">
<result property="featureCvTerms" column="{{uniqueName=uniquename}}"
select="getFeatureCvTermsNoRankByFeature"/>
</resultMap>
<!-- mapping for feature table and lazy loading of feature_dbxref, feature_relationship,
featureprop, organism tables -->
<resultMap id="map-feature-lazy-no-residues" class="Feature"
extends="map-basicfeature">
<result property="cvTerm" column="type_id" select="getCvtermByCvTermId" />
<result property="dbXRef" column="dbXRefId"
select="getDbXRefByDbXRefId" />
<result property="featureLocsForFeatureId" column="{id=id}"
select="getFeatureLoc" />
<result property="featureProps" column="{feature_id=id}"
select="getFeaturePropByFeatureId" />
<result property="featureDbXRefs" column="{featureId=id}"
select="getFeatureDbXRef" />
<result property="featureRelationshipsForObjectId" column="{object_id=id}"
select="getFeatureRelationship" />
<result property="featureRelationshipsForSubjectId" column="{subject_id=id}"
select="getFeatureRelationship" />
<result property="featureSynonyms" column="{feature.uniqueName=uniqueName}"
select="getLazyFeatureSynonymsByUniquename" />
<!-- mapping for feature table and lazy loading -->
<resultMap id="map-feature-lazy-no-residues" class="Feature"
extends="template-basicfeature-all-lazy">
<result property="featureCvTerms" column="{{uniqueName=uniquename}}"
select="getFeatureCvTermsByFeature"/>
<result property="organism" column="{organismId=organismId}"
select="getOrganism" />
</resultMap>
<resultMap id="map-feature-lazy" class="Feature"
extends="map-feature-lazy-no-residues">
extends="template-basicfeature-all-lazy">
<result property="featureCvTerms" column="{{uniqueName=uniquename}}"
select="getFeatureCvTermsByFeature"/>
<result property="residues" column="residues" />
</resultMap>
<resultMap id="map-feature-lazy-no-rank" class="Feature"
extends="template-basicfeature-all-lazy">
<result property="featureCvTerms" column="{{uniqueName=uniquename}}"
select="getFeatureCvTermsNoRankByFeature"/>
<result property="residues" column="residues" />
</resultMap>
<resultMap id="map-feature-name-lazy" class="Feature">
<result property="featureId" column="id"/>
......@@ -94,11 +119,10 @@
<result property="cvTerm.name" column="name" />
<result property="featureRelationshipsForSubjectId" column="{subject_id=id}"
select="getParentFeatureRelationship" />
</resultMap>
</resultMap>
<resultMap id="map-feature-withprop" class="Feature"
groupBy="featureId" extends="map-basicfeature">
groupBy="featureId" extends="template-basicfeature">
<result property="cvTerm" column="type_id" select="getCvtermByCvTermId" />
<result property="featureProps" resultMap="FeatureProp.map-featureprop" />
<result property="featureDbXRefs" column="{featureId=id}"
......@@ -117,7 +141,7 @@
<resultMap id="map-similaritymatch-lazy" class="Feature"
groupBy="featureId" extends="map-basicfeature">
groupBy="featureId" extends="template-basicfeature">
<result property="cvTerm.cvTermId" column="type_id" />
<result property="featureLocsForFeatureId" column="{id=id}"
select="getFeatureLoc" />
......@@ -157,10 +181,8 @@
<!-- SQL -->
<!-- get feature -->
<select id="getFeature" parameterClass="Feature"
resultMap="map-feature">
SELECT
<sql id="sql-feature">
SELECT
timelastmodified,
f.feature_id AS id,
f.organism_id,
......@@ -202,11 +224,20 @@
uniquename LIKE #uniqueName#
</isNotNull>
</dynamic>
</sql>
<select id="getFeature" parameterClass="Feature"
resultMap="map-feature">
<include refid="sql-feature"/>
</select>
<select id="getFeatureNoFeatureCvTermRank" parameterClass="Feature"
resultMap="map-feature-no-rank">
<include refid="sql-feature"/>
</select>
<select id="getLazyFeature" resultMap ="map-feature-lazy"
parameterClass="Feature">
SELECT
<sql id="sql-lazy-feature">
SELECT
timelastmodified,
f.feature_id AS id,
uniquename,
......@@ -246,6 +277,17 @@
cvterm.name=#cvTerm.name#
</isNotNull>
</dynamic>
</sql>
<select id="getLazyFeature" resultMap ="map-feature-lazy"
parameterClass="Feature">
<include refid="sql-lazy-feature"/>
</select>
<select id="getLazyFeatureNoFeatureCvTermRank"
resultMap ="map-feature-lazy-no-rank"
parameterClass="Feature">
<include refid="sql-lazy-feature"/>
</select>
......@@ -264,52 +306,6 @@
FROM feature f
WHERE f.feature_id=$featureId$
</select>
<select id="getLazyFeatureById" resultMap ="map-feature-lazy" >
SELECT
timelastmodified,
f.feature_id AS id,
uniquename,
organism_id AS organismId,
f.is_obsolete AS obsolete,
f.name AS feature_name,
f.type_id,
f.dbxref_id AS dbXRefId,
f.seqlen,
residues
FROM feature f
WHERE f.feature_id=$featureId$
</select>
<select id="getLazyFeatureNameAndTypeById" resultMap ="map-feature-name-lazy" >
SELECT
uniquename, cvTerm.name, feature_id AS id
FROM feature f
LEFT JOIN cvterm ON cvterm.cvterm_id=type_id
WHERE f.feature_id=$featureId$
</select>
<select id="getFeatureById" resultMap ="map-feature-withprop"
cacheModel="feature-cache">
SELECT
timelastmodified,
f.feature_id AS id,
uniquename,
organism_id AS organismId,
f.is_obsolete AS obsolete,
f.name AS feature_name,
f.type_id,
f.dbxref_id,
f.seqlen,
fp.type_id AS prop_type_id, fp.rank AS prop_rank, fp.value, fp.featureprop_id,
dbxref.*, db.*
FROM feature f
LEFT JOIN featureprop fp ON fp.feature_id=f.feature_id
LEFT JOIN dbxref ON f.dbxref_id=dbxref.dbxref_id
LEFT JOIN db ON dbxref.db_id=db.db_id
WHERE f.feature_id=$featureId$
</select>
<select id="getFeaturesByListOfIds" resultMap ="map-feature-withprop">
SELECT
......@@ -407,36 +403,6 @@
</select>
<!--
<select id="getResidueFeatures" parameterClass="java.lang.Integer"
resultMap="map-feature-with-residues-result">
SELECT feature.name, uniquename, feature_id, type_id,
feature.organism_id, abbreviation, genus, species, common_name,
cvterm.name AS cvterm_name
FROM feature
LEFT JOIN organism ON organism.organism_id=feature.organism_id
LEFT JOIN cvterm ON cvterm.cvterm_id=feature.type_id
WHERE <isNotNull> feature.organism_id=$value$ AND </isNotNull>
cvterm.name!='mRNA' AND cvterm.name!='pseudogenic_transcript' AND
cvterm.name!='polypeptide' AND
residues notnull AND residues NOT LIKE '' ORDER BY common_name
</select>
<select id="getResidueFeaturesByOrganismCommonName" parameterClass="java.lang.String"
resultMap="map-feature-with-residues-result">
SELECT feature.name, uniquename, feature_id, type_id,
feature.organism_id, abbreviation, genus, species, common_name,
cvterm.name AS cvterm_name
FROM feature
LEFT JOIN organism ON organism.organism_id=feature.organism_id
LEFT JOIN cvterm ON cvterm.cvterm_id=feature.type_id
WHERE <isNotNull> organism.common_name=#value# AND </isNotNull>
cvterm.name!='mRNA' AND cvterm.name!='pseudogenic_transcript' AND
cvterm.name!='polypeptide' AND
residues notnull AND residues NOT LIKE '' ORDER BY common_name
</select>
-->
<sql id="source_feature_cvterm_names">
cvterm.name LIKE '%chromosome%' OR cvterm.name LIKE '%sequence%' OR
cvterm.name IN ('supercontig', 'ultra_scaffold', 'golden_path_region', 'contig')
......
......@@ -5,16 +5,14 @@
<sqlMap namespace="FeatureCvTerm">
<cacheModel id="featurecvterm-rank-cache" type ="LRU" readOnly="true">
<cacheModel id="featurecvterm-rank-cache" type ="LRU" readOnly="true">
<flushInterval hours="24"/>
<property name="cache-size" value="15" />
</cacheModel>
<typeAlias alias="FeatureCvTerm"
type="org.gmod.schema.sequence.FeatureCvTerm"/>
<resultMap id="select-featurecvterm-no-rank" class="FeatureCvTerm"
groupBy="featureCvTermId">
<result property="featureCvTermId" column="feature_cvterm_id" />
......@@ -41,10 +39,8 @@
<!-- select feature_cvterm -->
<select id="getFeatureCvTermsBySrcFeature" parameterClass="org.gmod.schema.sequence.Feature"
resultMap="select-featurecvterm">
SELECT
<sql id="sql_select_feature_cvterm">
SELECT
fc.*,
fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
cvterm.name AS cvterm_name,
......@@ -60,6 +56,11 @@
LEFT JOIN pub ON fc.pub_id=pub.pub_id
LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id
LEFT JOIN db ON dbxref.db_id=db.db_id
</sql>
<select id="getFeatureCvTermsBySrcFeature" parameterClass="org.gmod.schema.sequence.Feature"
resultMap="select-featurecvterm">
<include refid="sql_select_feature_cvterm"/>
WHERE feature_id IN
(SELECT feature_id FROM featureloc fl WHERE srcfeature_id=$featureId$
<isGreaterThan property="featureLoc.fmin" compareValue="0" prepend="AND">
......@@ -71,22 +72,7 @@
<select id="getFeatureCvTermsNoRankBySrcFeature" parameterClass="org.gmod.schema.sequence.Feature"
resultMap="select-featurecvterm-no-rank">
SELECT
fc.*,
fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
cvterm.name AS cvterm_name,
cv.name AS cv_name,
pub.pub_id,
pub.uniquename,
db.name,
dbxref.accession
FROM feature_cvterm fc
LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id
LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id
LEFT JOIN cv ON cvterm.cv_id=cv.cv_id
LEFT JOIN pub ON fc.pub_id=pub.pub_id
LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id
LEFT JOIN db ON dbxref.db_id=db.db_id
<include refid="sql_select_feature_cvterm"/>
WHERE feature_id IN
(SELECT feature_id FROM featureloc fl WHERE srcfeature_id=$featureId$
<isGreaterThan property="featureLoc.fmin" compareValue="0" prepend="AND">
......@@ -98,22 +84,7 @@
<select id="getFeatureCvTermsByFeature" parameterClass="Feature"
resultMap="select-featurecvterm">
SELECT
fc.*,
fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
cvterm.name AS cvterm_name,
cv.name AS cv_name,
pub.pub_id,
pub.uniquename,
db.name,
dbxref.accession
FROM feature_cvterm fc
LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id
LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id
LEFT JOIN cv ON cvterm.cv_id=cv.cv_id
LEFT JOIN pub ON fc.pub_id=pub.pub_id
LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id
LEFT JOIN db ON dbxref.db_id=db.db_id
<include refid="sql_select_feature_cvterm"/>
<dynamic>
<isNotNull property="uniqueName" prepend="WHERE">
feature_id IN (SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
......@@ -121,30 +92,12 @@
</dynamic>
ORDER BY fc.feature_cvterm_id, fc.rank, type_id, fcp.rank;
</select>
<!-- same as getFeatureCvTermsByFeature but without feature_cvterm.rank -->
<select id="getFeatureCvTermsNoRankByFeature" parameterClass="Feature"
resultMap="select-featurecvterm-no-rank">
SELECT
fc.feature_id,
fc.feature_cvterm_id,
fc.cvterm_id,
fc.is_not,
fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
cvterm.name AS cvterm_name,
cv.name AS cv_name,
pub.pub_id,
pub.uniquename,
db.name,
dbxref.accession
FROM feature_cvterm fc
LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id
LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id
LEFT JOIN cv ON cvterm.cv_id=cv.cv_id
LEFT JOIN pub ON fc.pub_id=pub.pub_id
LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id
LEFT JOIN db ON dbxref.db_id=db.db_id
<include refid="sql_select_feature_cvterm"/>
<dynamic>
<isNotNull property="uniqueName" prepend="WHERE">
feature_id=(SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
......@@ -154,7 +107,6 @@
</select>
<select id="getFeatureCvTermColumnsForASchema" parameterClass="java.lang.String"
resultClass="java.lang.String" cacheModel="featurecvterm-rank-cache">
SELECT pg_attribute.attname
......
......@@ -64,6 +64,8 @@ public class IBatisDAO extends GmodDAO
private static org.apache.log4j.Logger logger4j =
org.apache.log4j.Logger.getLogger(IBatisDAO.class);
private SqlMapClientWrapper sqlMap;
private boolean featureCvTermRank = true;
private boolean featureCvTermRankChecked = false;
/**
* Define a iBatis data access object. This uses <code>DbSqlConfig</code>
......@@ -87,6 +89,33 @@ public class IBatisDAO extends GmodDAO
sqlMap.close();
}
/**
* Test to see if this is an old chado database version
* without the feature_cvterm.rank column.
* @return true if the feature_cvterm.rank column exists.
*/
private boolean isFeatureCvTermRank()
{
if(featureCvTermRankChecked)
return featureCvTermRank;
String schema = ArtemisUtils.getCurrentSchema();
// check column names
List list = sqlMap.queryForList("getFeatureCvTermColumnsForASchema", schema);
featureCvTermRank = false;
for(int i=0; i<list.size(); i++)
{
if( ((String)list.get(i)).equals("rank") )
{
featureCvTermRank = true;
break;
}
}
featureCvTermRankChecked = true;
return featureCvTermRank;
}
//////
////// GeneralDaoI
//////
......@@ -143,23 +172,7 @@ public class IBatisDAO extends GmodDAO
public List getFeatureCvTermsBySrcFeature(Feature srcFeature)
{
// find whether current schema has a feature_cvterm.rank column
String schema = ArtemisUtils.getCurrentSchema();
// check column names
List list = sqlMap.queryForList("getFeatureCvTermColumnsForASchema", schema);
boolean rank_exists = false;
for(int i=0; i<list.size(); i++)
{
if( ((String)list.get(i)).equals("rank") )
{
rank_exists = true;
break;
}
}
if(rank_exists)
if(isFeatureCvTermRank())
{
logger4j.debug("USE getFeatureCvTermsBySrcFeature()");
return sqlMap.queryForList("getFeatureCvTermsBySrcFeature",
......@@ -223,7 +236,11 @@ public class IBatisDAO extends GmodDAO
org.gmod.schema.sequence.Feature feature =
new org.gmod.schema.sequence.Feature();
feature.setFeatureId(id);
return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
if(isFeatureCvTermRank())
return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
else
return (Feature)sqlMap.queryForObject("getLazyFeatureNoFeatureCvTermRank", feature);
}
public List getFeaturesByListOfIds(final List featureIds)
......@@ -236,7 +253,11 @@ public class IBatisDAO extends GmodDAO
org.gmod.schema.sequence.Feature feature =
new org.gmod.schema.sequence.Feature();
feature.setUniqueName(uniquename);
return sqlMap.queryForList("getLazyFeature", feature);
if(isFeatureCvTermRank())
return sqlMap.queryForList("getLazyFeature", feature);
else
return sqlMap.queryForList("getLazyFeatureNoFeatureCvTermRank", feature);
}
public Feature getFeatureByUniqueName(String uniquename, String featureType)
......@@ -249,7 +270,10 @@ public class IBatisDAO extends GmodDAO
cvTerm.setName(featureType);
feature.setCvTerm(cvTerm);
return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
if(isFeatureCvTermRank())
return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
else
return (Feature)sqlMap.queryForObject("getLazyFeatureNoFeatureCvTermRank", feature);
}
......@@ -270,10 +294,10 @@ public class IBatisDAO extends GmodDAO
feature.setUniqueName(name);
feature.setFeatureSynonyms(feature_synonym_list);
List features = sqlMap.queryForList("getLazyFeature", feature);
return features;
if(isFeatureCvTermRank())
return sqlMap.queryForList("getLazyFeature", feature);
else
return sqlMap.queryForList("getLazyFeatureNoFeatureCvTermRank", feature);
}
/**
......@@ -318,11 +342,10 @@ public class IBatisDAO extends GmodDAO
*/
public List getFeaturesByLocatedOnFeature(final Feature feature)
{
List feature_list = sqlMap.queryForList("getFeature", feature);
// merge same features in the list
//return mergeList(feature_list);
return feature_list;
if(isFeatureCvTermRank())
return sqlMap.queryForList("getFeature", feature);
else
return sqlMap.queryForList("getFeatureNoFeatureCvTermRank", feature);
}
/**
......@@ -349,23 +372,7 @@ public class IBatisDAO extends GmodDAO
*/
public List getFeatureCvTermsByFeature(Feature feature)
{
// find whether current schema has a feature_cvterm.rank column
String schema = ArtemisUtils.getCurrentSchema();
// check column names
List list = sqlMap.queryForList("getFeatureCvTermColumnsForASchema", schema);
boolean rank_exists = false;
for(int i=0; i<list.size(); i++)
{
if( ((String)list.get(i)).equals("rank") )
{
rank_exists = true;
break;
}
}
if(rank_exists)
if(isFeatureCvTermRank())
return
sqlMap.queryForList("getFeatureCvTermsByFeature", feature);
else
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment