Package org.qdao.util

Source Code of org.qdao.util.SQLTigger

package org.qdao.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import org.qdao.TableDescriptor;
import org.qdao.annotation.Column;
import org.qdao.annotation.Column.DBColumnType;
import org.qdao.annotation.PrimaryKey;
import org.qdao.annotation.Table;

import com.tan.util.StringUtil;

/**
*
* @author TanYuanji
*
*/
public final class SQLTigger {

  /**
   * <pre>
   *   analysis the table for the class of the model
   * 
   *  解析目标模型的表结构
   * </pre>
   *
   * @author tan
   * @param tableClazz
   * @return 2010/02/25 10:41:42
   */
  public static TableDescriptor getTableDescriptor(Class<?> tableClazz) {
    // TODO : use reflect to get annotation from table class
    TableDescriptor tableDescriptor = new TableDescriptor();

    Table table = (Table) tableClazz.getAnnotation(Table.class);
    if (table != null) {
      tableDescriptor.name = table.name();
      tableDescriptor.description = table.description();
    }

    Field[] fields = tableClazz.getDeclaredFields();
    List<TableDescriptor.ColumnDescription> columnDescriptors =
        new ArrayList<TableDescriptor.ColumnDescription>();

    List<String> primaryKeys = new ArrayList<String>();

    for (int i = 0; i < fields.length; i++) {
      Column column = fields[i].getAnnotation(Column.class);
      if (column != null) {
        TableDescriptor.ColumnDescription columnDescription = new TableDescriptor.ColumnDescription();
        columnDescription.decimal = column.decimal();
        columnDescription.description = column.description();
        columnDescription.name = column.name();
        columnDescription.length = column.length();
        columnDescription.nullable = column.nullable();
        columnDescription.type = column.type();
        columnDescriptors.add(columnDescription);
      }
      PrimaryKey primaryKey = fields[i].getAnnotation(PrimaryKey.class);
      if (primaryKey != null) {
        primaryKeys.add(column.name());
      }
    }

    // set the columns
    tableDescriptor.columns =
        columnDescriptors.toArray(
        new TableDescriptor.ColumnDescription[columnDescriptors.size()]);
    tableDescriptor.primaryKeys = primaryKeys.toArray(new String[primaryKeys.size()]);
    return tableDescriptor;
  }

  /**
   *
   * <pre>
   *   the tigger for the creater of table
   * 
   *  解析目标表结构的创建表的结构的sql语句
   * </pre>
   *
   *
   *
   * @author tan
   * @param table
   * @return 2010/02/25 10:41:21
   */
  public static String getOracleCreateTigger(TableDescriptor table) {
    StringBuffer buf = new StringBuffer("CREATE TABLE ");
    // add the table name
    buf.append(table.name + "(\r\n");
    for (int i = 0; i < table.columns.length; i++) {
      // add the column's name
      buf.append("\t" + table.columns[i].name + ' ')
                // add the column's type
          .append(table.columns[i].type);
      // add the column's length
      if (table.columns[i].length != -1) {
        buf.append("(" + table.columns[i].length + ") ");
      } else {
        buf.append(' ');
      }
      // add the column's nullable
      if (!table.columns[i].nullable) {
        buf.append("NOT NULL");
      }
     
      // add the comment for the field of the table.
      if ( StringUtil.isNotEmpty( table.columns[i].description ) ) {
        buf.append( " COMMENT '" + table.columns[i].description  + "'");
      }
      // add the comma
      if (i == table.columns.length - 1 && table.primaryKeys.length == 0) {
        buf.append("\r\n");
      } else {
        buf.append(",\r\n");
      }
    }
    // add the constraint for primary key
    if (table.primaryKeys.length != 0) {
      buf.append("\tCONSTRAINT PK_").append(table.name).append(" PRIMARY KEY (");
    }
    // add the primary key
    for (int i = 0; i < table.primaryKeys.length; i++) {
      if (i != table.primaryKeys.length - 1) {
        buf.append(table.primaryKeys[i]).append(',');
      } else {
        buf.append(table.primaryKeys[i]).append(")\r\n");
      }
    }
    // close the DDL language
    buf.append(')');

    // add the comment

    // if (table.description != null && !"".equals(table.description)) {
    // buf.append("\r\n/\r\nCOMMENT ON TABLE ").append(table.name)
    // .append(" IS ").append("'").append(table.description).append("'\r\n/");
    // } else {
    // buf.append("\r\n");
    // }
    // for (int i = 0; i < table.columns.length; i++) {
    // if (table.columns[i].description != null &&
    // !"".equals(table.columns[i].description)) {
    // buf.append("\r\nCOMMENT ON COLUMN  ").append(table.name).append(".").append(table.columns[i].name)
    // .append(" IS ").append("'").append(table.columns[i].description).append(
    // "'\r\n/");
    // }
    // }
    return buf.toString();
  }

  /**
   *
   * <pre>
   *   the tigger for the creater of table
   * 
   *  解析目标表结构的创建表的结构的sql语句
   * </pre>
   *
   *
   *
   * @author tan
   * @param table
   * @return 2010/02/25 10:41:21
   */

  /**
   *
   * <pre>
   *   the tigger for the creater of table
   * 
   *  解析目标表结构的创建表的结构的sql语句
   * </pre>
   *
   *
   *
   * @author tan
   * @param table
   * @return 2010/02/25 10:41:21
   */
  public static String getMySqlCreateTigger(final TableDescriptor table) {
    StringBuffer buf = new StringBuffer("CREATE TABLE IF NOT EXISTS ");
    // add the table name
    buf.append(table.name + "(\r\n");
    for (int i = 0; i < table.columns.length; i++) {
      // add the column's name

      if (
          table.columns[i].type == DBColumnType.INTEGER &&
          table.columns[i].autoIncrement
        ) {
        buf.append("\t" + table.columns[i].name +
            ' ').append(" INT NOT NULL AUTO_INCREMENT"
            );
       
        // add the comment for the field of the table.
        if ( StringUtil.isNotEmpty( table.columns[i].description ) ) {
          buf.append( " COMMENT '" + table.columns[i].description  + "'");
        }
       
        buf.append(",\r\n");
        continue;
      }

      buf.append("\t" + table.columns[i].name + ' ')
                // add the column's type
          .append(table.columns[i].type);
      // add the column's length
      if (table.columns[i].length != -1) {
        buf.append("(" + table.columns[i].length);
        // add the decimal
        if (table.columns[i].decimal != 0) {
          buf.append("," + table.columns[i].decimal);
        }
        buf.append(')');
      } else {
        buf.append(' ');
      }
      // add the column's nullable
      if (!table.columns[i].nullable) {
        buf.append(" NOT NULL");
      }
     
      // add the default value.
      if ( StringUtil.isNotEmpty( table.columns[i].defaultValue ) ) {
        buf.append(" DEFAULT " + table.columns[i].defaultValue);
      }
     
      // add the comment for the field of the table.
      if ( StringUtil.isNotEmpty( table.columns[i].description ) ) {
        buf.append( " COMMENT '" + table.columns[i].description  + "'");
      }
     
      // add the comma
      if (i == table.columns.length - 1) {
        if (table.primaryKeys.length != 0) {
          buf.append(",\r\n");
        } else
          buf.append("\r\n");
      } else {
        buf.append(",\r\n");
      }
    }
    // add the constraint for primary key
    if ( null  != table.primaryKeys && table.primaryKeys.length != 0) {
      buf.append("\tCONSTRAINT PK_").append(table.name).append(" PRIMARY KEY (");
     
      // add the primary key
      for (int i = 0; i < table.primaryKeys.length; i++) {
        if (i != table.primaryKeys.length - 1) {
          buf.append(table.primaryKeys[i]).append(',');
        } else {
          buf.append(table.primaryKeys[i]).append(")");
        }
      }
    }

    // close the DDL language
    return buf.append("\r\n)").toString();
  }
}
TOP

Related Classes of org.qdao.util.SQLTigger

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.