[mb-commits] r13675 - in search_server/trunk/index/src: main/java/org/musicbrainz/search/index test/java/org/musicbrainz/search/index
[email protected] Thu, 02 May 2013 15:26:26 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1UXvOs-0004Nu-4X@wiley> |
Author: ijabz
Date: 2013-05-02 15:26:25 +0000 (Thu, 02 May 2013)
New Revision: 13675
Added:
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseEventComparator.java
Modified:
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseEventHelper.java
search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java
Log:
SEARCH-273:Addes sorting for release when have multiple release dates so orders by date, (code used by release and recording indexes)
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java 2013-05-02 12:08:28 UTC (rev 13674)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/CommonTables.java 2013-05-02 15:26:25 UTC (rev 13675)
@@ -132,8 +132,7 @@
}
- private void createReleaseTableUsingDb() throws SQLException
- {
+ private void createReleaseTableUsingDb() throws SQLException {
System.out.println("tmp_release :Started at:" + Utils.formatCurrentTimeForOutput());
StopWatch clock = new StopWatch();
clock.start();
@@ -170,7 +169,34 @@
clock.reset();
}
+ private void createReleaseEventsTableUsingDb() throws SQLException {
+ System.out.println("tmp_release_event :Started at:" + Utils.formatCurrentTimeForOutput());
+ StopWatch clock = new StopWatch();
+ clock.start();
+ getDbConnection().createStatement().execute(
+ "CREATE TEMPORARY TABLE tmp_release_event AS " +
+ " SELECT release, r2.code as country, " +
+ " date_year, date_month, date_day"+
+ " FROM release_country r1 " +
+ " LEFT JOIN iso_3166_1 r2 " +
+ " ON r1.country = r2.area " +
+ " UNION" +
+ " SELECT release, null as country, " +
+ " date_year, date_month, date_day"+
+ " FROM release_unknown_country r1 ");
+ clock.stop();
+ System.out.println("tmp_release_event :Finished:" + Utils.formatClock(clock));
+ clock.reset();
+
+ clock.start();
+ getDbConnection().createStatement().execute(
+ "CREATE INDEX tmp_release_event_idx_release ON tmp_release_event (release) ");
+ clock.stop();
+ System.out.println("tmp_release_event :Created Indexes:" + Utils.formatClock(clock));
+ clock.reset();
+ }
+
private void createTrackTableUsingDb() throws SQLException
{
System.out.println("tmp_track :Started at:" + Utils.formatCurrentTimeForOutput());
@@ -223,6 +249,7 @@
}
createReleaseTableUsingDb();
+ createReleaseEventsTableUsingDb();
}
if(
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java 2013-05-02 12:08:28 UTC (rev 13674)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/RecordingIndex.java 2013-05-02 15:26:25 UTC (rev 13675)
@@ -199,12 +199,10 @@
" WHERE r1.id in ";
releaseEvents =
- " SELECT re.release as releaseKey, r2.code as country, " +
- " date_year, date_month, date_day" +
- " FROM release_country re " +
- " LEFT JOIN iso_3166_1 r2 " +
- " ON re.country = r2.area " +
- " WHERE re.release in ";
+ " SELECT release, country, " +
+ " date_year, date_month, date_day"+
+ " FROM tmp_release_event r " +
+ " WHERE r.release in ";
releaseSecondaryTypes =
"SELECT rg.name as type, r.id as releaseKey" +
@@ -586,13 +584,13 @@
}
rs = stmt.executeQuery();
while (rs.next()) {
- int releaseKey = rs.getInt("releaseKey");
+ int releaseKey = rs.getInt("release");
release = releases.get(releaseKey);
if (release.getReleaseEventList() == null) {
release.setReleaseEventList(of.createReleaseEventList());
}
ReleaseEvent re = of.createReleaseEvent();
- re.setDate(Utils.formatDate(rs.getInt("date_year"), rs.getInt("date_month"), rs.getInt("date_day")));
+ re.setDate(Strings.emptyToNull(Utils.formatDate(rs.getInt("date_year"), rs.getInt("date_month"), rs.getInt("date_day"))));
re.setCountry((rs.getString("country")));
release.getReleaseEventList().getReleaseEvent().add(re);
}
@@ -791,10 +789,10 @@
(release.getReleaseEventList().getReleaseEvent() != null)
) {
for (ReleaseEvent re : release.getReleaseEventList().getReleaseEvent()) {
- doc.addFieldOrNoValue(RecordingIndexField.RELEASE_DATE, re.getDate());
- doc.addFieldOrNoValue(RecordingIndexField.COUNTRY, re.getCountry());
+ doc.addNonEmptyField(RecordingIndexField.RELEASE_DATE, re.getDate());
+ doc.addNonEmptyField(RecordingIndexField.COUNTRY, re.getCountry());
}
-
+ Collections.sort(release.getReleaseEventList().getReleaseEvent(), new ReleaseEventComparator());
ReleaseEvent firstReleaseEvent = release.getReleaseEventList().getReleaseEvent().get(0);
if (!Strings.isNullOrEmpty(firstReleaseEvent.getDate())) {
release.setDate(firstReleaseEvent.getDate());
@@ -802,7 +800,6 @@
if (!Strings.isNullOrEmpty(firstReleaseEvent.getCountry())) {
release.setCountry(firstReleaseEvent.getCountry());
}
- release.setCountry(firstReleaseEvent.getCountry());
} else {
doc.addFieldOrNoValue(RecordingIndexField.RELEASE_DATE, null);
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseEventHelper.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseEventHelper.java 2013-05-02 12:08:28 UTC (rev 13674)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseEventHelper.java 2013-05-02 15:26:25 UTC (rev 13675)
@@ -29,6 +29,7 @@
package org.musicbrainz.search.index;
+import com.google.common.base.Strings;
import org.musicbrainz.mmd2.ObjectFactory;
import org.musicbrainz.mmd2.Release;
import org.musicbrainz.mmd2.ReleaseEvent;
@@ -60,7 +61,7 @@
ReleaseEvent releaseEvent = of.createReleaseEvent();
releaseEvent.setCountry(rs.getString("country"));
- releaseEvent.setDate(Utils.formatDate(rs.getInt("date_year"), rs.getInt("date_month"), rs.getInt("date_day")));
+ releaseEvent.setDate(Strings.emptyToNull(Utils.formatDate(rs.getInt("date_year"), rs.getInt("date_month"), rs.getInt("date_day"))));
releaseEventList.add(releaseEvent);
}
return releaseEvents;
Modified: search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java
===================================================================
--- search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java 2013-05-02 12:08:28 UTC (rev 13674)
+++ search_server/trunk/index/src/main/java/org/musicbrainz/search/index/ReleaseIndex.java 2013-05-02 15:26:25 UTC (rev 13675)
@@ -171,13 +171,11 @@
" FROM tmp_release rl " +
" WHERE id BETWEEN ? AND ? ");
- addPreparedStatement("RELEASE_COUNTRY",
- " SELECT release, r2.code as country, " +
- " date_year, date_month, date_day"+
- " FROM release_country r1 " +
- " LEFT JOIN iso_3166_1 r2 " +
- " ON r1.country = r2.area " +
- " WHERE release BETWEEN ? AND ? ");
+ addPreparedStatement("RELEASE_EVENTS",
+ " SELECT release, country, " +
+ " date_year, date_month, date_day"+
+ " FROM tmp_release_event r1 " +
+ " WHERE release BETWEEN ? AND ? ");
addPreparedStatement("TAGS",
"SELECT release_tag.release, tag.name as tag, release_tag.count as count " +
@@ -264,7 +262,7 @@
private Map<Integer, List<ReleaseEvent>> loadReleaseEvents(int min, int max) throws SQLException, IOException {
// Get Release Country
- PreparedStatement st = getPreparedStatement("RELEASE_COUNTRY");
+ PreparedStatement st = getPreparedStatement("RELEASE_EVENTS");
st.setInt(1, min);
st.setInt(2, max);
ResultSet rs = st.executeQuery();
@@ -623,12 +621,14 @@
for (ReleaseEvent releaseEvent : releaseEvents.get(id)) {
String nextCountry = releaseEvent.getCountry();
- doc.addFieldOrUnknown(ReleaseIndexField.COUNTRY,nextCountry);
+ doc.addNonEmptyField(ReleaseIndexField.COUNTRY,nextCountry);
String nextDate = releaseEvent.getDate();
- doc.addFieldOrUnknown(ReleaseIndexField.DATE, nextDate );
+ doc.addNonEmptyField(ReleaseIndexField.DATE, nextDate );
rel.getReleaseEvent().add(releaseEvent);
}
+ //Sorted so always listed in date order, and so earliest release is used for backwards compatabilty
+ Collections.sort(rel.getReleaseEvent(), new ReleaseEventComparator());
release.setReleaseEventList(rel);
//backwards compatibility
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java 2013-05-02 12:08:28 UTC (rev 13674)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/AbstractIndexTest.java 2013-05-02 15:26:25 UTC (rev 13675)
@@ -104,7 +104,14 @@
//Drop tables, if they exist
try {
Statement stmt = conn.createStatement();
- stmt.addBatch("DROP TABLE country");
+ stmt.addBatch("DROP TABLE area");
+ stmt.addBatch("DROP TABLE area_type");
+ stmt.addBatch("DROP TABLE area_gid_redirect");
+ stmt.addBatch("DROP TABLE iso_3166_1");
+ stmt.addBatch("DROP TABLE iso_3166_2");
+ stmt.addBatch("DROP TABLE iso_3166_3");
+ stmt.addBatch("DROP TABLE area_alias_type");
+ stmt.addBatch("DROP TABLE area_alias");
stmt.addBatch("DROP TABLE tag");
stmt.addBatch("DROP TABLE artist");
@@ -139,8 +146,9 @@
stmt.addBatch("DROP TABLE language");
stmt.addBatch("DROP TABLE script");
stmt.addBatch("DROP TABLE release_tag");
+ stmt.addBatch("DROP TABLE release_country");
+ stmt.addBatch("DROP TABLE release_unknown_country");
-
stmt.addBatch("DROP TABLE release_group");
stmt.addBatch("DROP TABLE release_group_primary_type");
stmt.addBatch("DROP TABLE release_group_secondary_type_join");
@@ -566,10 +574,18 @@
"(" +
" release integer NOT NULL," +
" country integer NOT NULL," +
- " date_year smallint NOT NULL," +
- " date_month smallint NOT NULL," +
- " date_day smallint NOT NULL" +
+ " date_year smallint," +
+ " date_month smallint," +
+ " date_day smallint" +
")");
+
+ stmt.addBatch("CREATE TABLE release_unknown_country" +
+ "(" +
+ " release integer NOT NULL," +
+ " date_year smallint," +
+ " date_month smallint," +
+ " date_day smallint" +
+ ")");
}
protected void setupReleaseGroupTables(Statement stmt) throws Exception {
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java 2013-05-02 12:08:28 UTC (rev 13674)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/RecordingIndexTest.java 2013-05-02 15:26:25 UTC (rev 13675)
@@ -13,6 +13,7 @@
import java.sql.Statement;
import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
public class RecordingIndexTest extends AbstractIndexTest {
@@ -68,6 +69,16 @@
stmt.addBatch("INSERT INTO area (id, name) VALUES (221, 'United Kingdom')");
stmt.addBatch("INSERT INTO iso_3166_1 (area, code) VALUES (221, 'GB')");
+ stmt.addBatch("INSERT INTO release_country (release, country) values (491240, 222)");
+ stmt.addBatch("INSERT INTO area (id, name) VALUES (222, 'Albania')");
+ stmt.addBatch("INSERT INTO iso_3166_1 (area, code) VALUES (222, 'AF')");
+
+ stmt.addBatch("INSERT INTO release_country (release, country) values (491240, 2)");
+ stmt.addBatch("INSERT INTO area (id, name) VALUES (2, 'Afghanistan')");
+ stmt.addBatch("INSERT INTO iso_3166_1 (area, code) VALUES (2, 'AN')");
+
+ stmt.addBatch("INSERT INTO release_unknown_country (release, date_year) values (491240, 1950)");
+
stmt.addBatch("INSERT INTO medium (id, track_count, release, position, format) VALUES (1, 2, 491240, 1, 7)");
stmt.addBatch("INSERT INTO track (id, recording, medium, position, number, name, artist_credit, length) "
@@ -379,7 +390,7 @@
IndexReader ir = DirectoryReader.open(ramDir);
assertEquals(2, ir.numDocs());
{
- checkTerm(ir, RecordingIndexField.COUNTRY, "gb");
+ checkTerm(ir, RecordingIndexField.COUNTRY, "af");
}
ir.close();
}
@@ -399,7 +410,7 @@
IndexReader ir = DirectoryReader.open(ramDir);
assertEquals(2, ir.numDocs());
{
- checkTerm(ir, RecordingIndexField.RELEASE_DATE, "1970-01-01");
+ checkTerm(ir, RecordingIndexField.RELEASE_DATE, "1950");
}
ir.close();
@@ -828,8 +839,20 @@
assertEquals("Crocodiles (bonus disc)", release.getTitle());
assertEquals("Official", release.getStatus());
assertEquals("c3b8dbc9-c1ff-4743-9015-8d762819134e", release.getId());
- assertEquals("GB", release.getCountry());
- assertEquals("1970-01-01", release.getDate());
+ assertEquals(null, release.getCountry());
+ assertEquals("1950", release.getDate());
+ ReleaseEventList rel = release.getReleaseEventList();
+ assertEquals(4,rel.getReleaseEvent().size());
+ assertEquals(null, release.getCountry());
+ assertEquals("1950", release.getDate());
+ assertEquals(null, rel.getReleaseEvent().get(0).getCountry());
+ assertEquals("1950", rel.getReleaseEvent().get(0).getDate());
+ assertEquals("GB", rel.getReleaseEvent().get(1).getCountry());
+ assertEquals("1970-01-01", rel.getReleaseEvent().get(1).getDate());
+ assertEquals("AF", rel.getReleaseEvent().get(2).getCountry());
+ assertEquals(null, rel.getReleaseEvent().get(2).getDate());
+ assertEquals("AN", rel.getReleaseEvent().get(3).getCountry());
+ assertEquals(null, rel.getReleaseEvent().get(3).getDate());
ReleaseGroup releaseGroup = release.getReleaseGroup();
assertNotNull(releaseGroup);
Modified: search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java
===================================================================
--- search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java 2013-05-02 12:08:28 UTC (rev 13674)
+++ search_server/trunk/index/src/test/java/org/musicbrainz/search/index/ReleaseIndexTest.java 2013-05-02 15:26:25 UTC (rev 13675)
@@ -7,6 +7,7 @@
import org.junit.Test;
import org.musicbrainz.mmd2.ArtistCredit;
import org.musicbrainz.mmd2.Release;
+import org.musicbrainz.mmd2.ReleaseEventList;
import java.sql.Statement;
@@ -138,6 +139,17 @@
stmt.addBatch("INSERT INTO area (id, name) VALUES (221, 'United Kingdom')");
stmt.addBatch("INSERT INTO iso_3166_1 (area, code) VALUES (221, 'GB')");
+ stmt.addBatch("INSERT INTO release_country (release, country) values (491240, 222)");
+ stmt.addBatch("INSERT INTO area (id, name) VALUES (222, 'Albania')");
+ stmt.addBatch("INSERT INTO iso_3166_1 (area, code) VALUES (222, 'AF')");
+
+ stmt.addBatch("INSERT INTO release_country (release, country) values (491240, 2)");
+ stmt.addBatch("INSERT INTO area (id, name) VALUES (2, 'Afghanistan')");
+ stmt.addBatch("INSERT INTO iso_3166_1 (area, code) VALUES (2, 'AN')");
+
+ stmt.addBatch("INSERT INTO release_unknown_country (release, date_year) values (491240, 1950)");
+
+
stmt.addBatch("INSERT INTO release_meta (id, amazon_asin) VALUES (491240, 'B00005NTQ7')");
stmt.addBatch("INSERT INTO medium (id, track_count, release, position, format) VALUES (1, 10, 491240, 1, 7)");
stmt.addBatch("INSERT INTO medium_cdtoc (id, medium, cdtoc) VALUES (1, 1, 1)");
@@ -896,10 +908,20 @@
assertEquals("c3b8dbc9-c1ff-4743-9015-8d762819134e", release.getId());
assertEquals("Crocodiles (bonus disc)", release.getTitle());
assertEquals("B00005NTQ7", release.getAsin());
- assertEquals("GB", release.getCountry());
- assertEquals("1970-01-01", release.getDate());
+ ReleaseEventList rel = release.getReleaseEventList();
+ assertNotNull(rel);
+ assertEquals(4,rel.getReleaseEvent().size());
+ assertEquals(null, release.getCountry());
+ assertEquals("1950", release.getDate());
+ assertEquals(null, rel.getReleaseEvent().get(0).getCountry());
+ assertEquals("1950", rel.getReleaseEvent().get(0).getDate());
+ assertEquals("GB", rel.getReleaseEvent().get(1).getCountry());
+ assertEquals("1970-01-01", rel.getReleaseEvent().get(1).getDate());
+ assertEquals("AF", rel.getReleaseEvent().get(2).getCountry());
+ assertEquals(null, rel.getReleaseEvent().get(2).getDate());
+ assertEquals("AN", rel.getReleaseEvent().get(3).getCountry());
+ assertEquals(null, rel.getReleaseEvent().get(3).getDate());
-
}
ir.close();
}