http://www.mediawiki.org/wiki/Special:Code/MediaWiki/62121

Revision: 62121
Author:   daniel
Date:     2010-02-08 09:46:06 +0000 (Mon, 08 Feb 2010)

Log Message:
-----------
feature store, work in progress

Modified Paths:
--------------
    
trunk/WikiWord/WikiWord/src/main/java/de/brightbyte/wikiword/store/DatabaseFeatureStore.java

Modified: 
trunk/WikiWord/WikiWord/src/main/java/de/brightbyte/wikiword/store/DatabaseFeatureStore.java
===================================================================
--- 
trunk/WikiWord/WikiWord/src/main/java/de/brightbyte/wikiword/store/DatabaseFeatureStore.java
        2010-02-08 07:03:17 UTC (rev 62120)
+++ 
trunk/WikiWord/WikiWord/src/main/java/de/brightbyte/wikiword/store/DatabaseFeatureStore.java
        2010-02-08 09:46:06 UTC (rev 62121)
@@ -12,6 +12,7 @@
 import de.brightbyte.db.EntityTable;
 import de.brightbyte.db.QueryDataSet;
 import de.brightbyte.db.RelationTable;
+import de.brightbyte.db.TemporaryTableDataSet;
 import de.brightbyte.util.PersistenceException;
 import de.brightbyte.wikiword.TweakSet;
 import de.brightbyte.wikiword.model.WikiWordConcept;
@@ -105,15 +106,49 @@
                        return v;
                }
 
-               public DataSet<WikiWordConceptFeatures> 
getNeighbourhoodFeatures(int concept) throws PersistenceException {
-                       String sql = "SELECT X.concept as concept, X.feature as 
feature, X.normal_value as value ";
-                       sql += " FROM " + featureTable.getSQLName() + " as X ";
-                       sql += " JOIN "+featureTable.getSQLName()+" as N ON 
N.feature = C.id ";
-                       sql += " JOIN "+featureTable.getSQLName()+" as F ON 
F.feature = N.concept ";
+               public DataSet<WikiWordConceptFeatures> 
getNeighbourhoodFeatures(final int concept) throws PersistenceException {
+                       /*
+                       String sql = "SELECT C.id as concept, C.name as name, 
X.feature as feature, X.normal_weight as value ";
+                       sql += " FROM " + featureTable.getSQLName() + " as X 
force key (PRIMARY) ";
+                       sql += " JOIN "+featureTable.getSQLName()+" as N force 
key (PRIMARY) ON N.feature = X.concept ";
+                       sql += " JOIN "+featureTable.getSQLName()+" as F force 
key (feature) ON F.feature = N.concept ";
+                       sql += " JOIN "+conceptTable.getSQLName()+" as C force 
key (PRIMARY) ON C.id = X.concept ";
                        sql += " WHERE F.concept = "+concept;
-                       sql += " ORDER BY C.id";
+                       sql += " ORDER BY X.concept";
                        
                        return new 
QueryDataSet<WikiWordConceptFeatures>(database, getConceptFeaturesFactory(), 
"getNeighbourhoodFeatures", sql, false);
+                       */
+                       return new 
TemporaryTableDataSet<WikiWordConceptFeatures>(database, 
getConceptFeaturesFactory()) {
+                       
+                               @Override
+                               public Cursor<WikiWordConceptFeatures> cursor() 
throws PersistenceException {
+                                       try {
+                                               String n = 
database.createTemporaryTable("id integer not null, name varchar(255) default 
null, primary key (id)");
+                                               String sql = "INSERT IGNORE 
INTO "+n+" (id) ";
+                                               sql += " SELECT N.feature as id 
";
+                                               sql += " FROM 
"+featureTable.getSQLName()+" AS F ";
+                                               sql += " JOIN 
"+featureTable.getSQLName()+" AS N ON F.feature = N.concept ";
+                                               sql += " WHERE F.concept = 
"+concept;
+                                               
+                                               
database.executeUpdate("getNeighbourhoodFeatures#neighbours", sql);
+                                               
+                                               sql = "UPDATE "+n+" as N ";
+                                               sql+= " JOIN 
"+conceptTable.getSQLName()+" AS C ON C.id = N.id ";
+                                               sql+= " SET N.name = C.name ";
+                                                       
+                                               
database.executeUpdate("getNeighbourhoodFeatures#names", sql);
+
+                                               sql = "SELECT N.id as concept, 
N.name as name, X.feature as feature, X.normal_weight as value ";
+                                               sql+= " FROM "+n+" AS N ";
+                                               sql+= " JOIN 
"+featureTable.getSQLName()+" as X ON X.concept = N.id ";
+                                                       
+                                               ResultSet rs = 
database.executeQuery("getNeighbourhoodFeatures#features", sql);
+                                               return new 
TemporaryTableDataSet.Cursor<WikiWordConceptFeatures>(rs, factory, database, 
new String[] { n }, database.getLogOutput() );
+                                       } catch (SQLException e) {
+                                               throw new 
PersistenceException(e);
+                                       }
+                               }
+                       };
                }
 
                private DatabaseDataSet.Factory<WikiWordConceptFeatures> 
getConceptFeaturesFactory() {



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to