Search in sources :

Example 41 with Set

use of org.h2.command.dml.Set in project h2database by h2database.

the class LobStorageBackend method init.

@Override
public void init() {
    if (init) {
        return;
    }
    synchronized (database) {
        // thread
        if (init) {
            return;
        }
        init = true;
        conn = database.getLobConnectionForRegularUse();
        JdbcConnection initConn = database.getLobConnectionForInit();
        try {
            Statement stat = initConn.createStatement();
            // stat.execute("SET UNDO_LOG 0");
            // stat.execute("SET REDO_LOG_BINARY 0");
            boolean create = true;
            PreparedStatement prep = initConn.prepareStatement("SELECT ZERO() FROM INFORMATION_SCHEMA.COLUMNS WHERE " + "TABLE_SCHEMA=? AND TABLE_NAME=? AND COLUMN_NAME=?");
            prep.setString(1, "INFORMATION_SCHEMA");
            prep.setString(2, "LOB_MAP");
            prep.setString(3, "POS");
            ResultSet rs;
            rs = prep.executeQuery();
            if (rs.next()) {
                prep = initConn.prepareStatement("SELECT ZERO() FROM INFORMATION_SCHEMA.TABLES WHERE " + "TABLE_SCHEMA=? AND TABLE_NAME=?");
                prep.setString(1, "INFORMATION_SCHEMA");
                prep.setString(2, "LOB_DATA");
                rs = prep.executeQuery();
                if (rs.next()) {
                    create = false;
                }
            }
            if (create) {
                stat.execute("CREATE CACHED TABLE IF NOT EXISTS " + LOBS + "(ID BIGINT PRIMARY KEY, BYTE_COUNT BIGINT, TABLE INT) HIDDEN");
                stat.execute("CREATE INDEX IF NOT EXISTS " + "INFORMATION_SCHEMA.INDEX_LOB_TABLE ON " + LOBS + "(TABLE)");
                stat.execute("CREATE CACHED TABLE IF NOT EXISTS " + LOB_MAP + "(LOB BIGINT, SEQ INT, POS BIGINT, HASH INT, " + "BLOCK BIGINT, PRIMARY KEY(LOB, SEQ)) HIDDEN");
                stat.execute("ALTER TABLE " + LOB_MAP + " RENAME TO " + LOB_MAP + " HIDDEN");
                stat.execute("ALTER TABLE " + LOB_MAP + " ADD IF NOT EXISTS POS BIGINT BEFORE HASH");
                // TODO the column name OFFSET was used in version 1.3.156,
                // so this can be remove in a later version
                stat.execute("ALTER TABLE " + LOB_MAP + " DROP COLUMN IF EXISTS \"OFFSET\"");
                stat.execute("CREATE INDEX IF NOT EXISTS " + "INFORMATION_SCHEMA.INDEX_LOB_MAP_DATA_LOB ON " + LOB_MAP + "(BLOCK, LOB)");
                stat.execute("CREATE CACHED TABLE IF NOT EXISTS " + LOB_DATA + "(BLOCK BIGINT PRIMARY KEY, COMPRESSED INT, DATA BINARY) HIDDEN");
            }
            rs = stat.executeQuery("SELECT MAX(BLOCK) FROM " + LOB_DATA);
            rs.next();
            nextBlock = rs.getLong(1) + 1;
            stat.close();
        } catch (SQLException e) {
            throw DbException.convert(e);
        }
    }
}
Also used : SQLException(java.sql.SQLException) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) ResultSet(java.sql.ResultSet) JdbcConnection(org.h2.jdbc.JdbcConnection) PreparedStatement(java.sql.PreparedStatement)

Example 42 with Set

use of org.h2.command.dml.Set in project h2database by h2database.

the class MVTable method checkDeadlock.

@Override
public ArrayList<Session> checkDeadlock(Session session, Session clash, Set<Session> visited) {
    // only one deadlock check at any given time
    synchronized (MVTable.class) {
        if (clash == null) {
            // verification is started
            clash = session;
            visited = new HashSet<>();
        } else if (clash == session) {
            // we found a circle where this session is involved
            return New.arrayList();
        } else if (visited.contains(session)) {
            // find it out themselves
            return null;
        }
        visited.add(session);
        ArrayList<Session> error = null;
        for (Session s : lockSharedSessions.keySet()) {
            if (s == session) {
                // it doesn't matter if we have locked the object already
                continue;
            }
            Table t = s.getWaitForLock();
            if (t != null) {
                error = t.checkDeadlock(s, clash, visited);
                if (error != null) {
                    error.add(session);
                    break;
                }
            }
        }
        // take a local copy so we don't see inconsistent data, since we are
        // not locked while checking the lockExclusiveSession value
        Session copyOfLockExclusiveSession = lockExclusiveSession;
        if (error == null && copyOfLockExclusiveSession != null) {
            Table t = copyOfLockExclusiveSession.getWaitForLock();
            if (t != null) {
                error = t.checkDeadlock(copyOfLockExclusiveSession, clash, visited);
                if (error != null) {
                    error.add(session);
                }
            }
        }
        return error;
    }
}
Also used : Table(org.h2.table.Table) Session(org.h2.engine.Session)

Example 43 with Set

use of org.h2.command.dml.Set in project h2database by h2database.

the class MVRTreeMap method putOrAdd.

private synchronized Object putOrAdd(SpatialKey key, V value, boolean alwaysAdd) {
    beforeWrite();
    long v = writeVersion;
    Page p = root.copy(v);
    Object result;
    if (alwaysAdd || get(key) == null) {
        if (p.getMemory() > store.getPageSplitSize() && p.getKeyCount() > 3) {
            // only possible if this is the root, else we would have
            // split earlier (this requires pageSplitSize is fixed)
            long totalCount = p.getTotalCount();
            Page split = split(p, v);
            Object k1 = getBounds(p);
            Object k2 = getBounds(split);
            Object[] keys = { k1, k2 };
            Page.PageReference[] children = { new Page.PageReference(p, p.getPos(), p.getTotalCount()), new Page.PageReference(split, split.getPos(), split.getTotalCount()), new Page.PageReference(null, 0, 0) };
            p = Page.create(this, v, keys, null, children, totalCount, 0);
        // now p is a node; continues
        }
        add(p, v, key, value);
        result = null;
    } else {
        result = set(p, v, key, value);
    }
    newRoot(p);
    return result;
}
Also used : Page(org.h2.mvstore.Page)

Example 44 with Set

use of org.h2.command.dml.Set in project h2database by h2database.

the class PgServerThread method initDb.

private void initDb() throws SQLException {
    Statement stat = null;
    try {
        synchronized (server) {
            // better would be: set the database to exclusive mode
            boolean tableFound;
            try (ResultSet rs = conn.getMetaData().getTables(null, "PG_CATALOG", "PG_VERSION", null)) {
                tableFound = rs.next();
            }
            stat = conn.createStatement();
            if (!tableFound) {
                installPgCatalog(stat);
            }
            try (ResultSet rs = stat.executeQuery("select * from pg_catalog.pg_version")) {
                if (!rs.next() || rs.getInt(1) < 2) {
                    // installation incomplete, or old version
                    installPgCatalog(stat);
                } else {
                    // version 2 or newer: check the read version
                    int versionRead = rs.getInt(2);
                    if (versionRead > 2) {
                        throw DbException.throwInternalError("Incompatible PG_VERSION");
                    }
                }
            }
        }
        stat.execute("set search_path = PUBLIC, pg_catalog");
        HashSet<Integer> typeSet = server.getTypeSet();
        if (typeSet.isEmpty()) {
            try (ResultSet rs = stat.executeQuery("select oid from pg_catalog.pg_type")) {
                while (rs.next()) {
                    typeSet.add(rs.getInt(1));
                }
            }
        }
    } finally {
        JdbcUtils.closeSilently(stat);
    }
}
Also used : JdbcStatement(org.h2.jdbc.JdbcStatement) PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) JdbcPreparedStatement(org.h2.jdbc.JdbcPreparedStatement) ResultSet(java.sql.ResultSet) JdbcResultSet(org.h2.jdbc.JdbcResultSet)

Example 45 with Set

use of org.h2.command.dml.Set in project h2database by h2database.

the class WebServer method init.

@Override
public void init(String... args) {
    // set the serverPropertiesDir, because it's used in loadProperties()
    for (int i = 0; args != null && i < args.length; i++) {
        if ("-properties".equals(args[i])) {
            serverPropertiesDir = args[++i];
        }
    }
    Properties prop = loadProperties();
    port = SortedProperties.getIntProperty(prop, "webPort", Constants.DEFAULT_HTTP_PORT);
    ssl = SortedProperties.getBooleanProperty(prop, "webSSL", false);
    allowOthers = SortedProperties.getBooleanProperty(prop, "webAllowOthers", false);
    commandHistoryString = prop.getProperty(COMMAND_HISTORY);
    for (int i = 0; args != null && i < args.length; i++) {
        String a = args[i];
        if (Tool.isOption(a, "-webPort")) {
            port = Integer.decode(args[++i]);
        } else if (Tool.isOption(a, "-webSSL")) {
            ssl = true;
        } else if (Tool.isOption(a, "-webAllowOthers")) {
            allowOthers = true;
        } else if (Tool.isOption(a, "-webDaemon")) {
            isDaemon = true;
        } else if (Tool.isOption(a, "-baseDir")) {
            String baseDir = args[++i];
            SysProperties.setBaseDir(baseDir);
        } else if (Tool.isOption(a, "-ifExists")) {
            ifExists = true;
        } else if (Tool.isOption(a, "-properties")) {
            // already set
            i++;
        } else if (Tool.isOption(a, "-trace")) {
            trace = true;
        }
    }
    // }
    for (String[] lang : LANGUAGES) {
        languages.add(lang[0]);
    }
    updateURL();
}
Also used : SortedProperties(org.h2.util.SortedProperties) SysProperties(org.h2.engine.SysProperties) Properties(java.util.Properties)

Aggregations

SQLException (java.sql.SQLException)107 DbException (org.h2.message.DbException)80 PreparedStatement (java.sql.PreparedStatement)78 Connection (java.sql.Connection)70 Statement (java.sql.Statement)63 ResultSet (java.sql.ResultSet)62 Value (org.h2.value.Value)51 JdbcConnection (org.h2.jdbc.JdbcConnection)48 SimpleResultSet (org.h2.tools.SimpleResultSet)36 HashSet (java.util.HashSet)28 Column (org.h2.table.Column)24 Savepoint (java.sql.Savepoint)23 ValueString (org.h2.value.ValueString)21 IOException (java.io.IOException)20 Random (java.util.Random)17 Expression (org.h2.expression.Expression)16 Task (org.h2.util.Task)16 ExpressionColumn (org.h2.expression.ExpressionColumn)14 ValueExpression (org.h2.expression.ValueExpression)13 IndexColumn (org.h2.table.IndexColumn)13