/*
* DBeaver - Universal Database Manager
* Copyright (C) 2013-2017 Denis Forveille (titou10.titou10@gmail.com)
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ext.db2.model;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.db2.DB2Utils;
import org.jkiss.dbeaver.ext.db2.model.dict.DB2RoutineRowType;
import org.jkiss.dbeaver.ext.db2.model.module.DB2Module;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSTypedObject;
import org.jkiss.dbeaver.model.struct.DBSTypedObjectEx;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureParameter;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedureParameterKind;
import org.jkiss.utils.CommonUtils;
import java.sql.ResultSet;
/**
* DB2 Routine Parameter
*
* @author Denis Forveille
*/
public class DB2RoutineParm implements DBSProcedureParameter, DBSTypedObject, DBSTypedObjectEx {
private final DB2Routine procedure;
private String name;
private String remarks;
private Integer scale;
private Integer length;
private DB2RoutineRowType rowType;
private DB2DataType dataType;
private DB2Schema dataTypeSchema;
private String typeName;
// -----------------------
// Constructors
// -----------------------
public DB2RoutineParm(DBRProgressMonitor monitor, DB2Routine procedure, ResultSet dbResult) throws DBException
{
super();
this.procedure = procedure;
DB2DataSource db2DataSource = getDataSource();
this.name = JDBCUtils.safeGetStringTrimmed(dbResult, "PARMNAME");
this.scale = JDBCUtils.safeGetInteger(dbResult, "SCALE");
this.length = JDBCUtils.safeGetInteger(dbResult, "LENGTH");
this.remarks = JDBCUtils.safeGetStringTrimmed(dbResult, "REMARKS");
this.rowType = CommonUtils.valueOf(DB2RoutineRowType.class, JDBCUtils.safeGetString(dbResult, "ROWTYPE"));
String typeSchemaName = JDBCUtils.safeGetStringTrimmed(dbResult, "TYPESCHEMA");
String typeModuleName = JDBCUtils.safeGetStringTrimmed(dbResult, "TYPEMODULENAME");
this.typeName = JDBCUtils.safeGetStringTrimmed(dbResult, "TYPENAME");
this.dataTypeSchema = db2DataSource.getSchema(monitor, typeSchemaName);
// -------------------
// Search for DataType
// -------------------
// First Search in System/Standard Data Types
this.dataType = db2DataSource.getLocalDataType(typeName);
if (this.dataType != null) {
return;
}
// Not found : Search for a UDT in Module
if (typeModuleName != null) {
DB2Module db2Module = DB2Utils.findModuleBySchemaNameAndName(monitor, db2DataSource, typeSchemaName, typeModuleName);
this.dataType = db2Module.getType(monitor, typeName);
return;
}
// Not found, search for a UDT
this.dataType = this.dataTypeSchema.getUDT(monitor, typeName);
}
@Nullable
@Override
public String getDescription()
{
return remarks;
}
@NotNull
@Override
public DB2DataSource getDataSource()
{
return procedure.getDataSource();
}
@Override
public DB2Routine getParentObject()
{
return procedure;
}
@Override
public boolean isPersisted()
{
return true;
}
@Override
public int getPrecision()
{
// TODO Auto-generated method stub
return 0;
}
// DF: Strange typeName and typeId are attributes of DBPDataKind...
@Override
public String getTypeName()
{
return typeName;
}
@Override
public String getFullTypeName()
{
return DBUtils.getFullTypeName(this);
}
@Override
public int getTypeID()
{
return dataType.getEquivalentSqlType();
}
@Override
public DBPDataKind getDataKind()
{
return dataType.getDataKind();
}
// -----------------------
// Properties
// -----------------------
@NotNull
@Override
@Property(viewable = true, order = 1)
public String getName()
{
return name;
}
@Property(viewable = true, order = 2)
public DB2Schema getDataTypeSchema()
{
return dataTypeSchema;
}
@Nullable
@Override
@Property(viewable = true, order = 3)
public DB2DataType getDataType()
{
return dataType;
}
@NotNull
@Override
@Property(viewable = true, order = 4)
public DBSProcedureParameterKind getParameterKind()
{
return rowType.getParameterKind();
}
@Override
@Property(viewable = true, order = 5)
public long getMaxLength()
{
return length;
}
@Override
@Property(viewable = true, order = 6)
public int getScale()
{
return scale;
}
public DB2RoutineRowType getRowType()
{
return rowType;
}
@NotNull
@Override
public DBSTypedObject getParameterType()
{
return this;
}
}