/** * Convert the given value to the closest runtime type see {@link RUNTIME_TYPES} * @param value * @return */ public Object convertToRuntimeType(Object value) { return DataTypeManager.convertToRuntimeType(value, true); }
/** * Take an object and determine the MetaMatrix data type. In most cases, * this is simply the class of the object. Some special cases are when the * value is of type Object or Null. */ public static Class<?> determineDataTypeClass(Object value) { // Handle null case if (value == null) { return DefaultDataClasses.NULL; } Class<?> clazz = value.getClass(); if (DATA_TYPE_CLASSES.contains(clazz)) { return clazz; } clazz = convertToRuntimeType(value, true).getClass(); if (DATA_TYPE_CLASSES.contains(clazz)) { return clazz; } return DefaultDataClasses.OBJECT; }
/** * Take an object and determine the MetaMatrix data type. In most cases, * this is simply the class of the object. Some special cases are when the * value is of type Object or Null. */ public static Class<?> determineDataTypeClass(Object value) { // Handle null case if (value == null) { return DefaultDataClasses.NULL; } Class<?> clazz = value.getClass(); if (DATA_TYPE_CLASSES.contains(clazz)) { return clazz; } clazz = convertToRuntimeType(value, true).getClass(); if (DATA_TYPE_CLASSES.contains(clazz)) { return clazz; } return DefaultDataClasses.OBJECT; }
public static Object importValue(Object result, Class<?> expectedType) throws ArithmeticException, TransformationException { if (!ALLOW_NAN_INFINITY) { if (result instanceof Double) { Double floatVal = (Double)result; if (Double.isInfinite(floatVal) || Double.isNaN(floatVal)) { throw new ArithmeticException("Infinite or invalid result"); //$NON-NLS-1$ } } else if (result instanceof Float) { Float floatVal = (Float)result; if (Float.isInfinite(floatVal) || Float.isNaN(floatVal)) { throw new ArithmeticException("Infinite or invalid result"); //$NON-NLS-1$ } } } result = DataTypeManager.convertToRuntimeType(result, expectedType != DataTypeManager.DefaultDataClasses.OBJECT); if (expectedType.isArray() && result instanceof ArrayImpl) { return result; } result = DataTypeManager.transformValue(result, expectedType); if (result != null && expectedType == DataTypeManager.DefaultDataClasses.STRING) { String s = (String)result; if (s.length() > DataTypeManager.MAX_STRING_LENGTH) { return s.substring(0, DataTypeManager.MAX_STRING_LENGTH); } } return result; }
result = DataTypeManager.convertToRuntimeType(result, expectedType != DataTypeManager.DefaultDataClasses.OBJECT); if (expectedType.isArray() && result instanceof ArrayImpl) { return result;
return (T)DataTypeManager.transformValue(DataTypeManager.convertToRuntimeType(value, true), runtimeType); } catch (Exception e) { String valueStr = value.toString();
result = DataTypeManager.convertToRuntimeType(result, expectedType != DataTypeManager.DefaultDataClasses.OBJECT); if (expectedType.isArray() && result instanceof ArrayImpl) { return result;
public RecursiveTableProcessor(QueryProcessor queryProcessor, List<ElementSymbol> columns, ProcessorPlan processorPlan, boolean all) throws TransformationException { super(queryProcessor, columns); this.recursive = processorPlan; this.all = all; if (queryProcessor.getContext() != null) { Object value = queryProcessor.getContext().getSessionVariable(TEIID_MAX_RECURSION); if (value != null) { value = DataTypeManager.convertToRuntimeType(value, false); DataTypeManager.transformValue(value, value.getClass(), DataTypeManager.DefaultDataClasses.INTEGER); if (value instanceof Number) { maxIterations = ((Number)value).intValue(); } } } }
public RecursiveTableProcessor(QueryProcessor queryProcessor, List<ElementSymbol> columns, ProcessorPlan processorPlan, boolean all) throws TransformationException { super(queryProcessor, columns); this.recursive = processorPlan; this.all = all; if (queryProcessor.getContext() != null) { Object value = queryProcessor.getContext().getSessionVariable(TEIID_MAX_RECURSION); if (value != null) { value = DataTypeManager.convertToRuntimeType(value, false); DataTypeManager.transformValue(value, value.getClass(), DataTypeManager.DefaultDataClasses.INTEGER); if (value instanceof Number) { maxIterations = ((Number)value).intValue(); } } } }
public RecursiveTableProcessor(QueryProcessor queryProcessor, List<ElementSymbol> columns, ProcessorPlan processorPlan, boolean all) throws TransformationException { super(queryProcessor, columns); this.recursive = processorPlan; this.all = all; if (queryProcessor.getContext() != null) { Object value = queryProcessor.getContext().getSessionVariable(TEIID_MAX_RECURSION); if (value != null) { value = DataTypeManager.convertToRuntimeType(value, false); DataTypeManager.transformValue(value, value.getClass(), DataTypeManager.DefaultDataClasses.INTEGER); if (value instanceof Number) { maxIterations = ((Number)value).intValue(); } } } }
return (T)DataTypeManager.transformValue(DataTypeManager.convertToRuntimeType(value, true), runtimeType); } catch (Exception e) { String valueStr = value.toString();
@Test public void testRuntimeTypeConversion() throws Exception { assertNull(DataTypeManager.convertToRuntimeType(null, true)); assertTrue(DataTypeManager.convertToRuntimeType(new SerialBlob(new byte[0]), true) instanceof BlobType); //unknown type should return as same Object foo = new Object(); assertEquals(foo, DataTypeManager.convertToRuntimeType(foo, true)); //known type should return as same Integer bar = new Integer(1); assertEquals(bar, DataTypeManager.convertToRuntimeType(bar, true)); }
@Test public void testByteArray() throws Exception { byte[] value = {1,2}; assertArrayEquals(value, (byte[])DataTypeManager.convertToRuntimeType(value, false)); assertEquals(new BinaryType(value), DataTypeManager.convertToRuntimeType(value, true)); }
} else { if (!explicitClose && isLob[i] && !copyLobs && !areLobsUsableAfterClose && DataTypeManager.isLOB(result.getClass()) && DataTypeManager.isLOB(DataTypeManager.convertToRuntimeType(value, false).getClass())) { explicitClose = true;
Expression expr = ResolverUtil.convertExpression(new Constant(DataTypeManager.convertToRuntimeType(value, param.getType() != DataTypeManager.DefaultDataClasses.OBJECT)), targetTypeName, metadata); value = Evaluator.evaluate(expr); } catch (ExpressionEvaluationException e) {
} else { if (!explicitClose && isLob[i] && !copyLobs && !areLobsUsableAfterClose && DataTypeManager.isLOB(result.getClass()) && DataTypeManager.isLOB(DataTypeManager.convertToRuntimeType(value, false).getClass())) { explicitClose = true;
Expression expr = ResolverUtil.convertExpression(new Constant(DataTypeManager.convertToRuntimeType(value, param.getType() != DataTypeManager.DefaultDataClasses.OBJECT)), targetTypeName, metadata); value = Evaluator.evaluate(expr); } catch (ExpressionEvaluationException e) {
Expression expr = ResolverUtil.convertExpression(new Constant(DataTypeManager.convertToRuntimeType(value, param.getType() != DataTypeManager.DefaultDataClasses.OBJECT)), targetTypeName, metadata); value = Evaluator.evaluate(expr); } catch (ExpressionEvaluationException e) {
Object value = this.workContext.getSession().getSessionVariables().get(CLEAN_LOBS_ONCLOSE); if (value != null) { value = DataTypeManager.convertToRuntimeType(value, false); try { value = DataTypeManager.transformValue(value, value.getClass(), DataTypeManager.DefaultDataClasses.BOOLEAN);
Object value = this.workContext.getSession().getSessionVariables().get(CLEAN_LOBS_ONCLOSE); if (value != null) { value = DataTypeManager.convertToRuntimeType(value, false); try { value = DataTypeManager.transformValue(value, value.getClass(), DataTypeManager.DefaultDataClasses.BOOLEAN);