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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? btreenode.java

?? 非常棒的java數據庫
?? JAVA
字號:
/*
 * 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.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.IntArray;
import org.h2.util.ObjectArray;
import org.h2.value.Value;

/**
 * An inner page of a b-tree index.
 *
 * Page format:
 * <pre>
 * N children.len children[0..len] data.len { data[0].pos [data[0]], ...  }
 *</pre>
 */
public class BtreeNode extends BtreePage {

    private boolean writePos;
    private IntArray pageChildren;

    BtreeNode(BtreeIndex index, DataPage s) throws SQLException {
        super(index);
        int len = s.readInt();
        int[] array = new int[len];
        for (int i = 0; i < array.length; i++) {
            array[i] = s.readInt();
        }
        pageChildren = new IntArray(array);
        pageData = index.readRowArray(s);
    }

    BtreeNode(BtreeIndex index, BtreePage left, SearchRow pivot, BtreePage right) {
        super(index);
        pageChildren = new IntArray();
        pageChildren.add(left.getPos());
        pageChildren.add(right.getPos());
        pageData = new ObjectArray();
        pageData.add(pivot);
    }

    BtreeNode(BtreeIndex index, IntArray pageChildren, ObjectArray pageData) {
        super(index);
        this.pageChildren = pageChildren;
        this.pageData = pageData;
    }

    protected SearchRow getData(int i) throws SQLException {
        SearchRow r = (SearchRow) pageData.get(i);
        if (r == null) {
            int p = pageChildren.get(i + 1);
            Session session = index.getDatabase().getSystemSession();
            BtreePage page = index.getPage(session, p);
            r = page.getFirst(session);
            pageData.set(i, r);
        }
        return r;
    }

    public int add(Row newRow, Session session) throws SQLException {
        int l = 0, r = pageData.size();
        if (!Constants.ALLOW_EMPTY_BTREE_PAGES && pageChildren.size() == 0) {
            throw Message.getInternalError("Empty btree page");
        }
        while (l < r) {
            int i = (l + r) >>> 1;
            SearchRow row = getData(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;
            }
        }
        int at = l;
        BtreePage page = index.getPage(session, pageChildren.get(at));
        int splitPoint = page.add(newRow, session);
        if (splitPoint == 0) {
            return 0;
        }
        SearchRow pivot = page.getData(splitPoint);
        BtreePage page2 = page.split(session, splitPoint);
        index.deletePage(session, this);
        pageChildren.add(at + 1, page2.getPos());
        pageData.add(at, pivot);
        splitPoint = getSplitPoint();
        if (splitPoint > 1) {
            return splitPoint;
        }
        index.updatePage(session, this);
        return 0;
    }

    public SearchRow remove(Session session, Row oldRow) throws SQLException {
        int l = 0, r = pageData.size();
        if (!Constants.ALLOW_EMPTY_BTREE_PAGES && pageChildren.size() == 0) {
            throw Message.getInternalError("Empty btree page");
        }
        int comp = 0;
        while (l < r) {
            int i = (l + r) >>> 1;
            SearchRow row = getData(i);
            comp = index.compareRows(row, oldRow);
            if (comp == 0) {
                comp = index.compareKeys(row, oldRow);
            }
            if (comp > 0) {
                r = i;
            } else {
                l = i + 1;
            }
        }
        int at = l;
        // merge is not implemented to allow concurrent usage of btrees
        BtreePage page = index.getPage(session, pageChildren.get(at));
        SearchRow first = page.remove(session, oldRow);
        if (first == null) {
            // the first row didn't change - nothing to do here
            return null;
        }
        if (first == oldRow) {
            // this child is now empty
            index.deletePage(session, this);
            pageChildren.remove(at);
            if (pageChildren.size() == 0) {
                // no more children - this page is empty as well
                // it can't be the root otherwise the index would have been
                // truncated
                return oldRow;
            }
            if (at == 0) {
                // the first child is empty - then the first row of this subtree
                // has changed
                first = getData(0);
                pageData.remove(0);
            } else {
                // otherwise the first row didn't change
                first = null;
                pageData.remove(at == 0 ? 0 : at - 1);
            }
            index.updatePage(session, this);
            return first;
        } else {
            // the child still exists, but the first element has changed
            if (at == 0) {
                // no change in this page, but there is a new first row for this
                // subtree
                return first;
            } else {
                // the first row of another child has changed - need to update
                index.deletePage(session, this);
                pageData.set(at - 1, first);
                index.updatePage(session, this);
                // but then the first row of this subtree didn't change
                return null;
            }
        }
    }

    public BtreePage split(Session session, int splitPoint) throws SQLException {
        ObjectArray data = new ObjectArray();
        IntArray children = new IntArray();
        splitPoint++;
        int max = pageData.size();
        if (SysProperties.CHECK && index.getDatabase().getLogIndexChanges() && !getDeleted()) {
            // page must have been deleted already before calling
            // getSplitPoint()
            throw Message.getInternalError();
        }
        for (int i = splitPoint; i < max; i++) {
            data.add(getData(splitPoint));
            children.add(getChild(splitPoint));
            pageData.remove(splitPoint);
            pageChildren.remove(splitPoint);
        }
        children.add(getChild(splitPoint));
        pageData.remove(splitPoint - 1);
        pageChildren.remove(splitPoint);
        BtreeNode n2 = new BtreeNode(index, children, data);
        index.updatePage(session, this);
        index.addPage(session, n2);
        return n2;
    }

    int getChild(int i) {
        return pageChildren.get(i);
    }

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

    public void next(BtreeCursor cursor, int i) throws SQLException {
        i++;
        if (i <= pageData.size()) {
            cursor.setStackPosition(i);
            BtreePage page = index.getPage(cursor.getSession(), pageChildren.get(i));
            page.first(cursor);
            return;
        }
        nextUpper(cursor);
    }

    private void nextUpper(BtreeCursor cursor) throws SQLException {
        cursor.pop();
        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 first(BtreeCursor cursor) throws SQLException {
        cursor.push(this, 0);
        BtreePage page = index.getPage(cursor.getSession(), pageChildren.get(0));
        page.first(cursor);
    }

    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) 'N');
        int len = pageChildren.size();
        buff.writeInt(len);
        for (int i = 0; i < len; i++) {
            buff.writeInt(pageChildren.get(i));
        }
        len = pageData.size();
        buff.writeInt(len);
        Column[] columns = index.getColumns();
        for (int i = 0; i < len; i++) {
            if (writePos) {
                buff.writeInt(-1);
            } else {
                SearchRow row = getData(i);
                buff.writeInt(row.getPos());
                for (int j = 0; j < columns.length; j++) {
                    Value v = row.getValue(columns[j].getColumnId());
                    buff.writeValue(v);
                }
            }
        }
        if (buff.length() > BtreePage.BLOCKS_PER_PAGE * DiskFile.BLOCK_SIZE) {
            throw Message.getInternalError("indexed data overflow");
        }
    }

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

    SearchRow getLast(Session session) throws SQLException {
        if (!Constants.ALLOW_EMPTY_BTREE_PAGES && pageChildren.size() == 0) {
            throw Message.getInternalError("Empty btree page");
        }
        for (int i = pageChildren.size() - 1; i >= 0; i--) {
            BtreePage page = index.getPage(session, pageChildren.get(i));
            if (page != null) {
                return page.getLast(session);
            }
        }
        return null;
    }

    SearchRow getFirst(Session session) throws SQLException {
        for (int i = 0; i < pageChildren.size(); i++) {
            BtreePage page = index.getPage(session, pageChildren.get(i));
            if (page != null) {
                return page.getFirst(session);
            }
        }
        return null;
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色欧美片视频在线观看| 国产高清精品网站| 欧美国产欧美综合| 久久综合久久综合亚洲| 欧美一区二区日韩| 91麻豆精品国产自产在线观看一区| 色综合久久综合网欧美综合网| 成人三级伦理片| 成人在线视频一区二区| 成人视屏免费看| youjizz久久| 欧美性一级生活| 欧美蜜桃一区二区三区| 91精品在线免费| 精品美女被调教视频大全网站| 精品国产露脸精彩对白| 国产清纯美女被跳蛋高潮一区二区久久w | 国产一区二区不卡老阿姨| 精品在线免费观看| 国产成人免费视| 91精品福利在线| 在线精品视频免费观看| 在线观看一区二区精品视频| 欧美性生交片4| 精品精品国产高清a毛片牛牛 | 26uuu精品一区二区三区四区在线| 日韩免费看的电影| 国产亚洲欧美中文| 一区二区在线免费观看| 天天av天天翘天天综合网| 蜜桃视频第一区免费观看| 国产另类ts人妖一区二区| 成人精品免费看| 在线播放91灌醉迷j高跟美女| 日韩美女在线视频| 国产精品免费久久久久| 三级不卡在线观看| 丁香啪啪综合成人亚洲小说| 欧美日韩黄色影视| 国产午夜三级一区二区三| 一区二区三区国产| 国产专区欧美精品| 欧美亚洲综合在线| 国产欧美精品国产国产专区| 亚洲图片欧美视频| 成人精品一区二区三区中文字幕| 欧美群妇大交群中文字幕| 国产精品久久看| 免费在线视频一区| 在线观看亚洲a| 国产欧美一区二区三区鸳鸯浴| 亚洲福利视频导航| 不卡一卡二卡三乱码免费网站| 欧美福利视频导航| 亚洲欧美日韩国产成人精品影院 | 精品国产成人在线影院| 亚洲伦在线观看| 精品亚洲成a人在线观看| 色综合久久中文综合久久牛| 久久中文字幕电影| 天堂av在线一区| 色哟哟国产精品免费观看| 国产丝袜美腿一区二区三区| 日韩av一区二区在线影视| 在线一区二区三区做爰视频网站| 日韩一级大片在线观看| 午夜婷婷国产麻豆精品| 国产高清亚洲一区| 日韩免费视频一区| 免费亚洲电影在线| 欧美日韩极品在线观看一区| 一区二区三区中文字幕| 91蜜桃在线观看| 亚洲欧洲韩国日本视频| 国产成人免费视频网站高清观看视频 | 国产成人av电影在线| 日韩视频一区二区在线观看| 午夜电影久久久| 欧美日韩激情一区二区三区| 亚洲午夜在线视频| 欧洲精品视频在线观看| 亚洲大片免费看| 欧美日韩第一区日日骚| 香蕉久久一区二区不卡无毒影院| 欧美专区日韩专区| 国产在线视频一区二区| 日韩欧美卡一卡二| 久久 天天综合| 久久久久亚洲蜜桃| 福利视频网站一区二区三区| 国产精品麻豆视频| 91在线云播放| 亚洲一区二区三区在线看| 欧美日韩在线免费视频| 日韩综合一区二区| 欧美xxxxx牲另类人与| 久久精品国产77777蜜臀| 国产亚洲视频系列| 91最新地址在线播放| 亚洲成人精品一区| 欧美成人女星排名| 丁香五精品蜜臀久久久久99网站 | 成人影视亚洲图片在线| 国产精品福利一区二区三区| 97精品国产露脸对白| 一区在线中文字幕| 欧美日韩久久不卡| 久久99国产精品久久99| 国产精品久久久久天堂| 欧美日免费三级在线| 久国产精品韩国三级视频| 国产精品麻豆网站| 欧美精品久久天天躁| 久久99国产精品久久99 | 亚洲第一主播视频| 欧美成人精品1314www| 成人深夜视频在线观看| 亚洲精品成人在线| 久久久另类综合| 欧美又粗又大又爽| 国产成人久久精品77777最新版本| 亚洲精品国产精华液| 精品少妇一区二区三区| 欧美在线观看你懂的| 成人午夜免费av| 久久精品国产成人一区二区三区| 亚洲欧洲日韩av| 精品国精品自拍自在线| 欧美日韩综合在线| 粗大黑人巨茎大战欧美成人| 日韩精品一级二级| 亚洲欧美日韩国产中文在线| 精品国产免费一区二区三区香蕉| 93久久精品日日躁夜夜躁欧美| 国产在线精品不卡| 日韩精彩视频在线观看| 亚洲靠逼com| 国产午夜久久久久| 精品日韩99亚洲| 51精品国自产在线| 欧美视频三区在线播放| 99久久精品免费精品国产| 国产盗摄一区二区三区| 精品一区二区三区不卡| 免费的国产精品| 免费久久99精品国产| 五月天网站亚洲| 性久久久久久久久久久久| 亚洲女同一区二区| 亚洲欧美成人一区二区三区| 中文字幕巨乱亚洲| 国产日韩精品一区| 日本一区二区久久| 国产欧美一区二区在线观看| 国产欧美视频一区二区| 亚洲国产精品成人综合色在线婷婷| 欧美变态口味重另类| 欧美变态tickling挠脚心| 欧美tk—视频vk| 久久综合狠狠综合久久激情| 久久网站热最新地址| 精品三级在线看| 国产偷v国产偷v亚洲高清| 中文字幕成人av| 亚洲三级理论片| 亚洲日本va在线观看| ...xxx性欧美| 亚洲一区免费观看| 亚洲va欧美va人人爽| 日韩精品成人一区二区三区| 日韩成人精品在线观看| 久久成人免费网站| 九九视频精品免费| 成人激情黄色小说| 91九色最新地址| 欧美一区二区三区系列电影| 精品国精品国产| 亚洲天堂2014| 亚洲午夜成aⅴ人片| 免费国产亚洲视频| 国产精品中文字幕日韩精品| 99精品偷自拍| 欧美日免费三级在线| 欧美一级高清片| 欧美三级视频在线| 欧美精品一区二区三区四区| 国产精品少妇自拍| 午夜激情久久久| 国产精品亚洲专一区二区三区| 色天使久久综合网天天| 日韩一区二区三区电影在线观看| 国产午夜精品久久久久久久| 亚洲一区二区三区视频在线播放| 麻豆精品久久精品色综合| 成人aa视频在线观看| 91麻豆精品91久久久久久清纯| 国产精品蜜臀在线观看| 免费在线观看精品| 色噜噜狠狠成人中文综合| 精品国产免费久久|