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

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

?? tabledata.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.table;

import java.sql.SQLException;
import java.util.Comparator;
import java.util.HashSet;
import org.h2.api.DatabaseEventListener;
import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
import org.h2.constraint.Constraint;
import org.h2.constraint.ConstraintReferential;
import org.h2.engine.Constants;
import org.h2.engine.DbObject;
import org.h2.engine.Session;
import org.h2.index.BtreeIndex;
import org.h2.index.Cursor;
import org.h2.index.HashIndex;
import org.h2.index.Index;
import org.h2.index.IndexType;
import org.h2.index.LinearHashIndex;
import org.h2.index.MultiVersionIndex;
import org.h2.index.ScanIndex;
import org.h2.index.TreeIndex;
import org.h2.message.Message;
import org.h2.message.Trace;
import org.h2.result.Row;
import org.h2.schema.Schema;
import org.h2.store.DataPage;
import org.h2.store.Record;
import org.h2.store.RecordReader;
import org.h2.util.MathUtils;
import org.h2.util.ObjectArray;
import org.h2.util.StringUtils;
import org.h2.value.DataType;
import org.h2.value.Value;

/**
 * Most tables are an instance of this class. For this table, the data is stored
 * in the database. The actual data is not kept here, instead it is kept in the
 * indexes. There is at least one index, the scan index.
 */
public class TableData extends Table implements RecordReader {
    private final boolean clustered;
    private ScanIndex scanIndex;
    private long rowCount;
    private Session lockExclusive;
    private HashSet lockShared = new HashSet();
    private Trace traceLock;
    private boolean globalTemporary;
    private final ObjectArray indexes = new ObjectArray();
    private long lastModificationId;
    private boolean containsLargeObject;

    public TableData(Schema schema, String tableName, int id, ObjectArray columns,
            boolean persistent, boolean clustered) throws SQLException {
        super(schema, id, tableName, persistent);
        Column[] cols = new Column[columns.size()];
        columns.toArray(cols);
        setColumns(cols);
        this.clustered = clustered;
        if (!clustered) {
            scanIndex = new ScanIndex(this, id, IndexColumn.wrap(cols), IndexType.createScan(persistent));
            indexes.add(scanIndex);
        }
        for (int i = 0; i < cols.length; i++) {
            if (DataType.isLargeObject(cols[i].getType())) {
                containsLargeObject = true;
                memoryPerRow = Row.MEMORY_CALCULATE;
            }
        }
        traceLock = database.getTrace(Trace.LOCK);
    }

    public void close(Session session) throws SQLException {
        for (int i = 0; i < indexes.size(); i++) {
            Index index = (Index) indexes.get(i);
            index.close(session);
        }
    }

    public Row getRow(Session session, int key) throws SQLException {
        return scanIndex.getRow(session, key);
    }

    public void addRow(Session session, Row row) throws SQLException {
        int i = 0;
        lastModificationId = database.getNextModificationDataId();
        if (database.isMultiVersion()) {
            row.setSessionId(session.getId());
        }
        try {
            for (; i < indexes.size(); i++) {
                Index index = (Index) indexes.get(i);
                index.add(session, row);
                checkRowCount(session, index, 1);
            }
            rowCount++;
        } catch (Throwable e) {
            try {
                while (--i >= 0) {
                    Index index = (Index) indexes.get(i);
                    index.remove(session, row);
                    checkRowCount(session, index, 0);
                }
            } catch (SQLException e2) {
                // this could happen, for example on failure in the storage
                // but if that is not the case it means there is something wrong
                // with the database
                // TODO log this problem
                throw e2;
            }
            throw Message.convert(e);
        }
    }

    private void checkRowCount(Session session, Index index, int offset) {
        if (SysProperties.CHECK && !database.isMultiVersion()) {
            long rc = index.getRowCount(session);
            if (rc != rowCount + offset) {
                throw Message.getInternalError("rowCount expected " + (rowCount + offset) + " got " + rc + " " + getName() + "." + index.getName());
            }
        }
    }

    public Index getScanIndex(Session session) {
        return (Index) indexes.get(0);
    }

    public Index getUniqueIndex() {
        for (int i = 0; i < indexes.size(); i++) {
            Index idx = (Index) indexes.get(i);
            if (idx.getIndexType().isUnique()) {
                return idx;
            }
        }
        return null;
    }

    public ObjectArray getIndexes() {
        return indexes;
    }

    public Index addIndex(Session session, String indexName, int indexId, IndexColumn[] cols, IndexType indexType,
            int headPos, String indexComment) throws SQLException {
        if (indexType.isPrimaryKey()) {
            for (int i = 0; i < cols.length; i++) {
                Column column = cols[i].column;
                if (column.getNullable()) {
                    throw Message.getSQLException(ErrorCode.COLUMN_MUST_NOT_BE_NULLABLE_1, column.getName());
                }
                column.setPrimaryKey(true);
            }
        }
        Index index;
        if (isPersistent() && indexType.isPersistent()) {
            if (indexType.isHash()) {
                index = new LinearHashIndex(session, this, indexId, indexName, cols, indexType);
            } else {
                index = new BtreeIndex(session, this, indexId, indexName, cols, indexType, headPos);
            }
        } else {
            if (indexType.isHash()) {
                index = new HashIndex(this, indexId, indexName, cols, indexType);
            } else {
                index = new TreeIndex(this, indexId, indexName, cols, indexType);
            }
        }
        if (database.isMultiVersion()) {
            index = new MultiVersionIndex(index, this);
        }
        if (index.needRebuild() && rowCount > 0) {
            try {
                Index scan = getScanIndex(session);
                long remaining = scan.getRowCount(session);
                long total = remaining;
                Cursor cursor = scan.find(session, null, null);
                long i = 0;
                int bufferSize = Constants.DEFAULT_MAX_MEMORY_ROWS;
                ObjectArray buffer = new ObjectArray(bufferSize);
                while (cursor.next()) {
                    database.setProgress(DatabaseEventListener.STATE_CREATE_INDEX, getName(), MathUtils
                            .convertLongToInt(i++), MathUtils.convertLongToInt(total));
                    Row row = cursor.get();
                    // index.add(session, row);
                    buffer.add(row);
                    if (buffer.size() >= bufferSize) {
                        addRowsToIndex(session, buffer, index);
                    }
                    remaining--;
                }
                addRowsToIndex(session, buffer, index);
                if (SysProperties.CHECK && remaining != 0) {
                    throw Message.getInternalError("rowcount remaining=" + remaining + " " + getName());
                }
            } catch (SQLException e) {
                getSchema().freeUniqueName(indexName);
                try {
                    index.remove(session);
                } catch (SQLException e2) {
                    // this could happen, for example on failure in the storage
                    // but if that is not the case it means 
                    // there is something wrong with the database
                    // TODO log this problem
                    throw e2;
                }
                throw e;
            }
        }
        boolean temporary = getTemporary();
        index.setTemporary(temporary);
        if (index.getCreateSQL() != null) {
            index.setComment(indexComment);
            database.addSchemaObject(session, index);
            // Need to update, because maybe the index is rebuilt at startup,
            // and so the head pos may have changed, which needs to be stored now.
            // addSchemaObject doesn't update the sys table at startup
            if (index.getIndexType().isPersistent() && !database.getReadOnly()
                    && !database.getLog().containsInDoubtTransactions()) {
                // can not save anything in the log file if it contains in-doubt transactions
                database.update(session, index);
            }
        }
        indexes.add(index);
        setModified();
        return index;
    }

    public boolean canGetRowCount() {
        return true;
    }

    private void addRowsToIndex(Session session, ObjectArray list, Index index) throws SQLException {
        final Index idx = index;
        try {
            list.sort(new Comparator() {
                public int compare(Object o1, Object o2) {
                    Row r1 = (Row) o1;
                    Row r2 = (Row) o2;
                    try {
                        return idx.compareRows(r1, r2);
                    } catch (SQLException e) {
                        throw Message.convertToInternal(e);
                    }
                }
            });
        } catch (Exception e) {
            throw Message.convert(e);
        }
        for (int i = 0; i < list.size(); i++) {
            Row row = (Row) list.get(i);
            index.add(session, row);
        }
        list.clear();
    }

    public boolean canDrop() {
        return true;
    }

    public long getRowCount(Session session) {
        if (database.isMultiVersion()) {
            return getScanIndex(session).getRowCount(session);
        }
        return rowCount;
    }

    public void removeRow(Session session, Row row) throws SQLException {
        lastModificationId = database.getNextModificationDataId();
        if (database.isMultiVersion()) {
            if (row.getDeleted()) {
                throw Message.getSQLException(ErrorCode.CONCURRENT_UPDATE_1, getName());
            }
            int old = row.getSessionId();
            int newId = session.getId();

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三| 欧美三级蜜桃2在线观看| 久久99国内精品| 日韩精品一二三| 香蕉久久夜色精品国产使用方法 | 欧美日韩高清一区二区三区| 91在线视频在线| av不卡免费在线观看| 菠萝蜜视频在线观看一区| 成人综合婷婷国产精品久久免费| 国产酒店精品激情| 国产一区二区三区四| 国产精品亚洲第一区在线暖暖韩国 | 国产91丝袜在线观看| 国产a久久麻豆| 成人高清在线视频| 92国产精品观看| 在线观看免费成人| 欧美精品v日韩精品v韩国精品v| 欧美三级日本三级少妇99| 欧美精品丝袜久久久中文字幕| 9191国产精品| 亚洲精品一区二区三区香蕉| 国产日韩av一区| 中文字幕一区二区三区蜜月 | 国产剧情在线观看一区二区| 国产**成人网毛片九色| 99久久免费精品| 欧美亚洲精品一区| 日韩美一区二区三区| 久久精品亚洲乱码伦伦中文| 亚洲欧洲精品成人久久奇米网| 亚洲精品视频在线观看免费 | 波多野结衣亚洲一区| 91亚洲精品一区二区乱码| 欧美亚男人的天堂| 欧美一区二区成人6969| 国产日韩精品一区二区三区| 亚洲黄一区二区三区| 日韩精品五月天| 国产成人自拍高清视频在线免费播放| 风间由美性色一区二区三区| 欧美中文字幕一区二区三区亚洲| 91麻豆精品国产| 国产欧美精品国产国产专区| 亚洲永久免费视频| 精品亚洲国产成人av制服丝袜| 99久久综合国产精品| 9191国产精品| 中文字幕日本乱码精品影院| 午夜a成v人精品| 国产iv一区二区三区| 精品视频一区二区三区免费| 久久久久青草大香线综合精品| 亚洲欧美日韩久久精品| 久久国产精品99久久久久久老狼 | 欧美性猛交一区二区三区精品| 欧美不卡在线视频| 亚洲免费电影在线| 国产在线日韩欧美| 欧美色中文字幕| 欧美高清一级片在线观看| 亚洲成人av免费| caoporn国产精品| 精品日韩av一区二区| 一区二区三区中文字幕在线观看| 国产一区二区三区黄视频| 91高清视频免费看| 国产人成亚洲第一网站在线播放| 亚洲高清免费观看| eeuss影院一区二区三区| 日韩精品一区二区三区在线观看| 日韩理论在线观看| 国产曰批免费观看久久久| 欧美日韩精品一区二区天天拍小说| 国产欧美一区二区三区鸳鸯浴 | 色综合天天综合狠狠| 亚洲精品一区二区三区影院| 亚洲不卡在线观看| 91丨九色porny丨蝌蚪| 久久蜜桃av一区精品变态类天堂 | 国产精品综合在线视频| 9191久久久久久久久久久| 亚洲免费观看视频| av一区二区三区| 国产网红主播福利一区二区| 裸体在线国模精品偷拍| 欧美视频在线一区| 亚洲免费在线视频一区 二区| 国产99久久精品| 久久久亚洲高清| 久久成人羞羞网站| 欧美一区二区网站| 五月激情丁香一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 亚洲国产精品成人综合| 极品美女销魂一区二区三区免费| 欧美一区二区国产| 天堂av在线一区| 欧美日韩成人一区| 亚洲h在线观看| 欧美日韩高清一区二区不卡| 亚洲国产精品一区二区久久| 欧美专区日韩专区| 亚洲成av人**亚洲成av**| 在线观看欧美精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产原创一区二区| 欧美精品一区二区三| 韩国欧美国产1区| 久久人人爽人人爽| 国产成人免费视频网站 | 亚洲乱码国产乱码精品精98午夜| 99re热视频精品| 亚洲免费观看高清完整版在线| 日本道精品一区二区三区 | 懂色av中文一区二区三区 | 久久精品国产亚洲a| 日韩欧美国产精品一区| 麻豆精品一区二区av白丝在线| 欧美大片日本大片免费观看| 黑人巨大精品欧美黑白配亚洲| 久久综合精品国产一区二区三区| 国产在线观看免费一区| 日本一区二区不卡视频| 色综合天天综合给合国产| 一区二区三区精密机械公司| 欧美日韩精品欧美日韩精品| 奇米影视在线99精品| 精品成人免费观看| 成人av电影在线| 亚洲一区二区三区在线看| 91精品婷婷国产综合久久| 狠狠色综合色综合网络| 国产精品亲子乱子伦xxxx裸| 91尤物视频在线观看| 天天综合天天综合色| 精品国产青草久久久久福利| 成人精品一区二区三区中文字幕| 亚洲女同ⅹxx女同tv| 91精品欧美综合在线观看最新| 激情综合五月婷婷| 国产精品传媒入口麻豆| 欧美日本一区二区三区四区 | 99视频在线精品| 亚洲国产人成综合网站| 欧美电影免费观看高清完整版在线 | 久久久国产一区二区三区四区小说| 风间由美一区二区三区在线观看| 夜夜嗨av一区二区三区四季av| 制服丝袜中文字幕亚洲| 粉嫩aⅴ一区二区三区四区| 亚洲一区电影777| 欧美精品一区二区三区很污很色的 | 亚洲一区二区在线免费看| 欧美mv日韩mv国产网站app| jlzzjlzz国产精品久久| 欧美96一区二区免费视频| 国产日韩欧美综合一区| 欧美日韩免费一区二区三区视频 | 欧美不卡视频一区| 一本色道久久综合亚洲aⅴ蜜桃| 免费观看久久久4p| 亚洲男同性恋视频| 精品第一国产综合精品aⅴ| 色婷婷亚洲综合| 国产在线精品国自产拍免费| 亚洲一区二区美女| 国产人妖乱国产精品人妖| 制服丝袜激情欧洲亚洲| 不卡视频一二三四| 韩国精品主播一区二区在线观看| 一区二区成人在线视频| 国产偷国产偷精品高清尤物| 欧美日韩国产高清一区二区| 成人av在线一区二区三区| 精品一区二区三区影院在线午夜| 亚洲午夜精品17c| 国产精品对白交换视频| 2欧美一区二区三区在线观看视频| 欧美婷婷六月丁香综合色| 成人开心网精品视频| 国产在线播放一区三区四| 日韩国产精品大片| 一级女性全黄久久生活片免费| 中文字幕乱码亚洲精品一区| 精品国产亚洲在线| 欧美一二三四区在线| 欧美视频精品在线| 色94色欧美sute亚洲线路一久 | 色视频欧美一区二区三区| 国产成人免费视频一区| 精品伊人久久久久7777人| 天天操天天色综合| 亚洲一区中文在线| 亚洲男人的天堂在线aⅴ视频| 国产精品日产欧美久久久久| 久久在线免费观看| 精品久久久久av影院| 欧美一级xxx|