Package edu.brown.statistics

Source Code of edu.brown.statistics.ColumnStatistics

/***************************************************************************
*   Copyright (C) 2009 by H-Store Project                                 *
*   Brown University                                                      *
*   Massachusetts Institute of Technology                                 *
*   Yale University                                                       *
*                                                                         *
*   Permission is hereby granted, free of charge, to any person obtaining *
*   a copy of this software and associated documentation files (the       *
*   "Software"), to deal in the Software without restriction, including   *
*   without limitation the rights to use, copy, modify, merge, publish,   *
*   distribute, sublicense, and/or sell copies of the Software, and to    *
*   permit persons to whom the Software is furnished to do so, subject to *
*   the following conditions:                                             *
*                                                                         *
*   The above copyright notice and this permission notice shall be        *
*   included in all copies or substantial portions of the Software.       *
*                                                                         *
*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       *
*   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    *
*   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*
*   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR     *
*   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
*   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
*   OTHER DEALINGS IN THE SOFTWARE.                                       *
***************************************************************************/
package edu.brown.statistics;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;
import org.voltdb.catalog.Column;
import org.voltdb.catalog.Database;
import org.voltdb.catalog.Statement;
import org.voltdb.catalog.Table;
import org.voltdb.types.QueryType;

import edu.brown.catalog.CatalogKey;
import edu.brown.catalog.CatalogUtil;
import edu.brown.workload.QueryTrace;
import edu.brown.workload.TransactionTrace;

/**
* @author pavlo
*/
public class ColumnStatistics extends AbstractStatistics<Column> {

    public enum Members {
        READONLY, HISTOGRAM,
    };

    public Boolean readonly = true;
    public ObjectHistogram<Object> histogram = new ObjectHistogram<Object>();

    public ColumnStatistics(String catalog_key) {
        super(catalog_key);
    }

    public ColumnStatistics(Column catalog_col) {
        super(catalog_col);
        this.preprocess((Database) catalog_col.getParent().getParent());
    }

    @Override
    public Column getCatalogItem(Database catalog_db) {
        Column ret = CatalogKey.getFromKey(catalog_db, this.catalog_key, Column.class);
        return (ret);
    }

    @Override
    public void preprocess(Database catalog_db) {
        if (this.has_preprocessed)
            return;

        // Do nothing...

        this.has_preprocessed = true;
    }

    @Override
    public void process(Database catalog_db, TransactionTrace xact) throws Exception {
        final Column catalog_col = this.getCatalogItem(catalog_db);
        final Table catalog_tbl = (Table) catalog_col.getParent();
        // For each query, check whether they are going to our table
        // If so, then we need to update our statistics
        int col_index = catalog_col.getIndex();
        for (QueryTrace query : xact.getQueries()) {
            Statement catalog_stmt = query.getCatalogItem(catalog_db);
            QueryType query_type = QueryType.get(catalog_stmt.getQuerytype());
            // For now we only examine the tuples as they are being inserted
            // into the table
            if (query_type == QueryType.INSERT && CatalogUtil.getReferencedTables(catalog_stmt).contains(catalog_tbl)) {
                try {
                    Object value = query.getParam(col_index);
                    this.histogram.put(value);
                } catch (ArrayIndexOutOfBoundsException ex) {
                    // Silently let these pass...
                    LOG.debug(query + " [col_index=" + col_index + "]", ex);
                }
            }
        } // FOR
        return;
    }

    @Override
    public void postprocess(Database catalog_db) throws Exception {
        // Do nothing...
    }

    @Override
    public String debug(Database catalog_db) {
        return (this.debug(catalog_db, ColumnStatistics.Members.values()));
    }

    @Override
    public void toJSONString(JSONStringer stringer) throws JSONException {
        // Read-only
        stringer.key(Members.READONLY.name()).value(this.readonly);

        // Histogram
        stringer.key(Members.HISTOGRAM.name()).object();
        this.histogram.toJSON(stringer);
        stringer.endObject();
    }

    @Override
    public void fromJSONObject(JSONObject object, Database catalog_db) throws JSONException {
        this.preprocess(catalog_db);

        // Read-only
        this.readonly = object.getBoolean(Members.READONLY.name());

        // Histogram
        this.histogram.fromJSON(object.getJSONObject(Members.HISTOGRAM.name()), catalog_db);
    }
}
TOP

Related Classes of edu.brown.statistics.ColumnStatistics

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.