提交 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 {
public abstract LocalResult queryMeta() throws SQLException;
final public LocalResult getMetaDataLocal() throws SQLException {
public final LocalResult getMetaDataLocal() throws SQLException {
return queryMeta();
}
final public ResultInterface getMetaData() throws SQLException {
public final ResultInterface getMetaData() throws SQLException {
return queryMeta();
}
......@@ -95,8 +95,11 @@ public abstract class Command implements CommandInterface {
session.commit(true);
} else if (session.getAutoCommit()) {
session.commit(false);
} else if (Constants.MULTI_THREADED_KERNEL && session.getDatabase().getLockMode() == Constants.LOCK_MODE_READ_COMMITTED) {
session.unlockReadLocks();
} else if (Constants.MULTI_THREADED_KERNEL) {
Database db = session.getDatabase();
if (db != null && db.getLockMode() == Constants.LOCK_MODE_READ_COMMITTED) {
session.unlockReadLocks();
}
}
if (trace.info()) {
long time = System.currentTimeMillis() - startTime;
......
......@@ -8,6 +8,7 @@ import java.sql.SQLException;
import org.h2.engine.Database;
import org.h2.engine.DbObject;
import org.h2.engine.Role;
import org.h2.engine.Session;
import org.h2.engine.User;
import org.h2.schema.Schema;
......@@ -84,7 +85,15 @@ public class DropDatabase extends DefineCommand {
}
}
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());
for(int i=0; i<list.size(); i++) {
DbObject obj = (DbObject) list.get(i);
......
......@@ -171,17 +171,12 @@ public class SelectUnion extends Query {
throw Message.getSQLException(Message.COLUMN_COUNT_DOES_NOT_MATCH);
}
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();
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);
expressions.add(l);
}
}
......@@ -192,6 +187,21 @@ public class SelectUnion extends Query {
checkPrepared = true;
left.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) {
initOrder(expressions, null, orderList, getColumnCount(), true);
sort = prepareOrder(expressions, orderList);
......
......@@ -969,7 +969,8 @@ public class JdbcPreparedStatement extends JdbcStatement implements PreparedStat
debugCodeAssign("ResultSetMetaData", TraceObject.RESULT_SET_META_DATA, id);
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;
} catch(Throwable e) {
throw logAndConvert(e);
......
......@@ -96,7 +96,8 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
debugCodeCall("getMetaData");
}
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;
} catch(Throwable e) {
throw logAndConvert(e);
......
......@@ -17,13 +17,15 @@ import org.h2.value.DataType;
*/
public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaData {
private final String catalog;
private final JdbcResultSet rs;
private final JdbcPreparedStatement prep;
private final ResultInterface result;
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);
this.catalog = catalog;
this.rs = rs;
this.prep = prep;
this.result = result;
......@@ -161,7 +163,7 @@ public class JdbcResultSetMetaData extends TraceObject implements ResultSetMetaD
try {
debugCodeCall("getCatalogName", column);
checkColumnIndex(column);
return rs.getConnection().getCatalog();
return catalog;
} catch(Throwable e) {
throw logAndConvert(e);
}
......
......@@ -514,15 +514,14 @@ public class MetaTable extends Table {
public ObjectArray generateRows(Session session, SearchRow first, SearchRow last) throws SQLException {
Value indexFrom = null, indexTo = null;
int testing;
// if(indexColumn >= 0) {
// if(first != null) {
// indexFrom = first.getValue(indexColumn);
// }
// if(last != null) {
// indexTo = last.getValue(indexColumn);
// }
// }
if(indexColumn >= 0) {
if(first != null) {
indexFrom = first.getValue(indexColumn);
}
if(last != null) {
indexTo = last.getValue(indexColumn);
}
}
ObjectArray rows = new ObjectArray();
String catalog = identifier(database.getShortName());
......
......@@ -27,7 +27,7 @@ public class MathUtils {
}
public static int nextPowerOf2(int x) {
int i = 1;
long i = 1;
while(i < x && i < (Integer.MAX_VALUE/2)) {
i += i;
}
......
......@@ -91,9 +91,13 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2
long time = System.currentTimeMillis();
TestAll test = new TestAll();
test.printSystem();
/*
SELECT * FROM DUAL WHERE 'a_z' LIKE '%=_%' ESCAPE '=';
SELECT * FROM DUAL WHERE 'a_z' LIKE '%\_%';
-- SET client_encoding = 'UTF8';
-- SET check_function_bodies = false;
-- SET client_min_messages = warning;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论