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

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

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

import java.sql.SQLException;

import org.h2.engine.Mode;
import org.h2.engine.Session;
import org.h2.message.Message;
import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter;
import org.h2.util.MathUtils;
import org.h2.value.Value;
import org.h2.value.ValueNull;
import org.h2.value.ValueString;

/**
 * A mathematical expression, or string concatenation.
 */
public class Operation extends Expression {
    public static final int CONCAT = 0, PLUS = 1, MINUS = 2, MULTIPLY = 3, DIVIDE = 4, NEGATE = 5;
    private int opType;
    private Expression left, right;
    private int dataType;

    public Operation(int opType, Expression left, Expression right) {
        this.opType = opType;
        this.left = left;
        this.right = right;
    }

    public String getSQL() {
        String sql;
        switch (opType) {
        case NEGATE:
            // don't remove the space, otherwise it might end up some thing line
            // --1 which is a remark
            // TODO need to () everything correctly, but avoiding double (())
            sql = "- " + left.getSQL();
            break;
        case CONCAT:
            sql = left.getSQL() + " || " + right.getSQL();
            break;
        case PLUS:
            sql = left.getSQL() + " + " + right.getSQL();
            break;
        case MINUS:
            sql = left.getSQL() + " - " + right.getSQL();
            break;
        case MULTIPLY:
            sql = left.getSQL() + " * " + right.getSQL();
            break;
        case DIVIDE:
            sql = left.getSQL() + " / " + right.getSQL();
            break;
        default:
            throw Message.getInternalError("opType=" + opType);
        }
        return "(" + sql + ")";
    }

    public Value getValue(Session session) throws SQLException {
        Value l = left.getValue(session).convertTo(dataType);
        Value r = right == null ? null : right.getValue(session).convertTo(dataType);

        switch (opType) {
        case NEGATE:
            return l == ValueNull.INSTANCE ? l : l.negate();
        case CONCAT: {
            Mode mode = session.getDatabase().getMode();
            if (l == ValueNull.INSTANCE) {
                if (mode.nullConcatIsNull) {
                    return ValueNull.INSTANCE;
                } else {
                    return r;
                }
            } else if (r == ValueNull.INSTANCE) {
                if (mode.nullConcatIsNull) {
                    return ValueNull.INSTANCE;
                } else {
                    return l;
                }
            }
            String s1 = l.getString(), s2 = r.getString();
            StringBuffer buff = new StringBuffer(s1.length() + s2.length());
            buff.append(s1);
            buff.append(s2);
            return ValueString.get(buff.toString());
        }
        case PLUS:
            if (l == ValueNull.INSTANCE || r == ValueNull.INSTANCE) {
                return ValueNull.INSTANCE;
            }
            return l.add(r);
        case MINUS:
            if (l == ValueNull.INSTANCE || r == ValueNull.INSTANCE) {
                return ValueNull.INSTANCE;
            }
            return l.subtract(r);
        case MULTIPLY:
            if (l == ValueNull.INSTANCE || r == ValueNull.INSTANCE) {
                return ValueNull.INSTANCE;
            }
            return l.multiply(r);
        case DIVIDE:
            if (l == ValueNull.INSTANCE || r == ValueNull.INSTANCE) {
                return ValueNull.INSTANCE;
            }
            return l.divide(r);
        default:
            throw Message.getInternalError("type=" + opType);
        }
    }

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

    public Expression optimize(Session session) throws SQLException {
        left = left.optimize(session);
        switch (opType) {
        case NEGATE:
            dataType = left.getType();
            if (dataType == Value.UNKNOWN) {
                dataType = Value.DECIMAL;
            }
            break;
        case CONCAT:
            right = right.optimize(session);
            dataType = Value.STRING;
            if (left.isConstant() && right.isConstant()) {
                return ValueExpression.get(getValue(session));
            }
            break;
        case PLUS:
        case MINUS:
        case MULTIPLY:
        case DIVIDE:
            right = right.optimize(session);
            int l = left.getType();
            int r = right.getType();
            if ((l == Value.NULL && r == Value.NULL) || (l == Value.UNKNOWN && r == Value.UNKNOWN)) {
                // example: (? + ?) - the most safe data type is probably
                // decimal
                dataType = Value.DECIMAL;
            } else if (l == Value.DATE || l == Value.TIMESTAMP) {
                if (r == Value.INT && (opType == PLUS || opType == MINUS)) {
                    // Oracle date add
                    Function f = Function.getFunction(session.getDatabase(), "DATEADD");
                    f.setParameter(0, ValueExpression.get(ValueString.get("DAY")));
                    if (opType == MINUS) {
                        right = new Operation(NEGATE, right, null);
                        right = right.optimize(session);
                    }
                    f.setParameter(1, right);
                    f.setParameter(2, left);
                    f.doneWithParameters();
                    return f.optimize(session);
                } else if (opType == MINUS && (l == Value.DATE || l == Value.TIMESTAMP)) {
                    // Oracle date subtract
                    Function f = Function.getFunction(session.getDatabase(), "DATEDIFF");
                    f.setParameter(0, ValueExpression.get(ValueString.get("DAY")));
                    f.setParameter(1, right);
                    f.setParameter(2, left);
                    f.doneWithParameters();
                    return f.optimize(session);
                }
            } else {
                dataType = Value.getHigherOrder(l, r);
            }
            break;
        default:
            throw Message.getInternalError("type=" + opType);
        }
        if (left.isConstant() && (right == null || right.isConstant())) {
            return ValueExpression.get(getValue(session));
        }
        return this;
    }

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

    public int getType() {
        return dataType;
    }

    public long getPrecision() {
        if (right != null) {
            switch (opType) {
                case CONCAT:
                    return left.getPrecision() + right.getPrecision();
                default:
                    return Math.max(left.getPrecision(), right.getPrecision());
            }
        }
        return left.getPrecision();
    }

    public int getDisplaySize() {
        if (right != null) {
            switch (opType) {
                case CONCAT:
                    return MathUtils.convertLongToInt((long) left.getDisplaySize() + (long) right.getDisplaySize());
                default:
                    return Math.max(left.getDisplaySize(), right.getDisplaySize());
            }
        }
        return left.getDisplaySize();
    }

    public int getScale() {
        if (right != null) {
            return Math.max(left.getScale(), right.getScale());
        }
        return left.getScale();
    }

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

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

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

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费毛片高清视频| 成人美女在线观看| 欧美国产日韩亚洲一区| 欧美又粗又大又爽| 国产一区二区在线观看视频| 亚洲大片免费看| 国产精品久久久久久久久搜平片| 日韩色在线观看| 色猫猫国产区一区二在线视频| 国产精品资源在线观看| 首页欧美精品中文字幕| 樱桃视频在线观看一区| 国产精品麻豆视频| 久久新电视剧免费观看| 欧美精品tushy高清| 一本高清dvd不卡在线观看| 国产精品性做久久久久久| 蜜臀av一区二区| 午夜精品成人在线视频| 伊人婷婷欧美激情| 中文字幕在线观看不卡视频| 久久久久久久综合狠狠综合| 欧美一区二区福利在线| 欧美人体做爰大胆视频| 在线视频你懂得一区二区三区| 成人aa视频在线观看| 国产美女在线精品| 精品一二三四区| 久久狠狠亚洲综合| 蜜桃传媒麻豆第一区在线观看| 亚洲午夜私人影院| 亚洲精品日韩一| 亚洲婷婷在线视频| 国产精品电影一区二区三区| 国产亚洲欧洲997久久综合 | 国产精品中文字幕日韩精品 | 色吊一区二区三区| 色综合久久久久网| 一本色道久久综合亚洲aⅴ蜜桃 | 国产69精品一区二区亚洲孕妇| 国产一区二区三区高清播放| 国产剧情一区在线| 国产成人亚洲综合a∨猫咪| 国产乱人伦偷精品视频免下载 | 亚洲一区二区三区四区在线免费观看 | 欧美无人高清视频在线观看| 91国产丝袜在线播放| 欧美在线短视频| 欧美人体做爰大胆视频| 欧美二区在线观看| 欧美一卡2卡三卡4卡5免费| 日韩精品一区二区三区在线观看| 精品久久久久久久久久久久包黑料| 日韩欧美国产精品一区| 亚洲精品一线二线三线| 国产欧美一区二区三区在线看蜜臀 | 亚洲一区二区三区在线| 日韩制服丝袜先锋影音| 看国产成人h片视频| 国产在线视频精品一区| 国产99久久久国产精品潘金网站| 99久久免费视频.com| 欧美专区亚洲专区| 日韩亚洲欧美在线| 欧美精品一区二区在线观看| 日本大胆欧美人术艺术动态| 日本美女一区二区三区| 久久国产精品99精品国产| 国产美女精品一区二区三区| 成人免费视频视频| 91国产免费看| 欧美xxxxxxxx| 1024国产精品| 欧美96一区二区免费视频| 国产成人综合在线| 欧美午夜理伦三级在线观看| 精品久久久久久久久久久久久久久 | 全国精品久久少妇| 国产成人综合在线观看| 91国偷自产一区二区三区观看| 日韩一级成人av| 中文字幕一区二区在线观看| 五月婷婷另类国产| 丁香啪啪综合成人亚洲小说 | 国产精品天干天干在线综合| 一区二区三区成人在线视频| 国内外成人在线| 91久久国产最好的精华液| 欧美哺乳videos| 一区二区三区精品| 国产麻豆视频精品| 欧美日韩国产精品成人| 欧美激情中文字幕一区二区| 日韩精品色哟哟| 91在线小视频| 久久久久久亚洲综合| 午夜视黄欧洲亚洲| 97se狠狠狠综合亚洲狠狠| 精品国产三级电影在线观看| 亚洲综合免费观看高清在线观看| 国产成人精品综合在线观看 | 久久不见久久见中文字幕免费| 99re这里只有精品6| 日韩精品一区二区三区中文精品| 一区二区在线观看视频| 国产精品亚洲第一区在线暖暖韩国| 欧美精品九九99久久| 日本在线不卡视频一二三区| 色老汉一区二区三区| 欧美国产综合色视频| 精品在线一区二区三区| 欧美日韩国产综合草草| 亚洲精品久久久蜜桃| 岛国一区二区三区| 精品国产成人在线影院 | 国产.精品.日韩.另类.中文.在线.播放| 欧美系列亚洲系列| 18欧美亚洲精品| 国产成人精品一区二区三区四区 | 2020国产精品自拍| 奇米影视在线99精品| 欧美日韩国产综合视频在线观看 | 国产亚洲欧洲997久久综合| 蜜臀精品久久久久久蜜臀| 欧美日韩国产综合视频在线观看 | 欧美日韩你懂的| 亚洲精品菠萝久久久久久久| 成人av网站在线| 国产欧美精品一区二区色综合| 精品亚洲成a人| 精品国内二区三区| 麻豆高清免费国产一区| 欧美一级久久久| 蜜桃视频免费观看一区| 日韩午夜电影在线观看| 免费看欧美女人艹b| 日韩视频免费观看高清完整版| 日韩av中文在线观看| 91精品国产色综合久久不卡电影 | av男人天堂一区| 国产精品毛片大码女人| 成人av电影免费在线播放| 国产精品第一页第二页第三页| av在线一区二区| 一区av在线播放| 欧美二区乱c少妇| 激情综合五月天| 国产网红主播福利一区二区| 国产suv精品一区二区883| 中文字幕一区在线观看| 一本久久精品一区二区| 无吗不卡中文字幕| 精品人伦一区二区色婷婷| 国产传媒久久文化传媒| 中文字幕一区二区三区色视频| 色天天综合久久久久综合片| 亚洲在线观看免费| 884aa四虎影成人精品一区| 捆绑变态av一区二区三区| 国产亚洲精品bt天堂精选| 成人av先锋影音| 亚洲成人av中文| jlzzjlzz亚洲日本少妇| 亚洲福利一区二区三区| 日韩亚洲欧美一区二区三区| 国产一区二区三区| 亚洲美女视频在线观看| 欧美精品 国产精品| 国产一区二区三区| 亚洲精品福利视频网站| 日韩一区二区电影在线| 高清在线不卡av| 亚洲国产精品一区二区www在线| 欧美一区二区三区免费| 成人美女在线视频| 天堂久久一区二区三区| 国产欧美视频一区二区三区| 欧美性色黄大片| 国产成人一级电影| 亚洲国产精品一区二区久久恐怖片 | 美女视频第一区二区三区免费观看网站| 久久免费偷拍视频| 91蝌蚪porny成人天涯| 美女视频一区在线观看| 国产精品久久久久久久久免费丝袜 | 亚洲男帅同性gay1069| 欧美一区日本一区韩国一区| 成人精品一区二区三区四区| 亚洲大尺度视频在线观看| 国产区在线观看成人精品| 7777精品伊人久久久大香线蕉 | 成人app软件下载大全免费| 日本视频一区二区三区| 亚洲欧美一区二区在线观看| 欧美岛国在线观看| 欧美午夜精品一区二区蜜桃| 懂色一区二区三区免费观看| 奇米888四色在线精品| 亚洲欧美日本韩国| 国产蜜臀av在线一区二区三区|