Skip to content

Commit ba5ec9e

Browse files
authored
Exclude an identity column and a value from an INSERT statement for H2Dialect. (#506)
Newer H2 Database seems to not return a generated key when the INSERT statement has a non-null value as a primary key.
1 parent 3ff9a3a commit ba5ec9e

File tree

2 files changed

+101
-34
lines changed

2 files changed

+101
-34
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package org.seasar.doma.jdbc.dialect;
2+
3+
import java.sql.SQLException;
4+
import org.seasar.doma.DomaNullPointerException;
5+
import org.seasar.doma.expr.ExpressionFunctions;
6+
import org.seasar.doma.internal.jdbc.dialect.H2ForUpdateTransformer;
7+
import org.seasar.doma.internal.jdbc.dialect.H2PagingTransformer;
8+
import org.seasar.doma.jdbc.JdbcMappingVisitor;
9+
import org.seasar.doma.jdbc.SelectForUpdateType;
10+
import org.seasar.doma.jdbc.SqlLogFormattingVisitor;
11+
import org.seasar.doma.jdbc.SqlNode;
12+
13+
/** A dialect for H2 version 1.4.199 and below. */
14+
public class H214199Dialect extends H212126Dialect {
15+
16+
/** the error code that represents unique violation */
17+
protected static final int UNIQUE_CONSTRAINT_VIOLATION_ERROR_CODE = 23505;
18+
19+
public H214199Dialect() {
20+
this(
21+
new H214199JdbcMappingVisitor(),
22+
new H214199SqlLogFormattingVisitor(),
23+
new H214199ExpressionFunctions());
24+
}
25+
26+
public H214199Dialect(JdbcMappingVisitor jdbcMappingVisitor) {
27+
this(
28+
jdbcMappingVisitor, new H214199SqlLogFormattingVisitor(), new H214199ExpressionFunctions());
29+
}
30+
31+
public H214199Dialect(SqlLogFormattingVisitor sqlLogFormattingVisitor) {
32+
this(
33+
new H214199JdbcMappingVisitor(), sqlLogFormattingVisitor, new H214199ExpressionFunctions());
34+
}
35+
36+
public H214199Dialect(ExpressionFunctions expressionFunctions) {
37+
this(
38+
new H214199JdbcMappingVisitor(), new H214199SqlLogFormattingVisitor(), expressionFunctions);
39+
}
40+
41+
public H214199Dialect(
42+
JdbcMappingVisitor jdbcMappingVisitor, SqlLogFormattingVisitor sqlLogFormattingVisitor) {
43+
this(jdbcMappingVisitor, sqlLogFormattingVisitor, new H214199ExpressionFunctions());
44+
}
45+
46+
public H214199Dialect(
47+
JdbcMappingVisitor jdbcMappingVisitor,
48+
SqlLogFormattingVisitor sqlLogFormattingVisitor,
49+
ExpressionFunctions expressionFunctions) {
50+
super(jdbcMappingVisitor, sqlLogFormattingVisitor, expressionFunctions);
51+
}
52+
53+
@Override
54+
public boolean isUniqueConstraintViolated(SQLException sqlException) {
55+
if (sqlException == null) {
56+
throw new DomaNullPointerException("sqlException");
57+
}
58+
int code = getErrorCode(sqlException);
59+
return UNIQUE_CONSTRAINT_VIOLATION_ERROR_CODE == code;
60+
}
61+
62+
@Override
63+
protected SqlNode toPagingSqlNode(SqlNode sqlNode, long offset, long limit) {
64+
H2PagingTransformer transformer = new H2PagingTransformer(offset, limit);
65+
return transformer.transform(sqlNode);
66+
}
67+
68+
@Override
69+
protected SqlNode toForUpdateSqlNode(
70+
SqlNode sqlNode, SelectForUpdateType forUpdateType, int waitSeconds, String... aliases) {
71+
H2ForUpdateTransformer transformer =
72+
new H2ForUpdateTransformer(forUpdateType, waitSeconds, aliases);
73+
return transformer.transform(sqlNode);
74+
}
75+
76+
public static class H214199JdbcMappingVisitor extends H212126JdbcMappingVisitor {}
77+
78+
public static class H214199SqlLogFormattingVisitor extends H212126SqlLogFormattingVisitor {}
79+
80+
public static class H214199ExpressionFunctions extends H212126ExpressionFunctions {
81+
82+
public H214199ExpressionFunctions() {
83+
super();
84+
}
85+
86+
public H214199ExpressionFunctions(char[] wildcards) {
87+
super(wildcards);
88+
}
89+
90+
protected H214199ExpressionFunctions(char escapeChar, char[] wildcards) {
91+
super(escapeChar, wildcards);
92+
}
93+
}
94+
}

doma-core/src/main/java/org/seasar/doma/jdbc/dialect/H2Dialect.java

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
package org.seasar.doma.jdbc.dialect;
22

3-
import java.sql.SQLException;
4-
import org.seasar.doma.DomaNullPointerException;
53
import org.seasar.doma.expr.ExpressionFunctions;
6-
import org.seasar.doma.internal.jdbc.dialect.H2ForUpdateTransformer;
7-
import org.seasar.doma.internal.jdbc.dialect.H2PagingTransformer;
84
import org.seasar.doma.jdbc.JdbcMappingVisitor;
9-
import org.seasar.doma.jdbc.SelectForUpdateType;
105
import org.seasar.doma.jdbc.SqlLogFormattingVisitor;
11-
import org.seasar.doma.jdbc.SqlNode;
126

13-
/** A dialect for H2. */
14-
public class H2Dialect extends H212126Dialect {
15-
16-
/** the error code that represents unique violation */
17-
protected static final int UNIQUE_CONSTRAINT_VIOLATION_ERROR_CODE = 23505;
7+
/** A dialect for H2 version 1.4.200 and above. */
8+
public class H2Dialect extends H214199Dialect {
189

1910
public H2Dialect() {
2011
this(new H2JdbcMappingVisitor(), new H2SqlLogFormattingVisitor(), new H2ExpressionFunctions());
@@ -45,33 +36,15 @@ public H2Dialect(
4536
}
4637

4738
@Override
48-
public boolean isUniqueConstraintViolated(SQLException sqlException) {
49-
if (sqlException == null) {
50-
throw new DomaNullPointerException("sqlException");
51-
}
52-
int code = getErrorCode(sqlException);
53-
return UNIQUE_CONSTRAINT_VIOLATION_ERROR_CODE == code;
54-
}
55-
56-
@Override
57-
protected SqlNode toPagingSqlNode(SqlNode sqlNode, long offset, long limit) {
58-
H2PagingTransformer transformer = new H2PagingTransformer(offset, limit);
59-
return transformer.transform(sqlNode);
60-
}
61-
62-
@Override
63-
protected SqlNode toForUpdateSqlNode(
64-
SqlNode sqlNode, SelectForUpdateType forUpdateType, int waitSeconds, String... aliases) {
65-
H2ForUpdateTransformer transformer =
66-
new H2ForUpdateTransformer(forUpdateType, waitSeconds, aliases);
67-
return transformer.transform(sqlNode);
39+
public boolean includesIdentityColumn() {
40+
return false;
6841
}
6942

70-
public static class H2JdbcMappingVisitor extends H212126JdbcMappingVisitor {}
43+
public static class H2JdbcMappingVisitor extends H214199JdbcMappingVisitor {}
7144

72-
public static class H2SqlLogFormattingVisitor extends H212126SqlLogFormattingVisitor {}
45+
public static class H2SqlLogFormattingVisitor extends H214199SqlLogFormattingVisitor {}
7346

74-
public static class H2ExpressionFunctions extends H212126ExpressionFunctions {
47+
public static class H2ExpressionFunctions extends H214199ExpressionFunctions {
7548

7649
public H2ExpressionFunctions() {
7750
super();

0 commit comments

Comments
 (0)