提交 1d109ff1 authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 46cdafb3
...@@ -46,11 +46,11 @@ public abstract class Command implements CommandInterface { ...@@ -46,11 +46,11 @@ public abstract class Command implements CommandInterface {
public abstract LocalResult queryMeta() throws SQLException; public abstract LocalResult queryMeta() throws SQLException;
final public LocalResult getMetaDataLocal() throws SQLException { public final LocalResult getMetaDataLocal() throws SQLException {
return queryMeta(); return queryMeta();
} }
final public ResultInterface getMetaData() throws SQLException { public final ResultInterface getMetaData() throws SQLException {
return queryMeta(); return queryMeta();
} }
...@@ -95,8 +95,11 @@ public abstract class Command implements CommandInterface { ...@@ -95,8 +95,11 @@ public abstract class Command implements CommandInterface {
session.commit(true); session.commit(true);
} else if (session.getAutoCommit()) { } else if (session.getAutoCommit()) {
session.commit(false); session.commit(false);
} else if (Constants.MULTI_THREADED_KERNEL && session.getDatabase().getLockMode() == Constants.LOCK_MODE_READ_COMMITTED) { } else if (Constants.MULTI_THREADED_KERNEL) {
session.unlockReadLocks(); Database db = session.getDatabase();
if (db != null && db.getLockMode() == Constants.LOCK_MODE_READ_COMMITTED) {
session.unlockReadLocks();
}
} }
if (trace.info()) { if (trace.info()) {
long time = System.currentTimeMillis() - startTime; long time = System.currentTimeMillis() - startTime;
......
...@@ -8,6 +8,7 @@ import java.sql.SQLException; ...@@ -8,6 +8,7 @@ import java.sql.SQLException;
import org.h2.engine.Database; import org.h2.engine.Database;
import org.h2.engine.DbObject; import org.h2.engine.DbObject;
import org.h2.engine.Role;
import org.h2.engine.Session; import org.h2.engine.Session;
import org.h2.engine.User; import org.h2.engine.User;
import org.h2.schema.Schema; import org.h2.schema.Schema;
...@@ -84,7 +85,15 @@ public class DropDatabase extends DefineCommand { ...@@ -84,7 +85,15 @@ public class DropDatabase extends DefineCommand {
} }
} }
list = db.getAllRoles(); list = db.getAllRoles();
list.addAll(db.getAllRights()); for(int i=0; i<list.size(); i++) {
Role role = (Role) list.get(i);
String sql = role.getCreateSQL();
// the role PUBLIC must not be dropped
if(sql != null) {
db.removeDatabaseObject(session, role);
}
}
list = db.getAllRights();
list.addAll(db.getAllFunctionAliases()); list.addAll(db.getAllFunctionAliases());
for(int i=0; i<list.size(); i++) { for(int i=0; i<list.size(); i++) {
DbObject obj = (DbObject) list.get(i); DbObject obj = (DbObject) list.get(i);
......
...@@ -171,17 +171,12 @@ public class SelectUnion extends Query { ...@@ -171,17 +171,12 @@ public class SelectUnion extends Query {
throw Message.getSQLException(Message.COLUMN_COUNT_DOES_NOT_MATCH); throw Message.getSQLException(Message.COLUMN_COUNT_DOES_NOT_MATCH);
} }
ObjectArray le = left.getExpressions(); ObjectArray le = left.getExpressions();
ObjectArray re = right.getExpressions(); // set the expressions to get the right column count and names,
// but can't validate at this time
expressions = new ObjectArray(); expressions = new ObjectArray();
for(int i=0; i<len; i++) { for(int i=0; i<len; i++) {
Expression l = (Expression)le.get(i); Expression l = (Expression)le.get(i);
Expression r = (Expression)re.get(i); expressions.add(l);
int type = Value.getHigherOrder(l.getType(), r.getType());
long prec = Math.max(l.getPrecision(), r.getPrecision());
int scale = Math.max(l.getScale(), r.getScale());
Column col = new Column(l.getAlias(), type, prec, scale);
Expression e = new ExpressionColumn(session.getDatabase(), null, col);
expressions.add(e);
} }
} }
...@@ -192,6 +187,21 @@ public class SelectUnion extends Query { ...@@ -192,6 +187,21 @@ public class SelectUnion extends Query {
checkPrepared = true; checkPrepared = true;
left.prepare(); left.prepare();
right.prepare(); right.prepare();
int len = left.getColumnCount();
// set the correct expressions now
expressions = new ObjectArray();
ObjectArray le = left.getExpressions();
ObjectArray re = right.getExpressions();
for(int i=0; i<len; i++) {
Expression l = (Expression)le.get(i);
Expression r = (Expression)re.get(i);
int type = Value.getHigherOrder(l.getType(), r.getType());
long prec = Math.max(l.getPrecision(), r.getPrecision());
int scale = Math.max(l.getScale(), r.getScale());
Column col = new Column(l.getAlias(), type, prec, scale);
Expression e = new ExpressionColumn(session.getDatabase(), null, col);
expressions.add(e);
}
if(orderList != null) { if(orderList != null) {
initOrder(expressions, null, orderList, getColumnCount(), true); initOrder(expressions, null, orderList, getColumnCount(), true);
sort = prepareOrder(expressions, orderList); sort = prepareOrder(expressions, orderList);
......
...@@ -969,7 +969,8 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat ...@@ -969,7 +969,8 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
debugCodeAssign("ResultSetMetaData", TraceObject.RESULT_SET_META_DATA, id); debugCodeAssign("ResultSetMetaData", TraceObject.RESULT_SET_META_DATA, id);
debugCodeCall("getMetaData"); debugCodeCall("getMetaData");
} }
JdbcResultSetMetaData meta = new JdbcResultSetMetaData(null, this, result, session.getTrace(), id); String catalog = conn.getCatalog();
JdbcResultSetMetaData meta = new JdbcResultSetMetaData(null, this, result, catalog, session.getTrace(), id);
return meta; return meta;
} catch(Throwable e) { } catch(Throwable e) {
throw logAndConvert(e); throw logAndConvert(e);
......
...@@ -96,7 +96,8 @@ public class JdbcResultSet extends TraceObject implements ResultSet { ...@@ -96,7 +96,8 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
debugCodeCall("getMetaData"); debugCodeCall("getMetaData");
} }
checkClosed(); checkClosed();
JdbcResultSetMetaData meta = new JdbcResultSetMetaData(this, null, result, session.getTrace(), id); String catalog = conn.getCatalog();
JdbcResultSetMetaData meta = new JdbcResultSetMetaData(this, null, result, catalog, session.getTrace(), id);
return meta; return meta;
} catch(Throwable e) { } catch(Throwable e) {
throw logAndConvert(e); throw logAndConvert(e);
......
...@@ -17,13 +17,15 @@ import org.h2.value.DataType; ...@@ -17,13 +17,15 @@ import org.h2.value.DataType;
*/ */
public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaData { public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaData {
private final String catalog;
private final JdbcResultSet rs; private final JdbcResultSet rs;
private final JdbcPreparedStatement prep; private final JdbcPreparedStatement prep;
private final ResultInterface result; private final ResultInterface result;
private final int columnCount; private final int columnCount;
JdbcResultSetMetaData(JdbcResultSet rs, JdbcPreparedStatement prep, ResultInterface result, Trace trace, int id) { JdbcResultSetMetaData(JdbcResultSet rs, JdbcPreparedStatement prep, ResultInterface result, String catalog, Trace trace, int id) {
setTrace(trace, TraceObject.RESULT_SET_META_DATA, id); setTrace(trace, TraceObject.RESULT_SET_META_DATA, id);
this.catalog = catalog;
this.rs = rs; this.rs = rs;
this.prep = prep; this.prep = prep;
this.result = result; this.result = result;
...@@ -161,7 +163,7 @@ public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaD ...@@ -161,7 +163,7 @@ public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaD
try { try {
debugCodeCall("getCatalogName", column); debugCodeCall("getCatalogName", column);
checkColumnIndex(column); checkColumnIndex(column);
return rs.getConnection().getCatalog(); return catalog;
} catch(Throwable e) { } catch(Throwable e) {
throw logAndConvert(e); throw logAndConvert(e);
} }
......
...@@ -514,15 +514,14 @@ public class MetaTable extends Table { ...@@ -514,15 +514,14 @@ public class MetaTable extends Table {
public ObjectArray generateRows(Session session, SearchRow first, SearchRow last) throws SQLException { public ObjectArray generateRows(Session session, SearchRow first, SearchRow last) throws SQLException {
Value indexFrom = null, indexTo = null; Value indexFrom = null, indexTo = null;
int testing; if(indexColumn >= 0) {
// if(indexColumn >= 0) { if(first != null) {
// if(first != null) { indexFrom = first.getValue(indexColumn);
// indexFrom = first.getValue(indexColumn); }
// } if(last != null) {
// if(last != null) { indexTo = last.getValue(indexColumn);
// indexTo = last.getValue(indexColumn); }
// } }
// }
ObjectArray rows = new ObjectArray(); ObjectArray rows = new ObjectArray();
String catalog = identifier(database.getShortName()); String catalog = identifier(database.getShortName());
......
...@@ -27,7 +27,7 @@ public class MathUtils { ...@@ -27,7 +27,7 @@ public class MathUtils {
} }
public static int nextPowerOf2(int x) { public static int nextPowerOf2(int x) {
int i = 1; long i = 1;
while(i < x && i < (Integer.MAX_VALUE/2)) { while(i < x && i < (Integer.MAX_VALUE/2)) {
i += i; i += i;
} }
......
...@@ -91,9 +91,13 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2 ...@@ -91,9 +91,13 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2
long time = System.currentTimeMillis(); long time = System.currentTimeMillis();
TestAll test = new TestAll(); TestAll test = new TestAll();
test.printSystem(); test.printSystem();
/* /*
SELECT * FROM DUAL WHERE 'a_z' LIKE '%=_%' ESCAPE '=';
SELECT * FROM DUAL WHERE 'a_z' LIKE '%\_%';
-- SET client_encoding = 'UTF8'; -- SET client_encoding = 'UTF8';
-- SET check_function_bodies = false; -- SET check_function_bodies = false;
-- SET client_min_messages = warning; -- SET client_min_messages = warning;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论