Commit ae0d397c authored by godkaikai's avatar godkaikai

postgresql

parent 9f89e370
......@@ -152,7 +152,10 @@ dlink -- 父项目
|-dlink-function -- 函数中心
|-dlink-metadata -- 元数据中心
| |-dlink-metadata-base -- 元数据基础组件
| |-dlink-metadata-clickhouse -- 元数据- clickhouse 实现
| |-dlink-metadata-mysql -- 元数据- mysql 实现
| |-dlink-metadata-oracle -- 元数据- oracle 实现
| |-dlink-metadata-postgresql -- 元数据- postgresql 实现
|-dlink-web -- React 前端
```
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dlink-metadata</artifactId>
<groupId>com.dlink</groupId>
<version>0.3.0-SANPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dlink-metadata-postgresql</artifactId>
<dependencies>
<dependency>
<groupId>com.dlink</groupId>
<artifactId>dlink-metadata-base</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.dlink.metadata.convert;
import com.dlink.metadata.rules.DbColumnType;
import com.dlink.metadata.rules.IColumnType;
/**
* PostgreSqlTypeConvert
*
* @author qiwenkai
* @since 2021/7/22 9:33
**/
public class PostgreSqlTypeConvert implements ITypeConvert {
@Override
public IColumnType convert(String columnType) {
String t = columnType.toLowerCase();
if (t.contains("char")) {
return DbColumnType.STRING;
} else if (t.contains("bigint")) {
return DbColumnType.LONG;
} else if (t.contains("int")) {
return DbColumnType.INTEGER;
} else if (t.contains("date") || t.contains("time")) {
return DbColumnType.DATE;
} else if (t.contains("text")) {
return DbColumnType.STRING;
} else if (t.contains("bit")) {
return DbColumnType.BOOLEAN;
} else if (t.contains("decimal")) {
return DbColumnType.BIG_DECIMAL;
} else if (t.contains("clob")) {
return DbColumnType.CLOB;
} else if (t.contains("blob")) {
return DbColumnType.BYTE_ARRAY;
} else if (t.contains("float")) {
return DbColumnType.FLOAT;
} else if (t.contains("double")) {
return DbColumnType.DOUBLE;
} else if (t.contains("json") || t.contains("enum")) {
return DbColumnType.STRING;
} else if (t.contains("boolean")) {
return DbColumnType.BOOLEAN;
} else if (t.contains("numeric")) {
return DbColumnType.BIG_DECIMAL;
}
return DbColumnType.STRING;
}
@Override
public String convertToDB(String columnType) {
switch (columnType.toLowerCase()){
case "string":
return "varchar(255)";
case "boolean":
return "tinyint(1)";
case "int":
case "integer":
return "int";
case "double":
return "double";
case "float":
return "float";
case "long":
return "bigint";
case "date":
return "datetime(0)";
default:
return "varchar(255)";
}
}
}
package com.dlink.metadata.driver;
import com.dlink.metadata.convert.ITypeConvert;
import com.dlink.metadata.convert.PostgreSqlTypeConvert;
import com.dlink.metadata.query.IDBQuery;
import com.dlink.metadata.query.PostgreSqlQuery;
import com.dlink.model.Table;
/**
* PostgreSqlDriver
*
* @author qiwenkai
* @since 2021/7/22 9:28
**/
public class PostgreSqlDriver extends AbstractJdbcDriver {
@Override
String getDriverClass() {
return "org.postgresql.Driver";
}
@Override
public IDBQuery getDBQuery() {
return new PostgreSqlQuery();
}
@Override
public ITypeConvert getTypeConvert() {
return new PostgreSqlTypeConvert();
}
@Override
public String getType() {
return "PostgreSql";
}
@Override
public String getName() {
return "PostgreSql 数据库";
}
@Override
public String getCreateTableSql(Table table) {
return null;
}
}
package com.dlink.metadata.query;
/**
* PostgreSqlQuery
*
* @author qiwenkai
* @since 2021/7/22 9:29
**/
public class PostgreSqlQuery extends AbstractDBQuery {
@Override
public String schemaAllSql() {
return null;
}
@Override
public String tablesSql(String schemaName) {
return "SELECT A.tablename, obj_description(relfilenode, 'pg_class') AS comments FROM pg_tables A, pg_class B WHERE A.schemaname='"+schemaName+"' AND A.tablename = B.relname";
}
@Override
public String columnsSql(String schemaName,String tableName) {
return "SELECT A.attname AS name,format_type (A.atttypid,A.atttypmod) AS type,col_description (A.attrelid,A.attnum) AS comment,\n" +
"(CASE WHEN (SELECT COUNT (*) FROM pg_constraint AS PC WHERE A.attnum = PC.conkey[1] AND PC.contype = 'p') > 0 THEN 'PRI' ELSE '' END) AS key \n" +
"FROM pg_class AS C,pg_attribute AS A WHERE A.attrelid='"+schemaName+"."+tableName+"'::regclass AND A.attrelid= C.oid AND A.attnum> 0 AND NOT A.attisdropped ORDER BY A.attnum";
}
@Override
public String schemaName() {
return null;
}
@Override
public String tableName() {
return "tablename";
}
@Override
public String tableComment() {
return "comments";
}
@Override
public String columnName() {
return "name";
}
@Override
public String columnType() {
return "type";
}
@Override
public String columnComment() {
return "comment";
}
@Override
public String columnKey() {
return "key";
}
@Override
public String isNotNull() {
return null;
}
}
......@@ -16,6 +16,7 @@
<module>dlink-metadata-mysql</module>
<module>dlink-metadata-oracle</module>
<module>dlink-metadata-clickhouse</module>
<module>dlink-metadata-postgresql</module>
</modules>
......
......@@ -37,6 +37,7 @@
<mysql-connector-java.version>8.0.22</mysql-connector-java.version>
<ojdbc6.version>11.2.0.3</ojdbc6.version>
<clickhouse.version>0.2.6</clickhouse.version>
<postgresql.version>42.2.14</postgresql.version>
<banner.version>1.0.2</banner.version>
<hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
<versions-maven-plugin.version>2.7</versions-maven-plugin.version>
......@@ -130,6 +131,11 @@
<artifactId>clickhouse-jdbc</artifactId>
<version>${clickhouse.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>banner</artifactId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment