If your are writing a Transformer (or any other component) you can get hold of a dataSource instance .
datasource =Context#getDataSource(name). //then you can invoke datasource.getData("update mytable ...."); //though the name is getData() it can execute update commands also ensure that you do a datasource.close(); after you are done On Tue, Aug 4, 2009 at 9:40 AM, Avlesh Singh<avl...@gmail.com> wrote: > Couple of things - > > 1. Your dataSource is probably in readOnly mode. It is possible to fire > updates, by specifying readOnly="false" in your dataSource. > 2. What you are trying achieve, is typically done using a "select for > update". For MySql, here's the documentation - > http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html > 3. You don't need to create a separate "entity" for firing updates. > Writing a database procedure might be a good idea. In that case your query > will simply be <entity name="mainEntity" query="call MyProcedure();" .../>. > All the heavy lifting can be done by this query. > > Moreover, update queries, only return the number of rows affected and not a > resultSet. DIH expects one and hence the exception. > > Cheers > Avlesh > > On Tue, Aug 4, 2009 at 1:49 AM, Jay Hill <jayallenh...@gmail.com> wrote: > >> Is it possible for the DataImportHandler to update records in the table it >> is querying? For example, say I have a query like this in my entity: >> >> query="select field1, field2, from someTable where hasBeenIndexed=false" >> >> Is there a way I can mark each record processed by updating the >> hasBeenIndexed field? Here's a config I tried: >> >> <?xml version="1.0"?> >> <dataConfig> >> <dataSource >> type="JdbcDataSource" >> driver="com.mysql.jdbc.Driver" >> url="jdbc:mysql://localhost:3306/solrhacks" >> user="user" >> password="pass"/> >> >> <document name="testingDIHupdate"> >> <entity name="mainEntity" >> pk="id" >> query="select id, name from tableToIndex where >> hasBeenIndexed=0"> >> <field column="id" template="dihTestUpdate-${main.id}"/> >> <field column="name" name="name"/> >> >> <entity name="updateEntity" >> pk="id" >> query="update tableToIndex set hasBeenIndexed=1 where >> id=${mainEntity.id}"> >> </entity> >> </entity> >> </document> >> </dataConfig> >> >> It does update the first record, but then an Exception is thrown: >> Aug 3, 2009 1:15:24 PM org.apache.solr.handler.dataimport.DocBuilder >> buildDocument >> SEVERE: Exception while processing: mainEntity document : >> SolrInputDocument[{id=id(1.0)={1}, name=name(1.0)={John Jones}}] >> org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to >> execute query: update tableToIndex set hasBeenIndexed=1 where id=1 >> Processing Document # 1 >> at >> >> org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:250) >> at >> >> org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:207) >> at >> >> org.apache.solr.handler.dataimport.JdbcDataSource.getData(JdbcDataSource.java:40) >> at >> >> org.apache.solr.handler.dataimport.SqlEntityProcessor.initQuery(SqlEntityProcessor.java:58) >> at >> >> org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:71) >> at >> >> org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:237) >> at >> >> org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:344) >> at >> >> org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:370) >> at >> >> org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:225) >> at >> org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:167) >> at >> >> org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:333) >> at >> >> org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:393) >> at >> >> org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:372) >> Caused by: java.lang.NullPointerException >> at >> >> org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.<init>(JdbcDataSource.java:248) >> ... 12 more >> >> >> -Jay >> > -- ----------------------------------------------------- Noble Paul | Principal Engineer| AOL | http://aol.com