Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not remove "(" when generating insert sql into auto_increment column only table #722

Merged
merged 1 commit into from
Sep 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -120,19 +120,23 @@ protected void prepareSql() {
builder.appendSql("insert into ");
builder.appendSql(entityType.getQualifiedTableName(naming::apply, dialect::applyQuote));
builder.appendSql(" (");
for (EntityPropertyType<ENTITY, ?> propertyType : targetPropertyTypes) {
builder.appendSql(propertyType.getColumnName(naming::apply, dialect::applyQuote));
builder.appendSql(", ");
if (!targetPropertyTypes.isEmpty()) {
for (EntityPropertyType<ENTITY, ?> propertyType : targetPropertyTypes) {
builder.appendSql(propertyType.getColumnName(naming::apply, dialect::applyQuote));
builder.appendSql(", ");
}
builder.cutBackSql(2);
}
builder.cutBackSql(2);
builder.appendSql(") values (");
for (EntityPropertyType<ENTITY, ?> propertyType : targetPropertyTypes) {
Property<ENTITY, ?> property = propertyType.createProperty();
property.load(entity);
builder.appendParameter(property.asInParameter());
builder.appendSql(", ");
if (!targetPropertyTypes.isEmpty()) {
for (EntityPropertyType<ENTITY, ?> propertyType : targetPropertyTypes) {
Property<ENTITY, ?> property = propertyType.createProperty();
property.load(entity);
builder.appendParameter(property.asInParameter());
builder.appendSql(", ");
}
builder.cutBackSql(2);
}
builder.cutBackSql(2);
builder.appendSql(")");
sql = builder.build(this::comment);
}
Expand Down
14 changes: 14 additions & 0 deletions doma-core/src/test/java/example/entity/AutoIncrement.java
@@ -0,0 +1,14 @@
package example.entity;

import org.seasar.doma.Entity;
import org.seasar.doma.GeneratedValue;
import org.seasar.doma.GenerationType;
import org.seasar.doma.Id;

@Entity
public class AutoIncrement {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer id;
}
185 changes: 185 additions & 0 deletions doma-core/src/test/java/example/entity/_AutoIncrement.java
@@ -0,0 +1,185 @@
package example.entity;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
import javax.annotation.Generated;
import org.seasar.doma.internal.jdbc.scalar.BasicScalar;
import org.seasar.doma.jdbc.entity.AbstractEntityType;
import org.seasar.doma.jdbc.entity.EntityPropertyType;
import org.seasar.doma.jdbc.entity.GeneratedIdPropertyType;
import org.seasar.doma.jdbc.entity.NamingType;
import org.seasar.doma.jdbc.entity.PostDeleteContext;
import org.seasar.doma.jdbc.entity.PostInsertContext;
import org.seasar.doma.jdbc.entity.PostUpdateContext;
import org.seasar.doma.jdbc.entity.PreDeleteContext;
import org.seasar.doma.jdbc.entity.PreInsertContext;
import org.seasar.doma.jdbc.entity.PreUpdateContext;
import org.seasar.doma.jdbc.entity.Property;
import org.seasar.doma.jdbc.entity.TenantIdPropertyType;
import org.seasar.doma.jdbc.entity.VersionPropertyType;
import org.seasar.doma.jdbc.id.BuiltinIdentityIdGenerator;
import org.seasar.doma.wrapper.IntegerWrapper;

@Generated("")
public class _AutoIncrement extends AbstractEntityType<AutoIncrement> {

private static final _AutoIncrement singleton = new _AutoIncrement();

private final NamingType __namingType = NamingType.NONE;

public final GeneratedIdPropertyType<AutoIncrement, Integer, Integer> id =
new GeneratedIdPropertyType<>(
AutoIncrement.class,
() -> new BasicScalar<>(IntegerWrapper::new),
"id",
"ID",
__namingType,
false,
new BuiltinIdentityIdGenerator());

private final String __name = "AutoIncrement";

private final String __catalogName = null;

private final String __schemaName = null;

private final String __tableName = "";

private final List<EntityPropertyType<AutoIncrement, ?>> __idPropertyTypes;

private final List<EntityPropertyType<AutoIncrement, ?>> __entityPropertyTypes;

private final Map<String, EntityPropertyType<AutoIncrement, ?>> __entityPropertyTypeMap;

private _AutoIncrement() {
List<EntityPropertyType<AutoIncrement, ?>> __idList = new ArrayList<>();
__idList.add(id);
__idPropertyTypes = Collections.unmodifiableList(__idList);
List<EntityPropertyType<AutoIncrement, ?>> __list = new ArrayList<>();
__list.add(id);
__entityPropertyTypes = Collections.unmodifiableList(__list);
Map<String, EntityPropertyType<AutoIncrement, ?>> __map = new HashMap<>();
__map.put("id", id);
__entityPropertyTypeMap = Collections.unmodifiableMap(__map);
}

@Override
public boolean isImmutable() {
return false;
}

@Override
public AutoIncrement newEntity(Map<String, Property<AutoIncrement, ?>> args) {
AutoIncrement entity = new AutoIncrement();
args.values().forEach(v -> v.save(entity));
return entity;
}

@Override
public Class<AutoIncrement> getEntityClass() {
return AutoIncrement.class;
}

@Override
public String getName() {
return __name;
}

@Override
public List<EntityPropertyType<AutoIncrement, ?>> getEntityPropertyTypes() {
return __entityPropertyTypes;
}

@Override
public EntityPropertyType<AutoIncrement, ?> getEntityPropertyType(String propertyName) {
return __entityPropertyTypeMap.get(propertyName);
}

@Override
public void saveCurrentStates(AutoIncrement __entity) {}

@Override
public AutoIncrement getOriginalStates(AutoIncrement entity) {
return null;
}

@Override
public GeneratedIdPropertyType<AutoIncrement, ?, ?> getGeneratedIdPropertyType() {
return id;
}

@Override
public VersionPropertyType<AutoIncrement, ?, ?> getVersionPropertyType() {
return null;
}

@Override
public TenantIdPropertyType<AutoIncrement, ?, ?> getTenantIdPropertyType() {
return null;
}

@Override
public List<EntityPropertyType<AutoIncrement, ?>> getIdPropertyTypes() {
return __idPropertyTypes;
}

@Override
public void preInsert(AutoIncrement entity, PreInsertContext<AutoIncrement> context) {}

@Override
public void preUpdate(AutoIncrement entity, PreUpdateContext<AutoIncrement> context) {}

@Override
public void preDelete(AutoIncrement entity, PreDeleteContext<AutoIncrement> context) {}

@Override
public void postInsert(AutoIncrement entity, PostInsertContext<AutoIncrement> context) {}

@Override
public void postUpdate(AutoIncrement entity, PostUpdateContext<AutoIncrement> context) {}

@Override
public void postDelete(AutoIncrement entity, PostDeleteContext<AutoIncrement> context) {}

@Override
public String getCatalogName() {
return __catalogName;
}

@Override
public String getSchemaName() {
return __schemaName;
}

@Override
@Deprecated
public String getTableName() {
return getTableName((namingType, text) -> namingType.apply(text));
}

@Override
public String getTableName(BiFunction<NamingType, String, String> namingFunction) {
if (__tableName.isEmpty()) {
return namingFunction.apply(getNamingType(), getName());
}
return __tableName;
}

@Override
public NamingType getNamingType() {
return __namingType;
}

@Override
public boolean isQuoteRequired() {
return false;
}

public static _AutoIncrement getSingletonInternal() {
return singleton;
}
}
Expand Up @@ -4,7 +4,9 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;

import example.entity.AutoIncrement;
import example.entity.Emp;
import example.entity._AutoIncrement;
import example.entity._Emp;
import java.lang.reflect.Method;
import java.math.BigDecimal;
Expand All @@ -16,6 +18,7 @@
import org.seasar.doma.jdbc.InParameter;
import org.seasar.doma.jdbc.PreparedSql;
import org.seasar.doma.jdbc.SqlLogType;
import org.seasar.doma.jdbc.dialect.MysqlDialect;

@SuppressWarnings("OptionalGetWithoutIsPresent")
public class AutoInsertQueryTest {
Expand Down Expand Up @@ -47,6 +50,25 @@ public void testPrepare() {
assertNotNull(((InsertQuery) query).getSql());
}

@Test
public void testPrepare_MySql_autoIncrement() {
runtimeConfig.setDialect(new MysqlDialect());

AutoIncrement autoIncrement = new AutoIncrement();

AutoInsertQuery<AutoIncrement> query =
new AutoInsertQuery<>(_AutoIncrement.getSingletonInternal());
query.setMethod(method);
query.setConfig(runtimeConfig);
query.setEntity(autoIncrement);
query.setCallerClassName("aaa");
query.setCallerMethodName("bbb");
query.setSqlLogType(SqlLogType.FORMATTED);
query.prepare();

assertEquals("insert into AutoIncrement () values ()", query.getSql().getRawSql());
}

@Test
public void testOption_default() {
Emp emp = new Emp();
Expand Down