提交 4044ab84 编写于 作者: S serge-rider

#3185 PG foreign server and foreign data wrapper DDL

上级 0c23f71b
......@@ -346,6 +346,8 @@
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreIndex"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreTableConstraintBase"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreExtension"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreForeignServer"/>
<objectType name="org.jkiss.dbeaver.ext.postgresql.model.PostgreForeignDataWrapper"/>
</editor>
<editor id="postgresql.source.ddl" class="org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreSourceViewEditor"
label="%db.editor.ddl.name" description="%db.editor.ddl.description" icon="#sql_text" position="additions_middle"
......
......@@ -38,6 +38,7 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSTypedObject;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
import java.io.IOException;
......@@ -463,4 +464,22 @@ public class PostgreUtils {
}
}
public static String getOptionsString(String[] options) {
StringBuilder opt = new StringBuilder();
opt.append("(");
if (!ArrayUtils.isEmpty(options)) {
for (int i = 0; i < options.length; i++) {
String option = options[i];
if (i > 0) opt.append(", ");
int divPos = option.indexOf('=');
if (divPos < 0) {
opt.append(option);
} else {
opt.append(option.substring(0, divPos)).append(" '").append(option.substring(divPos + 1)).append("'");
}
}
}
opt.append(")");
return opt.toString();
}
}
......@@ -33,7 +33,7 @@ import java.util.Map;
/**
* PostgreExtension
*/
public class PostgreExtension implements PostgreObject, DBPScriptObject {
public class PostgreExtension implements PostgreObject, PostgreScriptObject {
private PostgreSchema schema;
private long oid;
......@@ -118,4 +118,9 @@ public class PostgreExtension implements PostgreObject, DBPScriptObject {
"SCHEMA " + DBUtils.getQuotedIdentifier(getSchema()) + "\n\t" +
"VERSION " + version;
}
@Override
public void setObjectDefinitionText(String sourceText) throws DBException {
}
}
......@@ -25,11 +25,12 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
/**
* PostgreForeignDataWrapper
*/
public class PostgreForeignDataWrapper extends PostgreInformation {
public class PostgreForeignDataWrapper extends PostgreInformation implements PostgreScriptObject {
private long oid;
private String name;
......@@ -91,4 +92,23 @@ public class PostgreForeignDataWrapper extends PostgreInformation {
return getDatabase().getProcedure(monitor, handlerSchemaId, validatorProcId);
}
@Override
public String getObjectDefinitionText(DBRProgressMonitor monitor, Map<String, Object> options) throws DBException {
PostgreProcedure handler = getHandler(monitor);
PostgreProcedure validator = getValidator(monitor);
return
"-- Foreign data wrapper: " + getName() + "\n\n" +
"-- DROP FOREIGN DATA WRAPPER " + getName() + ";\n\n" +
"CREATE FOREIGN DATA WRAPPER " + getName() + "\n\t" +
(handler == null ? "" : "HANDLER " + handler.getName() + "\n\t") +
(validator == null ? "" : "VALIDATOR " + validator.getName() + "\n\t") +
"OPTIONS " + PostgreUtils.getOptionsString(this.options);
}
@Override
public void setObjectDefinitionText(String sourceText) throws DBException {
}
}
......@@ -25,11 +25,12 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
/**
* PostgreForeignServer
*/
public class PostgreForeignServer extends PostgreInformation {
public class PostgreForeignServer extends PostgreInformation implements PostgreScriptObject {
private long oid;
private String name;
......@@ -96,4 +97,19 @@ public class PostgreForeignServer extends PostgreInformation {
return PostgreUtils.getObjectById(monitor, getDatabase().foreignDataWrapperCache, getDatabase(), dataWrapperId);
}
@Override
public String getObjectDefinitionText(DBRProgressMonitor monitor, Map<String, Object> options) throws DBException {
return
"-- Foreign server: " + getName() + "\n\n" +
"-- DROP SERVER " + getName() + ";\n\n" +
"CREATE SERVER " + getName() + "\n\t" +
"FOREIGN DATA WRAPPER " + getForeignDataWrapper(monitor).getName() + "\n\t" +
"OPTIONS " + PostgreUtils.getOptionsString(this.options);
}
@Override
public void setObjectDefinitionText(String sourceText) throws DBException {
}
}
......@@ -41,7 +41,7 @@ import java.util.Map;
/**
* PostgreIndex
*/
public class PostgreIndex extends JDBCTableIndex<PostgreSchema, PostgreTableBase> implements DBPScriptObject, DBPHiddenObject
public class PostgreIndex extends JDBCTableIndex<PostgreSchema, PostgreTableBase> implements PostgreScriptObject, DBPHiddenObject
{
private long indexId;
private boolean isUnique;
......@@ -221,8 +221,14 @@ public class PostgreIndex extends JDBCTableIndex<PostgreSchema, PostgreTableBase
return indexDDL;
}
@Override
public void setObjectDefinitionText(String sourceText) throws DBException {
}
@Override
public String toString() {
return getName() + "(" + columns +")";
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册