use of org.jkiss.dbeaver.model.impl.jdbc.JDBCStructImpl in project dbeaver by serge-rider.
the class PostgreStructValueHandler method convertStringToStruct.
private JDBCCompositeStatic convertStringToStruct(@NotNull DBCSession session, @NotNull PostgreDataType compType, @NotNull String value) throws DBException {
if (value.startsWith("(") && value.endsWith(")")) {
value = value.substring(1, value.length() - 1);
}
final Collection<PostgreDataTypeAttribute> attributes = compType.getAttributes(session.getProgressMonitor());
if (attributes == null) {
throw new DBException("Composite type '" + compType.getTypeName() + "' has no attributes");
}
String[] parsedValues = PostgreValueParser.parseSingleObject(value);
if (parsedValues.length != attributes.size()) {
log.debug("Number of attributes (" + attributes.size() + ") doesn't match actual number of parsed strings (" + parsedValues.length + ")");
}
Object[] attrValues = new Object[attributes.size()];
Iterator<PostgreDataTypeAttribute> attrIter = attributes.iterator();
for (int i = 0; i < parsedValues.length && attrIter.hasNext(); i++) {
final PostgreDataTypeAttribute itemAttr = attrIter.next();
attrValues[i] = PostgreValueParser.convertStringToValue(session, itemAttr, parsedValues[i]);
}
Struct contents = new JDBCStructImpl(compType.getTypeName(), attrValues, value);
return new JDBCCompositeStatic(session, compType, contents);
}
use of org.jkiss.dbeaver.model.impl.jdbc.JDBCStructImpl in project dbeaver by dbeaver.
the class PostgreStructValueHandler method convertStringToStruct.
private JDBCCompositeStatic convertStringToStruct(@NotNull DBCSession session, @NotNull PostgreDataType compType, @NotNull String value) throws DBException {
if (value.startsWith("(") && value.endsWith(")")) {
value = value.substring(1, value.length() - 1);
}
final Collection<PostgreDataTypeAttribute> attributes = compType.getAttributes(session.getProgressMonitor());
if (attributes == null) {
throw new DBException("Composite type '" + compType.getTypeName() + "' has no attributes");
}
String[] parsedValues = PostgreValueParser.parseSingleObject(value);
if (parsedValues.length != attributes.size()) {
log.debug("Number of attributes (" + attributes.size() + ") doesn't match actual number of parsed strings (" + parsedValues.length + ")");
}
Object[] attrValues = new Object[attributes.size()];
Iterator<PostgreDataTypeAttribute> attrIter = attributes.iterator();
for (int i = 0; i < parsedValues.length && attrIter.hasNext(); i++) {
final PostgreDataTypeAttribute itemAttr = attrIter.next();
attrValues[i] = PostgreValueParser.convertStringToValue(session, itemAttr, parsedValues[i]);
}
Struct contents = new JDBCStructImpl(compType.getTypeName(), attrValues, value);
return new JDBCCompositeStatic(session, compType, contents);
}
use of org.jkiss.dbeaver.model.impl.jdbc.JDBCStructImpl in project dbeaver by dbeaver.
the class JDBCComposite method getStructValue.
public Struct getStructValue() throws DBCException {
if (rawStruct != null) {
return rawStruct;
}
Object[] attrs = new Object[values.length];
for (int i = 0; i < values.length; i++) {
Object attr = values[i];
if (attr instanceof DBDValue) {
attr = ((DBDValue) attr).getRawValue();
}
attrs[i] = attr;
}
final DBSDataType dataType = getDataType();
try (DBCSession session = DBUtils.openUtilSession(new VoidProgressMonitor(), dataType, "Create JDBC struct")) {
if (session instanceof Connection) {
return ((Connection) session).createStruct(dataType.getTypeName(), attrs);
} else {
return new JDBCStructImpl(dataType.getTypeName(), attrs, getStringRepresentation());
}
} catch (Throwable e) {
throw new DBCException("Error creating struct", e);
}
}
use of org.jkiss.dbeaver.model.impl.jdbc.JDBCStructImpl in project dbeaver by dbeaver.
the class JDBCStructValueHandler method getValueFromObject.
@Override
public Object getValueFromObject(@NotNull DBCSession session, @NotNull DBSTypedObject type, Object object, boolean copy, boolean validateValue) throws DBCException {
if (object instanceof JDBCComposite) {
return copy ? ((JDBCComposite) object).cloneValue(session.getProgressMonitor()) : object;
}
String typeName;
try {
if (object instanceof Struct) {
typeName = ((Struct) object).getSQLTypeName();
} else {
typeName = type.getTypeName();
}
} catch (SQLException e) {
throw new DBCException(e, session.getExecutionContext());
}
DBSDataType dataType = null;
try {
dataType = DBUtils.resolveDataType(session.getProgressMonitor(), session.getDataSource(), typeName);
} catch (DBException e) {
log.debug("Error resolving data type '" + typeName + "'", e);
}
if (dataType == null) {
if (object instanceof Struct) {
return new JDBCCompositeDynamic(session, (Struct) object, null);
} else {
return new JDBCCompositeUnknown(session, object);
}
}
if (object == null) {
return new JDBCCompositeStatic(session, dataType, new JDBCStructImpl(dataType.getTypeName(), null, ""));
} else if (object instanceof Struct) {
return new JDBCCompositeStatic(session, dataType, (Struct) object);
} else {
return new JDBCCompositeUnknown(session, object);
}
}
use of org.jkiss.dbeaver.model.impl.jdbc.JDBCStructImpl in project dbeaver by serge-rider.
the class JDBCComposite method getStructValue.
public Struct getStructValue() throws DBCException {
if (rawStruct != null) {
return rawStruct;
}
Object[] attrs = new Object[values.length];
for (int i = 0; i < values.length; i++) {
Object attr = values[i];
if (attr instanceof DBDValue) {
attr = ((DBDValue) attr).getRawValue();
}
attrs[i] = attr;
}
final DBSDataType dataType = getDataType();
try (DBCSession session = DBUtils.openUtilSession(new VoidProgressMonitor(), dataType, "Create JDBC struct")) {
if (session instanceof Connection) {
return ((Connection) session).createStruct(dataType.getTypeName(), attrs);
} else {
return new JDBCStructImpl(dataType.getTypeName(), attrs, getStringRepresentation());
}
} catch (Throwable e) {
throw new DBCException("Error creating struct", e);
}
}
Aggregations