package cn.edu.whu.boot.common.utils.collection;

import cn.edu.whu.boot.common.domain.CommonConstant;

/**
 * PostgreSql 数据库中涉及到的工具类
 */
public class PostgreSqlUtil{

    /**
     * PostgreSQL 数据库中字符串，得两边加上 '' ! 该方法提供转换 !
     * 注意与下面的 buildString() 方法区别
     */
    public static String buildString(String str){
        return "\'" + str + "\'";
    }

    /**
     * PostgreSQL 数据库中的模式名和字段名都只显示小写，如果需要显示大小，得两边加上 "" ! 该方法提供转换 !
     */
    public static String transformString(String str){
        return "\"" + str + "\"";
    }

    /**
     * 生成数据库中的表名样式，因为 PostgreSQL 数据库中若表名有大写，需在两边加上"" !
     * 另外通过 boolean isMediaTable, boolean isHistoryTable 参数也可生成对应的多媒体表和历史表!!!
     *
     * @param databaseName   模式名
     * @param tableName      表名
     * @param isMediaTable   是否为多媒体表
     * @param isHistoryTable 是否为历史表
     */
    public static String buildTableNameString(String databaseName, String tableName,
                                              boolean isMediaTable, boolean isHistoryTable){
        if(isMediaTable){
            tableName += CommonConstant.MEDIA_SUFFIX;
        }
        if(isHistoryTable){
            tableName += CommonConstant.HISTORY_SUFFIX;
        }
        return "\"" + databaseName + "\".\"" + tableName + "\"";
    }

    /**
     * 生成 PostgreSQL 数据库中的列名形式!!!
     */
    public static String buildColumnNameString(String databaseName, String tableName, String columnName){
        return transformString(databaseName) + "." + transformString(tableName) + "." + transformString(columnName);
    }

}
