Search in sources :

Example 36 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class PsqlJdbcExpert method createEntity.

public boolean createEntity(Dao dao, Entity<?> en) {
    StringBuilder sb = new StringBuilder("CREATE TABLE " + en.getTableName() + "(");
    // 创建字段
    for (MappingField mf : en.getMappingFields()) {
        if (mf.isReadonly())
            continue;
        sb.append('\n').append(mf.getColumnNameInSql());
        // 自增主键特殊形式关键字
        if (mf.isId() && mf.isAutoIncreasement()) {
            sb.append(" SERIAL");
        } else {
            sb.append(' ').append(evalFieldType(mf));
            // 非主键的 @Name,应该加入唯一性约束
            if (mf.isName() && en.getPkType() != PkType.NAME) {
                sb.append(" UNIQUE NOT NULL");
            } else // 普通字段
            {
                if (mf.isUnsigned())
                    sb.append(" UNSIGNED");
                if (mf.isNotNull())
                    sb.append(" NOT NULL");
                if (mf.isAutoIncreasement())
                    throw Lang.noImplement();
                if (mf.hasDefaultValue())
                    addDefaultValue(sb, mf);
            }
        }
        sb.append(',');
    }
    // 创建主键
    List<MappingField> pks = en.getPks();
    if (!pks.isEmpty()) {
        sb.append('\n');
        sb.append(String.format("CONSTRAINT %s_pkey PRIMARY KEY (", en.getTableName().replace('.', '_').replace('"', '_')));
        for (MappingField pk : pks) {
            sb.append(pk.getColumnNameInSql()).append(',');
        }
        sb.setCharAt(sb.length() - 1, ')');
        sb.append("\n ");
    }
    // 结束表字段设置
    sb.setCharAt(sb.length() - 1, ')');
    // 执行创建语句
    dao.execute(Sqls.create(sb.toString()));
    // 创建索引
    dao.execute(createIndexs(en).toArray(new Sql[0]));
    // 创建关联表
    createRelation(dao, en);
    // 添加注释(表注释与字段注释)
    addComment(dao, en);
    return true;
}
Also used : MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 37 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class Sqlserver2005JdbcExpert method addComment.

private void addComment(Dao dao, Entity<?> en, String commentColumn) {
    // 字段注释
    if (en.hasColumnComment()) {
        List<Sql> sqls = new ArrayList<Sql>();
        for (MappingField mf : en.getMappingFields()) {
            if (mf.hasColumnComment()) {
                Sql columnCommentSQL = Sqls.create(commentColumn);
                columnCommentSQL.vars().set("table", en.getTableName()).set("column", mf.getColumnName()).set("columnComment", mf.getColumnComment());
                sqls.add(columnCommentSQL);
            }
        }
        // 执行创建语句
        dao.execute(sqls.toArray(new Sql[sqls.size()]));
    }
}
Also used : ArrayList(java.util.ArrayList) MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 38 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class AbstractJdbcExpert method createRelation.

public void createRelation(Dao dao, Entity<?> en) {
    final List<Sql> sqls = new ArrayList<Sql>(5);
    for (LinkField lf : en.visitManyMany(null, null, null)) {
        Sql sql = createRelation(dao, lf);
        if (sql != null)
            sqls.add(sql);
    }
    dao.execute(sqls.toArray(new Sql[sqls.size()]));
}
Also used : ArrayList(java.util.ArrayList) ManyManyLinkField(org.nutz.dao.impl.entity.field.ManyManyLinkField) LinkField(org.nutz.dao.entity.LinkField) Sql(org.nutz.dao.sql.Sql)

Example 39 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class AbstractJdbcExpert method addComment.

public void addComment(Dao dao, Entity<?> en, String commentTable, String commentColumn) {
    if (!en.hasTableComment() && !en.hasColumnComment()) {
        return;
    }
    List<Sql> sqls = new ArrayList<Sql>();
    // 表注释
    if (en.hasTableComment()) {
        Sql tableCommentSQL = Sqls.create(Strings.isBlank(commentTable) ? DEFAULT_COMMENT_TABLE : commentTable);
        tableCommentSQL.vars().set("table", en.getTableName()).set("tableComment", en.getTableComment());
        sqls.add(tableCommentSQL);
    }
    // 字段注释
    if (en.hasColumnComment()) {
        for (MappingField mf : en.getMappingFields()) {
            if (mf.hasColumnComment()) {
                Sql columnCommentSQL = Sqls.create(Strings.isBlank(commentColumn) ? DEFAULT_COMMENT_COLUMN : commentColumn);
                columnCommentSQL.vars().set("table", en.getTableName()).set("column", mf.getColumnName()).set("columnComment", mf.getColumnComment());
                sqls.add(columnCommentSQL);
            }
        }
    }
    // 执行创建语句
    dao.execute(sqls.toArray(new Sql[sqls.size()]));
}
Also used : ArrayList(java.util.ArrayList) MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 40 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class AbstractJdbcExpert method dropRelation.

public void dropRelation(Dao dao, Entity<?> en) {
    final List<Sql> sqls = new ArrayList<Sql>(5);
    for (LinkField lf : en.visitManyMany(null, null, null)) {
        ManyManyLinkField mm = (ManyManyLinkField) lf;
        if (!dao.exists(mm.getRelationName()))
            continue;
        sqls.add(Sqls.create("DROP TABLE " + mm.getRelationName()));
    }
    dao.execute(sqls.toArray(new Sql[sqls.size()]));
}
Also used : ArrayList(java.util.ArrayList) ManyManyLinkField(org.nutz.dao.impl.entity.field.ManyManyLinkField) ManyManyLinkField(org.nutz.dao.impl.entity.field.ManyManyLinkField) LinkField(org.nutz.dao.entity.LinkField) Sql(org.nutz.dao.sql.Sql)

Aggregations

Sql (org.nutz.dao.sql.Sql)69 Test (org.junit.Test)33 MappingField (org.nutz.dao.entity.MappingField)14 ArrayList (java.util.ArrayList)12 NutSql (org.nutz.dao.impl.sql.NutSql)9 Pet (org.nutz.dao.test.meta.Pet)9 ResultSet (java.sql.ResultSet)8 SQLException (java.sql.SQLException)8 FileSqlManager (org.nutz.dao.impl.FileSqlManager)8 Connection (java.sql.Connection)7 SqlManager (org.nutz.dao.SqlManager)7 SqlCallback (org.nutz.dao.sql.SqlCallback)5 Record (org.nutz.dao.entity.Record)4 PojoSql (org.nutz.dao.test.meta.issue1074.PojoSql)4 Dao (org.nutz.dao.Dao)3 DaoException (org.nutz.dao.DaoException)3 PreparedStatement (java.sql.PreparedStatement)2 HashMap (java.util.HashMap)2 List (java.util.List)2 LinkField (org.nutz.dao.entity.LinkField)2