[
https://issues.apache.org/jira/browse/DRILL-6060?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pritesh Maker updated DRILL-6060:
---------------------------------
Fix Version/s: (was: 1.14.0)
> JDBC-all excludes files required for date/time vectors
> ------------------------------------------------------
>
> Key: DRILL-6060
> URL: https://issues.apache.org/jira/browse/DRILL-6060
> Project: Apache Drill
> Issue Type: Bug
> Affects Versions: 1.12.0
> Reporter: Paul Rogers
> Assignee: Paul Rogers
> Priority: Major
>
> The vector package contains the file
> {{org.apache.drill.exec.expr.fn.impl.DateUtility}}. It contains formatting
> code along with a set of date constants (such as the number of hours in a
> day.) The date constants are used in the generated value vector code, such as
> for the {{IntervalVector}} class:
> {code}
> public StringBuilder getAsStringBuilder(int index) {
> ...
> final int years = (months /
> org.apache.drill.exec.expr.fn.impl.DateUtility.yearsToMonths);
> months = (months %
> org.apache.drill.exec.expr.fn.impl.DateUtility.yearsToMonths);
> {code}
> Thus, the {{DateUtility}} class is required in order for the date/time
> vectors to work.
> Yet, recent changes to the JDBC driver now excludes the package that contains
> the {{DateUtility}} class. In {{dependency-reduced-pom.xml}}:
> {code}
> <exclude>org/apache/drill/exec/expr/fn/**</exclude>
> {code}
> A refactoring exercised moved more of the date/time code out of generated
> code and into the {{DateUtility}} class, so that the code can be reused. The
> result are runtime errors in unit tests.
> {noformat}
> Caused by: java.lang.NoClassDefFoundError:
> oadd/org/apache/drill/exec/expr/fn/impl/DateUtility
> at
> oadd.org.apache.drill.exec.vector.IntervalDayVector$Accessor.getObject(IntervalDayVector.java:450)
> at
> oadd.org.apache.drill.exec.vector.accessor.IntervalDayAccessor.getObject(IntervalDayAccessor.java:125)
> {noformat}
> Since the intent is to exclude functions only needed by Drill execution, the
> solution is to move the code required by vectors out of the {{fn}} package.
> The safe bet is to put it in the {{org.apache.drill.exec.vector}} which can't
> be excluded (it includes the value vector code.)
> The larger issue is that the concept of excluding bits of Drill code is
> problematic: there is no good way to ensure that the code is not needed.
> The traditional (and reliable) solution is to design a client-only library
> which is designed to include only the required dependences. Build up the list
> of dependencies from zero (as is common practice in Maven) rather than try to
> add things then throw them overboard.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)