提交 46cdafb3 authored 作者: Thomas Mueller's avatar Thomas Mueller

--no commit message

--no commit message
上级 4656d167
......@@ -13,13 +13,13 @@ import org.h2.index.Index;
import org.h2.message.Message;
import org.h2.schema.Schema;
public class AlterIndexRename extends SchemaCommand {
public class AlterIndexRename extends DefineCommand {
private Index oldIndex;
private String newIndexName;
public AlterIndexRename(Session session, Schema schema) {
super(session, schema);
public AlterIndexRename(Session session) {
super(session);
}
public void setOldIndex(Index index) {
......@@ -33,7 +33,8 @@ public class AlterIndexRename extends SchemaCommand {
public int update() throws SQLException {
session.commit(true);
Database db = session.getDatabase();
if(getSchema().findIndex(newIndexName) != null || newIndexName.equals(oldIndex.getName())) {
Schema schema = oldIndex.getSchema();
if(schema.findIndex(newIndexName) != null || newIndexName.equals(oldIndex.getName())) {
throw Message.getSQLException(Message.INDEX_ALREADY_EXISTS_1, newIndexName);
}
session.getUser().checkRight(oldIndex.getTable(), Right.ALL);
......
......@@ -37,6 +37,7 @@ public class AlterTableAddConstraint extends SchemaCommand {
private int type;
private String constraintName;
private String tableName;
private Table table;
private String[] columnNames;
private int deleteAction;
private int updateAction;
......@@ -61,12 +62,12 @@ public class AlterTableAddConstraint extends SchemaCommand {
public int update() throws SQLException {
session.commit(true);
Database db = session.getDatabase();
table = getSchema().getTableOrView(session, tableName);
if(getSchema().findConstraint(constraintName)!=null) {
throw Message.getSQLException(Message.CONSTRAINT_ALREADY_EXISTS_1,
constraintName);
}
Constraint constraint;
Table table = getSchema().getTableOrView(session, tableName);
session.getUser().checkRight(table, Right.ALL);
table.lock(session, true);
switch(type) {
......
/*
* Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.command.ddl;
import java.sql.SQLException;
......
/*
* Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.command.ddl;
import java.sql.SQLException;
......
......@@ -9,26 +9,24 @@ import java.sql.SQLException;
import org.h2.engine.Right;
import org.h2.engine.Session;
import org.h2.message.Message;
import org.h2.schema.Schema;
import org.h2.table.Table;
public class TruncateTable extends SchemaCommand {
public class TruncateTable extends DefineCommand {
private String tableName;
private Table table;
public TruncateTable(Session session, Schema schema) {
super(session, schema);
public TruncateTable(Session session) {
super(session);
}
public void setTableName(String tableName) {
this.tableName = tableName;
public void setTable(Table table) {
this.table = table;
}
public int update() throws SQLException {
session.commit(true);
Table table = getSchema().getTableOrView(session, tableName);
if(!table.canTruncate()) {
throw Message.getSQLException(Message.CANNOT_TRUNCATE_1, tableName);
throw Message.getSQLException(Message.CANNOT_TRUNCATE_1, table.getSQL());
} else {
session.getUser().checkRight(table, Right.DELETE);
table.lock(session, true);
......
/*
* Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.command.dml;
import java.sql.SQLException;
......
......@@ -36,6 +36,7 @@ public class Set extends Prepared {
private int type;
private Expression expression;
private String stringValue;
private String[] stringValueList;
public Set(Session session, int type) {
super(session);
......@@ -240,6 +241,10 @@ public class Set extends Prepared {
database.setOptimizeReuseResults(getIntValue() != 0);
break;
}
case SetTypes.SCHEMA_SEARCH_PATH: {
session.setSchemaSearchPath(stringValueList);
break;
}
default:
throw Message.getInternalError("type="+type);
}
......@@ -297,4 +302,8 @@ public class Set extends Prepared {
return null;
}
public void setStringArray(String[] list) {
this.stringValueList = list;
}
}
......@@ -16,7 +16,7 @@ public class SetTypes {
public static final int MAX_MEMORY_ROWS = 16, LOCK_MODE = 17, DB_CLOSE_DELAY = 18;
public static final int LOG = 19, THROTTLE = 20, MAX_MEMORY_UNDO = 21, MAX_LENGTH_INPLACE_LOB = 22;
public static final int COMPRESS_LOB = 23, ALLOW_LITERALS = 24, MULTI_THREADED = 25, SCHEMA = 26;
public static final int OPTIMIZE_REUSE_RESULTS = 27;
public static final int OPTIMIZE_REUSE_RESULTS = 27, SCHEMA_SEARCH_PATH = 28;
private static ObjectArray types = new ObjectArray();
static {
......@@ -47,6 +47,7 @@ public class SetTypes {
setType(MULTI_THREADED, "MULTI_THREADED");
setType(SCHEMA, "SCHEMA");
setType(OPTIMIZE_REUSE_RESULTS, "OPTIMIZE_REUSE_RESULTS");
setType(SCHEMA_SEARCH_PATH, "SCHEMA_SEARCH_PATH");
}
private static void setType(int type, String name) {
......
/*
* Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.engine;
import org.h2.command.Prepared;
......
......@@ -55,6 +55,7 @@ public class Session implements SessionInterface {
private Command currentCommand;
private boolean allowLiterals;
private String currentSchemaName;
private String[] schemaSearchPath;
private String traceModuleName;
private HashSet unlinkSet;
private int tempViewIndex;
......@@ -62,7 +63,7 @@ public class Session implements SessionInterface {
public Session() {
}
public Table findLocalTempTable(String name) {
Table t = null;
if(t == null && localTempTables != null) {
......@@ -503,4 +504,13 @@ public class Session implements SessionInterface {
}
return (Procedure) procedures.get(name);
}
public void setSchemaSearchPath(String[] schemas) {
this.schemaSearchPath = schemas;
}
public String[] getSchemaSearchPath() {
return schemaSearchPath;
}
}
......@@ -2494,7 +2494,7 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
debugCodeCall("beforeFirst");
checkClosed();
if(result.getRowId() >= 0) {
resetResult();
resetResult();
}
} catch(Throwable e) {
throw logAndConvert(e);
......@@ -2529,10 +2529,10 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
debugCodeCall("first");
checkClosed();
if(result.getRowId() < 0) {
return nextRow();
return nextRow();
} else {
resetResult();
return nextRow();
resetResult();
return nextRow();
}
} catch(Throwable e) {
throw logAndConvert(e);
......@@ -2900,18 +2900,18 @@ public class JdbcResultSet extends TraceObject implements ResultSet {
}
private boolean nextRow() throws SQLException {
boolean next = result.next();
if(!next && !scrollable) {
result.close();
}
return next;
boolean next = result.next();
if(!next && !scrollable) {
result.close();
}
return next;
}
private void resetResult() throws SQLException {
if(!scrollable) {
throw Message.getSQLException(Message.RESULT_SET_NOT_SCROLLABLE);
}
result.reset();
if(!scrollable) {
throw Message.getSQLException(Message.RESULT_SET_NOT_SCROLLABLE);
}
result.reset();
}
/**
......
......@@ -364,26 +364,8 @@ public class PgServerThread implements Runnable {
} else if(s.startsWith("BEGIN")) {
s = "set DATESTYLE ISO";
}
s = StringUtils.replaceAll(s, "FROM pg_database", "FROM pg_catalog.pg_database");
s = StringUtils.replaceAll(s, "FROM pg_user", "FROM pg_catalog.pg_user");
s = StringUtils.replaceAll(s, "FROM pg_settings", "FROM pg_catalog.pg_settings");
s = StringUtils.replaceAll(s, "FROM pg_database", "FROM pg_catalog.pg_database");
s = StringUtils.replaceAll(s, "JOIN pg_tablespace", "JOIN pg_catalog.pg_tablespace");
s = StringUtils.replaceAll(s, "FROM pg_tablespace", "FROM pg_catalog.pg_tablespace");
s = StringUtils.replaceAll(s, "FROM pg_class", "FROM pg_catalog.pg_class");
s = StringUtils.replaceAll(s, "from pg_class", "from pg_catalog.pg_class");
s = StringUtils.replaceAll(s, ", pg_namespace", ", pg_catalog.pg_namespace");
s = StringUtils.replaceAll(s, "JOIN pg_namespace", "JOIN pg_catalog.pg_namespace");
s = StringUtils.replaceAll(s, "FROM pg_authid", "FROM pg_catalog.pg_authid");
s = StringUtils.replaceAll(s, "from pg_type", "from pg_catalog.pg_type");
s = StringUtils.replaceAll(s, "join pg_attrdef", "join pg_catalog.pg_attrdef");
int todoNeedToSupportInParser;
s = StringUtils.replaceAll(s, "i.indkey[ia.attnum-1]", "0");
s = StringUtils.replaceAll(s, "current_user", "USER()");
s = StringUtils.replaceAll(s, "E'", "'"); // VALUES (E'2'[*], E'Test')
if(s.indexOf('$') > 0) {
int todoDontReplaceInQuoted;
s = s.replace('$', '?');
}
return s;
}
......
......@@ -248,9 +248,9 @@ public class WebServer implements Service {
// System.out.println(s);
}
public void traceError(Exception e) {
e.printStackTrace();
}
public void traceError(Exception e) {
e.printStackTrace();
}
public boolean supportsLanguage(String language) {
return languages.contains(language);
......
......@@ -160,7 +160,7 @@ class WebThread extends Thread {
try {
bytes = StringUtils.utf8Encode(page);
} catch(SQLException e) {
server.traceError(e);
server.traceError(e);
}
}
message = "HTTP/1.1 200 OK\n";
......@@ -1517,16 +1517,16 @@ class WebThread extends Thread {
return NetUtils.isLoopbackAddress(socket);
}
public String getMimeType() {
return mimeType;
}
public String getMimeType() {
return mimeType;
}
public boolean getCache() {
return cache;
}
public boolean getCache() {
return cache;
}
public WebSession getSession() {
return session;
}
public WebSession getSession() {
return session;
}
}
......@@ -36,7 +36,7 @@ public class Cache2Q implements Cache {
}
private void resize(int maxSize) {
this.maxSize = maxSize;
this.maxSize = maxSize;
this.len = MathUtils.nextPowerOf2(maxSize / 2);
this.mask = len - 1;
MathUtils.checkPowerOf2(len);
......
......@@ -34,7 +34,7 @@ public class CacheLRU implements Cache {
}
private void resize(int maxSize) {
this.maxSize = maxSize;
this.maxSize = maxSize;
this.len = MathUtils.nextPowerOf2(maxSize / 2);
this.mask = len - 1;
MathUtils.checkPowerOf2(len);
......
......@@ -27,11 +27,11 @@ public class MathUtils {
}
public static int nextPowerOf2(int x) {
int i = 1;
while(i < x && i < (Integer.MAX_VALUE/2)) {
i += i;
}
return (int) i;
int i = 1;
while(i < x && i < (Integer.MAX_VALUE/2)) {
i += i;
}
return (int) i;
}
public static long scaleUp50Percent(long start, long min, long blockSize) {
......
......@@ -26,7 +26,7 @@ public class ObjectArray {
public ObjectArray(int size) {
data = new Object[size > 1 ? size : 1];
}
}
public ObjectArray(Object[] data) {
this.data = data;
......
......@@ -113,7 +113,7 @@ public class DataType {
);
add(Value.LONG, Types.BIGINT, "Long",
createDecimal(ValueLong.PRECISION, ValueLong.PRECISION, 0, false, true),
new String[]{"IDENTITY"}
new String[]{"IDENTITY", "SERIAL"}
);
add(Value.DECIMAL, Types.DECIMAL, "BigDecimal",
createDecimal(Integer.MAX_VALUE, ValueDecimal.DEFAULT_PRECISION, ValueDecimal.DEFAULT_SCALE, true, false),
......
......@@ -555,8 +555,6 @@ public class ValueLob extends Value {
String[] list = FileUtils.listFiles(dir);
for(int i=0; i<list.length; i++) {
String name = list[i];
int testing;
// if(name.startsWith(prefix+ "." + tableId + ".") && name.endsWith(".lob.db")) {
if(name.startsWith(prefix+ "." + tableId + ".") && name.endsWith(".lob.db")) {
deleteFile(handler, name);
}
......
......@@ -17,7 +17,7 @@ public class ValueResultSet extends Value {
private final ResultSet result;
private ValueResultSet(ResultSet rs) {
this.result = rs;
this.result = rs;
}
public static ValueResultSet get(ResultSet rs) throws SQLException {
......
......@@ -94,6 +94,16 @@ java -Xmx512m -Xrunhprof:cpu=samples,depth=8 org.h2.tools.RunScript -url jdbc:h2
/*
-- SET client_encoding = 'UTF8';
-- SET check_function_bodies = false;
-- SET client_min_messages = warning;
-- CREATE PROCEDURAL LANGUAGE plperl;
-- CREATE PROCEDURAL LANGUAGE plpgsql;
--SET search_path = public, pg_catalog;
--SET default_tablespace = '';
--SET default_with_oids = false;
--id serial NOT NULL,
pg_catalog with views
oid (object identifier)
......
......@@ -27,18 +27,18 @@ public class TestBigResult extends TestBase {
stat.execute("SET MAX_MEMORY_ROWS 2");
ResultSet rs = stat.executeQuery("SELECT * FROM SYSTEM_RANGE(1, 100)");
while(rs.next()) {
// ignore
// ignore
}
// rs.close();
conn.close();
deleteDb("bigResult");
ArrayList files = FileLister.getDatabaseFiles(BASE_DIR, "bigResult", true);
if(files.size() > 0) {
error("file not deleted: " + files.get(0));
error("file not deleted: " + files.get(0));
}
}
}
private void testLimitBufferedResult() throws Exception {
private void testLimitBufferedResult() throws Exception {
deleteDb("bigResult");
Connection conn = getConnection("bigResult");
Statement stat = conn.createStatement();
......
......@@ -188,8 +188,8 @@ public class TestFunctions extends TestBase {
}
public static ResultSet select(Connection conn, String sql) throws SQLException {
Statement stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
return stat.executeQuery(sql);
Statement stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
return stat.executeQuery(sql);
}
public static ResultSet selectMaxId(Connection conn) throws SQLException {
......
......@@ -35,6 +35,7 @@ public class TestLob extends TestBase {
if(config.memory) {
return;
}
testLobDrop();
testLobNoClose();
testLobTransactions(10);
testLobTransactions(10000);
......@@ -54,6 +55,28 @@ public class TestLob extends TestBase {
testJavaObject();
}
private void testLobDrop() throws Exception {
if(config.logMode == 0 || config.networked) {
return;
}
deleteDb("lob");
Connection conn = reconnect(null);
Statement stat = conn.createStatement();
for(int i=0; i<500; i++) {
stat.execute("CREATE TABLE T"+i +"(ID INT, C CLOB)");
}
stat.execute("CREATE TABLE TEST(ID INT, C CLOB)");
stat.execute("INSERT INTO TEST VALUES(1, SPACE(10000))");
for(int i=0; i<500; i++) {
stat.execute("DROP TABLE T"+i);
}
ResultSet rs = stat.executeQuery("SELECT * FROM TEST");
while(rs.next()) {
rs.getString("C");
}
conn.close();
}
private void testLobNoClose() throws Exception {
if(config.logMode == 0 || config.networked) {
return;
......@@ -90,7 +113,7 @@ public class TestLob extends TestBase {
if(config.logMode == 0) {
return;
}
// Constants.LOB_CLOSE_BETWEEN_READS = true;
// Constants.LOB_CLOSE_BETWEEN_READS = true;
deleteDb("lob");
Connection conn = reconnect(null);
......
--- special grammar and test cases ---------------------------------------------------------------------------------------------
set autocommit off;
> ok
set search_path = public, information_schema;
> ok
select table_name from tables where 1=0;
> TABLE_NAME
> ----------
> rows: 0
set search_path = public;
> ok
set autocommit on;
> ok
create table script.public.x(a int);
> ok
......
......@@ -127,7 +127,7 @@ public class WebServlet extends HttpServlet {
try {
bytes = StringUtils.utf8Encode("File not found: "+file);
} catch(SQLException e) {
server.traceError(e);
server.traceError(e);
}
} else {
if(session != null && file.endsWith(".jsp")) {
......@@ -136,7 +136,7 @@ public class WebServlet extends HttpServlet {
try {
bytes = StringUtils.utf8Encode(page);
} catch(SQLException e) {
server.traceError(e);
server.traceError(e);
}
}
resp.setContentType(mimeType);
......
......@@ -484,3 +484,14 @@ chdh biz inventec
enclosing mostly dtp scrolls cars splitting replay incomplete automate
shorten
attrdef resut reltuples indrelid tuple adrelid rolconfig relnamespace attname rolpassword atttypid
represented rolname indisprimary tablespace proname rolconnlimit currtid indexdef rolcreatedb
indexrelid datdba datname adnum tgnargs attnum relam userbyid typbasetype attlen rolcanlogin
rolinherit adsrc usecreatedb superuser indexprs tgfoid indisunique spcname cleartext relpages
usesuper pgdocs tginitdeferred objoid datestyle indisclustered usename datconfig tgargs resize
tgconstrrelid classoid relhasoids pretty portals rolcatupdate rolsuper spcowner typname cet typlen
latin tgconstrname datallowconn atttypmod dattablespace attrelid ctid timestamptz atthasdef
nspname objsubid typnamespace rolcreaterole tgrelid spclocation relhasrules dont indkey postmaster
relkind autovacuum datlastsysoid attisdropped amname datacl deallocate tgdeferrable stats
spcacl relname rolvaliduntil attnotnull authid aclitem
plpgsql interrupting spring oids plperl regex
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论