Author: shalin
Date: Fri Dec 5 11:14:11 2008
New Revision: 723824
URL: http://svn.apache.org/viewvc?rev=723824&view=rev
Log:
SOLR-893 -- Unable to delete documents via SQL and deletedPkQuery with
deltaimport
Modified:
lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestSqlEntityProcessor2.java
Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=723824&r1=723823&r2=723824&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Fri Dec 5 11:14:11
2008
@@ -63,6 +63,9 @@
8. SOLR-873: Fix case-sensitive field names and columns (Jon Baer, shalin)
+9. SOLR-893: Unable to delete documents via SQL and deletedPkQuery with
deltaimport
+ (Dan Rosher via shalin)
+
Documentation
----------------------
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java?rev=723824&r1=723823&r2=723824&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
Fri Dec 5 11:14:11 2008
@@ -463,10 +463,8 @@
Set<Map<String, Object>> deltaSet = new HashSet<Map<String, Object>>();
resolver.addNamespace(null, (Map) entity.allAttributes);
EntityProcessor entityProcessor = getEntityProcessor(entity,
context.getCore());
- entityProcessor.init(new ContextImpl(entity, resolver, null,
- Context.FIND_DELTA, session, null, this));
+ entityProcessor.init(new ContextImpl(entity, resolver, null,
Context.FIND_DELTA, session, null, this));
LOG.info("Running ModifiedRowKey() for Entity: " + entity.name);
- int count = 0;
//get the modified rows in this entity
while (true) {
Map<String, Object> row = entityProcessor.nextModifiedRowKey();
@@ -475,27 +473,32 @@
break;
deltaSet.add(row);
- count++;
importStatistics.rowsCount.incrementAndGet();
}
- LOG.info("Completed ModifiedRowKey for Entity: " + entity.name
- + " rows obtained : " + count);
- count = 0;
- // identifying the deleted rows from this entities
- LOG.info("Running DeletedRowKey() for Entity: " + entity.name);
//get the deleted rows for this entity
Set<Map<String, Object>> deletedSet = new HashSet<Map<String, Object>>();
+ Set<Map<String, Object>> deltaRemoveSet = new HashSet<Map<String,
Object>>();
while (true) {
Map<String, Object> row = entityProcessor.nextDeletedRowKey();
if (row == null)
break;
+ //Check to see if this delete is in the current delta set
+ for (Map<String, Object> modifiedRow : deltaSet) {
+ if (modifiedRow.get(entity.pk).equals(row.get(entity.pk))) {
+ deltaRemoveSet.add(modifiedRow);
+ }
+ }
+
deletedSet.add(row);
- count++;
importStatistics.rowsCount.incrementAndGet();
}
- LOG.info("Completed DeletedRowKey for Entity: " + entity.name
- + " rows obtained : " + count);
+
+ //asymmetric Set difference
+ deltaSet.removeAll(deltaRemoveSet);
+
+ LOG.info("Completed ModifiedRowKey for Entity: " + entity.name + " rows
obtained : " + deltaSet.size());
+ LOG.info("Completed DeletedRowKey for Entity: " + entity.name + " rows
obtained : " + deletedSet.size());
myModifiedPks.addAll(deltaSet);
Set<Map<String, Object>> parentKeyList = new HashSet<Map<String,
Object>>();
@@ -507,12 +510,10 @@
// identifying deleted rows with deltas
for (Map<String, Object> row : myModifiedPks)
- getModifiedParentRows(resolver.addNamespace(entity.name, row),
- entity.name, parentEntityProcessor, parentKeyList);
+ getModifiedParentRows(resolver.addNamespace(entity.name, row),
entity.name, parentEntityProcessor, parentKeyList);
// running the same for deletedrows
for (Map<String, Object> row : deletedSet) {
- getModifiedParentRows(resolver.addNamespace(entity.name, row),
- entity.name, parentEntityProcessor, parentKeyList);
+ getModifiedParentRows(resolver.addNamespace(entity.name, row),
entity.name, parentEntityProcessor, parentKeyList);
}
}
LOG.info("Completed parentDeltaQuery for Entity: " + entity.name);
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java?rev=723824&r1=723823&r2=723824&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
Fri Dec 5 11:14:11 2008
@@ -230,10 +230,12 @@
if (rowIterator.hasNext())
return rowIterator.next();
query = null;
+ rowIterator = null;
return null;
} catch (Exception e) {
log.error("getNext() failed for query '" + query + "'", e);
query = null;
+ rowIterator = null;
wrapAndThrow(DataImportHandlerException.WARN, e);
return null;
}
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestSqlEntityProcessor2.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestSqlEntityProcessor2.java?rev=723824&r1=723823&r2=723824&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestSqlEntityProcessor2.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestSqlEntityProcessor2.java
Fri Dec 5 11:14:11 2008
@@ -80,7 +80,7 @@
List parentRow = new ArrayList();
parentRow.add(createMap("id", "5"));
- MockDataSource.setIterator("select * from x where x.id = '5'", parentRow
+ MockDataSource.setIterator("select * from x where id = '5'", parentRow
.iterator());
List childRow = new ArrayList();
@@ -96,6 +96,56 @@
@Test
@SuppressWarnings("unchecked")
+ public void testCompositePk_DeltaImport_DeletedPkQuery() throws Exception {
+ List parentRow = new ArrayList();
+ parentRow.add(createMap("id", "11"));
+ MockDataSource.setIterator("select * from x", parentRow.iterator());
+
+ List childRow = new ArrayList();
+ childRow.add(createMap("desc", "hello"));
+
+ MockDataSource.setIterator("select * from y where y.A=11", childRow
+ .iterator());
+
+ super.runFullImport(dataConfig);
+
+ assertQ(req("id:11"), "//[EMAIL PROTECTED]'1']");
+
+
+
+ List deltaRow = new ArrayList();
+ deltaRow.add(createMap("id", "15"));
+ deltaRow.add(createMap("id", "17"));
+ MockDataSource.setIterator("select id from x where last_modified > NOW",
+ deltaRow.iterator());
+
+ List deltaDeleteRow = new ArrayList();
+ deltaDeleteRow.add(createMap("id", "11"));
+ deltaDeleteRow.add(createMap("id", "17"));
+ MockDataSource.setIterator("select id from x where last_modified > NOW AND
deleted='true'",
+ deltaDeleteRow.iterator());
+
+ parentRow = new ArrayList();
+ parentRow.add(createMap("id", "15"));
+ MockDataSource.setIterator("select * from x where id = '15'", parentRow
+ .iterator());
+
+ parentRow = new ArrayList();
+ parentRow.add(createMap("id", "17"));
+ MockDataSource.setIterator("select * from x where id = '17'", parentRow
+ .iterator());
+
+ super.runDeltaImport(dataConfig);
+
+ assertQ(req("id:15"), "//[EMAIL PROTECTED]'1']");
+ assertQ(req("id:11"), "//[EMAIL PROTECTED]'0']");
+ assertQ(req("id:17"), "//[EMAIL PROTECTED]'0']");
+
+
+ }
+
+ @Test
+ @SuppressWarnings("unchecked")
public void testCompositePk_DeltaImport_DeltaImportQuery() throws Exception {
List deltaRow = new ArrayList();
deltaRow.add(createMap("id", "5"));
@@ -120,7 +170,7 @@
private static String dataConfig = "<dataConfig>\n"
+ " <document>\n"
- + " <entity name=\"x\" pk=\"x.id\" query=\"select *
from x\" deltaQuery=\"select id from x where last_modified > NOW\">\n"
+ + " <entity name=\"x\" pk=\"id\" query=\"select * from
x\" deletedPkQuery=\"select id from x where last_modified > NOW AND
deleted='true'\" deltaQuery=\"select id from x where last_modified > NOW\">\n"
+ " <field column=\"id\" />\n"
+ " <entity name=\"y\" query=\"select * from y
where y.A=${x.id}\">\n"
+ " <field column=\"desc\" />\n"