提交 d5d91bfe authored 作者: andrei's avatar andrei

Merge remote-tracking branch 'h2database/master' into non_blocking

......@@ -6727,6 +6727,7 @@ public class Parser {
cols[0].columnName = column.getName();
AlterTableAddConstraint pk = new AlterTableAddConstraint(
session, schema, false);
pk.setConstraintName(constraintName);
pk.setPrimaryKeyHash(hash);
pk.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY);
pk.setTableName(tableName);
......
......@@ -16,10 +16,7 @@ import org.h2.table.Column;
import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter;
import org.h2.util.MathUtils;
import org.h2.value.Value;
import org.h2.value.ValueBoolean;
import org.h2.value.ValueGeometry;
import org.h2.value.ValueNull;
import org.h2.value.*;
/**
* Example comparison expressions are ID=1, NAME=NAME, NAME IS NULL.
......@@ -266,12 +263,28 @@ public class Comparison extends Condition {
}
}
int dataType = Value.getHigherOrder(left.getType(), right.getType());
if (dataType == Value.ENUM) {
String[] enumerators = getEnumerators(l, r);
l = l.convertToEnum(enumerators);
r = r.convertToEnum(enumerators);
} else {
l = l.convertTo(dataType);
r = r.convertTo(dataType);
}
boolean result = compareNotNull(database, l, r, compareType);
return ValueBoolean.get(result);
}
private String[] getEnumerators(Value left, Value right) {
if (left.getType() == Value.ENUM) {
return ((ValueEnum) left).getEnumerators();
} else if (right.getType() == Value.ENUM) {
return ((ValueEnum) right).getEnumerators();
} else {
return new String[0];
}
}
/**
* Compare two values, given the values are not NULL.
*
......
......@@ -592,6 +592,17 @@ public abstract class Value {
return convertTo(targetType, -1, null);
}
/**
* Convert value to ENUM value
* @param enumerators allowed values for the ENUM to which the value is converted
* @return value represented as ENUM
*/
public Value convertToEnum(String[] enumerators) {
// Use -1 to indicate "default behaviour" where value conversion should not
// depend on any datatype precision.
return convertTo(ENUM, -1, null, null, enumerators);
}
/**
* Compare a value to the specified type.
*
......
......@@ -479,6 +479,27 @@ public class TestPreparedStatement extends TestBase {
assertEquals(Integer.class, o.getClass());
}
for (int i = 0; i < goodSizes.length; i++) {
PreparedStatement prep = conn.prepareStatement("SELECT * FROM test_enum WHERE size = ?");
prep.setObject(1, goodSizes[i]);
ResultSet rs = prep.executeQuery();
rs.next();
String s = rs.getString(1);
assertTrue(s.equals(goodSizes[i]));
assertFalse(rs.next());
}
for (int i = 0; i < badSizes.length; i++) {
PreparedStatement prep = conn.prepareStatement("SELECT * FROM test_enum WHERE size = ?");
prep.setObject(1, badSizes[i]);
if (config.lazy) {
ResultSet resultSet = prep.executeQuery();
assertThrows(ErrorCode.ENUM_VALUE_NOT_PERMITTED, resultSet).next();
} else {
assertThrows(ErrorCode.ENUM_VALUE_NOT_PERMITTED, prep).executeQuery();
}
}
stat.execute("DROP TABLE test_enum");
}
......
......@@ -102,7 +102,8 @@ public class TestScript extends TestBase {
"uuid", "varchar", "varchar-ignorecase" }) {
testScript("datatypes/" + s + ".sql");
}
for (String s : new String[] { "alterTableAdd", "alterTableDropColumn", "createView", "dropSchema" }) {
for (String s : new String[] { "alterTableAdd", "alterTableDropColumn", "createView", "createTable",
"dropSchema" }) {
testScript("ddl/" + s + ".sql");
}
for (String s : new String[] { "insertIgnore", "mergeUsing", "script", "with" }) {
......
......@@ -86,3 +86,18 @@ INSERT INTO TEST VALUES (10, 20, 30, 40);
DROP TABLE TEST;
> ok
CREATE TABLE TEST();
> ok
ALTER TABLE TEST ADD A INT CONSTRAINT PK_1 PRIMARY KEY;
> ok
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
> CONSTRAINT_NAME CONSTRAINT_TYPE
> --------------- ---------------
> PK_1 PRIMARY KEY
> rows: 1
DROP TABLE TEST;
> ok
-- Copyright 2004-2018 H2 Group. Multiple-Licensed under the MPL 2.0,
-- and the EPL 1.0 (http://h2database.com/html/license.html).
-- Initial Developer: H2 Group
--
CREATE TABLE TEST(A INT CONSTRAINT PK_1 PRIMARY KEY);
> ok
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
> CONSTRAINT_NAME CONSTRAINT_TYPE
> --------------- ---------------
> PK_1 PRIMARY KEY
> rows: 1
DROP TABLE TEST;
> ok
......@@ -163,15 +163,15 @@ public class Build extends BuildBase {
downloadUsingMaven("ext/org.jacoco.report-0.8.0.jar",
"org.jacoco", "org.jacoco.report", "0.8.0",
"1bcab2a451f5a382bc674857c8f3f6d3fa52151d");
downloadUsingMaven("ext/asm-6.1-beta.jar",
"org.ow2.asm", "asm", "6.1-beta",
"bac2f84e42b7db902103a9ec8c4ca1293223e0ea");
downloadUsingMaven("ext/asm-commons-6.1-beta.jar",
"org.ow2.asm", "asm-commons", "6.1-beta",
"4ec77cde3be41559f92d25cdb39b9c55ee479253");
downloadUsingMaven("ext/asm-tree-6.1-beta.jar",
"org.ow2.asm", "asm-tree", "6.1-beta",
"539d3b0f5f7f5b04b1c286de8e76655b59ab2d43");
downloadUsingMaven("ext/asm-6.1.jar",
"org.ow2.asm", "asm", "6.1",
"94a0d17ba8eb24833cd54253ace9b053786a9571");
downloadUsingMaven("ext/asm-commons-6.1.jar",
"org.ow2.asm", "asm-commons", "6.1",
"8a8d242d7ce00fc937a245fae5b65763d13f7cd1");
downloadUsingMaven("ext/asm-tree-6.1.jar",
"org.ow2.asm", "asm-tree", "6.1",
"701262d4b9bcbdc2d4b80617e82db9a2b7f4f088");
downloadUsingMaven("ext/args4j-2.33.jar",
"args4j", "args4j", "2.33",
"bd87a75374a6d6523de82fef51fc3cfe9baf9fc9");
......@@ -209,9 +209,9 @@ public class Build extends BuildBase {
"ext/org.jacoco.cli-0.8.0.jar" + File.pathSeparator
+ "ext/org.jacoco.core-0.8.0.jar" + File.pathSeparator
+ "ext/org.jacoco.report-0.8.0.jar" + File.pathSeparator
+ "ext/asm-6.1-beta.jar" + File.pathSeparator
+ "ext/asm-commons-6.1-beta.jar" + File.pathSeparator
+ "ext/asm-tree-6.1-beta.jar" + File.pathSeparator
+ "ext/asm-6.1.jar" + File.pathSeparator
+ "ext/asm-commons-6.1.jar" + File.pathSeparator
+ "ext/asm-tree-6.1.jar" + File.pathSeparator
+ "ext/args4j-2.33.jar",
"org.jacoco.cli.internal.Main", "report", "coverage/jacoco.exec",
"--classfiles", "coverage/bin",
......@@ -524,16 +524,22 @@ public class Build extends BuildBase {
return files;
}
/**
* Add META-INF/versions for Java 9+.
*/
private void addVersions() {
copy("temp/META-INF/versions/9", files("src/java9/precompiled"), "src/java9/precompiled");
}
/**
* Create the regular h2.jar file.
*/
@Description(summary = "Create the regular h2.jar file.")
public void jar() {
compile();
FileList files = files("src/java9/precompiled");
copy("temp/META-INF/versions/9", files, "src/java9/precompiled");
addVersions();
manifest("H2 Database Engine", "org.h2.tools.Console");
files = files("temp").
FileList files = files("temp").
exclude("temp/android/*").
exclude("temp/org/h2/android/*").
exclude("temp/org/h2/build/*").
......@@ -596,6 +602,7 @@ public class Build extends BuildBase {
@Description(summary = "Create h2client.jar with only the remote JDBC implementation.")
public void jarClient() {
compile(true, true, false);
addVersions();
FileList files = files("temp").
exclude("temp/org/h2/build/*").
exclude("temp/org/h2/dev/*").
......@@ -622,6 +629,7 @@ public class Build extends BuildBase {
@Description(summary = "Create h2mvstore.jar containing only the MVStore.")
public void jarMVStore() {
compileMVStore(true);
addVersions();
manifestMVStore();
FileList files = files("temp");
files.exclude("*.DS_Store");
......@@ -636,6 +644,7 @@ public class Build extends BuildBase {
@Description(summary = "Create h2small.jar containing only the embedded database.")
public void jarSmall() {
compile(false, false, true);
addVersions();
FileList files = files("temp").
exclude("temp/android/*").
exclude("temp/org/h2/android/*").
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论