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

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

?? comparison.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.expression;

import java.sql.SQLException;

import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
import org.h2.engine.Database;
import org.h2.engine.Session;
import org.h2.index.IndexCondition;
import org.h2.message.Message;
import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter;
import org.h2.value.Value;
import org.h2.value.ValueBoolean;
import org.h2.value.ValueNull;

/**
 * Example comparison expressions are ID=1, NAME=NAME, NAME IS NULL.
 */
public class Comparison extends Condition {

    public static final int EQUAL = 0, BIGGER_EQUAL = 1, BIGGER = 2, SMALLER_EQUAL = 3, SMALLER = 4, NOT_EQUAL = 5,
            IS_NULL = 6, IS_NOT_NULL = 7;

    // TODO refactor: comparison: a comparison is never 'false'; the constant is
    // used only for index conditions

    public static final int FALSE = 8;

    private final Database database;
    private final int compareType;
    private Expression left;
    private Expression right;
    private int dataType = -2;

    public Comparison(Session session, int compareType, Expression left, Expression right) {
        this.database = session.getDatabase();
        this.left = left;
        this.right = right;
        this.compareType = compareType;
    }

    public String getSQL() {
        String sql;
        switch (compareType) {
        case EQUAL:
            sql = left.getSQL() + " = " + right.getSQL();
            break;
        case BIGGER_EQUAL:
            sql = left.getSQL() + " >= " + right.getSQL();
            break;
        case BIGGER:
            sql = left.getSQL() + " > " + right.getSQL();
            break;
        case SMALLER_EQUAL:
            sql = left.getSQL() + " <= " + right.getSQL();
            break;
        case SMALLER:
            sql = left.getSQL() + " < " + right.getSQL();
            break;
        case NOT_EQUAL:
            sql = left.getSQL() + " <> " + right.getSQL();
            break;
        case IS_NULL:
            sql = left.getSQL() + " IS NULL";
            break;
        case IS_NOT_NULL:
            sql = left.getSQL() + " IS NOT NULL";
            break;
        default:
            throw Message.getInternalError("compareType=" + compareType);
        }
        return "(" + sql + ")";
    }

    private Expression getCast(Expression expr, int dataType, long precision, int scale, int displaySize, Session session)
            throws SQLException {
        if (expr == ValueExpression.NULL) {
            return expr;
        }
        Function function = Function.getFunction(session.getDatabase(), "CAST");
        function.setParameter(0, expr);
        function.setDataType(dataType, precision, scale, displaySize);
        function.doneWithParameters();
        return function.optimize(session);
    }

    public Expression optimize(Session session) throws SQLException {
        left = left.optimize(session);
        if (right == null) {
            dataType = left.getType();
        } else {
            right = right.optimize(session);
            try {
                if (left instanceof ExpressionColumn && right.isConstant()) {
                    right = getCast(right, left.getType(), left.getPrecision(), left.getScale(), left.getDisplaySize(), session);
                } else if (right instanceof ExpressionColumn && left.isConstant()) {
                    left = getCast(left, right.getType(), right.getPrecision(), right.getScale(), right.getDisplaySize(), session);
                }
            } catch (SQLException e) {
                int code = e.getErrorCode();
                switch(code) {
                case ErrorCode.NUMERIC_VALUE_OUT_OF_RANGE:
                    // WHERE ID=100000000000
                    return ValueExpression.get(ValueBoolean.get(false));
                default:
                    throw e;
                }
            }
            int lt = left.getType(), rt = right.getType();
            if (lt == rt) {
                if (lt == Value.UNKNOWN) {
                    throw Message.getSQLException(ErrorCode.UNKNOWN_DATA_TYPE_1, getSQL());
                }
                dataType = lt;
            } else {
                dataType = Value.getHigherOrder(left.getType(), right.getType());
                long precision = Math.max(left.getPrecision(), right.getPrecision());
                int scale = Math.max(left.getScale(), right.getScale());
                int displaySize = Math.max(left.getDisplaySize(), right.getDisplaySize());
                if (dataType != lt) {
                    left = getCast(left, dataType, precision, scale, displaySize, session);
                }
                if (dataType != rt) {
                    right = getCast(right, dataType, precision, scale, displaySize, session);
                }
            }
        }
        if (compareType == IS_NULL || compareType == IS_NOT_NULL) {
            if (left.isConstant()) {
                return ValueExpression.get(getValue(session));
            }
        } else {
            if (SysProperties.CHECK && (left == null || right == null)) {
                throw Message.getInternalError();
            }
            if (left == ValueExpression.NULL || right == ValueExpression.NULL) {
                // TODO NULL handling: maybe issue a warning when comparing with
                // a NULL constants
                return ValueExpression.NULL;
            }
            if (left.isConstant() && right.isConstant()) {
                return ValueExpression.get(getValue(session));
            }
        }
        return this;
    }

    public Value getValue(Session session) throws SQLException {
        Value l = left.getValue(session);
        if (right == null) {
            boolean result;
            switch (compareType) {
            case IS_NULL:
                result = l == ValueNull.INSTANCE;
                break;
            case IS_NOT_NULL:
                result = !(l == ValueNull.INSTANCE);
                break;
            default:
                throw Message.getInternalError("type=" + compareType);
            }
            return ValueBoolean.get(result);
        }
        l = l.convertTo(dataType);
        Value r = right.getValue(session).convertTo(dataType);
        if (l == ValueNull.INSTANCE || r == ValueNull.INSTANCE) {
            return ValueNull.INSTANCE;
        }
        boolean result = compareNotNull(database, l, r, compareType);
        return ValueBoolean.get(result);
    }

    static boolean compareNotNull(Database database, Value l, Value r, int compareType) throws SQLException {
        boolean result;
        switch (compareType) {
        case EQUAL:
            result = database.areEqual(l, r);
            break;
        case NOT_EQUAL:
            result = !database.areEqual(l, r);
            break;
        case BIGGER_EQUAL:
            result = database.compare(l, r) >= 0;
            break;
        case BIGGER:
            result = database.compare(l, r) > 0;
            break;
        case SMALLER_EQUAL:
            result = database.compare(l, r) <= 0;
            break;
        case SMALLER:
            result = database.compare(l, r) < 0;
            break;
        default:
            throw Message.getInternalError("type=" + compareType);
        }
        return result;
    }

    private int getReversedCompareType(int type) {
        switch (compareType) {
        case EQUAL:
        case NOT_EQUAL:
            return type;
        case BIGGER_EQUAL:
            return SMALLER_EQUAL;
        case BIGGER:
            return SMALLER;
        case SMALLER_EQUAL:
            return BIGGER_EQUAL;
        case SMALLER:
            return BIGGER;
        default:
            throw Message.getInternalError("type=" + compareType);
        }
    }

    private int getNotCompareType(int type) {
        switch (compareType) {
        case EQUAL:
            return NOT_EQUAL;
        case NOT_EQUAL:
            return EQUAL;
        case BIGGER_EQUAL:
            return SMALLER;
        case BIGGER:
            return SMALLER_EQUAL;
        case SMALLER_EQUAL:
            return BIGGER;
        case SMALLER:
            return BIGGER_EQUAL;
        case IS_NULL:
            return IS_NOT_NULL;
        case IS_NOT_NULL:
            return IS_NULL;
        default:
            throw Message.getInternalError("type=" + compareType);
        }
    }

    public Expression getNotIfPossible(Session session) {
        int type = getNotCompareType(compareType);
        return new Comparison(session, type, left, right);
    }

    public void createIndexConditions(Session session, TableFilter filter) {
        if (right == null) {
            // TODO index usage: IS [NOT] NULL index usage is possible
            return;
        }
        ExpressionColumn l = null;
        if (left instanceof ExpressionColumn) {
            l = (ExpressionColumn) left;
            if (filter != l.getTableFilter()) {
                l = null;
            }
        }
        ExpressionColumn r = null;
        if (right instanceof ExpressionColumn) {
            r = (ExpressionColumn) right;
            if (filter != r.getTableFilter()) {
                r = null;
            }
        }
        // one side must be from the current filter
        if (l == null && r == null) {
            return;
        }
        if (l != null && r != null) {
            return;
        }
        if (l == null) {
            if (!left.isEverything(ExpressionVisitor.getNotFromResolver(filter))) {
                return;
            }
        } else if (r == null) {
            if (!right.isEverything(ExpressionVisitor.getNotFromResolver(filter))) {
                return;
            }
        } else {
            // if both sides are part of the same filter, it can't be used for
            // index lookup
            return;
        }
        boolean addIndex;
        switch (compareType) {
        case NOT_EQUAL:
            addIndex = false;
            break;
        case EQUAL:
        case BIGGER:
        case BIGGER_EQUAL:
        case SMALLER_EQUAL:
        case SMALLER:
            addIndex = true;
            break;
        default:
            throw Message.getInternalError("type=" + compareType);
        }
        if (addIndex) {
            if (l != null) {
                filter.addIndexCondition(new IndexCondition(compareType, l, right));
            } else if (r != null) {
                int compareRev = getReversedCompareType(compareType);
                filter.addIndexCondition(new IndexCondition(compareRev, r, left));
            }
        }
        return;
    }

    public void setEvaluatable(TableFilter tableFilter, boolean b) {
        left.setEvaluatable(tableFilter, b);
        if (right != null) {
            right.setEvaluatable(tableFilter, b);
        }
    }

    public void updateAggregate(Session session) throws SQLException {
        left.updateAggregate(session);
        if (right != null) {
            right.updateAggregate(session);
        }
    }

    public void addFilterConditions(TableFilter filter, boolean outerJoin) {
        if (compareType == IS_NULL && outerJoin) {
            // can not optimize:
            // select * from test t1 left join test t2 on t1.id = t2.id where t2.id is null
            // to
            // select * from test t1 left join test t2 on t1.id = t2.id and t2.id is null
            return;
        }
        super.addFilterConditions(filter, outerJoin);
    }

    public void mapColumns(ColumnResolver resolver, int level) throws SQLException {
        left.mapColumns(resolver, level);
        if (right != null) {
            right.mapColumns(resolver, level);
        }
    }

    public boolean isEverything(ExpressionVisitor visitor) {
        return left.isEverything(visitor) && (right == null || right.isEverything(visitor));
    }

    public int getCost() {
        return left.getCost() + (right == null ? 0 : right.getCost()) + 1;
    }

    public Comparison getAdditional(Session session, Comparison other) {
        if (compareType == other.compareType && compareType == EQUAL) {
            boolean lc = left.isConstant(), rc = right.isConstant();
            boolean l2c = other.left.isConstant(), r2c = other.right.isConstant();
            String l = left.getSQL();
            String l2 = other.left.getSQL();
            String r = right.getSQL();
            String r2 = other.right.getSQL();
            // must not compare constants. example: NOT(B=2 AND B=3)
            if (!(rc && r2c) && l.equals(l2)) {
                return new Comparison(session, EQUAL, right, other.right);
            } else if (!(rc && l2c) && l.equals(r2)) {
                return new Comparison(session, EQUAL, right, other.left);
            } else if (!(lc && r2c) && r.equals(l2)) {
                return new Comparison(session, EQUAL, left, other.right);
            } else if (!(lc && l2c) && r.equals(r2)) {
                return new Comparison(session, EQUAL, left, other.left);
            }
        }
        return null;
    }

    public Expression getExpression(boolean left) {
        return left ? this.left : right;
    }

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜激情一区二区| 国产麻豆一精品一av一免费 | 在线免费观看不卡av| 美女脱光内衣内裤视频久久影院| 国产精品视频一区二区三区不卡| 欧美日韩一级视频| 成年人午夜久久久| 紧缚奴在线一区二区三区| 一区二区三区91| 国产精品国产精品国产专区不蜜 | 欧美精品久久久久久久久老牛影院| 粉嫩aⅴ一区二区三区四区五区 | 国产亚洲一二三区| 日韩一区二区视频| 欧美专区日韩专区| av不卡在线播放| 国产suv精品一区二区三区| 免费欧美在线视频| 水蜜桃久久夜色精品一区的特点| 亚洲视频精选在线| 中文字幕免费不卡| 337p日本欧洲亚洲大胆色噜噜| 5月丁香婷婷综合| 欧美亚洲高清一区| 91色porny在线视频| av中文一区二区三区| 国产麻豆午夜三级精品| 久久国产剧场电影| 青青草国产精品97视觉盛宴| 日韩二区在线观看| 亚洲蜜臀av乱码久久精品 | 日韩视频一区二区在线观看| 欧美午夜电影一区| 91精品91久久久中77777| 菠萝蜜视频在线观看一区| 国产二区国产一区在线观看| 精品亚洲欧美一区| 麻豆精品一区二区av白丝在线| 日韩精品一区第一页| 日韩激情中文字幕| 天天免费综合色| 午夜精品久久久久久| 亚洲www啪成人一区二区麻豆| 午夜视频一区在线观看| 天堂蜜桃91精品| 免费美女久久99| 蜜臀久久99精品久久久画质超高清| 日本亚洲电影天堂| 美女免费视频一区| 精品中文字幕一区二区| 国内成+人亚洲+欧美+综合在线| 精品一区二区免费看| 精品在线免费视频| 国产馆精品极品| 99精品在线免费| 在线观看欧美精品| 3atv一区二区三区| 精品国产乱码久久久久久久| 国产视频一区二区三区在线观看| 国产精品污污网站在线观看| 亚洲免费av高清| 天天综合色天天综合| 久久国产精品一区二区| 东方aⅴ免费观看久久av| 91看片淫黄大片一级| 欧美日韩国产乱码电影| 日韩一区二区在线观看| 国产日韩三级在线| 一区二区三区不卡视频在线观看 | 男男成人高潮片免费网站| 激情文学综合丁香| 99综合影院在线| 欧美日韩亚洲丝袜制服| 久久综合999| 亚洲色图都市小说| 美女www一区二区| 成人福利视频网站| 欧美乱妇15p| 国产亚洲制服色| 亚洲大片在线观看| 国产精品亚洲人在线观看| 色综合久久99| 精品日韩欧美一区二区| 亚洲图片欧美激情| 美女一区二区视频| 97久久久精品综合88久久| 欧美一区二区久久| 最近中文字幕一区二区三区| 日本成人中文字幕| 99re这里都是精品| 精品成人免费观看| 亚洲综合小说图片| 国产盗摄女厕一区二区三区| 欧美三电影在线| 国产精品第四页| 久久精品国产一区二区三区免费看| 91伊人久久大香线蕉| 精品久久99ma| 亚洲国产一区二区三区| 成人激情免费视频| 欧美大片日本大片免费观看| 亚洲综合激情小说| 丁香婷婷深情五月亚洲| 日韩欧美电影一二三| 亚洲一区二区3| 成人黄色电影在线 | 精品亚洲国产成人av制服丝袜| 91视频91自| 国产精品全国免费观看高清 | 1区2区3区欧美| 国产中文字幕精品| 91.xcao| 一级中文字幕一区二区| av电影在线观看完整版一区二区| 久久综合久久综合久久综合| 日韩电影一区二区三区四区| 欧美午夜电影在线播放| 亚洲视频资源在线| 懂色av一区二区夜夜嗨| 久久新电视剧免费观看| 奇米色一区二区| 欧美一区二区三区性视频| 一区二区久久久| 一本色道久久综合亚洲精品按摩| 国产精品嫩草影院com| 国产精品夜夜嗨| 久久久另类综合| 国产在线一区观看| 久久久国产精品麻豆| 国产精品一区二区91| 久久日一线二线三线suv| 久久精品国产999大香线蕉| 欧美一级视频精品观看| 日韩av一区二区在线影视| 欧美日韩高清不卡| 日日夜夜免费精品视频| 91精品国产手机| 蜜臀av一区二区在线观看| 欧美tk丨vk视频| 国产一区二区免费视频| 久久伊人中文字幕| 国产精品资源网| 中文字幕不卡在线观看| 成人免费毛片app| 亚洲欧美一区二区视频| 91免费观看视频| 一区二区三区四区激情| 欧美日本乱大交xxxxx| 日本色综合中文字幕| 日韩欧美国产一二三区| 国产一区二区三区| 国产精品国产馆在线真实露脸| voyeur盗摄精品| 亚洲一区在线视频| 7777精品伊人久久久大香线蕉超级流畅| 午夜亚洲福利老司机| 日韩一区二区在线看片| 国产精品一区免费视频| 中文字幕亚洲综合久久菠萝蜜| 在线观看欧美日本| 免费观看成人鲁鲁鲁鲁鲁视频| 久久久久九九视频| 99免费精品视频| 丝袜a∨在线一区二区三区不卡| 日韩欧美高清一区| 不卡免费追剧大全电视剧网站| 亚洲精品视频在线看| 欧美一区二区视频在线观看| 国产成人午夜精品影院观看视频 | 日本怡春院一区二区| 国产精品国产馆在线真实露脸 | 日本韩国欧美国产| 蜜臀精品一区二区三区在线观看| 国产欧美精品一区二区三区四区 | 精品中文字幕一区二区小辣椒| 国产精品色哟哟网站| 欧美日韩国产在线播放网站| 国产又黄又大久久| 亚洲少妇中出一区| 日韩一区二区三区观看| 99久久伊人精品| 麻豆成人av在线| 亚洲精品国产成人久久av盗摄| 日韩欧美一二三四区| 97久久精品人人爽人人爽蜜臀| 奇米精品一区二区三区四区| 国产精品高潮久久久久无| 欧美一级精品在线| 99久久国产综合精品色伊| 老司机一区二区| 一区二区三区成人在线视频| 国产亚洲精品7777| 欧美三级在线播放| 波多野结衣91| 久久精品国产免费看久久精品| 亚洲精品美腿丝袜| 国产午夜一区二区三区| 7799精品视频| 91久久线看在观草草青青| 国产精品中文欧美|