编辑代码

sql = "CREATE TABLE `raw_material` (
  `id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `company_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '公司ID',
  `raw_material_no` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '原料编号, 格式请查看通用配置文档',
  `raw_material_type` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '原料类型,查看通用配置文档',
  `chemical_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '化合物ID司',
  `cas` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'CAS号',
  `name` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '中文名称',
  `name_en` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '英文名称',
  `formula` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '分子式',
  `molecular_weight` decimal(16,3) NOT NULL DEFAULT '0.000' COMMENT '分子量',
  `appearance_traits` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '外观性状',
  `storage_considerations` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '存储注意事项',
  `ppe_category` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'PPE类别',
  `packaging_considerations` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '分装注意事项',
  `create_department_path` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建部门路径, 格式: id1-id2-id3 …idn- 目前至少支持20级部门',
  `create_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '新建人ID',
  `create_time` datetime NOT NULL DEFAULT '1972-01-01 00:00:00' COMMENT '新建时间',
  `update_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '修改人ID',
  `update_time` datetime NOT NULL DEFAULT '1972-01-01 00:00:00' COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_company_id_raw_material_no` (`company_id`,`raw_material_no`),
  UNIQUE KEY `uk_company_id_chemical_id` (`company_id`,`chemical_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='原料表';"
line_arr = sql.split("\n")
puts line_arr[line_arr.length - 1].split( "COMMENT='").last.gsub("';","") + ":" + line_arr[0].gsub("CREATE TABLE `","").gsub("` (", "")
puts "字段\t类型\t索引\t默认\t描述\t其它"
primary_key = line_arr.find{|line| line.strip.start_with?("PRIMARY KEY")}.to_s.strip.gsub("PRIMARY KEY (`","").gsub("`),", "")
line_arr[1, line_arr.length-2].each do |line|
    line = line.strip
    if line.start_with? "`"
        column_arr = line.split(" ")
        column_name = column_arr[0].gsub("`", "")
        signed_type = column_arr.include?("unsigned") ? "unsigned" : column_arr.include?("signed") ? "signed" : ""
        column_type = column_arr[1]
        if column_type.include?("int")
            column_type = column_type.split("(").first
        end
        index_type = column_name == primary_key ? "主键索引" : ""
        default_value = ""
        if column_arr.include?("DEFAULT") 
            if column_type == "datetime"
                default_value = column_arr[column_arr.index("DEFAULT") + 1] + " " + column_arr[column_arr.index("DEFAULT") + 2]
            else
                default_value = column_arr[column_arr.index("DEFAULT") + 1]
            end
        end
        if default_value == "''"
            default_value = "\"\""
        else
            default_value = default_value.gsub("'","")
        end
        comments = column_arr.include?("COMMENT") ? column_arr[column_arr.index("COMMENT") + 1].gsub("'", "").gsub(",","") : ""
        puts "#{column_name}\t#{signed_type} #{column_type}\t#{index_type}\t#{default_value}\t#{comments}\t"
    elsif line.start_with? "UNIQUE KEY"
        puts line.split( "(").last.gsub("`", "").gsub(")","").split(",").join(",") + " 唯一索引"
    elsif line.start_with? "KEY"
        puts line.split( "(").last.gsub("`", "").gsub(")","").split(",").join(",") + " 索引"
    end
end