亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? logfile.java

?? 非常棒的java數(shù)據(jù)庫(kù)
?? JAVA
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.log;

import java.io.IOException;
import java.sql.SQLException;

import org.h2.api.DatabaseEventListener;
import org.h2.constant.ErrorCode;
import org.h2.engine.Constants;
import org.h2.engine.Database;
import org.h2.engine.Session;
import org.h2.message.Message;
import org.h2.message.Trace;
import org.h2.store.DataPage;
import org.h2.store.DiskFile;
import org.h2.store.FileStore;
import org.h2.store.Record;
import org.h2.store.Storage;
import org.h2.util.FileUtils;
import org.h2.util.MathUtils;
import org.h2.util.ObjectArray;

/**
 * Each transaction log file contains a number of log records.
 *
 * Header format:
 * <pre>
 * int logId (<0 means ignore: rolled back already)
 * int firstUncommittedLogRecordId (-1 if none)
 * int firstUnwrittenLogRecordId (-1 if none)
 * </pre>
 *
 * Record format:
 * <pre>
 * int block size
 * byte 'D' (delete) / 'I' (insert) / 'C' (commit) / 
 *      'R' (rollback) / 'P' (prepare commit) / 'T' (truncate)
 * int session
 * [delete/insert only:]
 * int storage
 * int record.pos
 * int record.blockCount
 * [prepare commit only:]
 * string transaction
 * </pre>
 */
public class LogFile {

    private static final int BUFFER_SIZE = 8 * 1024;
    public static final int BLOCK_SIZE = 16;

    private LogSystem logSystem;
    private Database database;
    private int id;
    private String fileNamePrefix;
    private String fileName;
    private FileStore file;
    private int bufferPos;
    private byte[] buffer;
    private ObjectArray unwritten;
    private DataPage rowBuff;
    private int pos = LogSystem.LOG_WRITTEN;
    private int firstUncommittedPos = LogSystem.LOG_WRITTEN;
    private int firstUnwrittenPos = LogSystem.LOG_WRITTEN;

    LogFile(LogSystem log, int id, String fileNamePrefix) throws SQLException {
        this.logSystem = log;
        this.database = log.getDatabase();
        this.id = id;
        this.fileNamePrefix = fileNamePrefix;
        fileName = getFileName();
        file = log.getDatabase().openFile(fileName, log.getAccessMode(), false);
        rowBuff = log.getRowBuffer();
        buffer = new byte[BUFFER_SIZE];
        unwritten = new ObjectArray();
        try {
            readHeader();
            if (!log.getDatabase().getReadOnly()) {
                writeHeader();
            }
            pos = getBlock();
            firstUncommittedPos = pos;
        } catch (SQLException e) {
            close(false);
            throw e;
        }
    }

    static LogFile openIfLogFile(LogSystem log, String fileNamePrefix, String fileName) throws SQLException {
        if (!fileName.endsWith(Constants.SUFFIX_LOG_FILE)) {
            return null;
        }
        if (!FileUtils.fileStartsWith(fileName, fileNamePrefix + ".")) {
            return null;
        }
        String s = fileName.substring(fileNamePrefix.length() + 1, fileName.length()
                - Constants.SUFFIX_LOG_FILE.length());
        for (int i = 0; i < s.length(); i++) {
            if (!Character.isDigit(s.charAt(i))) {
                return null;
            }
        }
        int id = Integer.parseInt(s);
        if (!FileUtils.exists(fileName)) {
            // the file could have been deleted by now (by the DelayedFileDeleter)
            return null;
        }
        return new LogFile(log, id, fileNamePrefix);
    }

    public String getFileName() {
        return fileNamePrefix + "." + id + Constants.SUFFIX_LOG_FILE;
    }

    public int getId() {
        return id;
    }

    private int getBlock() throws SQLException {
        if (file == null) {
            throw Message.getSQLException(ErrorCode.SIMULATED_POWER_OFF);
        }
        return (int) (file.getFilePointer() / BLOCK_SIZE);
    }

    private void writeBuffer(DataPage buff, Record rec) throws SQLException {
        if (file == null) {
            throw Message.getSQLException(ErrorCode.SIMULATED_POWER_OFF);
        }
        int size = MathUtils.roundUp(buff.length() + buff.getFillerLength(), BLOCK_SIZE);
        int blockCount = size / BLOCK_SIZE;
        buff.fill(size);
        buff.setInt(0, blockCount);
        buff.updateChecksum();
        // IOLogger.getInstance().logWrite(this.fileName, 
        //     file.getFilePointer(), buff.length());
        if (rec != null) {
            unwritten.add(rec);
        }
        if (buff.length() + bufferPos > buffer.length) {
            // the buffer is full
            flush();
        }
        if (buff.length() >= buffer.length) {
            // special case really long write request: write it without buffering
            file.write(buff.getBytes(), 0, buff.length());
            pos = getBlock();
            return;
        }
        System.arraycopy(buff.getBytes(), 0, buffer, bufferPos, buff.length());
        bufferPos += buff.length();
        pos = getBlock() + (bufferPos / BLOCK_SIZE);
    }

    void commit(Session session) throws SQLException {
        DataPage buff = rowBuff;
        buff.reset();
        buff.writeInt(0);
        buff.writeByte((byte) 'C');
        buff.writeInt(session.getId());
        writeBuffer(buff, null);
        if (logSystem.getFlushOnEachCommit()) {
            flush();
        }
    }

    void prepareCommit(Session session, String transaction) throws SQLException {
        DataPage buff = rowBuff;
        buff.reset();
        buff.writeInt(0);
        buff.writeByte((byte) 'P');
        buff.writeInt(session.getId());
        buff.writeString(transaction);
        writeBuffer(buff, null);
        if (logSystem.getFlushOnEachCommit()) {
            flush();
        }
    }

    private DataPage readPage() throws SQLException {
        byte[] buff = new byte[BLOCK_SIZE];
        file.readFully(buff, 0, BLOCK_SIZE);
        DataPage s = DataPage.create(database, buff);
        int blocks = Math.abs(s.readInt());
        if (blocks > 1) {
            byte[] b2 = new byte[blocks * BLOCK_SIZE];
            System.arraycopy(buff, 0, b2, 0, BLOCK_SIZE);
            buff = b2;
            file.readFully(buff, BLOCK_SIZE, blocks * BLOCK_SIZE - BLOCK_SIZE);
            s = DataPage.create(database, buff);
            s.check(blocks * BLOCK_SIZE);
        } else {
            s.reset();
        }
        return s;
    }

    /**
     * Redo or undo one item in the log file.
     *
     * @param undo true if the operation should be undone
     * @param readOnly if the file is read only
     * @return true if there are potentially more operations
     */
    private boolean redoOrUndo(boolean undo, boolean readOnly) throws SQLException {
        int pos = getBlock();
        DataPage in = readPage();
        int blocks = in.readInt();
        if (blocks < 0) {
            return true;
        } else if (blocks == 0) {
            truncate(pos);
            return false;
        }
        char type = (char) in.readByte();
        int sessionId = in.readInt();
        if (type == 'P') {
            if (undo) {
                throw Message.getInternalError("can't undo prepare commit");
            }
            String transaction = in.readString();
            logSystem.setPreparedCommitForSession(this, sessionId, pos, transaction, blocks);
            return true;
        } else if (type == 'C') {
            if (undo) {
                throw Message.getInternalError("can't undo commit");
            }
            logSystem.setLastCommitForSession(sessionId, id, pos);
            return true;
        } else if (type == 'R') {
            if (undo) {
                throw Message.getInternalError("can't undo rollback");
            }
            return true;
        } else if (type == 'S') {
            if (undo) {
                throw Message.getInternalError("can't undo summary");
            }
        }
        if (readOnly && type != 'S') {
            return true;
        }
        if (undo) {
            if (logSystem.isSessionCommitted(sessionId, id, pos)) {
                logSystem.removeSession(sessionId);
                return true;
            }
        } else {
            if (type != 'S') {
                if (!readOnly) {
                    logSystem.addUndoLogRecord(this, pos, sessionId);
                }
            }
        }
        int storageId = in.readInt();
        Storage storage = logSystem.getStorageForRecovery(storageId);
        DataPage rec = null;
        int recordId = in.readInt();
        int blockCount = in.readInt();
        if (type != 'T') {
            rec = in.readDataPageNoSize();
        }
        switch(type) {
        case 'S': {
            int fileType = in.readByte();
            boolean diskFile;
            if (fileType == 'D') {
                diskFile = true;
            } else if (fileType == 'I') {
                diskFile = false;
            } else {
                // unknown type, maybe linear index file (future)
                break;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久99精品久久久久久 | 亚洲成人三级小说| 日韩一级精品视频在线观看| 成人av网站在线| 日韩综合小视频| 自拍偷拍亚洲综合| 精品国产乱码久久久久久久久| 99国产欧美另类久久久精品| 激情综合五月婷婷| 午夜欧美在线一二页| 国产精品青草综合久久久久99| 日韩网站在线看片你懂的| 色呦呦国产精品| a级高清视频欧美日韩| 激情久久五月天| 日韩高清一级片| 亚洲一本大道在线| 亚洲视频一区在线观看| 久久九九久久九九| 精品区一区二区| 337p亚洲精品色噜噜噜| 欧美在线观看视频一区二区| 97久久超碰国产精品电影| 国产福利一区二区三区| 精品一区二区在线视频| 麻豆一区二区99久久久久| 亚洲成人黄色小说| 夜夜嗨av一区二区三区中文字幕 | 欧美不卡一区二区三区四区| 欧美三片在线视频观看| 91黄色免费版| 色狠狠av一区二区三区| 色呦呦日韩精品| 在线精品视频免费播放| 色婷婷久久久亚洲一区二区三区 | 国产不卡视频一区| 国精产品一区一区三区mba桃花| 久久精品国产色蜜蜜麻豆| 奇米影视7777精品一区二区| 亚欧色一区w666天堂| 亚洲成a人在线观看| 五月婷婷久久丁香| 视频精品一区二区| 免费精品视频在线| 狠狠网亚洲精品| 国产一区 二区| 粉嫩一区二区三区性色av| www.成人在线| 91福利资源站| 欧美日韩一区不卡| 欧美一区二区网站| 久久久亚洲精华液精华液精华液| 久久日韩粉嫩一区二区三区| 国产精品三级电影| 一区二区三区精品久久久| 日韩经典中文字幕一区| 麻豆国产欧美一区二区三区| 国产成人精品三级| 99精品在线免费| 欧美日韩精品是欧美日韩精品| 91麻豆精品久久久久蜜臀| 欧美成人在线直播| 国产精品理伦片| 亚洲成av人片一区二区三区| 日av在线不卡| 高清不卡在线观看av| 一本大道av伊人久久综合| 欧美精选一区二区| 久久久国产精品午夜一区ai换脸| 91精品国产欧美日韩| 欧美一区二区三区啪啪| 久久久久久久久97黄色工厂| 中文字幕在线不卡一区 | 国产精品国产三级国产aⅴ中文| 综合激情成人伊人| 日韩高清欧美激情| 高潮精品一区videoshd| 欧美伊人久久久久久久久影院 | 亚洲一区在线观看免费 | 色综合久久久久网| 91精品国产福利| 国产精品视频一二三区| 亚洲成人在线免费| 日韩欧美中文字幕一区| 国产免费成人在线视频| 亚洲一二三区不卡| 国产精品资源站在线| 欧美影院一区二区三区| 久久精品一区蜜桃臀影院| 一区二区三区免费看视频| 蜜桃视频第一区免费观看| 成人丝袜18视频在线观看| 欧美另类videos死尸| 中文字幕乱码久久午夜不卡| 日韩vs国产vs欧美| 一本一本久久a久久精品综合麻豆| 欧美性大战xxxxx久久久| 成年人网站91| 欧美一区二区三区免费观看视频 | 亚洲主播在线观看| 国产一区二区三区久久久 | 91精品国产黑色紧身裤美女| 国产精品卡一卡二| 久久66热偷产精品| 欧美亚洲愉拍一区二区| 国产视频一区不卡| 蜜臀av一区二区在线免费观看 | 国产精品理论在线观看| 免费观看久久久4p| 欧美日韩精品三区| ㊣最新国产の精品bt伙计久久| 九九久久精品视频| 91精品国产高清一区二区三区蜜臀 | 天天综合色天天综合| www.av精品| 欧美极品aⅴ影院| 国产精品正在播放| 精品久久久三级丝袜| 天天综合网 天天综合色| 欧美午夜电影在线播放| 亚洲欧美怡红院| 成人av网站免费| 国产女人aaa级久久久级| 国产精选一区二区三区| 日韩精品在线看片z| 日本中文一区二区三区| 欧美另类高清zo欧美| 午夜久久久久久电影| 在线观看91视频| 亚洲第一综合色| 欧美日韩美少妇| 日韩高清不卡一区二区| 欧美日韩另类国产亚洲欧美一级| 亚洲国产一区二区a毛片| 欧美亚洲尤物久久| 五月激情综合网| 欧美一区二区福利在线| 免费一区二区视频| 2014亚洲片线观看视频免费| 国产在线精品免费av| 久久精品男人的天堂| 日韩欧美在线一区二区三区| 亚洲天堂免费在线观看视频| 99久久婷婷国产精品综合| 国产精品国产三级国产普通话蜜臀| 丁香六月久久综合狠狠色| 中文字幕精品综合| 色综合久久天天综合网| 一区二区三区不卡视频在线观看 | 一区二区三区四区国产精品| 在线观看免费亚洲| 香蕉久久夜色精品国产使用方法| 欧美女孩性生活视频| 蜜桃久久av一区| 日本一区二区三区在线观看| gogogo免费视频观看亚洲一| 亚洲精选视频免费看| 欧美日韩国产首页在线观看| 久久99精品国产麻豆婷婷洗澡| 国产亚洲欧美日韩俺去了| 91网站黄www| 天堂精品中文字幕在线| 欧美成人精品二区三区99精品| 懂色av一区二区三区免费观看| 中文字幕一区二区视频| 欧美日韩免费电影| 国产一区二区调教| 亚洲欧美另类久久久精品2019| 欧美女孩性生活视频| 韩国女主播成人在线观看| 成人欧美一区二区三区在线播放| 欧美视频一区在线| 国内外成人在线| 亚洲精品国产精华液| 日韩欧美一区二区视频| 波多野结衣中文字幕一区| 丝袜脚交一区二区| 久久精品这里都是精品| 欧美中文字幕一区| 国产一区二区三区日韩| 亚洲一二三四在线观看| 久久久影视传媒| 欧美性大战xxxxx久久久| 国产精品自拍av| 婷婷久久综合九色综合绿巨人| 国产欧美日韩另类视频免费观看| 欧美三级电影在线观看| 国产伦精品一区二区三区视频青涩 | 欧美精品 国产精品| 成人一区二区三区| 日韩精品五月天| 国产精品国产三级国产专播品爱网| 91精品国产综合久久香蕉麻豆| 成人伦理片在线| 精品中文字幕一区二区| 亚洲二区在线视频| ...av二区三区久久精品| 久久这里只有精品视频网| 欧美日本一道本在线视频| 99久久国产综合精品女不卡|