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

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

?? btreeleaf.java

?? 非常棒的java數(shù)據(jù)庫(kù)
?? JAVA
字號(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.index;

import java.sql.SQLException;

import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
import org.h2.engine.Constants;
import org.h2.engine.Session;
import org.h2.message.Message;
import org.h2.result.Row;
import org.h2.result.SearchRow;
import org.h2.store.DataPage;
import org.h2.store.DiskFile;
import org.h2.table.Column;
import org.h2.util.ObjectArray;
import org.h2.value.Value;

/**
 * An outer page of a btree index.
 *
 * Page format:
 * <pre>
 * L { P(pointers) | D(data) } data.len { data[0].pos [data[0]], ...  }
 * </pre>
 */
public class BtreeLeaf extends BtreePage {

    private boolean writePos;
    private int cachedRealByteCount;

    BtreeLeaf(BtreeIndex index, Session session, DataPage s) throws SQLException {
        super(index);
        writePos = s.readByte() == 'P';
        if (writePos) {
            int size = s.readInt();
            // should be 1, but may not be 1
            pageData = new ObjectArray(size);
            for (int i = 0; i < size; i++) {
                Row r = index.getRow(session, s.readInt());
                pageData.add(r);
            }
        } else {
            pageData = index.readRowArray(s);
        }
    }

    BtreeLeaf(BtreeIndex index, ObjectArray pageData) {
        super(index);
        this.pageData = pageData;
    }

    public int add(Row newRow, Session session) throws SQLException {
        int l = 0, r = pageData.size();
        while (l < r) {
            int i = (l + r) >>> 1;
            SearchRow row = (SearchRow) pageData.get(i);
            int comp = index.compareRows(row, newRow);
            if (comp == 0) {
                if (index.indexType.isUnique()) {
                    if (!index.isNull(newRow)) {
                        throw index.getDuplicateKeyException();
                    }
                }
                comp = index.compareKeys(row, newRow);
            }
            if (comp > 0) {
                r = i;
            } else {
                l = i + 1;
            }
        }
        index.deletePage(session, this);
        int at = l;
        // safe memory
        SearchRow row = index.getSearchRow(newRow);
        pageData.add(at, row);
        updateRealByteCount(true, newRow);
        int splitPoint = getSplitPoint();
        if (splitPoint == 0) {
            index.updatePage(session, this);
        }
        return splitPoint;
    }

    public SearchRow remove(Session session, Row oldRow) throws SQLException {
        int l = 0, r = pageData.size();
        if (r == 0) {
            if (!Constants.ALLOW_EMPTY_BTREE_PAGES && !root) {
                throw Message.getInternalError("Empty btree page");
            }
        }
        while (l < r) {
            int i = (l + r) >>> 1;
            SearchRow row = (SearchRow) pageData.get(i);
            if (SysProperties.CHECK && row == null) {
                throw Message.getInternalError("btree corrupt");
            }
            int comp = index.compareRows(row, oldRow);
            if (comp == 0) {
                comp = index.compareKeys(row, oldRow);
            }
            if (comp == 0) {
                index.deletePage(session, this);
                if (pageData.size() == 1 && !root) {
                    // the last row has been deleted
                    return oldRow;
                }
                pageData.remove(i);
                updateRealByteCount(false, row);
                index.updatePage(session, this);
                if (i > 0) {
                    // the first row didn't change
                    return null;
                } else {
                    if (pageData.size() == 0) {
                        return null;
                    } else {
                        return getData(0);
                    }
                }
            }
            if (comp > 0) {
                r = i;
            } else {
                l = i + 1;
            }
        }
        throw Message.getSQLException(ErrorCode.ROW_NOT_FOUND_WHEN_DELETING_1, index.getSQL());
    }

    public BtreePage split(Session session, int splitPoint) throws SQLException {
        ObjectArray data = new ObjectArray();
        int max = pageData.size();
        for (int i = splitPoint; i < max; i++) {
            data.add(getData(splitPoint));
            pageData.remove(splitPoint);
        }
        cachedRealByteCount = 0;
        BtreeLeaf n2 = new BtreeLeaf(index, data);
        index.updatePage(session, this);
        index.addPage(session, n2);
        return n2;
    }

    public boolean findFirst(BtreeCursor cursor, SearchRow compare, boolean bigger) throws SQLException {
        int l = 0, r = pageData.size();
        if (r == 0 && !Constants.ALLOW_EMPTY_BTREE_PAGES && !root) {
            throw Message.getInternalError("Empty btree page");
        }
        while (l < r) {
            int i = (l + r) >>> 1;
            SearchRow row = (SearchRow) pageData.get(i);
            int comp = index.compareRows(row, compare);
            if (comp > 0 || (!bigger && comp == 0)) {
                r = i;
            } else {
                l = i + 1;
            }
        }
        if (l >= pageData.size()) {
            return false;
        }
        cursor.push(this, l);
        SearchRow row = (SearchRow) pageData.get(l);
        cursor.setCurrentRow(row);
        return true;
    }

    public void next(BtreeCursor cursor, int i) throws SQLException {
        i++;
        if (i < pageData.size()) {
            SearchRow r = (SearchRow) pageData.get(i);
            cursor.setCurrentRow(r);
            cursor.setStackPosition(i);
            return;
        }
        cursor.pop();
        nextUpper(cursor);
    }

    public void first(BtreeCursor cursor) throws SQLException {
        if (pageData.size() == 0) {
            if (!Constants.ALLOW_EMPTY_BTREE_PAGES && !root) {
                throw Message.getInternalError("Empty btree page");
            }
            nextUpper(cursor);
            return;
        }
        cursor.push(this, 0);
        SearchRow row = (SearchRow) pageData.get(0);
        cursor.setCurrentRow(row);
    }

    private void nextUpper(BtreeCursor cursor) throws SQLException {
        BtreePosition upper = cursor.pop();
        if (upper == null) {
            cursor.setCurrentRow(null);
        } else {
            cursor.push(upper.page, upper.position);
            upper.page.next(cursor, upper.position);
        }
    }

    public void prepareWrite() throws SQLException {
        if (getRealByteCount() >= DiskFile.BLOCK_SIZE * BLOCKS_PER_PAGE) {
            writePos = true;
        } else {
            writePos = false;
        }
    }

    public void write(DataPage buff) throws SQLException {
        buff.writeByte((byte) 'L');
        int len = pageData.size();
        if (writePos) {
            buff.writeByte((byte) 'P');
        } else {
            buff.writeByte((byte) 'D');
        }
        buff.writeInt(len);
        Column[] columns = index.getColumns();
        for (int i = 0; i < len; i++) {
            SearchRow row = (SearchRow) pageData.get(i);
            buff.writeInt(row.getPos());
            if (!writePos) {
                for (int j = 0; j < columns.length; j++) {
                    Value v = row.getValue(columns[j].getColumnId());
                    buff.writeValue(v);
                }
            }
        }
    }

    private void updateRealByteCount(boolean add, SearchRow row) throws SQLException {
        if (cachedRealByteCount == 0) {
            return;
        }
        DataPage dummy = index.getDatabase().getDataPage();
        cachedRealByteCount += getRowSize(dummy, row) + dummy.getIntLen();
        if (cachedRealByteCount + index.getRecordOverhead() >= DiskFile.BLOCK_SIZE * BLOCKS_PER_PAGE) {
            cachedRealByteCount = 0;
        }
    }

    public int getRealByteCount() throws SQLException {
        if (cachedRealByteCount > 0) {
            return cachedRealByteCount;
        }
        DataPage dummy = index.getDatabase().getDataPage();
        int len = pageData.size();
        int size = 2 + dummy.getIntLen() * (len + 1);
        for (int i = 0; i < len; i++) {
            SearchRow row = (SearchRow) pageData.get(i);
            size += getRowSize(dummy, row);
        }
        size += index.getRecordOverhead();
        cachedRealByteCount = size;
        return size;
    }

    SearchRow getLast(Session session) throws SQLException {
        if (pageData.size() == 0) {
            if (!Constants.ALLOW_EMPTY_BTREE_PAGES && !root) {
                throw Message.getInternalError("Empty btree page");
            }
            return null;
        }
        return (SearchRow) pageData.get(pageData.size() - 1);
    }

    SearchRow getFirst(Session session) throws SQLException {
        if (pageData.size() == 0) {
            if (!Constants.ALLOW_EMPTY_BTREE_PAGES && !root) {
                throw Message.getInternalError("Empty btree page");
            }
            return null;
        }
        return (SearchRow) pageData.get(0);
    }

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃av一区二区三区电影| 精品粉嫩aⅴ一区二区三区四区| 欧美在线观看一区| 另类人妖一区二区av| ●精品国产综合乱码久久久久| 欧美三级视频在线观看| 成人午夜免费电影| 麻豆精品新av中文字幕| 亚洲一区二区三区在线看| 国产欧美日本一区视频| 91精品国产综合久久精品图片 | 欧美一区国产二区| 99久久国产综合精品色伊| 久久精品99久久久| 天天色综合天天| 亚洲精品日日夜夜| 国产精品嫩草久久久久| 久久女同精品一区二区| 欧美人妇做爰xxxⅹ性高电影| 东方欧美亚洲色图在线| 国内久久精品视频| 日韩国产精品久久久| 亚洲午夜精品17c| 亚洲欧洲精品一区二区精品久久久 | 久久99国产精品免费网站| 亚洲精品乱码久久久久久久久| 欧美日韩国产123区| 97久久精品人人爽人人爽蜜臀 | 五月天精品一区二区三区| 亚洲欧美日韩系列| 日本一区二区电影| 国产拍欧美日韩视频二区| 久久中文娱乐网| 日韩精品中文字幕在线一区| 欧美一区二区三区四区高清| 制服丝袜成人动漫| 欧美精品日韩一本| 91精品国产91久久久久久一区二区| 99久久精品免费看国产| www.欧美.com| 99久精品国产| 在线亚洲高清视频| 欧美日韩视频在线第一区| 欧美综合视频在线观看| 欧美三级日本三级少妇99| 欧美丝袜自拍制服另类| 欧美日高清视频| 日韩欧美成人激情| 久久在线免费观看| 国产亚洲欧美日韩在线一区| 中文字幕国产一区二区| 亚洲欧洲在线观看av| 亚洲精品中文字幕乱码三区| 亚洲制服丝袜av| 首页综合国产亚洲丝袜| 蜜乳av一区二区| 国产毛片一区二区| www.日韩精品| 欧美色国产精品| 日韩美女一区二区三区四区| 久久久国产精品麻豆| 国产精品久久久久9999吃药| 一区二区三区自拍| 日本亚洲视频在线| 国产成a人亚洲| 色综合中文综合网| 国产露脸91国语对白| 成人a区在线观看| 欧美性色综合网| 欧美日韩免费高清一区色橹橹 | av综合在线播放| 欧美中文字幕亚洲一区二区va在线| 欧洲一区二区三区在线| 日韩一区二区免费在线电影| 精品久久久久久无| 成人欧美一区二区三区黑人麻豆| 一区二区在线免费| 麻豆精品久久久| 99麻豆久久久国产精品免费| 欧美撒尿777hd撒尿| 精品美女被调教视频大全网站| 久久午夜色播影院免费高清| 亚洲视频网在线直播| 婷婷开心久久网| 国产成人av电影在线观看| 91视频国产资源| 日韩欧美专区在线| 中文字幕在线观看一区| 日韩av电影一区| 不卡的av在线播放| 欧美一二三区在线观看| 国产精品成人网| 久久成人免费电影| 欧美怡红院视频| 久久久www免费人成精品| 尤物在线观看一区| 韩国av一区二区| 欧美午夜片在线看| 国产精品婷婷午夜在线观看| 日本不卡一二三| 一本一本大道香蕉久在线精品 | 欧美在线观看视频一区二区| 国产亚洲一区二区三区在线观看| 一区二区在线免费| 懂色av一区二区夜夜嗨| 欧美一区二区性放荡片| 亚洲精品视频在线观看免费| 国产高清无密码一区二区三区| 欧美伊人精品成人久久综合97| 久久久精品综合| 免费美女久久99| 欧美日本一道本| 亚洲精品老司机| aaa国产一区| 国产色综合一区| 久久草av在线| 欧美一区二区三区四区在线观看| 国产精品理论片| 国产99久久久久久免费看农村| 欧美亚洲综合一区| 一区二区三区中文免费| 91免费在线看| 国产精品久久久久久久久图文区| 捆绑调教美女网站视频一区| 欧美日韩国产大片| 亚洲综合999| 色婷婷综合久久久中文字幕| 中文字幕一区二区三区不卡在线| 狠狠色丁香久久婷婷综合丁香| 欧美日韩成人综合在线一区二区| 综合色中文字幕| 99热在这里有精品免费| 亚洲欧美在线视频| 99精品一区二区| 亚洲码国产岛国毛片在线| 91色在线porny| 亚洲区小说区图片区qvod| 99精品视频在线观看| 亚洲丝袜自拍清纯另类| 91美女福利视频| 亚洲激情av在线| 在线观看亚洲精品| 亚洲一区电影777| 在线不卡免费av| 老司机午夜精品| 久久亚洲综合色一区二区三区| 麻豆精品久久久| 国产亚洲欧美一区在线观看| 国产91丝袜在线播放| 亚洲欧洲精品一区二区精品久久久| 成人动漫在线一区| 亚洲男同性恋视频| 欧美日韩国产另类一区| 久久国产精品一区二区| 久久精品男人天堂av| av一区二区不卡| 亚洲成在线观看| 日韩欧美黄色影院| 国产91精品在线观看| 亚洲精品一卡二卡| 91精品国产综合久久福利软件| 美女视频一区二区| 欧美国产一区二区在线观看 | 欧美影视一区在线| 久久99深爱久久99精品| 一区二区三区四区不卡在线| 精品视频在线视频| 精品一区二区三区香蕉蜜桃 | 亚洲女人的天堂| 在线观看91av| 懂色av中文一区二区三区| 一区二区三区国产精华| 91精品国产综合久久香蕉麻豆| 久久成人免费网| 亚洲天堂精品在线观看| 欧美一区二区三区四区视频| 福利91精品一区二区三区| 亚洲一区二区三区四区五区中文| 欧美精品三级日韩久久| 成人午夜免费视频| 日本在线不卡视频| 国产欧美精品国产国产专区 | 日韩一级黄色片| jiyouzz国产精品久久| 日本午夜精品一区二区三区电影| 久久久久久久久久久久久久久99| 不卡电影一区二区三区| 日韩电影在线看| 中文字幕在线不卡视频| 欧美一区二区三区在线视频| 成人精品国产一区二区4080| 日韩av中文字幕一区二区三区| 国产清纯白嫩初高生在线观看91| 色综合一个色综合亚洲| 国产一二精品视频| 日韩国产在线一| 亚洲黄色免费电影| 国产丝袜美腿一区二区三区| 91精品国产免费| 色乱码一区二区三区88|