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

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

?? baseindex.java

?? 非常棒的java數(shù)據(jù)庫
?? 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.ErrorCode;
import org.h2.engine.Constants;
import org.h2.engine.DbObject;
import org.h2.engine.Session;
import org.h2.message.Message;
import org.h2.message.Trace;
import org.h2.result.Row;
import org.h2.result.SearchRow;
import org.h2.result.SortOrder;
import org.h2.schema.SchemaObjectBase;
import org.h2.table.Column;
import org.h2.table.IndexColumn;
import org.h2.table.Table;
import org.h2.util.StringUtils;
import org.h2.value.Value;
import org.h2.value.ValueNull;

/**
 * Most index implementations extend the base index.
 */
public abstract class BaseIndex extends SchemaObjectBase implements Index {

    protected IndexColumn[] indexColumns;
    protected Column[] columns;
    protected int[] columnIds;
    protected boolean[] descending;
    protected Table table;
    protected IndexType indexType;
    protected long rowCount;

    /**
     * Close this index.
     *
     * @param session the session
     */
    public abstract void close(Session session) throws SQLException;

    /**
     * Add a row to this index.
     *
     * @param session the session
     * @param row the row to add
     */
    public abstract void add(Session session, Row row) throws SQLException;

    /**
     * Remove a row from the index.
     *
     * @param session the session
     * @param row the row
     */
    public abstract void remove(Session session, Row row) throws SQLException;

    /**
     * Create a cursor to iterate over a number of rows.
     *
     * @param session the session
     * @param first the first row to return (null if no limit)
     * @param last the last  row to return (null if no limit)
     */
    public abstract Cursor find(Session session, SearchRow first, SearchRow last) throws SQLException;

    /**
     * Calculate the cost to find rows.
     *
     * @param session the session
     * @param masks the condition mask
     */
    public abstract double getCost(Session session, int[] masks) throws SQLException;

    /**
     * Remove the index.
     *
     * @param session the session
     */
    public abstract void remove(Session session) throws SQLException;

    /**
     * Truncate the index.
     *
     * @param session the session
     */
    public abstract void truncate(Session session) throws SQLException;

    /**
     * Check if this index can quickly find the first or last value.
     *
     * @return true if it can
     */
    public abstract boolean canGetFirstOrLast();

    /**
     * Find the first (or last) value of this index.
     *
     * @param session the session
     * @param first true for the first value, false for the last
     */
    public abstract SearchRow findFirstOrLast(Session session, boolean first) throws SQLException;

    /**
     * Check if this index needs to be re-built.
     *
     * @return true if it must be re-built.
     */
    public abstract boolean needRebuild();

    public BaseIndex(Table table, int id, String name, IndexColumn[] indexColumns, IndexType indexType) {
        super(table.getSchema(), id, name, Trace.INDEX);
        this.indexType = indexType;
        this.table = table;
        if (indexColumns != null) {
            this.indexColumns = indexColumns;
            columns = new Column[indexColumns.length];
            columnIds = new int[columns.length];
            for (int i = 0; i < columns.length; i++) {
                Column col = indexColumns[i].column;
                columns[i] = col;
                columnIds[i] = col.getColumnId();
            }
        }
    }

    public String getDropSQL() {
        return null;
    }

    public SQLException getDuplicateKeyException() {
        StringBuffer buff = new StringBuffer();
        buff.append(getName());
        buff.append(" ");
        buff.append(" ON ");
        buff.append(table.getSQL());
        buff.append("(");
        buff.append(getColumnListSQL());
        buff.append(")");
        return Message.getSQLException(ErrorCode.DUPLICATE_KEY_1, buff.toString());
    }

    public String getPlanSQL() {
        return getSQL();
    }

    public void removeChildrenAndResources(Session session) throws SQLException {
        table.removeIndex(this);
        remove(session);
        database.removeMeta(session, getId());
    }

    public boolean canFindNext() {
        return false;
    }

    public Cursor findNext(Session session, SearchRow first, SearchRow last) throws SQLException {
        throw Message.getInternalError();
    }

    public long getRowCount(Session session) {
        return rowCount;
    }

    public int getLookupCost(long rowCount) {
        return 2;
    }

    public long getCostRangeIndex(int[] masks, long rowCount) throws SQLException {
        rowCount += Constants.COST_ROW_OFFSET;
        long cost = rowCount;
        long rows = rowCount;
        int totalSelectivity = 0;
        for (int i = 0; masks != null && i < columns.length; i++) {
            Column column = columns[i];
            int index = column.getColumnId();
            int mask = masks[index];
            if ((mask & IndexCondition.EQUALITY) == IndexCondition.EQUALITY) {
                if (i == columns.length - 1 && getIndexType().isUnique()) {
                    cost = getLookupCost(rowCount) + 1;
                    break;
                }
                totalSelectivity = 100 - ((100 - totalSelectivity) * (100 - column.getSelectivity()) / 100);
                long distinctRows = rowCount * totalSelectivity / 100;
                if (distinctRows <= 0) {
                    distinctRows = 1;
                }
                rows = Math.max(rowCount / distinctRows, 1);
                cost = getLookupCost(rowCount) + rows;
            } else if ((mask & IndexCondition.RANGE) == IndexCondition.RANGE) {
                cost = getLookupCost(rowCount) + rows / 4;
                break;
            } else if ((mask & IndexCondition.START) == IndexCondition.START) {
                cost = getLookupCost(rowCount) + rows / 3;
                break;
            } else if ((mask & IndexCondition.END) == IndexCondition.END) {
                cost = rows / 3;
                break;
            } else {
                break;
            }
        }
        return cost;
    }

    public int compareRows(SearchRow rowData, SearchRow compare) throws SQLException {
        for (int i = 0; i < indexColumns.length; i++) {
            int index = columnIds[i];
            Value v = compare.getValue(index);
            if (v == null) {
                // can't compare further
                return 0;
            }
            int c = compareValues(rowData.getValue(index), v, indexColumns[i].sortType);
            if (c != 0) {
                return c;
            }
        }
        return 0;
    }

    public boolean isNull(Row newRow) {
        for (int i = 0; i < columns.length; i++) {
            int index = columnIds[i];
            Value v = newRow.getValue(index);
            if (v == ValueNull.INSTANCE) {
                return true;
            }
        }
        return false;
    }

    public int compareKeys(SearchRow rowData, SearchRow compare) {
        int k1 = rowData.getPos();
        int k2 = compare.getPos();
        if (k1 == k2) {
            return 0;
        }
        return k1 > k2 ? 1 : -1;
    }

    private int compareValues(Value a, Value b, int sortType) throws SQLException {
        boolean aNull = a == null, bNull = b == null;
        if (aNull || bNull) {
            if (aNull == bNull) {
                return 0;
            }
            return SortOrder.compareNull(aNull, bNull, sortType);
        }
        int comp = database.compareTypeSave(a, b);
        if ((sortType & SortOrder.DESCENDING) != 0) {
            comp = -comp;
        }
        return comp;
    }

    public int getColumnIndex(Column col) {
        for (int i = 0; i < columns.length; i++) {
            if (columns[i] == col) {
                return i;
            }
        }
        return -1;
    }

    public String getColumnListSQL() {
        StringBuffer buff = new StringBuffer();
        for (int i = 0; i < indexColumns.length; i++) {
            if (i > 0) {
                buff.append(", ");
            }
            buff.append(indexColumns[i].getSQL());
        }
        return buff.toString();
    }

    public String getCreateSQLForCopy(Table table, String quotedName) {
        StringBuffer buff = new StringBuffer();
        buff.append("CREATE ");
        buff.append(indexType.getSQL());
        if (!indexType.isPrimaryKey()) {
            buff.append(' ');
            buff.append(quotedName);
        }
        buff.append(" ON ");
        buff.append(table.getSQL());
        if (comment != null) {
            buff.append(" COMMENT ");
            buff.append(StringUtils.quoteStringSQL(comment));
        }
        buff.append("(");
        buff.append(getColumnListSQL());
        buff.append(")");
        return buff.toString();
    }

    public String getCreateSQL() {
        return getCreateSQLForCopy(table, getSQL());
    }

    public IndexColumn[] getIndexColumns() {
        return indexColumns;
    }

    public Column[] getColumns() {
        return columns;
    }

    public IndexType getIndexType() {
        return indexType;
    }

    public int getType() {
        return DbObject.INDEX;
    }

    public Table getTable() {
        return table;
    }

    public void commit(int operation, Row row) throws SQLException {
    }

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡在线一区| 久久国产综合精品| 99免费精品在线| 国产精品三级视频| av激情综合网| 亚洲电影你懂得| 91精品国产综合久久香蕉的特点| 日韩中文字幕区一区有砖一区| 在线电影院国产精品| 久久精品免费观看| 亚洲国产精品v| 色哟哟欧美精品| 视频一区国产视频| 久久蜜桃香蕉精品一区二区三区| 成人午夜免费视频| 一区二区三区欧美视频| 4438x成人网最大色成网站| 久久精品国产亚洲a| 中日韩免费视频中文字幕| 色菇凉天天综合网| 久久精品国产澳门| 成人免费在线播放视频| 欧美日韩在线播放一区| 国内精品伊人久久久久av影院 | 91麻豆精品国产91久久久久 | 一本色道久久综合狠狠躁的推荐| 一区二区激情小说| 91精品国产乱码| 国产成人精品影视| 亚洲成va人在线观看| 久久久亚洲午夜电影| 在线观看日韩精品| 国产一区二区在线影院| 伊人性伊人情综合网| 久久综合九色综合欧美98| 91小视频免费看| 久久99精品国产.久久久久 | 亚洲一区在线观看免费| 26uuu国产在线精品一区二区| 日本久久电影网| 国产成人一区二区精品非洲| 亚洲免费观看高清| 国产欧美一区二区精品性色超碰| 欧美日韩国产一级| 99久久婷婷国产综合精品| 久久精品99久久久| 亚洲超碰精品一区二区| 国产精品理论片在线观看| 日韩精品一区二区三区蜜臀| 色综合久久久久综合99| 国产成人一区在线| 国模少妇一区二区三区| 日精品一区二区| 亚洲一区中文日韩| 亚洲免费高清视频在线| 国产精品视频免费看| 久久亚洲一级片| 欧美一区二区三区播放老司机 | 欧美日韩国产系列| 99这里都是精品| 国产一区二区女| 麻豆91在线看| 免费成人在线观看| 日韩中文字幕不卡| 亚洲午夜羞羞片| 亚洲免费色视频| 亚洲另类春色国产| 自拍av一区二区三区| 国产精品女同一区二区三区| 久久免费国产精品| 国产欧美一区二区精品性色| 久久亚洲二区三区| 久久久99精品久久| 久久精品夜色噜噜亚洲aⅴ| 久久综合九色综合97婷婷女人| 欧美xxxxxxxxx| 精品国产91洋老外米糕| 精品久久久久久久一区二区蜜臀| 精品日本一线二线三线不卡| 欧美一区二区免费观在线| 欧美一区二区三区性视频| 欧美一区二区三区免费观看视频 | 狠狠久久亚洲欧美| 国产一二精品视频| 国产91对白在线观看九色| 大美女一区二区三区| 成人网页在线观看| 91视视频在线直接观看在线看网页在线看| bt7086福利一区国产| 一本久久a久久精品亚洲| 欧美亚洲综合色| 宅男在线国产精品| 精品sm在线观看| 国产精品久久久久久久第一福利 | 国产日韩精品一区二区三区| 国产日韩在线不卡| 中文字幕在线观看不卡| 亚洲主播在线观看| 日本成人在线看| 国产在线一区二区综合免费视频| 处破女av一区二区| 色噜噜狠狠色综合欧洲selulu| 欧美日韩中文字幕一区| 日韩欧美成人激情| 国产精品网站导航| 亚洲高清免费视频| 国产在线日韩欧美| 色狠狠一区二区三区香蕉| 91精品国产欧美一区二区成人| 久久久久久久性| 亚洲精品成人精品456| 蜜臀av一区二区在线免费观看| 国产不卡在线播放| 欧美日韩精品欧美日韩精品一 | 欧美日韩在线直播| 亚洲精品在线免费播放| 亚洲欧美日韩中文播放| 日韩电影在线一区二区三区| 国产v综合v亚洲欧| 日本久久一区二区| 欧美大片顶级少妇| 一区二区三区精密机械公司| 另类人妖一区二区av| 91一区二区三区在线播放| 欧美一二区视频| 亚洲色图丝袜美腿| 国产制服丝袜一区| 欧美日韩精品专区| 国产精品久久久久久久久晋中| 秋霞av亚洲一区二区三| 色婷婷国产精品| 久久先锋资源网| 亚洲国产精品一区二区久久恐怖片 | 美女视频黄 久久| 972aa.com艺术欧美| 26uuu亚洲综合色欧美| 午夜伊人狠狠久久| 99精品视频在线免费观看| 精品伦理精品一区| 性久久久久久久| 在线精品视频一区二区| 国产日产欧产精品推荐色| 天天操天天干天天综合网| 97久久超碰精品国产| 国产色一区二区| 极品少妇xxxx精品少妇偷拍| 9191国产精品| 亚洲二区在线观看| 欧美伊人久久大香线蕉综合69| 中文字幕乱码久久午夜不卡 | 国产精品1024| 欧美男男青年gay1069videost| 中文字幕佐山爱一区二区免费| 国产伦精品一区二区三区免费迷| 51精品视频一区二区三区| 一区二区三区加勒比av| 91在线视频在线| 国产精品久久一卡二卡| 成人黄色在线看| 欧美国产1区2区| 成人午夜免费av| 中文字幕精品一区二区精品绿巨人| 国产一区在线看| 久久综合色婷婷| 国产精品影音先锋| 久久久久久久久久久久久夜| 国产一区二区在线观看免费 | 国产成人午夜高潮毛片| 亚洲精品一区在线观看| 国模冰冰炮一区二区| 久久久久99精品一区| 国产成人午夜视频| 国产精品久久久久精k8 | 久久综合国产精品| 国产一区 二区 三区一级| 2017欧美狠狠色| 国产盗摄精品一区二区三区在线| 国产欧美日韩综合| av电影在线观看一区| 日韩一区日韩二区| 日本国产一区二区| 香蕉久久一区二区不卡无毒影院| 在线成人高清不卡| 狠狠狠色丁香婷婷综合久久五月| 日本一区二区三区四区| 91网页版在线| 偷拍亚洲欧洲综合| 久久综合一区二区| av中文字幕不卡| 亚洲丶国产丶欧美一区二区三区| 欧美精品三级日韩久久| 精品一区二区久久久| 欧美激情一区二区在线| 一道本成人在线| 男人的j进女人的j一区| 欧美国产国产综合| 欧美探花视频资源| 国产一区二区不卡老阿姨| 国产精品久久久久久久久快鸭| 欧美色手机在线观看|