All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ecfront.easybi.dbutils.inner.dialect.PostgreDialect Maven / Gradle / Ivy

package com.ecfront.easybi.dbutils.inner.dialect;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public class PostgreDialect implements Dialect {

    @Override
    public String paging(String sql, long pageNumber, long pageSize) throws SQLException {
        return sql + " limit " + pageSize + " offset " + (pageNumber - 1) * pageSize;
    }

    @Override
    public String count(String sql) throws SQLException {
        return "select count(1) from ( " + sql + " ) _" + System.currentTimeMillis();
    }

    @Override
    public String getTableInfo(String tableName) throws SQLException {
        return "SELECT * FROM pg_tables t where t.tablename='" + tableName + "'";
    }

    @Override
    public String createTableIfNotExist(String tableName, String tableDesc, Map fields, Map fieldsDesc, List indexFields, List uniqueFields, String pkField) throws SQLException {
        StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS " + tableName + " ( ");
        for (Map.Entry field : fields.entrySet()) {
            String f = field.getValue().toLowerCase();
            String t;
            switch (f) {
                case "int":
                case "integer":
                case "short":
                    t = "integer";
                    break;
                case "long":
                    t = "bigint";
                    break;
                case "string":
                    t = "character varying(65535)";
                    break;
                case "text":
                    t = "text";
                    break;
                case "bool":
                case "boolean":
                    t = "boolean";
                    break;
                case "float":
                case "double":
                    t = "double precision";
                    break;
                case "char":
                    t = "character";
                    break;
                case "date":
                    t = "date";
                    break;
                case "bigdecimal":
                case "decimal":
                    t = "numeric";
                    break;
                default:
                    throw new SQLException("Not support type:" + f);
            }
            sb.append(field.getKey()).append(" ").append(t).append(" ,");
        }
        if (uniqueFields != null && !uniqueFields.isEmpty()) {
            for (String uField : uniqueFields) {
                sb.append("CONSTRAINT \"u_").append(tableName).append("_").append(uField).append("\" UNIQUE (\"").append(uField).append("\"),");
            }
        }
        if (pkField != null && !Objects.equals(pkField.trim(), "")) {
            sb.append("primary key(").append(pkField.trim()).append(") );");
        } else {
            sb = new StringBuilder(sb.substring(0, sb.length() - 1) + ");");
        }
        if (indexFields != null && !indexFields.isEmpty()) {
            for (String idxFields : indexFields) {
                sb.append("CREATE INDEX \"i_").append(tableName).append("_").append(idxFields).append("\" ON \"").append(tableName).append("\" (\"").append(idxFields).append("\");");
            }
        }
        if (tableDesc != null && !tableDesc.isEmpty()) {
            sb.append("COMMENT ON TABLE \"").append(tableName).append("\" IS '").append(tableDesc).append("';");
        }
        if (fieldsDesc != null && !fieldsDesc.isEmpty()) {
            for (Map.Entry field : fieldsDesc.entrySet()) {
                sb.append("COMMENT ON COLUMN \"").append(tableName).append("\".\"").append(field.getKey()).append("\" IS '").append(field.getValue()).append("';");
            }
        }
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy