[ 
https://issues.apache.org/jira/browse/SOLR-2141?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vadim Kirilchuk updated SOLR-2141:
----------------------------------

    Attachment: dih-file.xml
                dih-config.xml

Hi, 

I am facing this error too and it seems that something is broken in 4.x branch.

I am attaching two files which can help to reproduce the problem:
1) dih-config.xml
contains dih configuration which uses escapeSql function with outer entity 
parameter
2) dih-file.xml 
To create outer entity without any db related stuff i need to create it from 
file.
Note: YOU MUST CHANGE ABSOLUTE PATH TO THIS FILE IN dih-config.xml to correct 
one.

--------------------
Ok, i can also shay the light on what happens under the hood:

The problem is in instances of VariableResolverImpl which are created every 
time anyone calls DocBuilder#getVariableResolver();

First, it is called to create function namespaces which are cached in 
DocBuilder instance.

Then it is created when DocBuilder#doFullDump() is called.

Then subEntity tries to resolve its 'query' parameter which has escapeSql 
function, and escapeSql function tries to resolve its param with the first 
VariableResolver which know nothing about current context and outer entity 
values.

However all fails a little bit later, when EvaluatorBag#evaluate() is called:
List l = parseParams(expression, context.getVariableResolver());
        if (l.size() != 1) {
          throw new DataImportHandlerException(SEVERE, "'escapeSql' must have 
at least one parameter ");
        }
        String s = l.get(0).toString();
        return s.replaceAll

Here parseParams returns list with single VariableWrapper, but wrapper.toString 
returns null because variable cant be resolved. And finally (ta-dam!) 
replaceAll method is called on null value.

P.s.
don`t be confused with FileDataSource for first entity mixed up with Sql query 
for second entity. Absense of sql datasource has no effect on this bug.

Thanks, it would be great if this bug will be fixed ASAP.

                
> NullPointerException when using escapeSql function
> --------------------------------------------------
>
>                 Key: SOLR-2141
>                 URL: https://issues.apache.org/jira/browse/SOLR-2141
>             Project: Solr
>          Issue Type: Bug
>          Components: contrib - DataImportHandler
>    Affects Versions: 1.4.1
>         Environment: openjdk 1.6.0 b12
>            Reporter: Edward Rudd
>            Assignee: Koji Sekiguchi
>         Attachments: dih-config.xml, dih-file.xml, SOLR-2141-sample.patch
>
>
> I have two entities defined, nested in each other..
> <entity name="article" query="select category, subcategory from articles">
>    <entity name="other" query="select other from othertable where 
> category='${dataimporter.functions.escapeSql(article.category)}'
>               AND 
> subcategory='${dataimporter.functions.escapeSql(article.subcategory)}'">  
>    </entity>
> </entity>
> Now, when I run that it bombs on any article where subcategory = '' (it's a 
> NOT NULL column so empty string is there)  If i do where subcategory!='' in 
> the article query it works fine (aside from not pulling in all of the 
> articles).
> org.apache.solr.handler.dataimport.DataImportHandlerException: 
> java.lang.NullPointerException
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:424)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:383)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:242)
>         at 
> org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:180)
>         at 
> org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:331)
>         at 
> org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:389)
>         at 
> org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:370)
> Caused by: java.lang.NullPointerException
>         at 
> org.apache.solr.handler.dataimport.EvaluatorBag$1.evaluate(EvaluatorBag.java:75)
>         at 
> org.apache.solr.handler.dataimport.EvaluatorBag$5.get(EvaluatorBag.java:216)
>         at 
> org.apache.solr.handler.dataimport.EvaluatorBag$5.get(EvaluatorBag.java:204)
>         at 
> org.apache.solr.handler.dataimport.VariableResolverImpl.resolve(VariableResolverImpl.java:107)
>         at 
> org.apache.solr.handler.dataimport.TemplateString.fillTokens(TemplateString.java:81)
>         at 
> org.apache.solr.handler.dataimport.TemplateString.replaceTokens(TemplateString.java:75)
>         at 
> org.apache.solr.handler.dataimport.VariableResolverImpl.replaceTokens(VariableResolverImpl.java:87)
>         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:357)
>         ... 6 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to