PageRenderTime 53ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 1ms

/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorExpressionWriterFactory.java

http://github.com/apache/hive
Java | 1941 lines | 1525 code | 230 blank | 186 comment | 373 complexity | aeafc65396011448ea9764da0e5b87d6 MD5 | raw file
Possible License(s): Apache-2.0

Large files files are truncated, but you can click here to view the full file

  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. package org.apache.hadoop.hive.ql.exec.vector.expressions;
  19. import java.sql.Date;
  20. import java.sql.Timestamp;
  21. import java.util.ArrayList;
  22. import java.util.Arrays;
  23. import java.util.List;
  24. import java.util.Map;
  25. import org.apache.commons.lang3.ArrayUtils;
  26. import org.apache.commons.lang3.StringUtils;
  27. import org.apache.hadoop.hive.common.type.HiveChar;
  28. import org.apache.hadoop.hive.common.type.HiveDecimal;
  29. import org.apache.hadoop.hive.common.type.HiveIntervalDayTime;
  30. import org.apache.hadoop.hive.common.type.HiveIntervalYearMonth;
  31. import org.apache.hadoop.hive.common.type.HiveVarchar;
  32. import org.apache.hadoop.hive.ql.exec.vector.*;
  33. import org.apache.hadoop.hive.ql.metadata.HiveException;
  34. import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
  35. import org.apache.hadoop.hive.serde2.io.*;
  36. import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
  37. import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
  38. import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
  39. import org.apache.hadoop.hive.serde2.objectinspector.SettableListObjectInspector;
  40. import org.apache.hadoop.hive.serde2.objectinspector.SettableMapObjectInspector;
  41. import org.apache.hadoop.hive.serde2.objectinspector.SettableStructObjectInspector;
  42. import org.apache.hadoop.hive.serde2.objectinspector.SettableUnionObjectInspector;
  43. import org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector;
  44. import org.apache.hadoop.hive.serde2.objectinspector.StructField;
  45. import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
  46. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableBinaryObjectInspector;
  47. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableBooleanObjectInspector;
  48. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableByteObjectInspector;
  49. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableDateObjectInspector;
  50. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableDoubleObjectInspector;
  51. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableFloatObjectInspector;
  52. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableHiveCharObjectInspector;
  53. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableHiveDecimalObjectInspector;
  54. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableHiveIntervalDayTimeObjectInspector;
  55. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableHiveIntervalYearMonthObjectInspector;
  56. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableHiveVarcharObjectInspector;
  57. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableIntObjectInspector;
  58. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableLongObjectInspector;
  59. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableTimestampObjectInspector;
  60. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableShortObjectInspector;
  61. import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableStringObjectInspector;
  62. import org.apache.hadoop.hive.serde2.objectinspector.primitive.VoidObjectInspector;
  63. import org.apache.hadoop.hive.serde2.typeinfo.MapTypeInfo;
  64. import org.apache.hadoop.hive.serde2.typeinfo.StructTypeInfo;
  65. import org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo;
  66. import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
  67. import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
  68. import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
  69. import org.apache.hadoop.hive.serde2.typeinfo.UnionTypeInfo;
  70. import org.apache.hadoop.io.Text;
  71. /**
  72. * VectorExpressionWritableFactory helper class for generating VectorExpressionWritable objects.
  73. */
  74. public final class VectorExpressionWriterFactory {
  75. /**
  76. * VectorExpressionWriter base implementation, to be specialized for Long/Double/Bytes columns
  77. */
  78. private static abstract class VectorExpressionWriterBase implements VectorExpressionWriter {
  79. protected ObjectInspector objectInspector;
  80. /**
  81. * The object inspector associated with this expression. This is created from the expression
  82. * NodeDesc (compile metadata) not from the VectorColumn info and thus preserves the type info
  83. * lost by the vectorization process.
  84. */
  85. public ObjectInspector getObjectInspector() {
  86. return objectInspector;
  87. }
  88. public VectorExpressionWriter init(ObjectInspector objectInspector) throws HiveException {
  89. this.objectInspector = objectInspector;
  90. return this;
  91. }
  92. /**
  93. * The base implementation must be overridden by the Long specialization
  94. */
  95. @Override
  96. public Object writeValue(long value) throws HiveException {
  97. throw new HiveException("Internal error: should not reach here");
  98. }
  99. /**
  100. * The base implementation must be overridden by the Long specialization
  101. */
  102. public Object setValue(Object field, long value) throws HiveException {
  103. throw new HiveException("Internal error: should not reach here");
  104. }
  105. /**
  106. * The base implementation must be overridden by the Double specialization
  107. */
  108. @Override
  109. public Object writeValue(double value) throws HiveException {
  110. throw new HiveException("Internal error: should not reach here");
  111. }
  112. /**
  113. * The base implementation must be overridden by the Double specialization
  114. */
  115. public Object setValue(Object field, double value) throws HiveException {
  116. throw new HiveException("Internal error: should not reach here");
  117. }
  118. /**
  119. * The base implementation must be overridden by the Bytes specialization
  120. */
  121. @Override
  122. public Object writeValue(byte[] value, int start, int length) throws HiveException {
  123. throw new HiveException("Internal error: should not reach here");
  124. }
  125. /**
  126. * The base implementation must be overridden by the Bytes specialization
  127. */
  128. public Object setValue(Object field, byte[] value, int start, int length) throws HiveException {
  129. throw new HiveException("Internal error: should not reach here");
  130. }
  131. /**
  132. * The base implementation must be overridden by the Decimal specialization
  133. */
  134. @Override
  135. public Object writeValue(HiveDecimal value) throws HiveException {
  136. throw new HiveException("Internal error: should not reach here");
  137. }
  138. /**
  139. * The base implementation must be overridden by the Decimal specialization
  140. */
  141. @Override
  142. public Object writeValue(HiveDecimalWritable value) throws HiveException {
  143. throw new HiveException("Internal error: should not reach here");
  144. }
  145. /**
  146. * The base implementation must be overridden by the Decimal specialization
  147. */
  148. public Object setValue(Object field, HiveDecimalWritable value) throws HiveException {
  149. throw new HiveException("Internal error: should not reach here");
  150. }
  151. /**
  152. * The base implementation must be overridden by the Decimal specialization
  153. */
  154. public Object setValue(Object field, HiveDecimal value) throws HiveException {
  155. throw new HiveException("Internal error: should not reach here");
  156. }
  157. /**
  158. * The base implementation must be overridden by the Timestamp specialization
  159. */
  160. @Override
  161. public Object writeValue(Timestamp value) throws HiveException {
  162. throw new HiveException("Internal error: should not reach here");
  163. }
  164. /**
  165. * The base implementation must be overridden by the Timestamp specialization
  166. */
  167. @Override
  168. public Object writeValue(TimestampWritableV2 value) throws HiveException {
  169. throw new HiveException("Internal error: should not reach here");
  170. }
  171. /**
  172. * The base implementation must be overridden by the Timestamp specialization
  173. */
  174. public Object setValue(Object field, TimestampWritableV2 value) throws HiveException {
  175. throw new HiveException("Internal error: should not reach here");
  176. }
  177. /**
  178. * The base implementation must be overridden by the Timestamp specialization
  179. */
  180. public Object setValue(Object field, Timestamp value) throws HiveException {
  181. throw new HiveException("Internal error: should not reach here");
  182. }
  183. /**
  184. * The base implementation must be overridden by the HiveIntervalDayTime specialization
  185. */
  186. @Override
  187. public Object writeValue(HiveIntervalDayTimeWritable value) throws HiveException {
  188. throw new HiveException("Internal error: should not reach here");
  189. }
  190. /**
  191. * The base implementation must be overridden by the HiveIntervalDayTime specialization
  192. */
  193. @Override
  194. public Object writeValue(HiveIntervalDayTime value) throws HiveException {
  195. throw new HiveException("Internal error: should not reach here");
  196. }
  197. /**
  198. * The base implementation must be overridden by the HiveIntervalDayTime specialization
  199. */
  200. public Object setValue(Object field, HiveIntervalDayTimeWritable value) throws HiveException {
  201. throw new HiveException("Internal error: should not reach here");
  202. }
  203. /**
  204. * The base implementation must be overridden by the HiveIntervalDayTime specialization
  205. */
  206. public Object setValue(Object field, HiveIntervalDayTime value) throws HiveException {
  207. throw new HiveException("Internal error: should not reach here");
  208. }
  209. }
  210. /**
  211. * Specialized writer for LongVectorColumn expressions. Will throw cast exception
  212. * if the wrong vector column is used.
  213. */
  214. private static abstract class VectorExpressionWriterLong
  215. extends VectorExpressionWriterBase {
  216. @Override
  217. public Object writeValue(ColumnVector column, int row) throws HiveException {
  218. LongColumnVector lcv = (LongColumnVector) column;
  219. if (lcv.noNulls && !lcv.isRepeating) {
  220. return writeValue(lcv.vector[row]);
  221. } else if (lcv.noNulls && lcv.isRepeating) {
  222. return writeValue(lcv.vector[0]);
  223. } else if (!lcv.noNulls && !lcv.isRepeating && !lcv.isNull[row]) {
  224. return writeValue(lcv.vector[row]);
  225. } else if (!lcv.noNulls && !lcv.isRepeating && lcv.isNull[row]) {
  226. return null;
  227. } else if (!lcv.noNulls && lcv.isRepeating && !lcv.isNull[0]) {
  228. return writeValue(lcv.vector[0]);
  229. } else if (!lcv.noNulls && lcv.isRepeating && lcv.isNull[0]) {
  230. return null;
  231. }
  232. throw new HiveException(
  233. String.format(
  234. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  235. row, lcv.noNulls, lcv.isRepeating, lcv.isNull[row], lcv.isNull[0]));
  236. }
  237. @Override
  238. public Object setValue(Object field, ColumnVector column, int row) throws HiveException {
  239. LongColumnVector lcv = (LongColumnVector) column;
  240. if (lcv.noNulls && !lcv.isRepeating) {
  241. return setValue(field, lcv.vector[row]);
  242. } else if (lcv.noNulls && lcv.isRepeating) {
  243. return setValue(field, lcv.vector[0]);
  244. } else if (!lcv.noNulls && !lcv.isRepeating && !lcv.isNull[row]) {
  245. return setValue(field, lcv.vector[row]);
  246. } else if (!lcv.noNulls && !lcv.isRepeating && lcv.isNull[row]) {
  247. return null;
  248. } else if (!lcv.noNulls && lcv.isRepeating && !lcv.isNull[0]) {
  249. return setValue(field, lcv.vector[0]);
  250. } else if (!lcv.noNulls && lcv.isRepeating && lcv.isNull[0]) {
  251. return null;
  252. }
  253. throw new HiveException(
  254. String.format(
  255. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  256. row, lcv.noNulls, lcv.isRepeating, lcv.isNull[row], lcv.isNull[0]));
  257. }
  258. }
  259. /**
  260. * Specialized writer for DoubleColumnVector. Will throw cast exception
  261. * if the wrong vector column is used.
  262. */
  263. private static abstract class VectorExpressionWriterDouble extends VectorExpressionWriterBase {
  264. @Override
  265. public Object writeValue(ColumnVector column, int row) throws HiveException {
  266. DoubleColumnVector dcv = (DoubleColumnVector) column;
  267. if (dcv.noNulls && !dcv.isRepeating) {
  268. return writeValue(dcv.vector[row]);
  269. } else if (dcv.noNulls && dcv.isRepeating) {
  270. return writeValue(dcv.vector[0]);
  271. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  272. return writeValue(dcv.vector[row]);
  273. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  274. return null;
  275. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  276. return writeValue(dcv.vector[0]);
  277. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  278. return null;
  279. }
  280. throw new HiveException(
  281. String.format(
  282. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  283. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  284. }
  285. @Override
  286. public Object setValue(Object field, ColumnVector column, int row) throws HiveException {
  287. DoubleColumnVector dcv = (DoubleColumnVector) column;
  288. if (dcv.noNulls && !dcv.isRepeating) {
  289. return setValue(field, dcv.vector[row]);
  290. } else if (dcv.noNulls && dcv.isRepeating) {
  291. return setValue(field, dcv.vector[0]);
  292. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  293. return setValue(field, dcv.vector[row]);
  294. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  295. return null;
  296. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  297. return setValue(field, dcv.vector[0]);
  298. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  299. return null;
  300. }
  301. throw new HiveException(
  302. String.format(
  303. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  304. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  305. }
  306. }
  307. /**
  308. * Specialized writer for BytesColumnVector. Will throw cast exception
  309. * if the wrong vector column is used.
  310. */
  311. private static abstract class VectorExpressionWriterBytes extends VectorExpressionWriterBase {
  312. @Override
  313. public Object writeValue(ColumnVector column, int row) throws HiveException {
  314. BytesColumnVector bcv = (BytesColumnVector) column;
  315. if (bcv.noNulls && !bcv.isRepeating) {
  316. return writeValue(bcv.vector[row], bcv.start[row], bcv.length[row]);
  317. } else if (bcv.noNulls && bcv.isRepeating) {
  318. return writeValue(bcv.vector[0], bcv.start[0], bcv.length[0]);
  319. } else if (!bcv.noNulls && !bcv.isRepeating && !bcv.isNull[row]) {
  320. return writeValue(bcv.vector[row], bcv.start[row], bcv.length[row]);
  321. } else if (!bcv.noNulls && !bcv.isRepeating && bcv.isNull[row]) {
  322. return null;
  323. } else if (!bcv.noNulls && bcv.isRepeating && !bcv.isNull[0]) {
  324. return writeValue(bcv.vector[0], bcv.start[0], bcv.length[0]);
  325. } else if (!bcv.noNulls && bcv.isRepeating && bcv.isNull[0]) {
  326. return null;
  327. }
  328. throw new HiveException(
  329. String.format(
  330. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  331. row, bcv.noNulls, bcv.isRepeating, bcv.isNull[row], bcv.isNull[0]));
  332. }
  333. @Override
  334. public Object setValue(Object field, ColumnVector column, int row) throws HiveException {
  335. BytesColumnVector bcv = (BytesColumnVector) column;
  336. if (bcv.noNulls && !bcv.isRepeating) {
  337. return setValue(field, bcv.vector[row], bcv.start[row], bcv.length[row]);
  338. } else if (bcv.noNulls && bcv.isRepeating) {
  339. return setValue(field, bcv.vector[0], bcv.start[0], bcv.length[0]);
  340. } else if (!bcv.noNulls && !bcv.isRepeating && !bcv.isNull[row]) {
  341. return setValue(field, bcv.vector[row], bcv.start[row], bcv.length[row]);
  342. } else if (!bcv.noNulls && !bcv.isRepeating && bcv.isNull[row]) {
  343. return null;
  344. } else if (!bcv.noNulls && bcv.isRepeating && !bcv.isNull[0]) {
  345. return setValue(field, bcv.vector[0], bcv.start[0], bcv.length[0]);
  346. } else if (!bcv.noNulls && bcv.isRepeating && bcv.isNull[0]) {
  347. return null;
  348. }
  349. throw new HiveException(
  350. String.format(
  351. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  352. row, bcv.noNulls, bcv.isRepeating, bcv.isNull[row], bcv.isNull[0]));
  353. }
  354. }
  355. /**
  356. * Specialized writer for DecimalColumnVector. Will throw cast exception
  357. * if the wrong vector column is used.
  358. */
  359. private static abstract class VectorExpressionWriterDecimal extends VectorExpressionWriterBase {
  360. @Override
  361. public Object writeValue(ColumnVector column, int row) throws HiveException {
  362. if (column instanceof Decimal64ColumnVector) {
  363. Decimal64ColumnVector d64cv = (Decimal64ColumnVector) column;
  364. final long decimal64Long;
  365. if (d64cv.noNulls && !d64cv.isRepeating) {
  366. decimal64Long = d64cv.vector[row];
  367. } else if (d64cv.noNulls && d64cv.isRepeating) {
  368. decimal64Long = d64cv.vector[0];
  369. } else if (!d64cv.noNulls && !d64cv.isRepeating && !d64cv.isNull[row]) {
  370. decimal64Long = d64cv.vector[row];
  371. } else if (!d64cv.noNulls && !d64cv.isRepeating && d64cv.isNull[row]) {
  372. return null;
  373. } else if (!d64cv.noNulls && d64cv.isRepeating && !d64cv.isNull[0]) {
  374. decimal64Long = d64cv.vector[0];
  375. } else if (!d64cv.noNulls && d64cv.isRepeating && d64cv.isNull[0]) {
  376. return null;
  377. } else {
  378. throw new HiveException(
  379. String.format(
  380. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  381. row, d64cv.noNulls, d64cv.isRepeating, d64cv.isNull[row], d64cv.isNull[0]));
  382. }
  383. HiveDecimalWritable scratchHiveDecimalWritable = d64cv.getScratchWritable();
  384. scratchHiveDecimalWritable.deserialize64(decimal64Long, d64cv.scale);
  385. return writeValue(scratchHiveDecimalWritable);
  386. }
  387. DecimalColumnVector dcv = (DecimalColumnVector) column;
  388. if (dcv.noNulls && !dcv.isRepeating) {
  389. return writeValue(dcv.vector[row]);
  390. } else if (dcv.noNulls && dcv.isRepeating) {
  391. return writeValue(dcv.vector[0]);
  392. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  393. return writeValue(dcv.vector[row]);
  394. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  395. return writeValue(dcv.vector[0]);
  396. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  397. return null;
  398. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  399. return null;
  400. }
  401. throw new HiveException(
  402. String.format(
  403. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  404. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  405. }
  406. @Override
  407. public Object setValue(Object field, ColumnVector column, int row) throws HiveException {
  408. DecimalColumnVector dcv = (DecimalColumnVector) column;
  409. if (dcv.noNulls && !dcv.isRepeating) {
  410. return setValue(field, dcv.vector[row]);
  411. } else if (dcv.noNulls && dcv.isRepeating) {
  412. return setValue(field, dcv.vector[0]);
  413. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  414. return setValue(field, dcv.vector[row]);
  415. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  416. return null;
  417. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  418. return setValue(field, dcv.vector[0]);
  419. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  420. return null;
  421. }
  422. throw new HiveException(
  423. String.format(
  424. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  425. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  426. }
  427. }
  428. /**
  429. * Specialized writer for TimestampColumnVector. Will throw cast exception
  430. * if the wrong vector column is used.
  431. */
  432. private static abstract class VectorExpressionWriterTimestamp extends VectorExpressionWriterBase {
  433. @Override
  434. public Object writeValue(ColumnVector column, int row) throws HiveException {
  435. TimestampColumnVector dcv = (TimestampColumnVector) column;
  436. TimestampWritableV2 timestampWritable = (TimestampWritableV2) dcv.getScratchWritable();
  437. if (timestampWritable == null) {
  438. timestampWritable = new TimestampWritableV2();
  439. dcv.setScratchWritable(timestampWritable);
  440. }
  441. if (dcv.noNulls && !dcv.isRepeating) {
  442. return writeValue(TimestampUtils.timestampColumnVectorWritable(dcv, row, timestampWritable));
  443. } else if (dcv.noNulls && dcv.isRepeating) {
  444. return writeValue(TimestampUtils.timestampColumnVectorWritable(dcv, 0, timestampWritable));
  445. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  446. return writeValue(TimestampUtils.timestampColumnVectorWritable(dcv, row, timestampWritable));
  447. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  448. return writeValue(TimestampUtils.timestampColumnVectorWritable(dcv, 0, timestampWritable));
  449. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  450. return null;
  451. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  452. return null;
  453. }
  454. throw new HiveException(
  455. String.format(
  456. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  457. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  458. }
  459. @Override
  460. public Object setValue(Object field, ColumnVector column, int row) throws HiveException {
  461. TimestampColumnVector dcv = (TimestampColumnVector) column;
  462. TimestampWritableV2 timestampWritable = (TimestampWritableV2) dcv.getScratchWritable();
  463. if (timestampWritable == null) {
  464. timestampWritable = new TimestampWritableV2();
  465. dcv.setScratchWritable(timestampWritable);
  466. }
  467. if (dcv.noNulls && !dcv.isRepeating) {
  468. return setValue(field, TimestampUtils.timestampColumnVectorWritable(dcv, row, timestampWritable));
  469. } else if (dcv.noNulls && dcv.isRepeating) {
  470. return setValue(field, TimestampUtils.timestampColumnVectorWritable(dcv, 0, timestampWritable));
  471. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  472. return setValue(field, TimestampUtils.timestampColumnVectorWritable(dcv, row, timestampWritable));
  473. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  474. return null;
  475. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  476. return setValue(field, TimestampUtils.timestampColumnVectorWritable(dcv, 0, timestampWritable));
  477. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  478. return null;
  479. }
  480. throw new HiveException(
  481. String.format(
  482. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  483. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  484. }
  485. }
  486. /**
  487. * Specialized writer for IntervalDayTimeColumnVector. Will throw cast exception
  488. * if the wrong vector column is used.
  489. */
  490. private static abstract class VectorExpressionWriterIntervalDayTime extends VectorExpressionWriterBase {
  491. @Override
  492. public Object writeValue(ColumnVector column, int row) throws HiveException {
  493. IntervalDayTimeColumnVector dcv = (IntervalDayTimeColumnVector) column;
  494. HiveIntervalDayTimeWritable intervalDayTimeWritable = (HiveIntervalDayTimeWritable) dcv.getScratchWritable();
  495. if (intervalDayTimeWritable == null) {
  496. intervalDayTimeWritable = new HiveIntervalDayTimeWritable();
  497. dcv.setScratchWritable(intervalDayTimeWritable);
  498. }
  499. if (dcv.noNulls && !dcv.isRepeating) {
  500. return writeValue(TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, row, intervalDayTimeWritable));
  501. } else if (dcv.noNulls && dcv.isRepeating) {
  502. return writeValue(TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, 0, intervalDayTimeWritable));
  503. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  504. return writeValue(TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, row, intervalDayTimeWritable));
  505. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  506. return writeValue(TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, 0, intervalDayTimeWritable));
  507. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  508. return null;
  509. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  510. return null;
  511. }
  512. throw new HiveException(
  513. String.format(
  514. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  515. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  516. }
  517. @Override
  518. public Object setValue(Object field, ColumnVector column, int row) throws HiveException {
  519. IntervalDayTimeColumnVector dcv = (IntervalDayTimeColumnVector) column;
  520. HiveIntervalDayTimeWritable intervalDayTimeWritable = (HiveIntervalDayTimeWritable) dcv.getScratchWritable();
  521. if (intervalDayTimeWritable == null) {
  522. intervalDayTimeWritable = new HiveIntervalDayTimeWritable();
  523. dcv.setScratchWritable(intervalDayTimeWritable);
  524. }
  525. if (dcv.noNulls && !dcv.isRepeating) {
  526. return setValue(field, TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, row, intervalDayTimeWritable));
  527. } else if (dcv.noNulls && dcv.isRepeating) {
  528. return setValue(field, TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, 0, intervalDayTimeWritable));
  529. } else if (!dcv.noNulls && !dcv.isRepeating && !dcv.isNull[row]) {
  530. return setValue(field, TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, row, intervalDayTimeWritable));
  531. } else if (!dcv.noNulls && !dcv.isRepeating && dcv.isNull[row]) {
  532. return null;
  533. } else if (!dcv.noNulls && dcv.isRepeating && !dcv.isNull[0]) {
  534. return setValue(field, TimestampUtils.intervalDayTimeColumnVectorWritable(dcv, 0, intervalDayTimeWritable));
  535. } else if (!dcv.noNulls && dcv.isRepeating && dcv.isNull[0]) {
  536. return null;
  537. }
  538. throw new HiveException(
  539. String.format(
  540. "Incorrect null/repeating: row:%d noNulls:%b isRepeating:%b isNull[row]:%b isNull[0]:%b",
  541. row, dcv.noNulls, dcv.isRepeating, dcv.isNull[row], dcv.isNull[0]));
  542. }
  543. }
  544. /**
  545. * Compiles the appropriate vector expression writer based on an expression info (ExprNodeDesc)
  546. */
  547. public static VectorExpressionWriter genVectorExpressionWritable(ExprNodeDesc nodeDesc)
  548. throws HiveException {
  549. ObjectInspector objectInspector = nodeDesc.getWritableObjectInspector();
  550. if (null == objectInspector) {
  551. objectInspector = TypeInfoUtils
  552. .getStandardWritableObjectInspectorFromTypeInfo(nodeDesc.getTypeInfo());
  553. }
  554. if (null == objectInspector) {
  555. throw new HiveException(String.format(
  556. "Failed to initialize VectorExpressionWriter for expr: %s",
  557. nodeDesc.getExprString()));
  558. }
  559. return genVectorExpressionWritable(objectInspector);
  560. }
  561. /**
  562. * Compiles the appropriate vector expression writer based on an expression info (ExprNodeDesc)
  563. */
  564. public static VectorExpressionWriter genVectorExpressionWritable(VectorExpression vecExpr)
  565. throws HiveException {
  566. TypeInfo outputTypeInfo = vecExpr.getOutputTypeInfo();
  567. ObjectInspector objectInspector =
  568. TypeInfoUtils.getStandardWritableObjectInspectorFromTypeInfo(
  569. outputTypeInfo);
  570. return genVectorExpressionWritable(objectInspector);
  571. }
  572. /**
  573. * Specialized writer for ListColumnVector. Will throw cast exception
  574. * if the wrong vector column is used.
  575. */
  576. private static abstract class VectorExpressionWriterList extends VectorExpressionWriterBase {
  577. // For now, we just use this to hold the object inspector. There are no writeValue,
  578. // setValue, etc methods yet...
  579. }
  580. /**
  581. * Specialized writer for MapColumnVector. Will throw cast exception
  582. * if the wrong vector column is used.
  583. */
  584. private static abstract class VectorExpressionWriterMap extends VectorExpressionWriterBase {
  585. // For now, we just use this to hold the object inspector. There are no writeValue,
  586. // setValue, etc methods yet...
  587. }
  588. /**
  589. * Specialized writer for StructColumnVector. Will throw cast exception
  590. * if the wrong vector column is used.
  591. */
  592. private static abstract class VectorExpressionWriterStruct extends VectorExpressionWriterBase {
  593. // For now, we just use this to hold the object inspector. There are no writeValue,
  594. // setValue, etc methods yet...
  595. }
  596. /**
  597. * Specialized writer for UnionColumnVector. Will throw cast exception
  598. * if the wrong vector column is used.
  599. */
  600. private static abstract class VectorExpressionWriterUnion extends VectorExpressionWriterBase {
  601. // For now, we just use this to hold the object inspector. There are no writeValue,
  602. // setValue, etc methods yet...
  603. }
  604. /**
  605. * Compiles the appropriate vector expression writer based on an expression info (ExprNodeDesc)
  606. */
  607. public static VectorExpressionWriter genVectorExpressionWritable(
  608. ObjectInspector fieldObjInspector) throws HiveException {
  609. switch (fieldObjInspector.getCategory()) {
  610. case PRIMITIVE:
  611. switch (((PrimitiveObjectInspector) fieldObjInspector).getPrimitiveCategory()) {
  612. case FLOAT:
  613. return genVectorExpressionWritableFloat(
  614. (SettableFloatObjectInspector) fieldObjInspector);
  615. case DOUBLE:
  616. return genVectorExpressionWritableDouble(
  617. (SettableDoubleObjectInspector) fieldObjInspector);
  618. case BOOLEAN:
  619. return genVectorExpressionWritableBoolean(
  620. (SettableBooleanObjectInspector) fieldObjInspector);
  621. case BYTE:
  622. return genVectorExpressionWritableByte(
  623. (SettableByteObjectInspector) fieldObjInspector);
  624. case SHORT:
  625. return genVectorExpressionWritableShort(
  626. (SettableShortObjectInspector) fieldObjInspector);
  627. case INT:
  628. return genVectorExpressionWritableInt(
  629. (SettableIntObjectInspector) fieldObjInspector);
  630. case LONG:
  631. return genVectorExpressionWritableLong(
  632. (SettableLongObjectInspector) fieldObjInspector);
  633. case VOID:
  634. return genVectorExpressionWritableVoid(
  635. (VoidObjectInspector) fieldObjInspector);
  636. case BINARY:
  637. return genVectorExpressionWritableBinary(
  638. (SettableBinaryObjectInspector) fieldObjInspector);
  639. case STRING:
  640. return genVectorExpressionWritableString(
  641. (SettableStringObjectInspector) fieldObjInspector);
  642. case CHAR:
  643. return genVectorExpressionWritableChar(
  644. (SettableHiveCharObjectInspector) fieldObjInspector);
  645. case VARCHAR:
  646. return genVectorExpressionWritableVarchar(
  647. (SettableHiveVarcharObjectInspector) fieldObjInspector);
  648. case TIMESTAMP:
  649. return genVectorExpressionWritableTimestamp(
  650. (SettableTimestampObjectInspector) fieldObjInspector);
  651. case DATE:
  652. return genVectorExpressionWritableDate(
  653. (SettableDateObjectInspector) fieldObjInspector);
  654. case INTERVAL_YEAR_MONTH:
  655. return genVectorExpressionWritableIntervalYearMonth(
  656. (SettableHiveIntervalYearMonthObjectInspector) fieldObjInspector);
  657. case INTERVAL_DAY_TIME:
  658. return genVectorExpressionWritableIntervalDayTime(
  659. (SettableHiveIntervalDayTimeObjectInspector) fieldObjInspector);
  660. case DECIMAL:
  661. return genVectorExpressionWritableDecimal(
  662. (SettableHiveDecimalObjectInspector) fieldObjInspector);
  663. default:
  664. throw new IllegalArgumentException("Unknown primitive type: " +
  665. ((PrimitiveObjectInspector) fieldObjInspector).getPrimitiveCategory());
  666. }
  667. case LIST:
  668. return genVectorExpressionWritableList(
  669. (SettableListObjectInspector) fieldObjInspector);
  670. case MAP:
  671. return genVectorExpressionWritableMap(
  672. (SettableMapObjectInspector) fieldObjInspector);
  673. case STRUCT:
  674. return genVectorExpressionWritableStruct(
  675. (SettableStructObjectInspector) fieldObjInspector);
  676. case UNION:
  677. return genVectorExpressionWritableUnion(
  678. (SettableUnionObjectInspector) fieldObjInspector);
  679. default:
  680. throw new IllegalArgumentException("Unknown type " +
  681. fieldObjInspector.getCategory());
  682. }
  683. }
  684. /**
  685. * Compiles the appropriate vector expression writers based on a struct object
  686. * inspector.
  687. */
  688. public static VectorExpressionWriter[] genVectorStructExpressionWritables(
  689. StructObjectInspector oi) throws HiveException {
  690. VectorExpressionWriter[] writers = new VectorExpressionWriter[oi.getAllStructFieldRefs().size()];
  691. final List<? extends StructField> fields = oi.getAllStructFieldRefs();
  692. int i = 0;
  693. for(StructField field : fields) {
  694. writers[i++] = genVectorExpressionWritable(field.getFieldObjectInspector());
  695. }
  696. return writers;
  697. }
  698. private static VectorExpressionWriter genVectorExpressionWritableDecimal(
  699. SettableHiveDecimalObjectInspector fieldObjInspector) throws HiveException {
  700. return new VectorExpressionWriterDecimal() {
  701. private Object obj;
  702. public VectorExpressionWriter init(SettableHiveDecimalObjectInspector objInspector) throws HiveException {
  703. super.init(objInspector);
  704. obj = initValue(null);
  705. return this;
  706. }
  707. @Override
  708. public Object writeValue(HiveDecimalWritable value) throws HiveException {
  709. return ((SettableHiveDecimalObjectInspector) this.objectInspector).set(obj, value);
  710. }
  711. @Override
  712. public Object writeValue(HiveDecimal value) throws HiveException {
  713. return ((SettableHiveDecimalObjectInspector) this.objectInspector).set(obj, value);
  714. }
  715. @Override
  716. public Object setValue(Object field, HiveDecimalWritable value) {
  717. if (null == field) {
  718. field = initValue(null);
  719. }
  720. return ((SettableHiveDecimalObjectInspector) this.objectInspector).set(field, value);
  721. }
  722. @Override
  723. public Object setValue(Object field, HiveDecimal value) {
  724. if (null == field) {
  725. field = initValue(null);
  726. }
  727. return ((SettableHiveDecimalObjectInspector) this.objectInspector).set(field, value);
  728. }
  729. @Override
  730. public Object setValue(Object field, TimestampWritableV2 value) {
  731. if (null == field) {
  732. field = initValue(null);
  733. }
  734. return ((SettableTimestampObjectInspector) this.objectInspector).set(field, value);
  735. }
  736. @Override
  737. public Object setValue(Object field, Timestamp value) {
  738. if (null == field) {
  739. field = initValue(null);
  740. }
  741. return ((SettableTimestampObjectInspector) this.objectInspector).set(field, value);
  742. }
  743. @Override
  744. public Object initValue(Object ignored) {
  745. return ((SettableHiveDecimalObjectInspector) this.objectInspector).create(
  746. HiveDecimal.ZERO);
  747. }
  748. }.init(fieldObjInspector);
  749. }
  750. private static VectorExpressionWriter genVectorExpressionWritableDate(
  751. SettableDateObjectInspector fieldObjInspector) throws HiveException {
  752. return new VectorExpressionWriterLong() {
  753. private Date dt;
  754. private Object obj;
  755. public VectorExpressionWriter init(SettableDateObjectInspector objInspector) throws HiveException {
  756. super.init(objInspector);
  757. dt = new Date(0);
  758. obj = initValue(null);
  759. return this;
  760. }
  761. @Override
  762. public Object writeValue(long value) {
  763. dt.setTime(DateWritableV2.daysToMillis((int) value));
  764. ((SettableDateObjectInspector) this.objectInspector).set(obj, dt);
  765. return obj;
  766. }
  767. @Override
  768. public Object setValue(Object field, long value) {
  769. if (null == field) {
  770. field = initValue(null);
  771. }
  772. dt.setTime(DateWritableV2.daysToMillis((int) value));
  773. ((SettableDateObjectInspector) this.objectInspector).set(field, dt);
  774. return field;
  775. }
  776. @Override
  777. public Object initValue(Object ignored) {
  778. return ((SettableDateObjectInspector) this.objectInspector).create(new Date(0));
  779. }
  780. }.init(fieldObjInspector);
  781. }
  782. private static VectorExpressionWriter genVectorExpressionWritableTimestamp(
  783. SettableTimestampObjectInspector fieldObjInspector) throws HiveException {
  784. return new VectorExpressionWriterTimestamp() {
  785. private Object obj;
  786. public VectorExpressionWriter init(SettableTimestampObjectInspector objInspector) throws HiveException {
  787. super.init(objInspector);
  788. obj = initValue(null);
  789. return this;
  790. }
  791. @Override
  792. public Object writeValue(TimestampWritableV2 value) throws HiveException {
  793. return ((SettableTimestampObjectInspector) this.objectInspector).set(obj, value);
  794. }
  795. @Override
  796. public Object writeValue(Timestamp value) throws HiveException {
  797. return ((SettableTimestampObjectInspector) this.objectInspector).set(obj, value);
  798. }
  799. @Override
  800. public Object writeValue(HiveIntervalDayTimeWritable value) throws HiveException {
  801. return ((SettableHiveIntervalDayTimeObjectInspector) this.objectInspector).set(obj, value);
  802. }
  803. @Override
  804. public Object writeValue(HiveIntervalDayTime value) throws HiveException {
  805. return ((SettableHiveIntervalDayTimeObjectInspector) this.objectInspector).set(obj, value);
  806. }
  807. @Override
  808. public Object setValue(Object field, TimestampWritableV2 value) {
  809. if (null == field) {
  810. field = initValue(null);
  811. }
  812. return ((SettableTimestampObjectInspector) this.objectInspector).set(field, value);
  813. }
  814. @Override
  815. public Object setValue(Object field, Timestamp value) {
  816. if (null == field) {
  817. field = initValue(null);
  818. }
  819. return ((SettableTimestampObjectInspector) this.objectInspector).set(field, value);
  820. }
  821. @Override
  822. public Object initValue(Object ignored) {
  823. return ((SettableTimestampObjectInspector) this.objectInspector).create(new Timestamp(0));
  824. }
  825. }.init(fieldObjInspector);
  826. }
  827. private static VectorExpressionWriter genVectorExpressionWritableIntervalYearMonth(
  828. SettableHiveIntervalYearMonthObjectInspector fieldObjInspector) throws HiveException {
  829. return new VectorExpressionWriterLong() {
  830. private Object obj;
  831. private HiveIntervalYearMonth interval;
  832. public VectorExpressionWriter init(SettableHiveIntervalYearMonthObjectInspector objInspector)
  833. throws HiveException {
  834. super.init(objInspector);
  835. interval = new HiveIntervalYearMonth();
  836. obj = initValue(null);
  837. return this;
  838. }
  839. @Override
  840. public Object writeValue(long value) {
  841. interval.set((int) value);
  842. ((SettableHiveIntervalYearMonthObjectInspector) this.objectInspector).set(obj, interval);
  843. return obj;
  844. }
  845. @Override
  846. public Object setValue(Object field, long value) {
  847. if (null == field) {
  848. field = initValue(null);
  849. }
  850. interval.set((int) value);
  851. ((SettableHiveIntervalYearMonthObjectInspector) this.objectInspector).set(field, interval);
  852. return field;
  853. }
  854. @Override
  855. public Object initValue(Object ignored) {
  856. return ((SettableHiveIntervalYearMonthObjectInspector) this.objectInspector)
  857. .create(new HiveIntervalYearMonth());
  858. }
  859. }.init(fieldObjInspector);
  860. }
  861. private static VectorExpressionWriter genVectorExpressionWritableIntervalDayTime(
  862. SettableHiveIntervalDayTimeObjectInspector fieldObjInspector) throws HiveException {
  863. return new VectorExpressionWriterIntervalDayTime() {
  864. private Object obj;
  865. private HiveIntervalDayTime interval;
  866. public VectorExpressionWriter init(SettableHiveIntervalDayTimeObjectInspector objInspector)
  867. throws HiveException {
  868. super.init(objInspector);
  869. interval = new HiveIntervalDayTime();
  870. obj = initValue(null);
  871. return this;
  872. }
  873. @Override
  874. public Object writeValue(HiveIntervalDayTimeWritable value) throws HiveException {
  875. interval.set(value.getHiveIntervalDayTime());
  876. return ((SettableHiveIntervalDayTimeObjectInspector) this.objectInspector).set(obj, interval);
  877. }
  878. @Override
  879. public Object writeValue(HiveIntervalDayTime value) throws HiveException {
  880. interval.set(value);
  881. return ((SettableHiveIntervalDayTimeObjectInspector) this.objectInspector).set(obj, interval);
  882. }
  883. @Override
  884. public Object setValue(Object field, HiveIntervalDayTimeWritable value) {
  885. if (null == field) {
  886. field = initValue(null);
  887. }
  888. interval.set(value.getHiveIntervalDayTime());
  889. return ((SettableHiveIntervalDayTimeObjectInspector) this.objectInspector).set(field, interval);
  890. }
  891. @Override
  892. public Object setValue(Object field, HiveIntervalDayTime value) {
  893. if (null == field) {
  894. field = initValue(null);
  895. }
  896. interval.set(value);
  897. return ((SettableHiveIntervalDayTimeObjectInspector) this.objectInspector).set(field, interval);
  898. }
  899. @Override
  900. public Object initValue(Object ignored) {
  901. return ((SettableHiveIntervalDayTimeObjectInspector) this.objectInspector)
  902. .create(new HiveIntervalDayTime());
  903. }
  904. }.init(fieldObjInspector);
  905. }
  906. private static VectorExpressionWriter genVectorExpressionWritableChar(
  907. SettableHiveCharObjectInspector fieldObjInspector) throws HiveException {
  908. return new VectorExpressionWriterBytes() {
  909. private Object obj;
  910. private Text text;
  911. public VectorExpressionWriter init(SettableHiveCharObjectInspector objInspector)
  912. throws HiveException {
  913. super.init(objInspector);
  914. this.text = new Text();
  915. this.obj = initValue(null);
  916. return this;
  917. }
  918. @Override
  919. public Object writeValue(byte[] value, int start, int length) throws HiveException {
  920. text.set(value, start, length);
  921. ((SettableHiveCharObjectInspector) this.objectInspector).set(this.obj, text.toString());
  922. return this.obj;
  923. }
  924. @Override
  925. public Object setValue(Object field, byte[] value, int start, int length)
  926. throws HiveException {
  927. if (null == field) {
  928. field = initValue(null);
  929. }
  930. text.set(value, start, length);
  931. ((SettableHiveCharObjectInspector) this.objectInspector).set(field, text.toString());
  932. return field;
  933. }
  934. @Override
  935. public Object initValue(Object ignored) {
  936. return ((SettableHiveCharObjectInspector) this.objectInspector)
  937. .create(new HiveChar(StringUtils.EMPTY, -1));
  938. }
  939. }.init(fieldObjInspector);
  940. }
  941. private static VectorExpressionWriter genVectorExpressionWritableVarchar(
  942. SettableHiveVarcharObjectInspector fieldObjInspector) throws HiveException {
  943. return new VectorExpressionWriterBytes() {
  944. private Object obj;
  945. private Text text;
  946. public VectorExpressionWriter init(SettableHiveVarcharObjectInspector objInspector)
  947. throws HiveException {
  948. super.init(objInspector);
  949. this.text = new Text();
  950. this.obj = initValue(null);
  951. return this;
  952. }
  953. @Override
  954. public Object writeValue(byte[] value, int start, int length) throws HiveException {
  955. text.set(value, start, length);
  956. ((SettableHiveVarcharObjectInspector) this.objectInspector).set(this.obj, text.toString());
  957. return this.obj;
  958. }
  959. @Override
  960. public Object setValue(Object field, byte[] value, int start, int length)
  961. throws HiveException {
  962. if (null == field) {
  963. field = initValue(null);
  964. }
  965. text.set(value, start, length);
  966. ((SettableHiveVarcharObjectInspector) this.objectInspector).set(field, text.toString());
  967. return field;
  968. }
  969. @Override
  970. public Object initValue(Object ignored) {
  971. return ((SettableHiveVarcharObjectInspector) this.objectInspector)
  972. .create(new HiveVarchar(StringUtils.EMPTY, -1));
  973. }
  974. }.init(fieldObjInspector);
  975. }
  976. private static VectorExpressionWriter genVectorExpressionWritableString(
  977. SettableStringObjectInspector fieldObjInspector) throws HiveException {
  978. return new VectorExpressionWriterBytes() {
  979. private Object obj;
  980. private Text text;
  981. public VectorExpressionWriter init(SettableStringObjectInspector objInspector)
  982. throws HiveException {
  983. super.init(objInspector);
  984. this.text = new Text();
  985. this.obj = initValue(null);
  986. return this;
  987. }
  988. @Override
  989. public Object writeValue(byte[] value, int start, int length) throws HiveException {
  990. this.text.set(value, start, length);
  991. ((SettableStringObjectInspector) this.objectInspector).set(this.obj, this.text);
  992. return this.obj;
  993. }
  994. @Override
  995. public Object setValue(Object field, byte[] value, int start, int length)
  996. throws HiveException {
  997. if (null == field) {
  998. field = initValue(null);
  999. }
  1000. this.text.set(value, start, length);
  1001. ((SettableStringObjectInspector) this.objectInspector).set(field, this.text);
  1002. return field;
  1003. }
  1004. @Override
  1005. public Object initValue(Object ignored) {
  1006. return ((SettableStringObjectInspector) this.objectInspector).create(StringUtils.EMPTY);
  1007. }
  1008. }.init(fieldObjInspector);
  1009. }
  1010. private static VectorExpressionWriter genVectorExpressionWritableBinary(
  1011. SettableBinaryObjectInspector fieldObjInspector) throws HiveException {
  1012. return new VectorExpressionWriterBytes() {
  1013. private Object obj;
  1014. private byte[] bytes;
  1015. public VectorExpressionWriter init(SettableBinaryObjectInspector objInspector)
  1016. throws HiveException {
  1017. super.init(objInspector);
  1018. this.bytes = ArrayUtils.EMPTY_BYTE_ARRAY;
  1019. this.obj = initValue(null);
  1020. return this;
  1021. }
  1022. @Override
  1023. public Object writeValue(byte[] value, int start, int length) throws HiveException {
  1024. bytes = Arrays.copyOfRange(value, start, start + length);
  1025. ((SettableBinaryObjectInspector) this.objectInspector).set(this.obj, bytes);
  1026. return this.obj;
  1027. }
  1028. @Override
  1029. public Object setValue(Object field, byte[] value, int start, int length) throws HiveException {
  1030. if (null == field) {
  1031. field = initValue(null);
  1032. }
  1033. bytes = Arrays.copyOfRange(value, start, start + length);
  1034. ((SettableBinaryObjectInspector) this.objectInspector).set(field, bytes);
  1035. return field;
  1036. }
  1037. @Override
  1038. public Object initValue(Object ignored) {
  1039. return ((SettableBinaryObjectInspector) this.objectInspector)
  1040. .create(ArrayUtils.EMPTY_BYTE_ARRAY);
  1041. }
  1042. }.init(fieldObjInspector);
  1043. }
  1044. private static VectorExpressionWriter genVectorExpressionWritableLong(
  1045. SettableLongObjectInspector fieldObjInspector) throws HiveException {
  1046. return new VectorExpressionWriterLong() {
  1047. private Object obj;
  1048. public VectorExpressionWriter init(SettableLongObjectInspector objInspector)
  1049. throws HiveException {
  1050. super.init(objInspector);
  1051. this.obj = initValue(null);
  1052. return this;
  1053. }
  1054. @Override
  1055. public Object writeValue(long value) throws HiveException {
  1056. ((SettableLongObjectInspector) this.objectInspector).set(this.obj, value);
  1057. return this.obj;
  1058. }
  1059. @Override
  1060. public Object setValue(Object field, long value) throws HiveException {
  1061. if (null == field) {
  1062. field = initValue(null);
  1063. }
  1064. ((SettableLongObjectInspector) this.objectInspector).set(field, value);
  1065. return field;
  1066. }
  1067. @Override
  1068. public Object initValue(Object ignored) {
  1069. return ((SettableLongObjectInspector) this.objectInspector)
  1070. .create(0L);
  1071. }
  1072. }.init(fieldObjInspector);
  1073. }
  1074. private static VectorExpressionWriter genVectorExpressionWritab

Large files files are truncated, but you can click here to view the full file