Skip to content

Commit

Permalink
Merge branch 'master' of github.com:nutzam/nutz
Browse files Browse the repository at this point in the history
  • Loading branch information
wendal committed May 8, 2023
2 parents 8f908d4 + 4425471 commit 595355b
Show file tree
Hide file tree
Showing 6 changed files with 174 additions and 4 deletions.
3 changes: 1 addition & 2 deletions README.md
Expand Up @@ -2,7 +2,6 @@
<p align="center"><a href="https://nutz.cn" target="_blank"><img width="100" src="https://github.com/nutzam/nutz/raw/master/doc/ci/logo.png"></a></p>

[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.nutz/nutz/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.nutz/nutz/)
[![GitHub release](https://img.shields.io/github/release/nutzam/nutz.svg)](https://github.com/nutzam/nutz/releases)
[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)

## 项目目标
Expand Down Expand Up @@ -40,7 +39,7 @@ Nutz遵循Apache协议,完全开源,文档齐全,永远免费(商用也是)
<dependency>
<groupId>org.nutz</groupId>
<artifactId>nutz</artifactId>
<version>1.r.68.v20190220</version>
<version>1.r.69.v20220703</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion src/org/nutz/Nutz.java
Expand Up @@ -33,7 +33,7 @@ public final class Nutz {
* @return nutz 项目的版本号
*/
public static String version() {
return "1.r.69-SNAPSHOT";
return "1.r.70-SNAPSHOT";
}

/**
Expand Down
4 changes: 4 additions & 0 deletions src/org/nutz/dao/DB.java
Expand Up @@ -55,6 +55,10 @@ public enum DB {
* DM
*/
DM,
/**
* DM_MYSQL
*/
DM_MYSQL,
/**
* TDengine
*/
Expand Down
2 changes: 2 additions & 0 deletions src/org/nutz/dao/DatabaseMeta.java
Expand Up @@ -61,6 +61,8 @@ public void setProductName(String productName) {
type = DB.SYBASE;
} else if (proName.contains("dm dbms")) {
type = DB.DM;
} else if (proName.contains("dm mysql")) {
type = DB.DM_MYSQL;
} else if (proName.contains("tdengine")) {
type = DB.TDENGINE;
} else {
Expand Down
164 changes: 164 additions & 0 deletions src/org/nutz/dao/impl/jdbc/dm/DmMysqlJdbcExpert.java
@@ -0,0 +1,164 @@
package org.nutz.dao.impl.jdbc.dm;

import org.nutz.dao.DB;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.entity.Entity;
import org.nutz.dao.entity.LinkField;
import org.nutz.dao.entity.MappingField;
import org.nutz.dao.entity.PkType;
import org.nutz.dao.entity.annotation.ColType;
import org.nutz.dao.impl.jdbc.AbstractJdbcExpert;
import org.nutz.dao.jdbc.JdbcExpertConfigFile;
import org.nutz.dao.pager.Pager;
import org.nutz.dao.sql.Pojo;
import org.nutz.dao.sql.Sql;
import org.nutz.dao.util.Pojos;
import org.nutz.log.Log;
import org.nutz.log.Logs;

import java.util.List;

/**
* @author wizzer.cn
*/
public class DmMysqlJdbcExpert extends AbstractJdbcExpert {

private static final Log log = Logs.get();

public DmMysqlJdbcExpert(JdbcExpertConfigFile conf) {
super(conf);
}

public String getDatabaseType() {
return DB.DM_MYSQL.name();
}

public void formatQuery(Pojo pojo) {
Pager pager = pojo.getContext().getPager();
// 需要进行分页
if (null != pager && pager.getPageNumber() > 0)
pojo.append(Pojos.Items.wrapf(" LIMIT %d, %d", pager.getOffset(), pager.getPageSize()));
}

public void formatQuery(Sql sql) {
Pager pager = sql.getContext().getPager();
// 需要进行分页
if (null != pager && pager.getPageNumber() > 0)
sql.setSourceSql(sql.getSourceSql()
+ String.format(" LIMIT %d, %d",
pager.getOffset(),
pager.getPageSize()));
}

public String evalFieldType(MappingField mf) {
if (mf.getCustomDbType() != null)
return mf.getCustomDbType();
if (mf.getColumnType() == ColType.INT) {
int width = mf.getWidth();
if (width <= 0) {
return "INT";
} else if (width <= 4) {
return "TINYINT";
} else if (width <= 6) {
return "SMALLINT";
} else if (width <= 10) {
return "INT";
}
return "BIGINT";
}
if (mf.getColumnType() == ColType.BOOLEAN) {
return "TINYINT";
}
// 其它的参照默认字段规则 ...
return super.evalFieldType(mf);
}

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());
sb.append(' ').append(evalFieldType(mf));
// 非主键的 @Name,应该加入唯一性约束
if (mf.isName() && en.getPkType() != PkType.NAME) {
sb.append(" UNIQUE NOT NULL");
}
// 普通字段
else {

if (mf.isNotNull()) {
sb.append(" NOT NULL");
} else if (mf.getColumnType() == ColType.TIMESTAMP) {
sb.append(" NULL");
}

if (mf.isAutoIncreasement())
sb.append(" IDENTITY(1,1)");

if (mf.getColumnType() == ColType.TIMESTAMP) {
if (mf.hasDefaultValue()) {
sb.append(" ").append(getDefaultValue(mf));
} else {
if (mf.isNotNull()) {
sb.append(" DEFAULT 0");
} else {
sb.append(" DEFAULT NULL");
}
}
} else {
if (mf.hasDefaultValue())
addDefaultValue(sb, mf);
}
}

if (mf.hasColumnComment()) {
sb.append(" COMMENT '").append(mf.getColumnComment()).append("'");
}

sb.append(',');
}
// 创建主键
List<MappingField> pks = en.getPks();
if (!pks.isEmpty()) {
sb.append('\n');
sb.append("PRIMARY KEY (");
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);

return true;
}

protected String createResultSetMetaSql(Entity<?> en) {
return "SELECT * FROM " + en.getViewName() + " LIMIT 1";
}

public boolean canCommentWhenAddIndex() {
return true;
}

protected Sql createRelation(Dao dao, LinkField lf) {
Sql sql = super.createRelation(dao, lf);
if (sql == null)
return null;
StringBuilder sb = new StringBuilder(sql.getSourceSql());
return Sqls.create(sb.toString());
}
}
3 changes: 2 additions & 1 deletion src/org/nutz/dao/jdbc/nutz_jdbc_experts.js
Expand Up @@ -8,6 +8,8 @@ var ioc = {
*/
experts : {
"h2.*" : "org.nutz.dao.impl.jdbc.h2.H2JdbcExpert",
"dm dbms.*" : "org.nutz.dao.impl.jdbc.dm.DmJdbcExpert",
"dm mysql.*" : "org.nutz.dao.impl.jdbc.dm.DmMysqlJdbcExpert",
"mysql.*" : "org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert",
"mariadb.*" : "org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert",
"postgresql.*" : "org.nutz.dao.impl.jdbc.psql.PsqlJdbcExpert",
Expand All @@ -22,7 +24,6 @@ var ioc = {
".+derby.+" : "org.nutz.dao.impl.jdbc.derby.DerbyJdbcExpert",
"gbase.*" : "org.nutz.dao.impl.jdbc.gbase.GBaseJdbcExpert",
"sybase.*" : "org.nutz.dao.impl.jdbc.sybase.SybaseIQJdbcExpert",
"dm dbms.*" : "org.nutz.dao.impl.jdbc.dm.DmJdbcExpert",
"tdengine.*" : "org.nutz.dao.impl.jdbc.tdengine.TDengineJdbcExpert",
"clickhouse.*" : "org.nutz.dao.impl.jdbc.clickhouse.ClickhouseJdbcExpert",
"xugu.*" : "org.nutz.dao.impl.jdbc.xugu.XuguJdbcExpert"
Expand Down

0 comments on commit 595355b

Please sign in to comment.