You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Alexandre Rafalovitch (Jira)" <ji...@apache.org> on 2020/08/29 20:24:00 UTC

[jira] [Resolved] (SOLR-3395) FieldStreamDataSource should handle null fields

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

Alexandre Rafalovitch resolved SOLR-3395.
-----------------------------------------
    Resolution: Won't Fix

> FieldStreamDataSource should handle null fields
> -----------------------------------------------
>
>                 Key: SOLR-3395
>                 URL: https://issues.apache.org/jira/browse/SOLR-3395
>             Project: Solr
>          Issue Type: Improvement
>          Components: contrib - DataImportHandler
>    Affects Versions: 3.5
>            Reporter: Andreas W
>            Priority: Minor
>
> The {{FieldStreamDataSource}} currently throws a {{DataImportHandlerException}} if a field value is null.
> IMHO this is not appropriate: It is legal for field values to be null (like no {{Blob}} exists in a particular row).
> I suggest to return an empty InputStream rather than throwing a {{DataImportHandlerException}}.
> {code}
>   public InputStream getData(String query) {
>     Object o = wrapper.getVariableResolver().resolve(dataField);
>     if (o == null) {
> //better: return new ByteArrayInputStream(new byte[0]);
>       throw new DataImportHandlerException(SEVERE, "No field available for name : " + dataField);
>     }
>     if (o instanceof Blob) {
>       Blob blob = (Blob) o;
>       try {
>         //Most of the JDBC drivers have getBinaryStream defined as public
>         // so let us just check it
>         Method m = blob.getClass().getDeclaredMethod("getBinaryStream");
>         if (Modifier.isPublic(m.getModifiers())) {
>           return (InputStream) m.invoke(blob);
>         } else {
>           // force invoke
>           m.setAccessible(true);
>           return (InputStream) m.invoke(blob);
>         }
>       } catch (Exception e) {
>         LOG.info("Unable to get data from BLOB");
>         return null;
>       }
>     } else if (o instanceof byte[]) {
>       byte[] bytes = (byte[]) o;
>       return new ByteArrayInputStream(bytes);
>     } else {
>       throw new RuntimeException("unsupported type : " + o.getClass());
>     } 
>   }
> {code}
> Maybe the best implementation would be to distinguish between a none-existing field and a null or empty field. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org