提交 00044424 authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 7b59a66f
# properties for build.xml
jdk=1.4
version.name.maven=1.0.20061217
#Mon Jan 15 18:29:59 CET 2007
javac=javac
benchmark.drivers.dir=D:/data/java
benchmark.drivers.dir=D\:/data/java
version.name.maven=1.0.20070116
jdk=1.4
<project name="h2" default="all" basedir=".">
<property file="ant-build.properties" />
<!--
<property name="version.name.maven" value="1.0.20061217"/>
<property name="jdk" value="1.4"/>
<property name="javac" value="javac"/>
-->
<path id="benchmark.drivers.path">
<!-- jar files required by the benchmark -->
......
......@@ -40,5 +40,13 @@ public class JdbcUtils {
}
}
}
public static ResultSet getGeneratedKeys(Statement stat) throws SQLException {
ResultSet rs = null;
//#ifdef JDK14
rs = stat.getGeneratedKeys();
//#endif
return rs;
}
}
......@@ -56,4 +56,12 @@ public class NetUtils {
}
}
public static boolean isLoopbackAddress(Socket socket) {
boolean result = true;
//#ifdef JDK14
result = socket.getInetAddress().isLoopbackAddress();
//#endif
return result;
}
}
......@@ -4,10 +4,26 @@
*/
package org.h2.util;
//#ifdef JDK14
import java.util.LinkedHashMap;
//#endif
//#ifdef JDK13
/*
import java.util.HashMap;
*/
//#endif
import java.util.Map;
public class SmallLRUCache extends LinkedHashMap {
public class SmallLRUCache
//#ifdef JDK14
extends LinkedHashMap
//#endif
//#ifdef JDK13
/*
extends HashMap
*/
//#endif
{
private static final long serialVersionUID = 3643268440910181829L;
private int size;
......@@ -16,7 +32,9 @@ public class SmallLRUCache extends LinkedHashMap {
this.size = size;
}
//#ifdef JDK14
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > size;
}
//#endif
}
......@@ -95,6 +95,7 @@ public class StringCache {
return cached;
}
}
// create a new object that is not shared (to avoid out of memory if it is a substring of a big String)
s = new String(s);
cache[index] = s;
return s;
......
......@@ -43,16 +43,40 @@ public class CompareMode {
name = StringUtils.toUpperEnglish(name.trim().replace(' ', '_'));
return name;
}
private static boolean compareLocaleNames(Locale locale, String name) {
return name.equalsIgnoreCase(locale.toString()) || name.equalsIgnoreCase(getName(locale));
}
public static Collator getCollator(String name) {
Locale[] locales = Collator.getAvailableLocales();
for(int i=0; i<locales.length; i++) {
Locale locale = locales[i];
if(name.equalsIgnoreCase(locale.toString()) || name.equalsIgnoreCase(getName(locale))) {
return Collator.getInstance(locale);
Collator result = null;
if(name.length() == 2) {
Locale locale = new Locale(name.toLowerCase());
if(compareLocaleNames(locale, name)) {
result = Collator.getInstance(locale);
}
} else if(name.length() == 5) {
int idx = name.indexOf('_');
if(idx >= 0) {
String language = name.substring(0, idx).toLowerCase();
String country = name.substring(idx + 1);
Locale locale = new Locale(language, country);
if(compareLocaleNames(locale, name)) {
result = Collator.getInstance(locale);
}
}
}
if(result == null) {
Locale[] locales = Collator.getAvailableLocales();
for(int i=0; i<locales.length; i++) {
Locale locale = locales[i];
if(compareLocaleNames(locale, name)) {
result = Collator.getInstance(locale);
break;
}
}
}
return null;
return result;
}
public String getName() {
......
......@@ -50,13 +50,26 @@ public class DataType {
public long defaultPrecision;
public int defaultScale;
public boolean hidden;
// JDK 1.3 compatibility: Types.BOOLEAN
public static final int TYPE_BOOLEAN = 16;
// JDK 1.3 compatibility: Types.DATALINK
public static final int TYPE_DATALINK = 70;
static {
//#ifdef JDK14
if(TYPE_BOOLEAN != Types.BOOLEAN) {
new Exception("Types.BOOLEAN: " + Types.BOOLEAN).printStackTrace();
}
if(TYPE_DATALINK != Types.DATALINK) {
new Exception("Types.DATALINK: " + Types.DATALINK).printStackTrace();
}
//#endif
add(Value.NULL, Types.NULL, "Null",
new DataType(),
new String[]{"NULL"}
);
add(Value.BOOLEAN, Types.BOOLEAN, "Boolean",
add(Value.BOOLEAN, DataType.TYPE_BOOLEAN, "Boolean",
createDecimal(ValueBoolean.PRECISION, ValueBoolean.PRECISION, 0, false, false),
new String[]{"BOOLEAN", "BIT", "BOOL"}
);
......@@ -423,7 +436,7 @@ public class DataType {
case Types.DECIMAL:
return Value.DECIMAL;
case Types.BIT:
case Types.BOOLEAN:
case DataType.TYPE_BOOLEAN:
return Value.BOOLEAN;
case Types.INTEGER:
return Value.INT;
......
......@@ -13,6 +13,7 @@ import org.h2.test.db.*;
import org.h2.test.server.TestNestedLoop;
import org.h2.test.synth.TestBtreeIndex;
import org.h2.test.synth.TestCrashAPI;
import org.h2.test.synth.TestHaltApp;
import org.h2.test.synth.TestJoin;
import org.h2.test.synth.TestKill;
import org.h2.test.synth.TestMulti;
......@@ -85,34 +86,16 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2
TestAll test = new TestAll();
test.printSystem();
// synth.TestHaltReconnect
// NULL || 'X' should probably return null by default
// change default to read committed transaction isolation
// Hot backup (incremental backup, online backup): backup data, log, index? files
// Cluster: hot deploy (adding a node on runtime)
// system property for base directory (h2.baseDir)
// reclaim empty space without closing the database
// Hot backup (incremental backup, online backup): backup data, log, index? files
// Cluster: hot deploy (adding a node on runtime)
// add TPC-B style benchmark: download/tpcb_current.pdf
// delay reading the row if data is not required
// document compensations
// eliminate undo log records if stored on disk (just one pointer per block, not per record)
// release checklist:
// add to freshmeat
// add to http://code.google.com/p/h2database/downloads/list
// SELECT ... FROM TA, TB, TC WHERE TC.COL3 = TA.COL1 AND TC.COL3=TB.COL2 AND TC.COL4 = 1
// ...
// The query implies TA.COL1 = TB.COL2 but does not explicitly set this condition.
// analyze hibernate read committed tests that fail
// when? server only? special test with TestAll (only this)
// java.lang.Exception: query was too quick; result: 0 time:1002
// at org.h2.test.TestBase.logError(TestBase.java:219)
// at org.h2.test.db.TestCases$1.run(TestCases.java:158)
// at java.lang.Thread.run(Unknown Source)
// SELECT ... FROM TA, TB, TC WHERE TC.COL3 = TA.COL1 AND TC.COL3=TB.COL2 AND TC.COL4 = 1
// The query implies TA.COL1 = TB.COL2 but does not explicitly set this condition.
// "trace.db" is created in the current directory
// dataSource.setLogWriter() seems to have no effect?
// DROP TABLE TEST;
// CREATE TABLE TEST(C CHAR(10));
......@@ -126,10 +109,6 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2
// -- Oracle, Derby: 10, 11
// -- PostgreSQL, H2, HSQLDB: 1, 2
// maybe use system property for base directory (h2.baseDir)
// feature request: user defined aggregate functions
// auto-upgrade application:
// check if new version is available
// (option: digital signature)
......@@ -143,19 +122,10 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2
// task to download new version from another HTTP / HTTPS / FTP server
// multi-task
// write a test that calls Runtime.halt at more or less random places (extend TestLob)
// OSGi Bundle (see Forum)
// test with PostgreSQL Version 8.2
// http://dev.helma.org/Wiki/RhinoLoader
// Test Hibernate / read committed transaction isolation:
// Data records retrieved by a query are not prevented from modification by some other transaction.
// Non-repeatable reads may occur, meaning data retrieved in a SELECT statement may be modified
// by some other transaction when it commits. In this isolation level, read locks are not acquired on selected data.
// test with garbage at the end of the log file (must be consistently detected as such)
// test LIKE: compare against other databases
// TestRandomSQL is too random; most statements fails
......@@ -184,6 +154,8 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2
test.testCodeCoverage();
} else if("multiThread".equals(args[0])) {
new TestMulti().runTest(test);
} else if("halt".equals(args[0])) {
new TestHaltApp().runTest(test);
}
} else {
test.runTests();
......
command=java org.h2.test.TestAll halt
\ No newline at end of file
......@@ -8,6 +8,7 @@ import java.sql.*;
import org.h2.engine.Constants;
import org.h2.test.TestBase;
import org.h2.value.DataType;
public class TestMetaData extends TestBase {
......@@ -590,7 +591,7 @@ public class TestMetaData extends TestBase {
"TABLE_NAME", "NON_UNIQUE", "INDEX_QUALIFIER", "INDEX_NAME",
"TYPE", "ORDINAL_POSITION", "COLUMN_NAME", "ASC_OR_DESC",
"CARDINALITY", "PAGES", "FILTER_CONDITION"}, new int[] {
Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.BOOLEAN,
Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, DataType.TYPE_BOOLEAN,
Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, Types.SMALLINT,
Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER,
Types.VARCHAR}, null, null);
......@@ -614,7 +615,7 @@ public class TestMetaData extends TestBase {
"TABLE_NAME", "NON_UNIQUE", "INDEX_QUALIFIER", "INDEX_NAME",
"TYPE", "ORDINAL_POSITION", "COLUMN_NAME", "ASC_OR_DESC",
"CARDINALITY", "PAGES", "FILTER_CONDITION"}, new int[] {
Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.BOOLEAN,
Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, DataType.TYPE_BOOLEAN,
Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, Types.SMALLINT,
Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.INTEGER,
Types.VARCHAR}, null, null);
......@@ -772,7 +773,8 @@ public class TestMetaData extends TestBase {
rs = meta.getSchemas();
testResultSetMeta(rs, 3, new String[] { "TABLE_SCHEM", "TABLE_CATALOG", "IS_DEFAULT"}, new int[] { Types.VARCHAR, Types.VARCHAR, Types.BOOLEAN}, null, null);
testResultSetMeta(rs, 3, new String[] { "TABLE_SCHEM", "TABLE_CATALOG", "IS_DEFAULT"},
new int[] { Types.VARCHAR, Types.VARCHAR, DataType.TYPE_BOOLEAN}, null, null);
check(rs.next());
check(rs.getString(1), "INFORMATION_SCHEMA");
check(rs.next());
......@@ -798,8 +800,8 @@ public class TestMetaData extends TestBase {
},
new int[]{
Types.VARCHAR,Types.SMALLINT,Types.INTEGER,Types.VARCHAR,
Types.VARCHAR,Types.VARCHAR,Types.SMALLINT,Types.BOOLEAN,
Types.SMALLINT,Types.BOOLEAN,Types.BOOLEAN,Types.BOOLEAN,
Types.VARCHAR,Types.VARCHAR,Types.SMALLINT,DataType.TYPE_BOOLEAN,
Types.SMALLINT,DataType.TYPE_BOOLEAN,DataType.TYPE_BOOLEAN,DataType.TYPE_BOOLEAN,
Types.VARCHAR,Types.SMALLINT,Types.SMALLINT,Types.SMALLINT,
Types.INTEGER,Types.INTEGER
} ,null, null
......
......@@ -6,6 +6,8 @@ package org.h2.test.synth;
import java.sql.*;
import org.h2.value.DataType;
class Column {
private TestSynth config;
private String name;
......@@ -23,7 +25,7 @@ class Column {
Types.DATE,
Types.TIME,
Types.TIMESTAMP,
Types.BOOLEAN,
DataType.TYPE_BOOLEAN,
Types.BINARY,
Types.VARBINARY,
Types.CLOB,
......@@ -32,7 +34,6 @@ class Column {
Types.BIGINT,
Types.TIMESTAMP,
Types.BIT,
Types.BOOLEAN,
};
Column(TestSynth config) {
......@@ -66,7 +67,7 @@ class Column {
case Types.REAL:
case Types.OTHER:
case Types.BIT:
case Types.BOOLEAN:
case DataType.TYPE_BOOLEAN:
break;
default:
throw new Error("type="+type);
......@@ -90,7 +91,7 @@ class Column {
case Types.TIMESTAMP:
case Types.DOUBLE:
case Types.BIGINT:
case Types.BOOLEAN:
case DataType.TYPE_BOOLEAN:
case Types.BIT:
return true;
case Types.BINARY:
......@@ -149,7 +150,7 @@ class Column {
return "DOUBLE";
case Types.BIGINT:
return "BIGINT";
case Types.BOOLEAN:
case DataType.TYPE_BOOLEAN:
case Types.BIT:
return "BOOLEAN";
default:
......
package org.h2.test.synth;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.Random;
import org.h2.test.TestBase;
import org.h2.tools.DeleteDbFiles;
import org.h2.util.IOUtils;
public abstract class TestHalt extends TestBase {
private SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss ");
protected static final int OP_INSERT = 1, OP_DELETE = 2, OP_UPDATE = 4, OP_SELECT = 8;
protected static final int FLAG_NODELAY = 1, FLAG_LOBS = 2;
protected int operations, flags, value;
protected Connection conn;
protected Random random = new Random();
abstract void testInit() throws Exception;
abstract void testCheckAfterCrash() throws Exception;
abstract void testWaitAfterAppStart() throws Exception;
abstract void appStart() throws Exception;
abstract void appRun() throws Exception;
public void test() throws Exception {
for(int i=0;; i++) {
operations = OP_INSERT | i;
flags = i >> 4;
// flags = FLAG_NODELAY | FLAG_LOBS;
try {
runTest();
} catch(Throwable t) {
System.out.println("Error: " + t);
t.printStackTrace();
}
}
}
Connection getConnection() throws Exception {
Class.forName("org.h2.Driver");
return DriverManager.getConnection("jdbc:h2:test", "sa", "sa");
}
protected void start(String[] args) throws Exception {
if(args.length == 0) {
runTest();
} else {
operations = Integer.parseInt(args[0]);
flags = Integer.parseInt(args[1]);
value = Integer.parseInt(args[2]);
runRandom();
}
}
private void runRandom() throws Exception {
log("connecting", null);
connect();
try {
log("connected, operations:" + operations + " flags:" + flags + " value:" + value, null);
appStart();
System.out.println("READY");
System.out.println("READY");
System.out.println("READY");
appRun();
log("done", null);
} catch(Exception e) {
log("run", e);
}
disconnect();
}
private void connect() throws Exception {
try {
conn = getConnection();
} catch(Exception e) {
log("connect", e);
e.printStackTrace();
throw e;
}
}
protected void log(String s, Exception e) {
FileWriter writer = null;
try {
writer = new FileWriter("log.txt", true);
PrintWriter w = new PrintWriter(writer);
s = dateFormat.format(new Date()) + ": " + s;
w.println(s);
if(e != null) {
e.printStackTrace(w);
}
} catch(IOException e2) {
e2.printStackTrace();
} finally {
IOUtils.closeSilently(writer);
}
}
private void runTest() throws Exception {
DeleteDbFiles.execute(null, "test", true);
new File("log.txt").delete();
connect();
testInit();
disconnect();
for(int i=0; i<10; i++) {
// int operations = OP_INSERT;
// OP_DELETE = 1, OP_UPDATE = 2, OP_SELECT = 4;
// int flags = FLAG_NODELAY;
// FLAG_NODELAY = 1, FLAG_AUTOCOMMIT = 2, FLAG_SMALLCACHE = 4;
int value = random.nextInt(1000);
// for Derby and HSQLDB
// String classPath = "-cp .;D:/data/java/hsqldb.jar;D:/data/java/derby.jar";
String classPath = "";
String command = "java " + classPath + " " + getClass().getName() + " " + operations + " " + flags + " " + value;
log("start: " + command);
Process p = Runtime.getRuntime().exec(command);
InputStream in = p.getInputStream();
OutputCatcher catcher = new OutputCatcher(in);
catcher.start();
String s = catcher.readLine(5000);
if(s == null) {
throw new IOException("No reply from process");
} else if(s.startsWith("READY")) {
log("got reply: " + s);
}
testWaitAfterAppStart();
p.destroy();
connect();
testCheckAfterCrash();
disconnect();
}
}
protected void disconnect() {
try {
conn.close();
} catch(Exception e) {
log("disconnect", e);
}
}
private void log(String string) {
System.out.println(string);
}
private static class OutputCatcher extends Thread {
private InputStream in;
private LinkedList list = new LinkedList();
OutputCatcher(InputStream in) {
this.in = in;
}
private String readLine(long wait) {
long start = System.currentTimeMillis();
while(true) {
synchronized(list) {
if(list.size() > 0) {
return (String) list.removeFirst();
}
try {
list.wait(wait);
} catch (InterruptedException e) {
}
long time = System.currentTimeMillis() - start;
if(time >= wait) {
return null;
}
}
}
}
public void run() {
StringBuffer buff = new StringBuffer();
while(true) {
try {
int x = in.read();
if(x < 0) {
break;
}
if(x < ' ') {
if(buff.length() > 0) {
String s = buff.toString();
buff.setLength(0);
synchronized(list) {
list.add(s);
list.notifyAll();
}
}
} else {
buff.append((char) x);
}
} catch(IOException e) {
// ignore
}
}
IOUtils.closeSilently(in);
}
}
public Connection getConnectionHSQLDB() throws Exception {
File lock = new File("test.lck");
while(lock.exists()) {
lock.delete();
System.gc();
}
Class.forName("org.hsqldb.jdbcDriver");
return DriverManager.getConnection("jdbc:hsqldb:test", "sa", "");
}
public Connection getConnectionDerby() throws Exception {
File lock = new File("test3/db.lck");
while(lock.exists()) {
lock.delete();
System.gc();
}
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
try {
return DriverManager.getConnection("jdbc:derby:test3;create=true", "sa", "sa");
} catch(SQLException e) {
Exception e2 = e;
do {
e.printStackTrace();
e = e.getNextException();
} while(e != null);
throw e2;
}
}
public void disconnectHSQLDB() {
try {
conn.createStatement().execute("SHUTDOWN");
} catch(Exception e) {
// ignore
}
// super.disconnect();
}
public void disconnectDerby() {
// super.disconnect();
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
DriverManager.getConnection("jdbc:derby:;shutdown=true", "sa", "sa");
} catch(Exception e) {
// ignore
}
}
protected String getRandomString(int len) {
StringBuffer buff = new StringBuffer();
for(int i=0; i<len; i++) {
buff.append('a' + random.nextInt(20));
}
return buff.toString();
}
}
package org.h2.test.synth;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestHaltApp extends TestHalt {
private int rowCount;
public static void main(String[] args) throws Exception {
new TestHaltApp().start(args);
}
protected void testInit() throws SQLException {
Statement stat = conn.createStatement();
try {
stat.execute("DROP TABLE TEST");
} catch(SQLException e) {
// ignore
}
// stat.execute("CREATE TABLE TEST(ID IDENTITY, NAME VARCHAR(255))");
for(int i=0; i< 20; i++) {
stat.execute("DROP TABLE IF EXISTS TEST" + i);
stat.execute("CREATE TABLE TEST"+i +"(ID INT PRIMARY KEY, NAME VARCHAR(255))");
}
for(int i=0; i< 20; i+=2) {
stat.execute("DROP TABLE TEST" + i);
}
stat.execute("CREATE TABLE TEST(ID BIGINT GENERATED BY DEFAULT AS IDENTITY, NAME VARCHAR(255), DATA CLOB)");
}
protected void testWaitAfterAppStart() throws Exception {
int sleep = 10 + random.nextInt(300);
Thread.sleep(sleep);
}
protected void testCheckAfterCrash() throws Exception {
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT COUNT(*) FROM TEST");
rs.next();
int count = rs.getInt(1);
System.out.println("count: " + count);
if(count % 2 == 1) {
throw new Exception("Unexpected odd row count");
}
}
protected void appStart() throws SQLException {
Statement stat = conn.createStatement();
if((flags & FLAG_NODELAY) != 0) {
stat.execute("SET WRITE_DELAY 0");
stat.execute("SET MAX_LOG_SIZE 1");
}
ResultSet rs = stat.executeQuery("SELECT COUNT(*) FROM TEST");
rs.next();
rowCount = rs.getInt(1);
log("rows: " + rowCount, null);
}
protected void appRun() throws SQLException {
conn.setAutoCommit(false);
int rows = 10000 + value;
PreparedStatement prepInsert = conn.prepareStatement("INSERT INTO TEST(NAME, DATA) VALUES('Hello World', ?)");
PreparedStatement prepUpdate = conn.prepareStatement("UPDATE TEST SET NAME = 'Hallo Welt', DATA = ? WHERE ID = ?");
for(int i=0; i<rows; i++) {
Statement stat = conn.createStatement();
if((operations & OP_INSERT) != 0) {
if((flags & FLAG_LOBS) != 0) {
prepInsert.setString(1, getRandomString(random.nextInt(200)));
prepInsert.execute();
} else {
stat.execute("INSERT INTO TEST(NAME) VALUES('Hello World')");
}
rowCount++;
}
if((operations & OP_UPDATE) != 0) {
if((flags & FLAG_LOBS) != 0) {
prepUpdate.setString(1, getRandomString(random.nextInt(200)));
prepUpdate.setInt(2, random.nextInt(rowCount+1));
prepUpdate.execute();
} else {
stat.execute("UPDATE TEST SET VALUE = 'Hallo Welt' WHERE ID = " + random.nextInt(rowCount+1));
}
}
if((operations & OP_DELETE) != 0) {
int uc = stat.executeUpdate("DELETE FROM TEST WHERE ID = " + random.nextInt(rowCount+1));
rowCount-=uc;
}
log("rows now: " + rowCount, null);
if(rowCount % 2 == 0) {
conn.commit();
log("committed: " + rowCount, null);
}
if((flags & FLAG_NODELAY) != 0) {
if(random.nextInt(100) == 0) {
stat.execute("CHECKPOINT");
}
}
}
conn.rollback();
}
}
......@@ -13,6 +13,8 @@ import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
import org.h2.value.DataType;
public class Value {
private int type;
private Object data;
......@@ -53,7 +55,7 @@ public class Value {
return getTimeSQL((Time)data);
case Types.TIMESTAMP:
return getTimestampSQL((Timestamp)data);
case Types.BOOLEAN:
case DataType.TYPE_BOOLEAN:
case Types.BIT:
return (String)data;
default:
......@@ -164,7 +166,7 @@ public class Value {
case Types.NULL:
data = null;
break;
case Types.BOOLEAN:
case DataType.TYPE_BOOLEAN:
case Types.BIT:
data = rs.getBoolean(index) ? "TRUE" : "FALSE";
break;
......@@ -213,7 +215,7 @@ public class Value {
case Types.INTEGER:
data = randomInt(config);
break;
case Types.BOOLEAN:
case DataType.TYPE_BOOLEAN:
case Types.BIT:
data = config.random().getBoolean(50) ? "TRUE" : "FALSE";
break;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论