提交 0c494728 authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 d6fdf873
......@@ -134,7 +134,6 @@ import org.h2.value.ValueBytes;
import org.h2.value.ValueDate;
import org.h2.value.ValueDecimal;
import org.h2.value.ValueInt;
import org.h2.value.ValueLong;
import org.h2.value.ValueString;
import org.h2.value.ValueTime;
import org.h2.value.ValueTimestamp;
......@@ -1648,7 +1647,7 @@ public class Parser {
} else if (readIf("~")) {
if (readIf("*")) {
Function function = Function.getFunction(database, "CAST");
function.setDataType(new Column("X", Value.STRING_IGNORECASE, 0, 255, 255));
function.setDataType(new Column("X", Value.STRING_IGNORECASE));
function.setParameter(0, r);
r = function;
}
......@@ -1656,7 +1655,7 @@ public class Parser {
} else if (readIf("!~")) {
if (readIf("*")) {
Function function = Function.getFunction(database, "CAST");
function.setDataType(new Column("X", Value.STRING_IGNORECASE, 0, 255, 255));
function.setDataType(new Column("X", Value.STRING_IGNORECASE));
function.setParameter(0, r);
r = function;
}
......@@ -2934,7 +2933,7 @@ public class Parser {
private Column parseColumnForTable(String columnName) throws SQLException {
Column column;
if (readIf("IDENTITY") || readIf("SERIAL")) {
column = new Column(columnName, Value.LONG, ValueLong.PRECISION, 0, ValueLong.DISPLAY_SIZE);
column = new Column(columnName, Value.LONG);
column.setOriginalSQL("IDENTITY");
long start = 1, increment = 1;
if (readIf("(")) {
......@@ -3043,6 +3042,7 @@ public class Parser {
}
DataType dataType = DataType.getTypeByName(original);
long precision = -1;
int displaySize = -1;
int scale = -1;
Column templateColumn = null;
if (dataType == null) {
......@@ -3054,6 +3054,7 @@ public class Parser {
dataType = DataType.getDataType(templateColumn.getType());
original = templateColumn.getOriginalSQL();
precision = templateColumn.getPrecision();
displaySize = templateColumn.getDisplaySize();
scale = templateColumn.getScale();
}
}
......@@ -3065,6 +3066,7 @@ public class Parser {
read();
}
precision = precision == -1 ? dataType.defaultPrecision : precision;
displaySize = displaySize == -1 ? dataType.defaultDisplaySize : displaySize;
scale = scale == -1 ? dataType.defaultScale : scale;
if (dataType.supportsPrecision || dataType.supportsScale) {
if (readIf("(")) {
......@@ -3079,6 +3081,7 @@ public class Parser {
if (precision > Long.MAX_VALUE) {
precision = Long.MAX_VALUE;
}
displaySize = MathUtils.convertLongToInt(precision);
original += "(" + precision;
// oracle syntax
readIf("CHAR");
......@@ -3107,7 +3110,6 @@ public class Parser {
}
}
int type = dataType.type;
int displaySize = MathUtils.convertLongToInt(Math.max(precision, dataType.defaultDisplaySize));
Column column = new Column(columnName, type, precision, scale, displaySize);
if (templateColumn != null) {
column.setNullable(templateColumn.getNullable());
......@@ -3477,7 +3479,7 @@ public class Parser {
String[] cols = parseColumnList();
ObjectArray columns = new ObjectArray();
for (int i = 0; i < cols.length; i++) {
columns.add(new Column(cols[i], Value.STRING, 0, 255, 255));
columns.add(new Column(cols[i], Value.STRING));
}
int id = database.allocateObjectId(true, true);
recursiveTable = schema.createTable(tempViewName, id, columns, false, false);
......
......@@ -42,7 +42,7 @@ public class ExplainPlan extends Prepared {
public LocalResult query(int maxrows) throws SQLException {
// TODO rights: are rights required for explain?
ObjectArray expressions = new ObjectArray();
Column column = new Column("PLAN", Value.STRING, 0, 255, 255);
Column column = new Column("PLAN", Value.STRING);
ExpressionColumn expr = new ExpressionColumn(session.getDatabase(), null, column);
expressions.add(expr);
result = new LocalResult(session, expressions, 1);
......
......@@ -107,7 +107,7 @@ public class ScriptCommand extends ScriptBase {
private LocalResult createResult() {
ObjectArray cols = new ObjectArray();
cols.add(new ExpressionColumn(session.getDatabase(), null, new Column("SCRIPT", Value.STRING, 0, 255, 255)));
cols.add(new ExpressionColumn(session.getDatabase(), null, new Column("SCRIPT", Value.STRING)));
return new LocalResult(session, cols, 1);
}
......
......@@ -84,7 +84,6 @@ public class SelectUnion extends Query {
}
limit = ValueExpression.get(ValueInt.get(maxrows));
}
ObjectArray expressions = left.getExpressions();
int columnCount = left.getColumnCount();
LocalResult result = new LocalResult(session, expressions, columnCount);
result.setSortOrder(sort);
......
......@@ -38,8 +38,8 @@ public class SysProperties {
public static final String LOG_ALL_ERRORS_FILE = getStringSetting("h2.logAllErrorsFile", "h2errors.txt");
public static final int SERVER_CACHED_OBJECTS = getIntSetting("h2.serverCachedObjects", 64);
public static final int SERVER_SMALL_RESULT_SET_SIZE = getIntSetting("h2.serverSmallResultSetSize", 100);
public static final int EMERGENCY_SPACE_INITIAL = getIntSetting("h2.emergencySpaceInitial", 1 * 1024 * 1024);
public static final int EMERGENCY_SPACE_MIN = getIntSetting("h2.emergencySpaceMin", 128 * 1024);
public static final int EMERGENCY_SPACE_INITIAL = getIntSetting("h2.emergencySpaceInitial", 256 * 1024);
public static final int EMERGENCY_SPACE_MIN = getIntSetting("h2.emergencySpaceMin", 64 * 1024);
public static final boolean OBJECT_CACHE = getBooleanSetting("h2.objectCache", true);
public static final int OBJECT_CACHE_SIZE = getIntSetting("h2.objectCacheSize", 1024);
public static final int OBJECT_CACHE_MAX_PER_ELEMENT_SIZE = getIntSetting("h2.objectCacheMaxPerElementSize", 4096);
......
......@@ -471,12 +471,12 @@ public class Database implements DataHandler {
// TODO storage: antivir scans .script files, maybe other scanners scan
// .db files?
ObjectArray cols = new ObjectArray();
Column columnId = new Column("ID", Value.INT, 0, 0, 0);
Column columnId = new Column("ID", Value.INT);
columnId.setNullable(false);
cols.add(columnId);
cols.add(new Column("HEAD", Value.INT, 0, 0, 0));
cols.add(new Column("TYPE", Value.INT, 0, 0, 0));
cols.add(new Column("SQL", Value.STRING, 0, 0, 0));
cols.add(new Column("HEAD", Value.INT));
cols.add(new Column("TYPE", Value.INT));
cols.add(new Column("SQL", Value.STRING));
meta = mainSchema.createTable("SYS", 0, cols, persistent, false);
IndexColumn[] pkCols = IndexColumn.wrap(new Column[] { columnId });
metaIdIndex = meta.addIndex(systemSession, "SYS_ID", 0, pkCols, IndexType.createPrimaryKey(
......
......@@ -275,8 +275,8 @@ public class Aggregate extends Expression {
case GROUP_CONCAT:
dataType = Value.STRING;
scale = 0;
precision = 255;
displaySize = 255;
precision = Integer.MAX_VALUE;
displaySize = Integer.MAX_VALUE;
break;
case COUNT_ALL:
case COUNT:
......
......@@ -64,12 +64,11 @@ public class ExpressionList extends Expression {
}
public long getPrecision() {
return 0;
return Integer.MAX_VALUE;
}
public int getDisplaySize() {
// TODO display size of a list
return 255;
return Integer.MAX_VALUE;
}
public String getSQL() {
......
......@@ -779,8 +779,6 @@ public class Function extends Expression implements FunctionCall {
case NULLIF:
return database.areEqual(v0, v1) ? ValueNull.INSTANCE : v0;
case CAST:
// TODO function convert compatibility with MS SQL Server:
// convert(varchar(255), name)
case CONVERT: {
v0 = v0.convertTo(dataType);
Mode mode = database.getMode();
......@@ -1393,8 +1391,8 @@ public class Function extends Expression implements FunctionCall {
if (dataType == Value.UNKNOWN) {
dataType = Value.STRING;
scale = 0;
precision = 255;
displaySize = 255;
precision = Integer.MAX_VALUE;
displaySize = Integer.MAX_VALUE;
}
break;
}
......
......@@ -46,11 +46,11 @@ public class JavaAggregate extends Expression {
}
public long getPrecision() {
return 255;
return Integer.MAX_VALUE;
}
public int getDisplaySize() {
return 255;
return Integer.MAX_VALUE;
}
public int getScale() {
......
......@@ -61,11 +61,11 @@ public class JavaFunction extends Expression implements FunctionCall {
}
public long getPrecision() {
return 255;
return Integer.MAX_VALUE;
}
public int getDisplaySize() {
return 255;
return Integer.MAX_VALUE;
}
public String getSQL() {
......
......@@ -273,4 +273,10 @@ public class JdbcArray extends TraceObject implements Array {
}
}
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": " + value.getSQL();
}
}
......@@ -248,5 +248,12 @@ public class JdbcBlob extends TraceObject implements Blob {
throw Message.getSQLException(ErrorCode.OBJECT_CLOSED);
}
}
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": " + value.getSQL();
}
}
......@@ -229,5 +229,12 @@ public class JdbcClob extends TraceObject implements Clob
throw Message.getSQLException(ErrorCode.OBJECT_CLOSED);
}
}
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": " + value.getSQL();
}
}
......@@ -2677,6 +2677,13 @@ public class JdbcDatabaseMetaData extends TraceObject implements DatabaseMetaDat
debugCodeCall("getFunctions");
throw Message.getUnsupportedException();
}
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": " + conn;
}
}
......@@ -211,5 +211,12 @@ implements ParameterMetaData
}
*/
//#endif
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": parameterCount=" + paramCount;
}
}
......@@ -77,8 +77,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
try {
int id = getNextId(TraceObject.RESULT_SET);
if (debug()) {
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id);
debugCodeCall("executeQuery");
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id, "executeQuery()");
}
checkClosed();
closeOld();
......@@ -965,8 +964,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
}
int id = getNextId(TraceObject.RESULT_SET_META_DATA);
if (debug()) {
debugCodeAssign("ResultSetMetaData", TraceObject.RESULT_SET_META_DATA, id);
debugCodeCall("getMetaData");
debugCodeAssign("ResultSetMetaData", TraceObject.RESULT_SET_META_DATA, id, "getMetaData()");
}
String catalog = conn.getCatalog();
JdbcResultSetMetaData meta = new JdbcResultSetMetaData(null, this, result, catalog, session.getTrace(), id);
......@@ -1188,8 +1186,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
try {
int id = getNextId(TraceObject.PARAMETER_META_DATA);
if (debug()) {
debugCodeAssign("ParameterMetaData", TraceObject.PARAMETER_META_DATA, id);
debugCodeCall("getParameterMetaData");
debugCodeAssign("ParameterMetaData", TraceObject.PARAMETER_META_DATA, id, "getParameterMetaData()");
}
checkClosed();
JdbcParameterMetaData meta = new JdbcParameterMetaData(session, this, command, id);
......@@ -1401,4 +1398,11 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
*/
//#endif
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": " + command.toString();
}
}
......@@ -112,8 +112,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
try {
int id = getNextId(TraceObject.RESULT_SET_META_DATA);
if (debug()) {
debugCodeAssign("ResultSetMetaData", TraceObject.RESULT_SET_META_DATA, id);
debugCodeCall("getMetaData");
debugCodeAssign("ResultSetMetaData", TraceObject.RESULT_SET_META_DATA, id, "getMetaData()");
}
checkClosed();
String catalog = conn.getCatalog();
......@@ -917,8 +916,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public Blob getBlob(int columnIndex) throws SQLException {
try {
int id = getNextId(TraceObject.BLOB);
debugCodeAssign("Blob", TraceObject.BLOB, id);
debugCodeCall("getBlob", columnIndex);
debugCodeAssign("Blob", TraceObject.BLOB, id, "getBlob(" + columnIndex + ")");
Value v = get(columnIndex);
return v == ValueNull.INSTANCE ? null : new JdbcBlob(session, conn, v, id);
} catch (Throwable e) {
......@@ -936,8 +934,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public Blob getBlob(String columnName) throws SQLException {
try {
int id = getNextId(TraceObject.BLOB);
debugCodeAssign("Blob", TraceObject.BLOB, id);
debugCodeCall("getBlob", columnName);
debugCodeAssign("Blob", TraceObject.BLOB, id, "getBlob(" + quote(columnName) + ")");
Value v = get(columnName);
return v == ValueNull.INSTANCE ? null : new JdbcBlob(session, conn, v, id);
} catch (Throwable e) {
......@@ -1020,8 +1017,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public Clob getClob(int columnIndex) throws SQLException {
try {
int id = getNextId(TraceObject.CLOB);
debugCodeAssign("Clob", TraceObject.CLOB, id);
debugCodeCall("getClob", columnIndex);
debugCodeAssign("Clob", TraceObject.CLOB, id, "getClob(" + columnIndex + ")");
Value v = get(columnIndex);
return v == ValueNull.INSTANCE ? null : new JdbcClob(session, conn, v, id);
} catch (Throwable e) {
......@@ -1039,8 +1035,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public Clob getClob(String columnName) throws SQLException {
try {
int id = getNextId(TraceObject.CLOB);
debugCodeAssign("Clob", TraceObject.CLOB, id);
debugCodeCall("getClob", columnName);
debugCodeAssign("Clob", TraceObject.CLOB, id, "getClob(" + quote(columnName) + ")");
Value v = get(columnName);
return v == ValueNull.INSTANCE ? null : new JdbcClob(session, conn, v, id);
} catch (Throwable e) {
......@@ -1058,8 +1053,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public Array getArray(int columnIndex) throws SQLException {
try {
int id = getNextId(TraceObject.ARRAY);
debugCodeAssign("Clob", TraceObject.ARRAY, id);
debugCodeCall("getArray", columnIndex);
debugCodeAssign("Clob", TraceObject.ARRAY, id, "getArray(" + columnIndex + ")");
Value v = get(columnIndex);
return v == ValueNull.INSTANCE ? null : new JdbcArray(session, conn, v, id);
} catch (Throwable e) {
......@@ -1077,8 +1071,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
public Array getArray(String columnName) throws SQLException {
try {
int id = getNextId(TraceObject.ARRAY);
debugCodeAssign("Clob", TraceObject.ARRAY, id);
debugCodeCall("getArray", columnName);
debugCodeAssign("Clob", TraceObject.ARRAY, id, "getArray(" + quote(columnName) + ")");
Value v = get(columnName);
return v == ValueNull.INSTANCE ? null : new JdbcArray(session, conn, v, id);
} catch (Throwable e) {
......@@ -3414,5 +3407,12 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
}
*/
//#endif
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": " + result;
}
}
......@@ -447,5 +447,12 @@ public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaD
}
*/
//#endif
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": columns=" + columnCount;
}
}
......@@ -94,5 +94,13 @@ implements Savepoint
throw logAndConvert(e);
}
}
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": id=" + savepointId + " name=" + name;
}
}
......@@ -51,8 +51,7 @@ public class JdbcStatement extends TraceObject implements Statement {
try {
int id = getNextId(TraceObject.RESULT_SET);
if (debug()) {
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id);
debugCodeCall("executeQuery", sql);
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id, "executeQuery(" + quote(sql) + ")");
}
checkClosed();
closeOld();
......@@ -176,9 +175,10 @@ public class JdbcStatement extends TraceObject implements Statement {
checkClosed();
if (resultSet != null) {
int id = resultSet.getTraceId();
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id);
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id, "getResultSet()");
} else {
debugCodeCall("getResultSet");
}
debugCodeCall("getResultSet");
return resultSet;
} catch (Throwable e) {
throw logAndConvert(e);
......@@ -628,9 +628,14 @@ public class JdbcStatement extends TraceObject implements Statement {
*/
public ResultSet getGeneratedKeys() throws SQLException {
try {
debugCodeCall("getGeneratedKeys");
int id = getNextId(TraceObject.RESULT_SET);
if (debug()) {
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id, "getGeneratedKeys()");
}
ResultInterface result = conn.getGeneratedKeys(this, id);
checkClosed();
return conn.getGeneratedKeys(this);
ResultSet rs = new JdbcResultSet(session, conn, this, result, id, false, true);
return rs;
} catch (Throwable e) {
throw logAndConvert(e);
}
......@@ -889,9 +894,12 @@ public class JdbcStatement extends TraceObject implements Statement {
}
}
void debugCodeCallMe(String text, String param) {
debugCodeCall(text, param);
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName();
}
}
......@@ -261,5 +261,12 @@ Serializable, Referenceable {
}
*/
//#endif
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": url=" + url + " user=" + user;
}
}
......@@ -53,5 +53,5 @@ public class JdbcDataSourceFactory implements ObjectFactory {
Trace getTrace() {
return trace;
}
}
......@@ -343,5 +343,12 @@ implements XAConnection, XAResource, JdbcConnectionListener
}
*/
//#endif
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": url=" + url + " user=" + user;
}
}
......@@ -82,5 +82,12 @@ implements Xid
debugCodeCall("getGlobalTransactionId");
return globalTransactionId;
}
/**
* INTERNAL
*/
public String toString() {
return getTraceObjectName() + ": " + getAsString();
}
}
......@@ -44,7 +44,7 @@ public class TraceObject {
/**
* INTERNAL
*/
public String toString() {
public String getTraceObjectName() {
return PREFIX[type] + id;
}
......@@ -64,46 +64,34 @@ public class TraceObject {
return trace;
}
protected void debugCodeAssign(String className, int type, int id) {
if (!trace.debug()) {
return;
protected void debugCodeAssign(String className, int type, int id, String value) {
if (trace.debug()) {
trace.debugCode(className + " " + PREFIX[type] + id + " = " + getTraceObjectName() + "." + value + ";");
}
trace.debugCode(className + " " + PREFIX[type] + id + " = ");
}
protected void infoCodeAssign(String className, int type, int id) {
if (!trace.info()) {
return;
}
trace.infoCode(className + " " + PREFIX[type] + id + " = ");
}
protected void debugCodeCall(String text) {
if (!trace.debug()) {
return;
if (trace.debug()) {
trace.debugCode(getTraceObjectName() + "." + text + "();");
}
trace.debugCode(toString() + "." + text + "();");
}
protected void debugCodeCall(String text, long param) {
if (!trace.debug()) {
return;
if (trace.debug()) {
trace.debugCode(getTraceObjectName() + "." + text + "(" + param + ");");
}
trace.debugCode(toString() + "." + text + "(" + param + ");");
}
protected void debugCodeCall(String text, String param) {
if (!trace.debug()) {
return;
if (trace.debug()) {
trace.debugCode(getTraceObjectName() + "." + text + "(" + quote(param) + ");");
}
trace.debugCode(toString() + "." + text + "(" + quote(param) + ");");
}
protected void debugCode(String text) {
if (!trace.debug()) {
return;
if (trace.debug()) {
trace.debugCode(getTraceObjectName() + "." + text);
}
trace.debugCode(toString() + "." + text);
}
protected String quote(String s) {
......
......@@ -188,12 +188,12 @@ public class LocalResult implements ResultInterface {
}
public void addRow(Value[] values) throws SQLException {
for (int i = 0; i < values.length; i++) {
// TODO display sizes: check if this is a performance problem, maybe
// provide a setting to not do it
Value v = values[i];
int size = v.getDisplaySize();
displaySizes[i] = Math.max(displaySizes[i], size);
if (!SysProperties.NEW_DISPLAY_SIZE) {
for (int i = 0; i < values.length; i++) {
Value v = values[i];
int size = v.getDisplaySize();
displaySizes[i] = Math.max(displaySizes[i], size);
}
}
if (distinctRows != null) {
ValueArray array = ValueArray.get(values);
......@@ -340,5 +340,9 @@ public class LocalResult implements ResultInterface {
}
}
}
public String toString() {
return "columns: " + visibleColumnCount + " rows: " + rowCount + " pos: " + rowId;
}
}
......@@ -228,5 +228,9 @@ public class ResultRemote implements ResultInterface {
}
}
}
public String toString() {
return "columns: " + columns.length + " rows: " + rowCount + " pos: " + rowId;
}
}
......@@ -52,6 +52,7 @@ public class WebServer implements Service {
{ "it", "Italiano"},
{ "ja", "\u65e5\u672c\u8a9e"},
{ "pl", "Polski"},
{ "pt_BR", "Portugu\u00eas (Brasil)"},
{ "pt_PT", "Portugu\u00eas (Europeu)"},
{ "ru", "\u0440\u0443\u0441\u0441\u043a\u0438\u0439"},
{ "zh_CN", "\u4E2D\u6587"},
......
......@@ -21,7 +21,7 @@ adminLoginCancel=Abbrechen
adminLoginOk=OK
adminLogout=Beenden
adminOthers=Verbindungen von anderen Computern erlauben
adminPort=\#Port number
adminPort=Port
adminPortWeb=Web-Server Port
adminRestart=&Auml;nderungen werden nach einem Neustart des Servers aktiv.
adminSave=Speichern
......
......@@ -21,7 +21,7 @@ adminLoginCancel=Cancelar
adminLoginOk=Aceptar
adminLogout=Desconectar
adminOthers=Permitir conexiones desde otros ordenadores
adminPort=\#Port number
adminPort=Puerto
adminPortWeb=Puerto del servidor Web
adminRestart=Los cambios tendr&aacute;n efecto al reiniciar el servidor.
adminSave=Guardar
......
......@@ -21,7 +21,7 @@ adminLoginCancel=Annuler
adminLoginOk=OK
adminLogout=D&eacute;connexion
adminOthers=Autoriser les connexions d'ordinateurs distants
adminPort=\#Port number
adminPort=Num&eacute;ro de port
adminPortWeb=Num&eacute;ro de port du serveur Web
adminRestart=Modifications effectu&eacute;es apr&egrave; red&eacute;marrage du serveur.
adminSave=Enregistrer
......
......@@ -21,7 +21,7 @@ adminLoginCancel=Batal
adminLoginOk=OK
adminLogout=Keluar
adminOthers=Ijinkan koneksi dari komputer lain
adminPort=\#Port number
adminPort=Nomor port
adminPortWeb=Nomor port web server
adminRestart=Perubahan akan efektif setelah server di-restart.
adminSave=Simpan
......
......@@ -21,7 +21,7 @@ adminLoginCancel=Annulla
adminLoginOk=OK
adminLogout=Disconnessione
adminOthers=Abilita connessioni da altri computers
adminPort=\#Port number
adminPort=Numero di porta
adminPortWeb=Numero di porta del server Web
adminRestart=Le modifiche saranno effettive dopo il riavvio del server.
adminSave=Salva
......
......@@ -21,7 +21,7 @@ adminLoginCancel=Anuluj
adminLoginOk=OK
adminLogout=Wyloguj
adminOthers=Pozwalaj na po&\#322;&\#261;czenia zdalne
adminPort=\#Port number
adminPort=Numer portu
adminPortWeb=Numer portu serwera Web
adminRestart=Zmiany b&\#281;d&\#261; widoczne po zrestartowaniu serwera.
adminSave=Zapisz
......
.translator=Eduardo Fonseca Velasques
a.help=Ajuda
a.language=Portugu&ecirc;s (Brasil)
a.lynxNotSupported=Lynx n&atilde;o &eacute; suportado
a.password=Senha
a.remoteConnectionsDisabled=Conex&otilde;es remotas ('webAllowOthers') est&atilde;o desativadas neste servidor.
a.title=H2 Terminal
a.user=Usu&aacute;rio
admin.executing=Executando
admin.ip=IP
admin.lastAccess=&Uacute;ltimo Acesso
admin.lastQuery=&Uacute;ltima Query
admin.url=URL
adminAllow=Clientes com acesso
adminConnection=N&iacute;vel de seguran&ccedil;a da conex&atilde;o
adminHttp=Usar conex&atilde;o do tipo HTTP n&atilde;o segura (os dados n&atilde;o s&atilde;o encriptados)
adminHttps=Usar conex&atilde;o do tipo HTTPS segura por SSL (os dados s&atilde;o encriptados)
adminLocal=Permitir apenas conex&otilde;es do computador local
adminLogin=Entrar como administrador
adminLoginCancel=Cancelar
adminLoginOk=Confirmar
adminLogout=Sair
adminOthers=Permitir conex&otilde;es de outros computadores na rede
adminPort=N&uacute;mero da porta
adminPortWeb=N&uacute;mero da porta do servidor
adminRestart=As altera&ccedil;&otilde;es ser&atilde;o aplicadas depois de reiniciar o servidor.
adminSave=Salvar
adminSessions=Sess&otilde;es ativas
adminShutdown=Terminar
adminTitle=Configura&ccedil;&atilde;o do H2 Terminal
helpAction=A&ccedil;&atilde;o
helpAddAnotherRow=Adicionar outra linha
helpAddDrivers=Adicionar drivers de Base de Dados
helpAddDriversOnlyJava=Apenas a vers&atilde;o Java permite que sejam adicionados novos drivers (est&aacute; op&ccedil;&atilde;o n&atilde;o &eacute; suportada pela vers&atilde;o nativa)
helpAddDriversText=&Eacute; poss&iacute;vel registrar outros drivers, adicionando o arquivo JAR respectivo na vari&aacute;vel de ambiente H2DRIVERS ou CLASSPATH. Exemplo (Windows)\: Para adicionar o driver que est&aacute; em C\:\\Programs\\hsqldb\\lib\\hsqldb.jar altere o valor da vari&aacute;vel de ambiente H2DRIVERS para C\:\\Programs\\hsqldb\\lib\\hsqldb.jar.
helpAddRow=Adicionar uma linha nova
helpCommandHistory=Mostrar o hist&oacute;rico de comandos
helpCreateTable=Criar uma tabela nova
helpDeleteRow=Apagar uma linha
helpDisconnect=Fechar conex&atilde;o &agrave; Base de Dados
helpDisplayThis=Mostrar est&aacute; p&aacute;gina de ajuda
helpDropTable=Apagar a tabela, caso ela exista
helpExecuteCurrent=Executar o comando SQL corrente
helpIcon=S&iacute;mbolo
helpImportantCommands=Comandos importantes
helpOperations=Opera&ccedil;&otilde;es\=
helpQuery=Pesquisar uma tabela
helpSampleSQL=Scripts de exemplo
helpStatements=Comandos SQL
helpUpdate=Alterar os dados de uma linha
helpWithColumnsIdName=com as colunas ID e NAME
login.connect=Conectar
login.driverClass=Classe com o driver
login.driverNotFound=O driver n&atilde;o foi encontrado&lt;br/&gt;Ver na se&ccedil;&atilde;o de ajuda, como adicionar drivers
login.goAdmin=Prefer&ecirc;ncias
login.jdbcUrl=JDBC URL
login.language=L&iacute;ngua
login.login=Login
login.remove=Remover
login.save=Gravar
login.savedSetting=Configura&ccedil;&atilde;o ativa
login.settingName=Nome da configura&ccedil;&atilde;o
login.testConnection=Testar conex&atilde;o
login.testSuccessful=Teste bem sucedido
login.welcome=Consola H2
result.1row=Uma linha
result.autoCommitOff=Auto commit agora est&aacute; desligado
result.autoCommitOn=Auto commit agora est&aacute; ligado
result.maxrowsSet=N&uacute;mero m&aacute;ximo de linhas foi alterado
result.noRows=sem linhas
result.noRunningStatement=Actualmente n&atilde;o existe nenhum comando em execu&ccedil;&atilde;o
result.rows=linhas
result.statementWasCancelled=O comando foi cancelado
result.updateCount=N&uacute;mero de registros alterados
resultEdit.add=Adicionar
resultEdit.cancel=Cancelar
resultEdit.delete=Apagar
resultEdit.edit=Alterar
resultEdit.editResult=Alterar
resultEdit.save=Salvar
toolbar.all=Todas
toolbar.autoCommit=Auto commit
toolbar.autoComplete=Auto complete
toolbar.autoComplete.full=Total
toolbar.autoComplete.normal=Normal
toolbar.autoComplete.off=Desligado
toolbar.cancelStatement=Cancelar o comando que est&aacute; em execu&ccedil;&atilde;o
toolbar.clear=Limpar
toolbar.commit=Commit
toolbar.disconnect=Desligar
toolbar.history=Hist&oacute;rico de comandos executados
toolbar.maxRows=N&uacute;mero m&aacute;ximo de linhas
toolbar.refresh=Atualizar
toolbar.rollback=Rollback
toolbar.run=Executar comando (Ctrl+Enter)
toolbar.sqlStatement=Comando SQL
tree.admin=Administrador
tree.current=Valor corrente
tree.hashed=Hashed
tree.increment=Incrementar
tree.indexes=&Iacute;ndices
tree.nonUnique=N&atilde;o &uacute;nico
tree.sequences=Sequ&ecirc;ncias
tree.unique=&Uacute;nico
tree.users=Usu&aacute;rios
......@@ -21,7 +21,7 @@ adminLoginCancel=Cancelar
adminLoginOk=Confirmar
adminLogout=Sair
adminOthers=Permitir conex&otilde;es a partir de outro computador na rede
adminPort=\#Port number
adminPort=N&uacute;mero do porto
adminPortWeb=N&uacute;mero do porto do servidor
adminRestart=As altera&ccedil;&otilde;es apenas ser&atilde;o aplicadas ap&oacute;s reiniciar o servidor.
adminSave=Gravar
......
......@@ -21,7 +21,7 @@ adminLoginCancel=\u53D6\u6D88
adminLoginOk=\u786E\u8BA4
adminLogout=\u6CE8\u9500
adminOthers=\u5141\u8BB8\u6765\u81EA\u5176\u4ED6\u8FDC\u7A0B\u8BA1\u7B97\u673A\u7684\u8FDE\u63A5
adminPort=\#Port number
adminPort=\u7AEF\u53E3\u53F7
adminPortWeb=Web server \u7AEF\u53E3\u53F7
adminRestart=\u91CD\u542F\u670D\u52A1\u5668\u540E\u4FEE\u6539\u914D\u7F6E\u5C06\u751F\u6548.
adminSave=\u4FDD\u5B58
......
......@@ -65,9 +65,19 @@ public class Column {
// columnNullableUnknown
public static final int NOT_NULLABLE = 0, NULLABLE = 1, NULLABLE_UNKNOWN = 2;
public Column(String name, int type) {
this(name, type, -1, -1, -1);
}
public Column(String name, int type, long precision, int scale, int displaySize) {
this.name = name;
this.type = type;
if (precision == -1 && scale == -1 && displaySize == -1) {
DataType dt = DataType.getDataType(type);
precision = dt.defaultPrecision;
scale = dt.defaultScale;
displaySize = dt.defaultDisplaySize;
}
this.precision = precision;
this.scale = scale;
this.displaySize = displaySize;
......
......@@ -21,7 +21,7 @@ public class LinkSchema {
Statement stat = null;
ResultSet rs = null;
SimpleResultSet result = new SimpleResultSet();
result.addColumn("TABLE_NAME", Types.VARCHAR, 255, 0);
result.addColumn("TABLE_NAME", Types.VARCHAR, Integer.MAX_VALUE, 0);
try {
c2 = JdbcUtils.getConnection(driver, url, user, password);
stat = conn.createStatement();
......
......@@ -456,7 +456,7 @@ public class MetaTable extends Table {
type = DataType.getTypeByName(nameType.substring(idx + 1)).type;
name = nameType.substring(0, idx);
}
cols[i] = new Column(name, type, 0, 0, 0);
cols[i] = new Column(name, type);
}
return cols;
}
......
......@@ -5,6 +5,7 @@
package org.h2.table;
import java.sql.SQLException;
import org.h2.engine.Session;
import org.h2.index.Index;
import org.h2.index.IndexType;
......@@ -14,7 +15,6 @@ import org.h2.result.Row;
import org.h2.schema.Schema;
import org.h2.util.ObjectArray;
import org.h2.value.Value;
import org.h2.value.ValueLong;
public class RangeTable extends Table {
......@@ -24,7 +24,7 @@ public class RangeTable extends Table {
public RangeTable(Schema schema, long min, long max) throws SQLException {
super(schema, 0, NAME, true);
Column[] cols = new Column[]{
new Column("X", Value.LONG, ValueLong.PRECISION, 0, ValueLong.DISPLAY_SIZE)
new Column("X", Value.LONG)
};
this.min = min;
this.max = max;
......
......@@ -23,7 +23,6 @@ import org.h2.result.SortOrder;
import org.h2.util.ObjectArray;
import org.h2.util.StringUtils;
import org.h2.value.Value;
import org.h2.value.ValueInt;
/**
* A table filter represents a table that is used in a query. There is one such object whenever a table
......@@ -529,11 +528,11 @@ public class TableFilter implements ColumnResolver {
return null;
}
Column[] sys = new Column[3];
sys[0] = new Column("oid", Value.INT, ValueInt.PRECISION, 0, ValueInt.DISPLAY_SIZE);
sys[0] = new Column("oid", Value.INT);
sys[0].setTable(table, 0);
sys[1] = new Column("ctid", Value.STRING, 255, 0, 255);
sys[1] = new Column("ctid", Value.STRING);
sys[1].setTable(table, 0);
sys[2] = new Column("CTID", Value.STRING, 255, 0, 255);
sys[2] = new Column("CTID", Value.STRING);
sys[2].setTable(table, 0);
return sys;
}
......
......@@ -94,7 +94,7 @@ public class TableView extends Table {
if (recursive && columnNames != null) {
cols = new Column[columnNames.length];
for (int i = 0; i < columnNames.length; i++) {
cols[i] = new Column(columnNames[i], Value.STRING, 255, 0, 255);
cols[i] = new Column(columnNames[i], Value.STRING);
}
index.setRecursive(true);
recursive = true;
......
......@@ -184,7 +184,7 @@ public class Csv implements SimpleRowSource {
SimpleResultSet result = new SimpleResultSet(this);
makeColumnNamesUnique();
for (int i = 0; i < columnNames.length; i++) {
result.addColumn(columnNames[i], Types.VARCHAR, 255, 0);
result.addColumn(columnNames[i], Types.VARCHAR, Integer.MAX_VALUE, 0);
}
return result;
}
......
......@@ -102,6 +102,7 @@ public class Recover implements DataHandler {
db = args[++i];
} else if ("-removePassword".equals(args[i])) {
removePassword = true;
log = true;
} else if ("-log".equals(args[i])) {
log = Boolean.valueOf(args[++i]).booleanValue();
} else {
......@@ -249,7 +250,9 @@ public class Recover implements DataHandler {
s.updateChecksum();
store.seek(start);
store.write(s.getBytes(), 0, s.length());
System.out.println("User: " + userName);
if (log) {
System.out.println("User: " + userName);
}
break;
} catch (Throwable e) {
e.printStackTrace();
......
......@@ -23,6 +23,10 @@ public class RandomUtils {
if (secureRandom != null) {
return secureRandom;
}
// Workaround for SecureRandom problem as described in
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6202721
// Can not do that in a static initializer block, because
// threads are not started after the initializer block exits
try {
secureRandom = SecureRandom.getInstance("SHA1PRNG");
// On some systems, secureRandom.generateSeed() is very slow.
......
......@@ -145,6 +145,7 @@ public abstract class Value {
public abstract int getType();
public abstract long getPrecision();
public abstract int getDisplaySize();
public abstract String getString() throws SQLException;
protected abstract int compareSecure(Value v, CompareMode mode) throws SQLException;
protected abstract boolean isEqual(Value v);
......@@ -660,4 +661,8 @@ public abstract class Value {
return getPrecision() <= precision;
}
public String toString() {
return getSQL();
}
}
......@@ -29,7 +29,7 @@ public class ValueDecimal extends Value {
public static final int DEFAULT_PRECISION = 65535;
public static final int DEFAULT_SCALE = 32767;
public static final int DEFAULT_DISPLAY_SIZE = 255;
public static final int DEFAULT_DISPLAY_SIZE = 65535;
private static final int DIVIDE_SCALE_ADD = 25;
private ValueDecimal(BigDecimal value) {
......
......@@ -532,6 +532,14 @@ public class ValueLob extends Value {
throw Message.convertToInternal(e);
}
}
public String toString() {
if (small == null) {
return getClass().getName() + " file: " + fileName + " type: " + type + " precision: " + precision;
} else {
return getSQL();
}
}
public byte[] getSmall() {
return small;
......
......@@ -57,7 +57,7 @@ public class ValueResultSet extends Value {
public int getDisplaySize() {
// it doesn't make sense to calculate it
return 255;
return Integer.MAX_VALUE;
}
public String getString() throws SQLException {
......
......@@ -97,6 +97,7 @@ import org.h2.test.unit.TestStreams;
import org.h2.test.unit.TestStringCache;
import org.h2.test.unit.TestStringUtils;
import org.h2.test.unit.TestTools;
import org.h2.test.unit.TestValue;
import org.h2.test.unit.TestValueHashMap;
import org.h2.tools.DeleteDbFiles;
import org.h2.tools.Server;
......@@ -149,12 +150,40 @@ java org.h2.test.TestAll timer
/*
toString() method of command, PreparedStatement to print something useful
History:
The default value for h2.emergencySpaceInitial is now 256 KB (to speed up creating encrypted databases)
Eduardo Velasques has translated the H2 Console and the error messages to Brazilian Portuguese. Thanks a lot!
Creating a table from GROUP_CONCAT didn't work if the data was longer than 255 characters
Known Problems:
link to history page
Creating a table from GROUP_CONCAT doesn't work if the data was longer than 255 characters
GROUP_CONCAT more than 255
You are right, this is a bug. It was introduced by the getDisplaySize change. Unfortunately there is no workaround at the moment... I will fix for the next release and add a test case. I will also check if other things stopped working because of this change.
Search for 255 in whole project
CryptGenRandom.
drop table test;
create table test(id int primary key, name varchar(255));
@META select * from test;
drop table test;
ddlutils
implement & test: checkpoint commits running transactions
start writing javadocs for jdbcx package
toString() method to print something useful
Feature request: file system that writes to two file systems (for replication)
Feature request: file system with background thread writing file system (all writes)
......@@ -542,6 +571,7 @@ Features of H2
new TestStringCache().runTest(this);
new TestStringUtils().runTest(this);
new TestTools().runTest(this);
new TestValue().runTest(this);
new TestValueHashMap().runTest(this);
}
......
......@@ -60,7 +60,40 @@ public class TestResultSet extends TestBase {
}
private void testColumnLength() throws Exception {
trace("Test ColumnLength");
trace("testColumnDisplayLength");
ResultSet rs;
ResultSetMetaData meta;
stat.execute("CREATE TABLE one (ID INT, NAME VARCHAR(255))");
rs = stat.executeQuery("select * from one");
meta = rs.getMetaData();
check("ID", meta.getColumnLabel(1));
check(11, meta.getColumnDisplaySize(1));
check("NAME", meta.getColumnLabel(2));
check(255, meta.getColumnDisplaySize(2));
stat.execute("DROP TABLE one");
rs = stat.executeQuery("select 1, 'Hello' union select 2, 'Hello World!'");
meta = rs.getMetaData();
check(11, meta.getColumnDisplaySize(1));
check(12, meta.getColumnDisplaySize(2));
rs = stat.executeQuery("explain select * from dual");
meta = rs.getMetaData();
check(Integer.MAX_VALUE, meta.getColumnDisplaySize(1));
check(Integer.MAX_VALUE, meta.getPrecision(1));
rs = stat.executeQuery("script");
meta = rs.getMetaData();
check(Integer.MAX_VALUE, meta.getColumnDisplaySize(1));
check(Integer.MAX_VALUE, meta.getPrecision(1));
rs = stat.executeQuery("select group_concat(table_name) from information_schema.tables");
rs.next();
meta = rs.getMetaData();
check(Integer.MAX_VALUE, meta.getColumnDisplaySize(1));
check(Integer.MAX_VALUE, meta.getPrecision(1));
int todo;
}
......
......@@ -26,13 +26,11 @@ package org.h2.test.trace;
*
*/
class Arg {
// private Player player;
private Class clazz;
private Object obj;
private Statement stat;
Arg(Player player, Class clazz, Object obj) {
// this.player = player;
this.clazz = clazz;
this.obj = obj;
}
......@@ -41,13 +39,13 @@ class Arg {
this.stat = stat;
}
// public String toString() {
// if (stat != null) {
// return stat.toString();
// } else {
// return StringUtils.quote(clazz, getValue());
// }
// }
public String toString() {
if (stat != null) {
return stat.toString();
} else {
return StringTools.quote(clazz, getValue());
}
}
void execute() throws Exception {
if (stat != null) {
......
......@@ -177,7 +177,7 @@ class Parser {
private Arg parseValue() {
if (tokenType == STRING) {
String s = readToken();
s = StringUtils.javaDecode(s.substring(1, s.length() - 1));
s = StringTools.javaDecode(s.substring(1, s.length() - 1));
return new Arg(player, String.class, s);
} else if (tokenType == NUMBER) {
String number = readToken().toLowerCase();
......
......@@ -35,8 +35,7 @@ public class Player {
private boolean log;
private static final String[] IMPORTED_PACKAGES = { "", "java.lang.",
"java.sql." };
private static final String[] IMPORTED_PACKAGES = { "", "java.lang.", "java.sql.", "javax.sql." };
private HashMap objects = new HashMap();
private String lastReturn;
......@@ -53,7 +52,6 @@ public class Player {
* @param args the arguments of the application
*/
public static void main(String[] args) throws Exception {
int todoTest;
new Player().run(args);
}
......@@ -69,7 +67,7 @@ public class Player {
}
private void run(String[] args) throws IOException {
String fileName;
String fileName = "test.log.db";
try {
fileName = args[args.length - 1];
for (int i = 0; i < args.length - 1; i++) {
......
......@@ -114,8 +114,7 @@ class Statement {
}
Class clazz;
if (staticCall) {
if (staticCallClass == null || staticCallClass.length() == 0
|| !staticCallClass.startsWith("org.")) {
if (staticCallClass == null || staticCallClass.length() == 0) {
player.log("?class? " + staticCallClass);
}
clazz = Player.getClass(staticCallClass);
......
......@@ -24,13 +24,15 @@ import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import org.h2.util.StringUtils;
/**
* Some String manipulations / formatting functions used by this tool.
*
* @author Thomas Mueller
*
*/
public class StringUtils {
public class StringTools {
// private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(
// "yyyy-MM-dd HH:mm:ss.SSS Z");
......@@ -144,158 +146,6 @@ public class StringUtils {
return buff.toString();
}
private static String javaEncode(String s) {
StringBuffer buff = new StringBuffer(s.length());
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
// case '\b':
// // BS backspace
// // not supported in properties files
// buff.append("\\b");
// break;
case '\t':
// HT horizontal tab
buff.append("\\t");
break;
case '\n':
// LF linefeed
buff.append("\\n");
break;
case '\f':
// FF form feed
buff.append("\\f");
break;
case '\r':
// CR carriage return
buff.append("\\r");
break;
case '"':
// double quote
buff.append("\\\"");
break;
case '\\':
// backslash
buff.append("\\\\");
break;
default:
int ch = (c & 0xffff);
if (ch >= ' ' && (ch < 0x80)) {
buff.append(c);
// not supported in properties files
// } else if(ch < 0xff) {
// buff.append("\\");
// // make sure it's three characters (0x200 is octal
// 1000)
// buff.append(Integer.toOctalString(0x200 |
// ch).substring(1));
} else {
buff.append("\\u");
// make sure it's four characters
buff.append(Integer.toHexString(0x10000 | ch).substring(1));
}
}
}
return buff.toString();
}
static String quoteString(String result) {
if (result == null) {
return "null";
}
return "\"" + javaEncode(result) + "\"";
}
// static String quoteArray(Class clazz, String name, Object[] array) {
// if (array == null) {
// return "null";
// }
// StringBuffer buff = new StringBuffer("new ");
// buff.append(name);
// buff.append("[]{");
// for (int i = 0; i < array.length; i++) {
// if (i > 0) {
// buff.append(", ");
// }
// buff.append(quote(clazz, array[i]));
// }
// buff.append("}");
// return buff.toString();
// }
private static String quoteLongArray(long[] array) {
if (array == null) {
return "null";
}
StringBuffer buff = new StringBuffer("new long[]{");
for (int i = 0; i < array.length; i++) {
if (i > 0) {
buff.append(", ");
}
buff.append(array[i] + "L");
}
buff.append("}");
return buff.toString();
}
private static String quoteStringArray(String[] array) {
if (array == null) {
return "null";
}
StringBuffer buff = new StringBuffer("new String[]{");
for (int i = 0; i < array.length; i++) {
if (i > 0) {
buff.append(", ");
}
buff.append(quoteString(array[i]));
}
buff.append("}");
return buff.toString();
}
// static String quoteArgs(Class[] argClasses, Object[] args) {
// if (args == null) {
// return "";
// }
// StringBuffer buff = new StringBuffer();
// for (int i = 0; i < args.length; i++) {
// if (i > 0) {
// buff.append(", ");
// }
// buff.append(StringUtils.quote(argClasses[i], args[i]));
// }
// return buff.toString();
// }
/**
* Format an object as Java source code.
*
* @param o the object
* @return the formatted string
*/
public static String quoteSimple(Object o) {
if (o instanceof String) {
return quoteString((String) o);
} else if (o.getClass().isArray()) {
if (o instanceof String[]) {
return quoteStringArray((String[]) o);
} else if (o instanceof long[]) {
return quoteLongArray((long[]) o);
} else {
return null;
}
} else if (o instanceof Integer) {
return o.toString();
} else if (o instanceof Long) {
return o.toString() + "L";
} else if (o instanceof Boolean) {
return o.toString();
} else if (o instanceof Double) {
return o.toString() + "d";
}
return null;
}
static String convertBytesToString(byte[] value) {
StringBuffer buff = new StringBuffer(value.length * 2);
for (int i = 0; value != null && i < value.length; i++) {
......@@ -332,4 +182,25 @@ public class StringUtils {
return out.toByteArray();
}
/**
* Format an object as Java source code.
*
* @param o the object
* @return the formatted string
*/
public static String quote(Class clazz, Object value) {
if (value == null) {
return null;
} else if (clazz == String.class) {
return StringUtils.quoteJavaString(value.toString());
} else if (clazz.isArray()) {
if (clazz == String[].class) {
return StringUtils.quoteJavaStringArray((String[]) value);
} else if (clazz == int[].class) {
return StringUtils.quoteJavaIntArray((int[]) value);
}
}
return value.toString();
}
}
......@@ -4,6 +4,7 @@
*/
package org.h2.test.unit;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
......@@ -11,6 +12,7 @@ import java.sql.SQLException;
import java.sql.Statement;
import org.h2.test.TestBase;
import org.h2.test.trace.Player;
import org.h2.tools.Backup;
import org.h2.tools.ChangePassword;
import org.h2.tools.ConvertTraceFile;
......@@ -23,7 +25,7 @@ import org.h2.tools.Server;
import org.h2.util.Resources;
public class TestTools extends TestBase {
public void test() throws Exception {
deleteDb("utils");
testRemove();
......@@ -38,6 +40,7 @@ public class TestTools extends TestBase {
}
private void testConvertTraceFile() throws Exception {
deleteDb("toolsConvertTraceFile");
Class.forName("org.h2.Driver");
String url = "jdbc:h2:" + baseDir + "/toolsConvertTraceFile";
Connection conn = DriverManager.getConnection(url + ";TRACE_LEVEL_FILE=3", "sa", "sa");
......@@ -45,11 +48,30 @@ public class TestTools extends TestBase {
stat.execute("create table test(id int primary key, name varchar)");
stat.execute("insert into test values(1, 'Hello')");
conn.close();
ConvertTraceFile.main(new String[]{"-traceFile", baseDir + "/toolsConvertTraceFile.trace.db", "-javaClass", baseDir + "/Test", "-script", baseDir + "/test.sql"});
new File(baseDir + "/Test.java").delete();
File trace = new File(baseDir + "/toolsConvertTraceFile.trace.db");
check(trace.exists());
File newTrace = new File(baseDir + "/test.trace.db");
newTrace.delete();
check(trace.renameTo(newTrace));
deleteDb("toolsConvertTraceFile");
RunScript.main(new String[]{"-url", url, "-user", "test", "-password", "test", "-script", baseDir + "/test.sql"});
conn = DriverManager.getConnection(url, "test", "test");
stat = conn.createStatement();
Player.main(new String[]{baseDir + "/test.trace.db"});
testTraceFile(url);
deleteDb("toolsConvertTraceFile");
RunScript.main(new String[]{"-url", url, "-user", "sa", "-script", baseDir + "/test.sql"});
testTraceFile(url);
}
private void testTraceFile(String url) throws Exception {
Connection conn;
Recover.main(new String[]{"-removePassword", "-log", "false", "-dir", baseDir, "-db", "toolsConvertTraceFile"});
conn = DriverManager.getConnection(url, "sa", "");
Statement stat = conn.createStatement();
ResultSet rs;
rs = stat.executeQuery("select * from test");
rs.next();
......@@ -67,7 +89,7 @@ public class TestTools extends TestBase {
stat.execute("create table test(id int primary key, name varchar)");
stat.execute("insert into test values(1, 'Hello')");
conn.close();
Recover.main(new String[]{"-dir", baseDir, "-db", "toolsRemove", "-removePassword"});
Recover.main(new String[]{"-dir", baseDir, "-db", "toolsRemove", "-removePassword", "-log", "false"});
conn = DriverManager.getConnection(url, "sa", "");
stat = conn.createStatement();
ResultSet rs;
......
package org.h2.test.unit;
import org.h2.test.TestBase;
import org.h2.value.ValueUuid;
public class TestValue extends TestBase {
public void test() throws Exception {
testUUID();
}
private void testUUID() throws Exception {
long maxHigh = 0, maxLow = 0, minHigh = -1L, minLow = -1L;
for (int i = 0; i < 100; i++) {
ValueUuid uuid = ValueUuid.getNewRandom();
maxHigh |= uuid.getHigh();
maxLow |= uuid.getLow();
minHigh &= uuid.getHigh();
minLow &= uuid.getLow();
}
ValueUuid max = ValueUuid.get(maxHigh, maxLow);
check(max.getString(), "ffffffff-ffff-4fff-bfff-ffffffffffff");
ValueUuid min = ValueUuid.get(minHigh, minLow);
check(min.getString(), "00000000-0000-4000-8000-000000000000");
}
}
......@@ -30,6 +30,7 @@ import org.h2.util.StringUtils;
public class PropertiesToUTF8 {
public static void main(String[] args) throws Exception {
convert("bin/org/h2/res", ".");
convert("bin/org/h2/server/web/res", ".");
}
......@@ -99,22 +100,33 @@ public class PropertiesToUTF8 {
String s = IOUtils.readStringAndClose(r, -1);
in.close();
String name = f.getName();
String utf8, html;
if (name.startsWith("utf8")) {
s = HtmlConverter.convertStringToHtml(s);
RandomAccessFile out = new RandomAccessFile(name.substring(4), "rw");
out.write(s.getBytes());
utf8 = HtmlConverter.convertHtmlToString(s);
html = HtmlConverter.convertStringToHtml(utf8);
RandomAccessFile out = new RandomAccessFile("_" + name.substring(4), "rw");
out.write(html.getBytes());
out.setLength(out.getFilePointer());
out.close();
} else {
new CheckTextFiles().checkOrFixFile(f, false, false);
s = HtmlConverter.convertHtmlToString(s);
html = s;
utf8 = HtmlConverter.convertHtmlToString(html);
// s = unescapeHtml(s);
s = StringUtils.javaDecode(s);
FileOutputStream out = new FileOutputStream("utf8" + f.getName());
utf8 = StringUtils.javaDecode(utf8);
FileOutputStream out = new FileOutputStream("_utf8" + f.getName());
OutputStreamWriter w = new OutputStreamWriter(out, "UTF-8");
w.write(s);
w.write(utf8);
w.close();
out.close();
}
String java = StringUtils.javaEncode(utf8);
java = StringUtils.replaceAll(java, "\\r", "\r");
java = StringUtils.replaceAll(java, "\\n", "\n");
RandomAccessFile out = new RandomAccessFile("_java." + name, "rw");
out.write(java.getBytes());
out.setLength(out.getFilePointer());
out.close();
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论