private void setDataType(BaseColumn baseColumn) { Datatype dataType = (Datatype) getByType(MetadataConstants.RECORD_TYPE.DATATYPE).get(baseColumn.getDatatypeUUID()); int arrayDimensions = 0; String type = baseColumn.getRuntimeType(); while (DataTypeManager.isArrayType(type)) { arrayDimensions++; type = type.substring(0, type.length()-2); } baseColumn.setDatatype(dataType, false, arrayDimensions); if (baseColumn.getLength() == 0) { if (DataTypeManager.hasLength(type)) { Class<?> baseType = DataTypeManager.getDataTypeClass(type); //designer sends a default length of 0 as a default, but the engine does not expect that generally Integer length = JDBCSQLTypeInfo.getMaxDisplaySize(baseType); if (length != null) { baseColumn.setLength(length); } } } }
private void correctDataTypes(List<? extends BaseColumn> cols) { if (cols == null) { return; } for (BaseColumn c : cols) { Datatype datatype = c.getDatatype(); String name = null; if (datatype == null) { name = c.getRuntimeType(); } else { name = datatype.getName(); } Datatype dt = this.dataTypes.get(name); if (dt != null) { c.setDatatype(dt, false, c.getArrayDimensions()); } } }
private static void removeColumnOption(String key, BaseColumn c) throws MetadataException { if (c.getProperty(key, false) != null) { c.setProperty(key, null); } removeCommonProperty(key, c); if (key.equals(DDLConstants.RADIX)) { c.setRadix(0); } else if (key.equals(DDLConstants.NATIVE_TYPE)) { c.setNativeType(null); } else if (c instanceof Column) { removeColumnOption(key, (Column)c); } }
public static void setDefault(BaseColumn column, Expression value) { if ((value instanceof Constant) && value.getType() == DataTypeManager.DefaultDataClasses.STRING) { column.setDefaultValue(((Constant)value).getValue().toString()); } else { //it's an expression column.setProperty(BaseColumn.DEFAULT_HANDLING, BaseColumn.EXPRESSION_DEFAULT); column.setDefaultValue(value.toString()); } } }
VDBMetaData vdb, TransformationMetadata metadata, CommandContext cc, SimpleIterator<BaseColumn> iter) { Datatype dt = param.getDatatype(); row.add(vdb.getName()); String type = "ResultSet"; //$NON-NLS-1$ AbstractMetadataRecord proc = param.getParent(); boolean isOptional = false; int pos = param.getPosition(); if (param instanceof ProcedureParameter) { ProcedureParameter pp = (ProcedureParameter)param; proc = param.getParent().getParent(); row.add(param.getName()); row.add(param.getRuntimeType()); row.add(pos); row.add(type); row.add(isOptional); row.add(param.getPrecision()); row.add(param.getLength()); row.add(param.getScale()); row.add(param.getRadix()); row.add(param.getNullType().toString()); row.add(param.getUUID()); row.add(param.getAnnotation()); addTypeInfo(row, param, dt); row.add(param.getDefaultValue());
private void appendColumn(BaseColumn column, boolean includeName, boolean includeType) { if (includeName) { append(SQLStringVisitor.escapeSinglePart(column.getName())); Datatype datatype = column.getDatatype(); String runtimeTypeName = column.getRuntimeType(); boolean domain = false; if (datatype != null) { append(runtimeTypeName); if (DataTypeManager.hasLength(runtimeTypeName)) { if (column.getLength() != 0 && (datatype == null || column.getLength() != datatype.getLength())) { append(LPAREN).append(column.getLength()).append(RPAREN); && !column.isDefaultPrecisionScale()) { append(LPAREN).append(column.getPrecision()); if (column.getScale() != 0) { append(COMMA).append(column.getScale()); for (int dims = column.getArrayDimensions(); dims > 0; dims--) { append(Tokens.LSBRACE).append(Tokens.RSBRACE); if (column.getNullType() == NullType.No_Nulls && (!domain || datatype.getNullType() != NullType.No_Nulls)) { append(SPACE).append(NOT_NULL);
continue; //shouldn't happen record.setNameInSource(quoteName(columnName)); record.setNativeType(typeName); record.setPrecision(precision); record.setLength(columns.getInt(9)); record.setScale(scale); record.setRadix(columns.getInt(11)); record.setNullType(NullType.values()[columns.getInt(12)]); record.setAnnotation(columns.getString(13)); if (rsProcColumns >= 14) { String def = columns.getString(14); if (def != null) { if (def.equalsIgnoreCase("null")) { //$NON-NLS-1$ record.setNullType(NullType.Nullable); } else { record.setDefaultValue(def); record.setProperty(BaseColumn.DEFAULT_HANDLING, BaseColumn.OMIT_DEFAULT);
private void appendColumnOptions(BaseColumn column) { StringBuilder options = new StringBuilder(); addCommonOptions(options, column); if (!column.getDatatype().isBuiltin() && column.getDatatype().getType() != Datatype.Type.Domain) { //an enterprise type addOption(options, UDT, column.getDatatype().getName() + "("+column.getLength()+ ", " +column.getPrecision()+", " + column.getScale()+ ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } if (column.getDatatype().getRadix() != 0 && column.getRadix() != column.getDatatype().getRadix()) { addOption(options, RADIX, column.getRadix()); } buildColumnOptions(column, options); if (options.length() != 0) { append(SPACE).append(OPTIONS).append(SPACE).append(LPAREN).append(options).append(RPAREN); } }
private void addTypeInfo(List<Object> row, BaseColumn column, Datatype dt) { String typeName = column.getRuntimeType(); if (dt != null) { if (dt.isBuiltin() || dt.getType() == Datatype.Type.Domain) { int arrayDimensions = column.getArrayDimensions(); while (arrayDimensions-- > 0) { typeName += "[]"; //$NON-NLS-1$ row.add(JDBCSQLTypeInfo.getSQLType(column.getRuntimeType())); Integer columnSize = null; if (column.getArrayDimensions() == 0) { columnSize = column.getPrecision(); if (columnSize == 0) { columnSize = column.getLength(); if (java.util.Date.class.isAssignableFrom(dataTypeClass) || column.getLength() <= 0) { columnSize = JDBCSQLTypeInfo.getDefaultPrecision(column.getRuntimeType()); } else { columnSize = column.getLength(); } else if (column.getPrecision() <= 0) { columnSize = JDBCSQLTypeInfo.getDefaultPrecision(column.getRuntimeType());
public static EdmPrimitiveTypeKind odataType(BaseColumn c) { String runtimeType = c.getRuntimeType(); //try to map to the specific type if (c.getDatatype() != null && (c.getDatatype().getName().equalsIgnoreCase(DataTypeManager.DefaultDataTypes.GEOMETRY) || c.getDatatype().getName().equalsIgnoreCase(DataTypeManager.DefaultDataTypes.GEOGRAPHY))) { boolean geometry = c.getDatatype().getName().equalsIgnoreCase(DataTypeManager.DefaultDataTypes.GEOMETRY); String type = c.getProperty(BaseColumn.SPATIAL_TYPE, false); if (type != null) { try { return StringUtil.caseInsensitiveValueOf(EdmPrimitiveTypeKind.class, (geometry?"Geometry":"Geography")+type); //$NON-NLS-1$ //$NON-NLS-2$ } catch (IllegalArgumentException e) { } } //unknown or null case if (geometry) { return EdmPrimitiveTypeKind.Geometry; } return EdmPrimitiveTypeKind.Geography; } return odataType(runtimeType); }
public static void setTypeInfo(ParsedDataType type, BaseColumn column) { if (type.length != null){ column.setLength(type.length); } if (type.precision != null){ if (type.precision == 0) { throw new MetadataException(QueryPlugin.Util.getString("SQLParser.zero_precision")); //$NON-NLS-1$ } column.setPrecision(type.precision); if (type.scale != null){ if (Math.abs(type.scale) > type.precision) { throw new MetadataException(QueryPlugin.Util.getString("SQLParser.invalid_scale", type.scale, type.precision)); //$NON-NLS-1$ } column.setScale(type.scale); } else { column.setScale(0); } } }
private static void setColumnOptions(BaseColumn c) throws MetadataException { Map<String, String> props = c.getProperties(); setCommonProperties(c, props); String v = props.remove(DDLConstants.RADIX); if (v != null) { c.setRadix(Integer.parseInt(v)); } v = props.remove(DDLConstants.NATIVE_TYPE); if (v != null) { c.setNativeType(v); } if (c instanceof Column) { setColumnOptions((Column)c, props); } }
@Override public void visit(Literal obj) { try { String odataType = ODataTypeManager.odataType(obj.getType()).toString(); if (currentExpression != null) { //TODO: this is an attempt at contextually figuring out the type, but it //may not be sufficient in all cases odataType = odataType(currentExpression.getNativeType(), currentExpression.getRuntimeType()); } this.filter.append(ODataTypeManager.convertToODataURIValue(obj.getValue(), odataType)); } catch (EdmPrimitiveTypeException e) { this.exceptions.add(new TranslatorException(e)); } }
private void handleGeometryTypes(SRID srid, String type, BaseColumn c) { //TODO: geometry arrays if (!TypeFacility.RUNTIME_NAMES.GEOMETRY.equals(c.getDatatype().getName())) { return; } if (type.startsWith(EDM_GEOMETRY)) { if (type.length() > EDM_GEOMETRY.length()) { c.setProperty(BaseColumn.SPATIAL_TYPE, type.substring(EDM_GEOMETRY.length()).toUpperCase()); } else { c.setProperty(BaseColumn.SPATIAL_TYPE, "GEOMETRY"); //$NON-NLS-1$ } } else if (type.startsWith(EDM_GEOGRAPHY)) { c.setProperty(BaseColumn.SPATIAL_SRID, "4326"); //$NON-NLS-1$ if (type.length() > EDM_GEOGRAPHY.length()) { c.setProperty(BaseColumn.SPATIAL_TYPE, type.substring(EDM_GEOGRAPHY.length()).toUpperCase()); } else { c.setProperty(BaseColumn.SPATIAL_TYPE, "GEOMETRY"); //$NON-NLS-1$ } } if (srid != null && srid.isNotDefault()) { String value = srid.toString(); if (!value.equalsIgnoreCase("VARIABLE")) { //$NON-NLS-1$ c.setProperty(BaseColumn.SPATIAL_SRID, value); } } }
@Override public String getNativeType() { String nativeType = super.getNativeType(); if (nativeType != null) { return nativeType; } nativeType = getProperty(AbstractMetadataRecord.RELATIONAL_URI + "native_type" , false); //$NON-NLS-1$ if (nativeType != null) { this.setNativeType(nativeType); } return nativeType; } }
private void appendDefault(BaseColumn column) { if (column.getDefaultValue() != null) { append(SPACE).append(DEFAULT).append(SPACE); if (BaseColumn.EXPRESSION_DEFAULT.equalsIgnoreCase(column.getProperty(BaseColumn.DEFAULT_HANDLING, false))) { append(column.getDefaultValue()); } else { append(new Constant(column.getDefaultValue())); } } }
public int getPrecision() { if (precision == 0 && this.getDatatype() != null && getDatatype().getName().equals(DataTypeManager.DefaultDataTypes.BIG_DECIMAL)) { return DEFAULT_PRECISION; } return precision; }
VDBMetaData vdb, TransformationMetadata metadata, CommandContext cc, SimpleIterator<BaseColumn> iter) { Datatype dt = param.getDatatype(); row.add(vdb.getName()); String type = "ResultSet"; //$NON-NLS-1$ AbstractMetadataRecord proc = param.getParent(); boolean isOptional = false; int pos = param.getPosition(); if (param instanceof ProcedureParameter) { ProcedureParameter pp = (ProcedureParameter)param; proc = param.getParent().getParent(); row.add(param.getName()); row.add(param.getRuntimeType()); row.add(pos); row.add(type); row.add(isOptional); row.add(param.getPrecision()); row.add(param.getLength()); row.add(param.getScale()); row.add(param.getRadix()); row.add(param.getNullType().toString()); row.add(param.getUUID()); row.add(param.getAnnotation()); addTypeInfo(row, param, dt); row.add(param.getDefaultValue());
private void appendColumn(BaseColumn column, boolean includeName, boolean includeType) { if (includeName) { append(SQLStringVisitor.escapeSinglePart(column.getName())); Datatype datatype = column.getDatatype(); String runtimeTypeName = column.getRuntimeType(); boolean domain = false; if (datatype != null) { append(runtimeTypeName); if (LENGTH_DATATYPES.contains(runtimeTypeName)) { if (column.getLength() != 0 && (datatype == null || column.getLength() != datatype.getLength())) { append(LPAREN).append(column.getLength()).append(RPAREN); && !column.isDefaultPrecisionScale()) { append(LPAREN).append(column.getPrecision()); if (column.getScale() != 0) { append(COMMA).append(column.getScale()); for (int dims = column.getArrayDimensions(); dims > 0; dims--) { append(Tokens.LSBRACE).append(Tokens.RSBRACE); if (column.getNullType() == NullType.No_Nulls && (!domain || datatype.getNullType() != NullType.No_Nulls)) { append(SPACE).append(NOT_NULL);
private void appendColumnOptions(BaseColumn column) { StringBuilder options = new StringBuilder(); addCommonOptions(options, column); if (!column.getDatatype().isBuiltin() && column.getDatatype().getType() != Datatype.Type.Domain) { //an enterprise type addOption(options, UDT, column.getDatatype().getName() + "("+column.getLength()+ ", " +column.getPrecision()+", " + column.getScale()+ ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } if (column.getDatatype().getRadix() != 0 && column.getRadix() != column.getDatatype().getRadix()) { addOption(options, RADIX, column.getRadix()); } buildColumnOptions(column, options); if (options.length() != 0) { append(SPACE).append(OPTIONS).append(SPACE).append(LPAREN).append(options).append(RPAREN); } }