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

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

?? aggregate.java

?? 非常棒的java數(shù)據(jù)庫
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * 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 java.util.Comparator;
import java.util.HashMap;

import org.h2.command.dml.Select;
import org.h2.command.dml.SelectOrderBy;
import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
import org.h2.engine.Database;
import org.h2.engine.Session;
import org.h2.index.Index;
import org.h2.message.Message;
import org.h2.result.SearchRow;
import org.h2.result.SortOrder;
import org.h2.table.Column;
import org.h2.table.ColumnResolver;
import org.h2.table.Table;
import org.h2.table.TableFilter;
import org.h2.util.ObjectUtils;
import org.h2.util.ObjectArray;
import org.h2.util.StringUtils;
import org.h2.value.DataType;
import org.h2.value.Value;
import org.h2.value.ValueArray;
import org.h2.value.ValueBoolean;
import org.h2.value.ValueDouble;
import org.h2.value.ValueInt;
import org.h2.value.ValueLong;
import org.h2.value.ValueNull;
import org.h2.value.ValueString;

/**
 * Implements the integrated aggregate functions, such as COUNT, MAX, SUM.
 */
public class Aggregate extends Expression {
    // TODO incompatibility to hsqldb: aggregates: hsqldb uses automatic data
    // type for sum if value is too big,
    // h2 uses the same type as the data
    public static final int COUNT_ALL = 0, COUNT = 1, SUM = 2, MIN = 3, MAX = 4, AVG = 5;
    public static final int GROUP_CONCAT = 6, STDDEV_POP = 7, STDDEV_SAMP = 8;
    public static final int VAR_POP = 9, VAR_SAMP = 10, SOME = 11, EVERY = 12, SELECTIVITY = 13;

    private final Database database;
    private final int type;
    private final Select select;
    private final boolean distinct;

    private Expression on;
    private Expression separator;
    private ObjectArray orderList;
    private SortOrder sort;
    private int dataType, scale;
    private long precision;
    private int displaySize;

    private static final HashMap AGGREGATES = new HashMap();

    public Aggregate(Database database, int type, Expression on, Select select, boolean distinct) {
        this.database = database;
        this.type = type;
        this.on = on;
        this.select = select;
        this.distinct = distinct;
    }

    static {
        addAggregate("COUNT", COUNT);
        addAggregate("SUM", SUM);
        addAggregate("MIN", MIN);
        addAggregate("MAX", MAX);
        addAggregate("AVG", AVG);
        addAggregate("GROUP_CONCAT", GROUP_CONCAT);
        addAggregate("STDDEV_SAMP", STDDEV_SAMP);
        addAggregate("STDDEV", STDDEV_SAMP);
        addAggregate("STDDEV_POP", STDDEV_POP);
        addAggregate("STDDEVP", STDDEV_POP);
        addAggregate("VAR_POP", VAR_POP);
        addAggregate("VARP", VAR_POP);
        addAggregate("VAR_SAMP", VAR_SAMP);
        addAggregate("VAR", VAR_SAMP);
        addAggregate("VARIANCE", VAR_SAMP);
        addAggregate("SOME", SOME);
        addAggregate("EVERY", EVERY);
        addAggregate("SELECTIVITY", SELECTIVITY);
    }

    private static void addAggregate(String name, int type) {
        AGGREGATES.put(name, ObjectUtils.getInteger(type));
    }

    public static int getAggregateType(String name) {
        Integer type = (Integer) AGGREGATES.get(name);
        return type == null ? -1 : type.intValue();
    }

    public void setOrder(ObjectArray orderBy) {
        this.orderList = orderBy;
    }

    public void setSeparator(Expression separator) {
        this.separator = separator;
    }

    private SortOrder initOrder(Session session) throws SQLException {
        int[] index = new int[orderList.size()];
        int[] sortType = new int[orderList.size()];
        for (int i = 0; i < orderList.size(); i++) {
            SelectOrderBy o = (SelectOrderBy) orderList.get(i);
            index[i] = i + 1;
            int type = o.descending ? SortOrder.DESCENDING : SortOrder.ASCENDING;
            sortType[i] = type;
        }
        return new SortOrder(session.getDatabase(), index, sortType);
    }

    public void updateAggregate(Session session) throws SQLException {
        // TODO aggregates: check nested MIN(MAX(ID)) and so on
        // if(on != null) {
        // on.updateAggregate();
        // }
        HashMap group = select.getCurrentGroup();
        if (group == null) {
            // this is a different level (the enclosing query)
            return;
        }
        AggregateData data = (AggregateData) group.get(this);
        if (data == null) {
            data = new AggregateData(type);
            group.put(this, data);
        }
        Value v = on == null ? null : on.getValue(session);
        if (type == GROUP_CONCAT) {
            if (v != ValueNull.INSTANCE) {
                v = v.convertTo(Value.STRING);
                if (orderList != null) {
                    Value[] array = new Value[1 + orderList.size()];
                    array[0] = v;
                    for (int i = 0; i < orderList.size(); i++) {
                        SelectOrderBy o = (SelectOrderBy) orderList.get(i);
                        array[i + 1] = o.expression.getValue(session);
                    }
                    v = ValueArray.get(array);
                }
            }
        }
        data.add(database, distinct, v);
    }

    public Value getValue(Session session) throws SQLException {
        if (select.isQuickQuery()) {
            switch (type) {
            case COUNT_ALL:
                Table table = select.getTopTableFilter().getTable();
                return ValueLong.get(table.getRowCount(session));
            case MIN:
            case MAX:
                boolean first = type == MIN;
                Index index = getColumnIndex(first);
                int sortType = index.getIndexColumns()[0].sortType;
                if ((sortType & SortOrder.DESCENDING) != 0) {
                    first = !first;
                }
                SearchRow row = index.findFirstOrLast(session, first);
                Value v;
                if (row == null) {
                    v = ValueNull.INSTANCE;
                } else {
                    v = row.getValue(index.getColumns()[0].getColumnId());
                }
                return v;
            default:
                throw Message.getInternalError("type=" + type);
            }
        }
        HashMap group = select.getCurrentGroup();
        if (group == null) {
            throw Message.getSQLException(ErrorCode.INVALID_USE_OF_AGGREGATE_FUNCTION_1, getSQL());
        }
        AggregateData data = (AggregateData) group.get(this);
        if (data == null) {
            data = new AggregateData(type);
        }
        Value v = data.getValue(database, distinct);
        if (type == GROUP_CONCAT) {
            ObjectArray list = data.getList();
            if (list == null || list.size() == 0) {
                return ValueNull.INSTANCE;
            }
            if (orderList != null) {
                try {
                    // TODO refactor: don't use built in comparator
                    list.sort(new Comparator() {
                        public int compare(Object o1, Object o2) {
                            try {
                                Value[] a1 = ((ValueArray) o1).getList();
                                Value[] a2 = ((ValueArray) o2).getList();
                                return sort.compare(a1, a2);
                            } catch (SQLException e) {
                                throw Message.convertToInternal(e);
                            }
                        }
                    });
                } catch (Error e) {
                    throw Message.convert(e);
                }
            }
            StringBuffer buff = new StringBuffer();
            String sep = separator == null ? "," : separator.getValue(session).getString();
            for (int i = 0; i < list.size(); i++) {
                Value val = (Value) list.get(i);
                String s;
                if (val.getType() == Value.ARRAY) {
                    s = ((ValueArray) val).getList()[0].getString();
                } else {
                    s = val.convertTo(Value.STRING).getString();
                }
                if (s == null) {
                    continue;
                }
                if (i > 0 && sep != null) {
                    buff.append(sep);
                }
                buff.append(s);
            }
            v = ValueString.get(buff.toString());
        }
        return v;
    }

    public int getType() {
        return dataType;
    }

    public void mapColumns(ColumnResolver resolver, int level) throws SQLException {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产麻豆精品| 亚洲精品久久7777| 精品久久一区二区三区| 久久九九久久九九| 国产精品久久久久久久浪潮网站 | 欧美在线一二三| 欧美一区二区三区精品| 舔着乳尖日韩一区| 捆绑调教一区二区三区| 欧美一区二区福利视频| 激情另类小说区图片区视频区| 色综合网色综合| 亚洲精品一线二线三线| 亚洲成人精品一区| 91色视频在线| 久久久久国产免费免费 | 欧美视频在线观看一区| 中文字幕免费在线观看视频一区| 天天操天天干天天综合网| 欧美一区二区三区啪啪| 国产精品99久久久久久久vr| 在线成人午夜影院| 亚洲在线中文字幕| 97精品超碰一区二区三区| 久久久国产午夜精品| 99久久免费视频.com| 石原莉奈在线亚洲二区| 欧美吻胸吃奶大尺度电影| 麻豆国产一区二区| 欧美日韩成人综合天天影院 | 日韩美女一区二区三区| 舔着乳尖日韩一区| 国产午夜精品一区二区三区嫩草 | 欧美日韩精品一区视频| 国产在线国偷精品免费看| 日韩美女视频在线| 99国产精品久| 久久99国产精品久久| 欧美大胆一级视频| 91麻豆福利精品推荐| 激情都市一区二区| 亚洲国产一区在线观看| 在线观看中文字幕不卡| 国产精品一二三在| 亚洲国产精品人人做人人爽| 国产精品视频在线看| hitomi一区二区三区精品| 国产精品成人免费| 精品少妇一区二区三区在线视频| 色综合天天性综合| 中文字幕一区二区三区不卡在线 | 99re这里都是精品| 精品亚洲免费视频| 午夜不卡av免费| 国产精品成人午夜| 国产色一区二区| 欧美xfplay| 56国语精品自产拍在线观看| 久久国产剧场电影| 婷婷激情综合网| 亚洲亚洲精品在线观看| 中文字幕日韩av资源站| 国产亚洲综合在线| 日韩欧美在线网站| 成人sese在线| 亚洲国产aⅴ天堂久久| 亚洲欧美综合在线精品| 国产婷婷色一区二区三区在线| 91麻豆精品国产自产在线| 欧美体内she精高潮| 91成人看片片| 九色porny丨国产精品| 日韩高清在线不卡| 国产精品美女久久久久久久网站| 久久综合色之久久综合| 色欧美乱欧美15图片| 99国产精品久久久| 91蜜桃网址入口| k8久久久一区二区三区| 91美女视频网站| 色综合网站在线| 91黄色在线观看| 欧美中文一区二区三区| 日本韩国一区二区| 在线观看一区二区精品视频| 欧洲视频一区二区| 欧美在线高清视频| 欧美精品在欧美一区二区少妇| 欧美日韩免费电影| 在线91免费看| 日韩午夜中文字幕| 精品国产伦一区二区三区免费 | 亚洲午夜精品在线| 日韩精品成人一区二区在线| 日本午夜一本久久久综合| 蜜桃精品在线观看| 国产一区二区三区视频在线播放| 国产精品一区三区| 99久久99久久综合| 欧美三级韩国三级日本三斤| 成人视屏免费看| 日本aⅴ精品一区二区三区| 亚洲另类在线一区| 日韩综合在线视频| 国产麻豆欧美日韩一区| 色综合色综合色综合色综合色综合| 欧美在线制服丝袜| 精品久久久久久无| 国产精品久久久久久久久动漫| 一区二区理论电影在线观看| 国产精品日日摸夜夜摸av| 亚洲激情第一区| 麻豆成人综合网| av动漫一区二区| 91精品国产综合久久久久久| 久久久久高清精品| 懂色av一区二区三区蜜臀| 奇米888四色在线精品| 国产精品亚洲成人| 欧洲一区二区三区在线| 337p日本欧洲亚洲大胆色噜噜| ...xxx性欧美| 蜜桃精品视频在线| 一本色道**综合亚洲精品蜜桃冫| 欧美一区日本一区韩国一区| 国产精品色哟哟| 麻豆精品国产传媒mv男同| 91片在线免费观看| 久久综合九色综合久久久精品综合| 亚洲天堂福利av| 最新欧美精品一区二区三区| 蜜桃视频在线观看一区| 91福利小视频| 国产精品网曝门| 男男gaygay亚洲| 91国产免费观看| 国产视频一区在线观看| 日韩精品电影一区亚洲| 一本大道av伊人久久综合| 久久久久久**毛片大全| 日本亚洲免费观看| 在线观看亚洲a| 国产精品久久久久久户外露出| 麻豆免费看一区二区三区| 欧美综合亚洲图片综合区| 国产精品免费视频网站| 久久精品99国产精品| 欧美日本精品一区二区三区| 亚洲免费av高清| 午夜精品福利一区二区三区蜜桃| av一二三不卡影片| 精品国产乱码久久久久久夜甘婷婷| 亚洲国产精品一区二区www在线| 不卡欧美aaaaa| 国产视频视频一区| 91麻豆精品国产91久久久久久 | 日韩欧美三级在线| 午夜不卡av在线| 欧美性色综合网| 亚洲精品国产高清久久伦理二区| 成人国产精品视频| 亚洲国产成人一区二区三区| 国产成人8x视频一区二区| 久久久久久久久久电影| 黄色精品一二区| 久久综合色8888| 国产剧情一区二区| 久久久综合九色合综国产精品| 国产专区综合网| 精品少妇一区二区三区免费观看| 麻豆精品久久久| 日韩欧美久久久| 黄网站免费久久| 久久久久久久久久久99999| 国产精品99久久久久久久女警 | 日本在线观看不卡视频| 91超碰这里只有精品国产| 日本网站在线观看一区二区三区 | 99久久99久久免费精品蜜臀| 亚洲青青青在线视频| 91高清视频在线| 亚洲成av人片在线观看无码| 67194成人在线观看| 毛片av中文字幕一区二区| 久久久久久久综合色一本| 成人av电影观看| 亚洲精品免费视频| 欧美日韩美女一区二区| 久久精品国产网站| 国产无遮挡一区二区三区毛片日本| 丁香激情综合国产| 亚洲欧美国产高清| 欧美系列日韩一区| 久久精品国产成人一区二区三区| 欧美成人一区二区三区片免费| 国产69精品一区二区亚洲孕妇| 日韩美女视频一区| 9191久久久久久久久久久| 国产成人综合亚洲网站| 欧美丰满高潮xxxx喷水动漫|