You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by lu...@apache.org on 2015/01/15 13:26:23 UTC

[07/50] [abbrv] incubator-kylin git commit: put tuplefilter and Ituple into medadata module

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/filter/ExtractTupleFilter.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/filter/ExtractTupleFilter.java b/storage/src/main/java/com/kylinolap/storage/filter/ExtractTupleFilter.java
deleted file mode 100644
index 478c604..0000000
--- a/storage/src/main/java/com/kylinolap/storage/filter/ExtractTupleFilter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.kylinolap.storage.filter;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import com.kylinolap.storage.tuple.ITuple;
-
-/**
- * 
- * @author xjiang
- * 
- */
-public class ExtractTupleFilter extends TupleFilter {
-
-    private int date;
-    private List<String> values;
-
-    public ExtractTupleFilter(FilterOperatorEnum op) {
-        super(new ArrayList<TupleFilter>(3), op);
-        assert (op == FilterOperatorEnum.EXTRACT);
-        this.values = new ArrayList<String>(1);
-        this.values.add(null);
-        this.date = 0;
-    }
-
-    @Override
-    public String toString() {
-        return "ExtractTupleFilter=[children=" + this.children + "]";
-    }
-
-    @Override
-    public boolean isEvaluable() {
-        return false;
-    }
-
-    @Override
-    public boolean evaluate(ITuple tuple) {
-        // extract tuple value
-        String extractType = null;
-        String tupleValue = null;
-        for (TupleFilter filter : this.children) {
-            filter.evaluate(tuple);
-            if (filter instanceof ConstantTupleFilter) {
-                tupleValue = filter.getValues().iterator().next();
-            } else if (filter instanceof CompareTupleFilter) {
-                extractType = filter.getValues().iterator().next();
-            }
-        }
-
-        // extract date
-        this.date = extractDate(extractType, Integer.valueOf(tupleValue));
-        return true;
-    }
-
-    private int extractDate(String type, int inDate) {
-        // this shifts the epoch back to astronomical year -4800 instead of the
-        // start of the Christian era in year AD 1 of the proleptic Gregorian
-        // calendar.
-        int j = inDate + 32044;
-        int g = j / 146097;
-        int dg = j % 146097;
-        int c = (dg / 36524 + 1) * 3 / 4;
-        int dc = dg - c * 36524;
-        int b = dc / 1461;
-        int db = dc % 1461;
-        int a = (db / 365 + 1) * 3 / 4;
-        int da = db - a * 365;
-
-        // integer number of full years elapsed since March 1, 4801 BC
-        int y = g * 400 + c * 100 + b * 4 + a;
-        // integer number of full months elapsed since the last March 1
-        int m = (da * 5 + 308) / 153 - 2;
-        // number of days elapsed since day 1 of the month
-        int d = da - (m + 4) * 153 / 5 + 122;
-        int year = y - 4800 + (m + 2) / 12;
-        int month = (m + 2) % 12 + 1;
-        int day = d + 1;
-        if ("YEAR".equalsIgnoreCase(type)) {
-            return year;
-        }
-        if ("MONTH".equalsIgnoreCase(type)) {
-            return month;
-        }
-        if ("DAY".equalsIgnoreCase(type)) {
-            return day;
-        }
-        return -1;
-    }
-
-    @Override
-    public Collection<String> getValues() {
-        this.values.set(0, String.valueOf(this.date));
-        return this.values;
-    }
-
-    @Override
-    public byte[] serialize() {
-        return new byte[0];
-    }
-
-    @Override
-    public void deserialize(byte[] bytes) {
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/filter/LogicalTupleFilter.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/filter/LogicalTupleFilter.java b/storage/src/main/java/com/kylinolap/storage/filter/LogicalTupleFilter.java
deleted file mode 100644
index 0fb9902..0000000
--- a/storage/src/main/java/com/kylinolap/storage/filter/LogicalTupleFilter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.kylinolap.storage.filter;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-
-import com.kylinolap.storage.tuple.ITuple;
-
-public class LogicalTupleFilter extends TupleFilter {
-
-    public LogicalTupleFilter(FilterOperatorEnum op) {
-        super(new ArrayList<TupleFilter>(2), op);
-        boolean opGood = (op == FilterOperatorEnum.AND || op == FilterOperatorEnum.OR || op == FilterOperatorEnum.NOT);
-        if (opGood == false)
-            throw new IllegalArgumentException("Unsupported operator " + op);
-    }
-
-    private LogicalTupleFilter(List<TupleFilter> filters, FilterOperatorEnum op) {
-        super(filters, op);
-    }
-
-    @Override
-    public TupleFilter copy() {
-        List<TupleFilter> cloneChildren = new LinkedList<TupleFilter>(children);
-        TupleFilter cloneTuple = new LogicalTupleFilter(cloneChildren, operator);
-        return cloneTuple;
-    }
-
-    @Override
-    public TupleFilter reverse() {
-        switch (operator) {
-        case NOT:
-            assert (children.size() == 1);
-            return children.get(0);
-        case AND:
-        case OR:
-            LogicalTupleFilter reverse = new LogicalTupleFilter(REVERSE_OP_MAP.get(operator));
-            for (TupleFilter child : children) {
-                reverse.addChild(child.reverse());
-            }
-            return reverse;
-        default:
-            throw new IllegalStateException();
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "LogicalFilter [operator=" + operator + ", children=" + children + "]";
-    }
-
-    @Override
-    public boolean evaluate(ITuple tuple) {
-        switch (this.operator) {
-        case AND:
-            return evalAnd(tuple);
-        case OR:
-            return evalOr(tuple);
-        case NOT:
-            return evalNot(tuple);
-        default:
-            return false;
-        }
-    }
-
-    private boolean evalAnd(ITuple tuple) {
-        for (TupleFilter filter : this.children) {
-            if (!filter.evaluate(tuple)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private boolean evalOr(ITuple tuple) {
-        for (TupleFilter filter : this.children) {
-            if (filter.evaluate(tuple)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean evalNot(ITuple tuple) {
-        return !this.children.get(0).evaluate(tuple);
-    }
-
-    @Override
-    public Collection<String> getValues() {
-        return Collections.emptyList();
-    }
-
-    @Override
-    public boolean isEvaluable() {
-        return true;
-    }
-
-    @Override
-    public byte[] serialize() {
-        return new byte[0];
-    }
-
-    @Override
-    public void deserialize(byte[] bytes) {
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/filter/TupleFilter.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/filter/TupleFilter.java b/storage/src/main/java/com/kylinolap/storage/filter/TupleFilter.java
deleted file mode 100644
index 69a9399..0000000
--- a/storage/src/main/java/com/kylinolap/storage/filter/TupleFilter.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.kylinolap.storage.filter;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import com.google.common.collect.Maps;
-import com.kylinolap.storage.tuple.ITuple;
-
-/**
- * 
- * @author xjiang
- * 
- */
-public abstract class TupleFilter {
-
-    public enum FilterOperatorEnum {
-        EQ(1), NEQ(2), GT(3), LT(4), GTE(5), LTE(6), ISNULL(7), ISNOTNULL(8), IN(9), NOTIN(10), AND(20), OR(21), NOT(22), COLUMN(30), CONSTANT(31), DYNAMIC(32), EXTRACT(33), CASE(34);
-
-        private final int value;
-
-        private FilterOperatorEnum(int v) {
-            this.value = v;
-        }
-
-        public int getValue() {
-            return this.value;
-        }
-    }
-
-    public static final int BUFFER_SIZE = 10240;
-
-    protected static final Map<FilterOperatorEnum, FilterOperatorEnum> REVERSE_OP_MAP = Maps.newHashMap();
-    protected static final Map<FilterOperatorEnum, FilterOperatorEnum> SWAP_OP_MAP = Maps.newHashMap();
-
-    static {
-        REVERSE_OP_MAP.put(FilterOperatorEnum.EQ, FilterOperatorEnum.NEQ);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.NEQ, FilterOperatorEnum.EQ);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.GT, FilterOperatorEnum.LTE);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.LTE, FilterOperatorEnum.GT);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.LT, FilterOperatorEnum.GTE);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.GTE, FilterOperatorEnum.LT);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.IN, FilterOperatorEnum.NOTIN);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.NOTIN, FilterOperatorEnum.IN);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.ISNULL, FilterOperatorEnum.ISNOTNULL);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.ISNOTNULL, FilterOperatorEnum.ISNULL);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.AND, FilterOperatorEnum.OR);
-        REVERSE_OP_MAP.put(FilterOperatorEnum.OR, FilterOperatorEnum.AND);
-
-        SWAP_OP_MAP.put(FilterOperatorEnum.EQ, FilterOperatorEnum.EQ);
-        SWAP_OP_MAP.put(FilterOperatorEnum.NEQ, FilterOperatorEnum.NEQ);
-        SWAP_OP_MAP.put(FilterOperatorEnum.GT, FilterOperatorEnum.LT);
-        SWAP_OP_MAP.put(FilterOperatorEnum.LTE, FilterOperatorEnum.GTE);
-        SWAP_OP_MAP.put(FilterOperatorEnum.LT, FilterOperatorEnum.GT);
-        SWAP_OP_MAP.put(FilterOperatorEnum.GTE, FilterOperatorEnum.LTE);
-    }
-
-    protected final List<TupleFilter> children;
-    protected FilterOperatorEnum operator;
-    protected boolean hasChildren;
-
-    protected TupleFilter(List<TupleFilter> filters, FilterOperatorEnum op) {
-        this.children = filters;
-        this.operator = op;
-    }
-
-    public void addChild(TupleFilter child) {
-        children.add(child);
-    }
-
-    final public void addChildren(List<? extends TupleFilter> children) {
-        for (TupleFilter c : children)
-            addChild(c); // subclass overrides addChild()
-    }
-
-    public List<? extends TupleFilter> getChildren() {
-        return children;
-    }
-
-    public boolean hasChildren() {
-        return children != null && !children.isEmpty();
-    }
-
-    public FilterOperatorEnum getOperator() {
-        return operator;
-    }
-
-    public TupleFilter copy() {
-        throw new UnsupportedOperationException();
-    }
-
-    public TupleFilter reverse() {
-        throw new UnsupportedOperationException();
-    }
-
-    public TupleFilter flatFilter() {
-        return flattenInternal(this);
-    }
-
-    private TupleFilter flattenInternal(TupleFilter filter) {
-        TupleFilter flatFilter = null;
-        if (!(filter instanceof LogicalTupleFilter)) {
-            flatFilter = new LogicalTupleFilter(FilterOperatorEnum.AND);
-            flatFilter.addChild(filter);
-            return flatFilter;
-        }
-
-        // post-order recursive travel
-        FilterOperatorEnum op = filter.getOperator();
-        List<TupleFilter> andChildren = new LinkedList<TupleFilter>();
-        List<TupleFilter> orChildren = new LinkedList<TupleFilter>();
-        for (TupleFilter child : filter.getChildren()) {
-            TupleFilter flatChild = flattenInternal(child);
-            FilterOperatorEnum childOp = flatChild.getOperator();
-            if (childOp == FilterOperatorEnum.AND) {
-                andChildren.add(flatChild);
-            } else if (childOp == FilterOperatorEnum.OR) {
-                orChildren.add(flatChild);
-            } else {
-                throw new IllegalStateException("Filter is " + filter + " and child is " + flatChild);
-            }
-        }
-
-        // boolean algebra flatten
-        if (op == FilterOperatorEnum.AND) {
-            flatFilter = new LogicalTupleFilter(FilterOperatorEnum.AND);
-            for (TupleFilter andChild : andChildren) {
-                flatFilter.addChildren(andChild.getChildren());
-            }
-            if (!orChildren.isEmpty()) {
-                List<TupleFilter> fullAndFilters = cartesianProduct(orChildren, flatFilter);
-                flatFilter = new LogicalTupleFilter(FilterOperatorEnum.OR);
-                flatFilter.addChildren(fullAndFilters);
-            }
-        } else if (op == FilterOperatorEnum.OR) {
-            flatFilter = new LogicalTupleFilter(FilterOperatorEnum.OR);
-            for (TupleFilter orChild : orChildren) {
-                flatFilter.addChildren(orChild.getChildren());
-            }
-            flatFilter.addChildren(andChildren);
-        } else if (op == FilterOperatorEnum.NOT) {
-            assert (filter.children.size() == 1);
-            TupleFilter reverse = filter.children.get(0).reverse();
-            flatFilter = flattenInternal(reverse);
-        } else {
-            throw new IllegalStateException("Filter is " + filter);
-        }
-        return flatFilter;
-    }
-
-    private List<TupleFilter> cartesianProduct(List<TupleFilter> leftOrFilters, TupleFilter partialAndFilter) {
-        List<TupleFilter> oldProductFilters = new LinkedList<TupleFilter>();
-        oldProductFilters.add(partialAndFilter);
-        for (TupleFilter orFilter : leftOrFilters) {
-            List<TupleFilter> newProductFilters = new LinkedList<TupleFilter>();
-            for (TupleFilter orChildFilter : orFilter.getChildren()) {
-                for (TupleFilter productFilter : oldProductFilters) {
-                    TupleFilter fullAndFilter = productFilter.copy();
-                    fullAndFilter.addChildren(orChildFilter.getChildren());
-                    newProductFilters.add(fullAndFilter);
-                }
-            }
-            oldProductFilters = newProductFilters;
-        }
-        return oldProductFilters;
-    }
-
-    public abstract boolean isEvaluable();
-
-    public abstract boolean evaluate(ITuple tuple);
-
-    public abstract Collection<String> getValues();
-
-    public abstract byte[] serialize();
-
-    public abstract void deserialize(byte[] bytes);
-
-    public static boolean isEvaluableRecursively(TupleFilter filter) {
-        if (filter == null)
-            return true;
-
-        if (filter.isEvaluable() == false)
-            return false;
-
-        for (TupleFilter child : filter.getChildren()) {
-            if (isEvaluableRecursively(child) == false)
-                return false;
-        }
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/filter/TupleFilterSerializer.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/filter/TupleFilterSerializer.java b/storage/src/main/java/com/kylinolap/storage/filter/TupleFilterSerializer.java
deleted file mode 100644
index 3a3fc03..0000000
--- a/storage/src/main/java/com/kylinolap/storage/filter/TupleFilterSerializer.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.storage.filter;
-
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Stack;
-
-import com.kylinolap.common.util.BytesUtil;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
-
-/**
- * http://eli.thegreenplace.net/2011/09/29/an-interesting-tree-serialization-algorithm-from-dwarf
- * 
- * @author xjiang
- * 
- */
-public class TupleFilterSerializer {
-
-    public static interface Decorator {
-        TupleFilter onSerialize(TupleFilter filter);
-    }
-
-    private static final int BUFFER_SIZE = 65536;
-    private static final Map<Integer, FilterOperatorEnum> ID_OP_MAP = new HashMap<Integer, FilterOperatorEnum>();
-
-    static {
-        for (FilterOperatorEnum op : FilterOperatorEnum.values()) {
-            ID_OP_MAP.put(op.getValue(), op);
-        }
-    }
-
-    public static byte[] serialize(TupleFilter rootFilter) {
-        return serialize(rootFilter, null);
-    }
-
-    public static byte[] serialize(TupleFilter rootFilter, Decorator decorator) {
-        ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
-        internalSerialize(rootFilter, decorator, buffer);
-        byte[] result = new byte[buffer.position()];
-        System.arraycopy(buffer.array(), 0, result, 0, buffer.position());
-        return result;
-    }
-
-    private static void internalSerialize(TupleFilter filter, Decorator decorator, ByteBuffer buffer) {
-        if (decorator != null) { // give decorator a chance to manipulate the
-                                 // output filter
-            filter = decorator.onSerialize(filter);
-        }
-
-        if (filter == null) {
-            return;
-        }
-
-        if (filter.hasChildren()) {
-            // serialize filter+true
-            serializeFilter(1, filter, decorator, buffer);
-            // serialize children
-            for (TupleFilter child : filter.getChildren()) {
-                internalSerialize(child, decorator, buffer);
-            }
-            // serialize none
-            serializeFilter(-1, filter, decorator, buffer);
-        } else {
-            // serialize filter+false
-            serializeFilter(0, filter, decorator, buffer);
-        }
-    }
-
-    private static void serializeFilter(int flag, TupleFilter filter, Decorator decorator, ByteBuffer buffer) {
-        if (flag < 0) {
-            BytesUtil.writeVInt(-1, buffer);
-        } else {
-            byte[] bytes = filter.serialize();
-            int opVal = filter.getOperator().getValue();
-            BytesUtil.writeVInt(opVal, buffer);
-            BytesUtil.writeByteArray(bytes, buffer);
-            BytesUtil.writeVInt(flag, buffer);
-        }
-    }
-
-    public static TupleFilter deserialize(byte[] bytes) {
-        ByteBuffer buffer = ByteBuffer.wrap(bytes);
-        TupleFilter rootFilter = null;
-        Stack<TupleFilter> parentStack = new Stack<TupleFilter>();
-        while (buffer.hasRemaining()) {
-            int opVal = BytesUtil.readVInt(buffer);
-            if (opVal < 0) {
-                parentStack.pop();
-                continue;
-            }
-
-            // deserialize filter
-            TupleFilter filter = createTupleFilter(opVal);
-            byte[] filetrBytes = BytesUtil.readByteArray(buffer);
-            filter.deserialize(filetrBytes);
-
-            if (rootFilter == null) {
-                // push root to stack
-                rootFilter = filter;
-                parentStack.push(filter);
-                BytesUtil.readVInt(buffer);
-                continue;
-            }
-
-            // add filter to parent
-            TupleFilter parentFilter = parentStack.peek();
-            if (parentFilter != null) {
-                parentFilter.addChild(filter);
-            }
-
-            // push filter to stack or not based on having children or not
-            int hasChild = BytesUtil.readVInt(buffer);
-            if (hasChild == 1) {
-                parentStack.push(filter);
-            }
-        }
-        return rootFilter;
-    }
-
-    private static TupleFilter createTupleFilter(int opVal) {
-        FilterOperatorEnum op = ID_OP_MAP.get(opVal);
-        if (op == null) {
-            throw new IllegalStateException("operator value is " + opVal);
-        }
-        TupleFilter filter = null;
-        switch (op) {
-        case AND:
-        case OR:
-        case NOT:
-            filter = new LogicalTupleFilter(op);
-            break;
-        case EQ:
-        case NEQ:
-        case LT:
-        case LTE:
-        case GT:
-        case GTE:
-        case IN:
-        case ISNULL:
-        case ISNOTNULL:
-            filter = new CompareTupleFilter(op);
-            break;
-        case EXTRACT:
-            filter = new ExtractTupleFilter(op);
-            break;
-        case CASE:
-            filter = new CaseTupleFilter();
-            break;
-        case COLUMN:
-            filter = new ColumnTupleFilter(null);
-            break;
-        case CONSTANT:
-            filter = new ConstantTupleFilter();
-            break;
-        case DYNAMIC:
-            filter = new DynamicTupleFilter(null);
-            break;
-        default:
-            throw new IllegalStateException("Error FilterOperatorEnum: " + op.getValue());
-        }
-
-        return filter;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/ColumnValueRange.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/ColumnValueRange.java b/storage/src/main/java/com/kylinolap/storage/hbase/ColumnValueRange.java
index 4033a9e..8305475 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/ColumnValueRange.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/ColumnValueRange.java
@@ -22,7 +22,7 @@ import java.util.Set;
 import com.google.common.collect.Sets;
 import com.kylinolap.cube.kv.RowKeyColumnOrder;
 import com.kylinolap.metadata.model.TblColRef;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
 
 /**
  * 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/ConcurrentHBaseTupleIterator.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/ConcurrentHBaseTupleIterator.java b/storage/src/main/java/com/kylinolap/storage/hbase/ConcurrentHBaseTupleIterator.java
index ff6ac6d..e920eeb 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/ConcurrentHBaseTupleIterator.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/ConcurrentHBaseTupleIterator.java
@@ -69,8 +69,8 @@ import com.kylinolap.metadata.model.MeasureDesc;
 import com.kylinolap.cube.model.CubeDesc.DeriveInfo;
 import com.kylinolap.metadata.model.TblColRef;
 import com.kylinolap.storage.StorageContext;
-import com.kylinolap.storage.filter.TupleFilter;
-import com.kylinolap.storage.tuple.ITupleIterator;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.tuple.ITupleIterator;
 import com.kylinolap.storage.tuple.Tuple;
 import com.kylinolap.storage.tuple.Tuple.IDerivedColumnFiller;
 import com.kylinolap.storage.tuple.TupleInfo;

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/CubeSegmentTupleIterator.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/CubeSegmentTupleIterator.java b/storage/src/main/java/com/kylinolap/storage/hbase/CubeSegmentTupleIterator.java
index 60eebd4..eed280e 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/CubeSegmentTupleIterator.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/CubeSegmentTupleIterator.java
@@ -56,8 +56,8 @@ import com.kylinolap.metadata.model.MeasureDesc;
 import com.kylinolap.cube.model.CubeDesc.DeriveInfo;
 import com.kylinolap.metadata.model.TblColRef;
 import com.kylinolap.storage.StorageContext;
-import com.kylinolap.storage.filter.TupleFilter;
-import com.kylinolap.storage.tuple.ITupleIterator;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.tuple.ITupleIterator;
 import com.kylinolap.storage.tuple.Tuple;
 import com.kylinolap.storage.tuple.Tuple.IDerivedColumnFiller;
 import com.kylinolap.storage.tuple.TupleInfo;

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/CubeStorageEngine.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/CubeStorageEngine.java b/storage/src/main/java/com/kylinolap/storage/hbase/CubeStorageEngine.java
index 9000666..117ad20 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/CubeStorageEngine.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/CubeStorageEngine.java
@@ -43,12 +43,12 @@ import com.kylinolap.cube.model.CubeDesc.DeriveInfo;
 import com.kylinolap.dict.lookup.LookupStringTable;
 import com.kylinolap.storage.IStorageEngine;
 import com.kylinolap.storage.StorageContext;
-import com.kylinolap.storage.filter.ColumnTupleFilter;
-import com.kylinolap.storage.filter.CompareTupleFilter;
-import com.kylinolap.storage.filter.LogicalTupleFilter;
-import com.kylinolap.storage.filter.TupleFilter;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
-import com.kylinolap.storage.tuple.ITupleIterator;
+import com.kylinolap.metadata.filter.ColumnTupleFilter;
+import com.kylinolap.metadata.filter.CompareTupleFilter;
+import com.kylinolap.metadata.filter.LogicalTupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.tuple.ITupleIterator;
 
 /**
  * @author xjiang, yangli9

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/DerivedFilterTranslator.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/DerivedFilterTranslator.java b/storage/src/main/java/com/kylinolap/storage/hbase/DerivedFilterTranslator.java
index bc6b30e..20bf9ce 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/DerivedFilterTranslator.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/DerivedFilterTranslator.java
@@ -29,13 +29,13 @@ import com.kylinolap.cube.model.CubeDesc.DeriveInfo;
 import com.kylinolap.cube.model.CubeDesc.DeriveType;
 import com.kylinolap.dict.lookup.LookupStringTable;
 import com.kylinolap.metadata.model.TblColRef;
-import com.kylinolap.storage.filter.ColumnTupleFilter;
-import com.kylinolap.storage.filter.CompareTupleFilter;
-import com.kylinolap.storage.filter.ConstantTupleFilter;
-import com.kylinolap.storage.filter.LogicalTupleFilter;
-import com.kylinolap.storage.filter.TupleFilter;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
-import com.kylinolap.storage.tuple.ITuple;
+import com.kylinolap.metadata.filter.ColumnTupleFilter;
+import com.kylinolap.metadata.filter.CompareTupleFilter;
+import com.kylinolap.metadata.filter.ConstantTupleFilter;
+import com.kylinolap.metadata.filter.LogicalTupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.tuple.ITuple;
 
 /**
  * @author yangli9

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/InvertedIndexStorageEngine.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/InvertedIndexStorageEngine.java b/storage/src/main/java/com/kylinolap/storage/hbase/InvertedIndexStorageEngine.java
index c00c802..add6bfe 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/InvertedIndexStorageEngine.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/InvertedIndexStorageEngine.java
@@ -28,7 +28,7 @@ import com.kylinolap.storage.IStorageEngine;
 import com.kylinolap.storage.StorageContext;
 import com.kylinolap.storage.hbase.coprocessor.endpoint.EndpointTupleIterator;
 import com.kylinolap.metadata.realization.SQLDigest;
-import com.kylinolap.storage.tuple.ITupleIterator;
+import com.kylinolap.metadata.tuple.ITupleIterator;
 
 /**
  * @author yangli9

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/SerializedHBaseTupleIterator.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/SerializedHBaseTupleIterator.java b/storage/src/main/java/com/kylinolap/storage/hbase/SerializedHBaseTupleIterator.java
index c2f4ab0..ba7d9b0 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/SerializedHBaseTupleIterator.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/SerializedHBaseTupleIterator.java
@@ -31,9 +31,9 @@ import com.kylinolap.cube.CubeSegment;
 import com.kylinolap.cube.kv.RowValueDecoder;
 import com.kylinolap.metadata.model.TblColRef;
 import com.kylinolap.storage.StorageContext;
-import com.kylinolap.storage.filter.TupleFilter;
-import com.kylinolap.storage.tuple.ITuple;
-import com.kylinolap.storage.tuple.ITupleIterator;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.tuple.ITuple;
+import com.kylinolap.metadata.tuple.ITupleIterator;
 
 /**
  * @author xjiang

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/CoprocessorFilter.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/CoprocessorFilter.java b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/CoprocessorFilter.java
index 6836283..983335d 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/CoprocessorFilter.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/CoprocessorFilter.java
@@ -28,14 +28,14 @@ import com.kylinolap.cube.CubeSegment;
 import com.kylinolap.cube.kv.RowKeyColumnIO;
 import com.kylinolap.dict.Dictionary;
 import com.kylinolap.metadata.model.TblColRef;
-import com.kylinolap.storage.filter.ColumnTupleFilter;
-import com.kylinolap.storage.filter.CompareTupleFilter;
-import com.kylinolap.storage.filter.ConstantTupleFilter;
-import com.kylinolap.storage.filter.TupleFilter;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
-import com.kylinolap.storage.filter.TupleFilterSerializer;
-import com.kylinolap.storage.filter.TupleFilterSerializer.Decorator;
-import com.kylinolap.storage.tuple.ITuple;
+import com.kylinolap.metadata.filter.ColumnTupleFilter;
+import com.kylinolap.metadata.filter.CompareTupleFilter;
+import com.kylinolap.metadata.filter.ConstantTupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.filter.TupleFilterSerializer;
+import com.kylinolap.metadata.filter.TupleFilterSerializer.Decorator;
+import com.kylinolap.metadata.tuple.ITuple;
 
 /**
  * @author yangli9

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointTupleIterator.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointTupleIterator.java b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointTupleIterator.java
index 53e848f..33f33b6 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointTupleIterator.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointTupleIterator.java
@@ -22,15 +22,15 @@ import com.kylinolap.metadata.model.DataType;
 import com.kylinolap.metadata.model.FunctionDesc;
 import com.kylinolap.metadata.model.TblColRef;
 import com.kylinolap.storage.StorageContext;
-import com.kylinolap.storage.filter.ConstantTupleFilter;
-import com.kylinolap.storage.filter.TupleFilter;
+import com.kylinolap.metadata.filter.ConstantTupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
 import com.kylinolap.storage.hbase.coprocessor.CoprocessorFilter;
 import com.kylinolap.storage.hbase.coprocessor.CoprocessorProjector;
 import com.kylinolap.storage.hbase.coprocessor.CoprocessorRowType;
 import com.kylinolap.storage.hbase.coprocessor.endpoint.generated.IIProtos;
 import com.kylinolap.storage.hbase.coprocessor.endpoint.generated.IIProtos.IIResponse.IIRow;
-import com.kylinolap.storage.tuple.ITuple;
-import com.kylinolap.storage.tuple.ITupleIterator;
+import com.kylinolap.metadata.tuple.ITuple;
+import com.kylinolap.metadata.tuple.ITupleIterator;
 import com.kylinolap.storage.tuple.Tuple;
 import com.kylinolap.storage.tuple.TupleInfo;
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverEnabler.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverEnabler.java b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverEnabler.java
index e1d1925..8f6d74d 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverEnabler.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverEnabler.java
@@ -39,7 +39,7 @@ import com.kylinolap.cube.cuboid.Cuboid;
 import com.kylinolap.cube.kv.RowValueDecoder;
 import com.kylinolap.metadata.model.TblColRef;
 import com.kylinolap.storage.StorageContext;
-import com.kylinolap.storage.filter.TupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
 import com.kylinolap.storage.hbase.RegionScannerAdapter;
 import com.kylinolap.storage.hbase.ResultScannerAdapter;
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverTuple.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverTuple.java b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverTuple.java
index f2301b6..6725958 100644
--- a/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverTuple.java
+++ b/storage/src/main/java/com/kylinolap/storage/hbase/coprocessor/observer/ObserverTuple.java
@@ -23,7 +23,7 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import com.kylinolap.dict.Dictionary;
 import com.kylinolap.metadata.model.TblColRef;
-import com.kylinolap.storage.tuple.ITuple;
+import com.kylinolap.metadata.tuple.ITuple;
 
 /**
  * A special kind of tuple that exposes column value (dictionary ID) directly on

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/tuple/ITuple.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/tuple/ITuple.java b/storage/src/main/java/com/kylinolap/storage/tuple/ITuple.java
deleted file mode 100644
index 3d77154..0000000
--- a/storage/src/main/java/com/kylinolap/storage/tuple/ITuple.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.kylinolap.storage.tuple;
-
-import java.util.List;
-
-import com.kylinolap.metadata.model.TblColRef;
-
-/**
- * Tuple is a record row, contains multiple values being lookup by either field
- * (optiq notion) or column (kylin notion).
- * 
- * @author yangli9
- */
-public interface ITuple {
-
-    public List<String> getAllFields();
-
-    public List<TblColRef> getAllColumns();
-
-    public Object[] getAllValues();
-
-    public Object getValue(TblColRef col);
-
-    public Object getValue(String field);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/tuple/ITupleIterator.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/tuple/ITupleIterator.java b/storage/src/main/java/com/kylinolap/storage/tuple/ITupleIterator.java
deleted file mode 100644
index af20d2a..0000000
--- a/storage/src/main/java/com/kylinolap/storage/tuple/ITupleIterator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2013-2014 eBay Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.kylinolap.storage.tuple;
-
-/**
- * @author xjiang
- */
-public interface ITupleIterator {
-    public static final ITupleIterator EMPTY_TUPLE_ITERATOR = new ITupleIterator() {
-        @Override
-        public boolean hasNext() {
-            return false;
-        }
-
-        @Override
-        public Tuple next() {
-            return null;
-        }
-
-        @Override
-        public void close() {
-        }
-    };
-
-    public boolean hasNext();
-
-    public ITuple next();
-
-    public void close();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/main/java/com/kylinolap/storage/tuple/Tuple.java
----------------------------------------------------------------------
diff --git a/storage/src/main/java/com/kylinolap/storage/tuple/Tuple.java b/storage/src/main/java/com/kylinolap/storage/tuple/Tuple.java
index b342429..1351a09 100644
--- a/storage/src/main/java/com/kylinolap/storage/tuple/Tuple.java
+++ b/storage/src/main/java/com/kylinolap/storage/tuple/Tuple.java
@@ -26,6 +26,7 @@ import com.kylinolap.cube.model.CubeDesc.DeriveInfo;
 import com.kylinolap.dict.DateStrDictionary;
 import com.kylinolap.dict.lookup.LookupStringTable;
 import com.kylinolap.metadata.model.TblColRef;
+import com.kylinolap.metadata.tuple.ITuple;
 
 /**
  * @author xjiang

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/test/java/com/kylinolap/storage/filter/BitMapFilterEvaluatorTest.java
----------------------------------------------------------------------
diff --git a/storage/src/test/java/com/kylinolap/storage/filter/BitMapFilterEvaluatorTest.java b/storage/src/test/java/com/kylinolap/storage/filter/BitMapFilterEvaluatorTest.java
index fedba0b..5d3f012 100644
--- a/storage/src/test/java/com/kylinolap/storage/filter/BitMapFilterEvaluatorTest.java
+++ b/storage/src/test/java/com/kylinolap/storage/filter/BitMapFilterEvaluatorTest.java
@@ -1,11 +1,11 @@
 package com.kylinolap.storage.filter;
 
-import static org.junit.Assert.*;
-
 import java.util.ArrayList;
 
 import com.kylinolap.dict.Dictionary;
+import com.kylinolap.metadata.filter.*;
 import org.junit.Test;
+import static org.junit.Assert.*;
 
 import it.uniroma3.mat.extendedset.intset.ConciseSet;
 
@@ -14,7 +14,7 @@ import com.kylinolap.metadata.model.ColumnDesc;
 import com.kylinolap.metadata.model.TableDesc;
 import com.kylinolap.metadata.model.TblColRef;
 import com.kylinolap.storage.filter.BitMapFilterEvaluator.BitMapProvider;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
 
 public class BitMapFilterEvaluatorTest {
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/test/java/com/kylinolap/storage/filter/FilterBaseTest.java
----------------------------------------------------------------------
diff --git a/storage/src/test/java/com/kylinolap/storage/filter/FilterBaseTest.java b/storage/src/test/java/com/kylinolap/storage/filter/FilterBaseTest.java
index cb22bf0..05e6f81 100644
--- a/storage/src/test/java/com/kylinolap/storage/filter/FilterBaseTest.java
+++ b/storage/src/test/java/com/kylinolap/storage/filter/FilterBaseTest.java
@@ -21,10 +21,11 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Random;
 
+import com.kylinolap.metadata.filter.*;
 import com.kylinolap.metadata.model.ColumnDesc;
 import com.kylinolap.metadata.model.TableDesc;
 import com.kylinolap.metadata.model.TblColRef;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
 import com.kylinolap.storage.tuple.Tuple;
 import com.kylinolap.storage.tuple.TupleInfo;
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/test/java/com/kylinolap/storage/filter/FilterEvaluateTest.java
----------------------------------------------------------------------
diff --git a/storage/src/test/java/com/kylinolap/storage/filter/FilterEvaluateTest.java b/storage/src/test/java/com/kylinolap/storage/filter/FilterEvaluateTest.java
index c4b77c5..0eadee3 100644
--- a/storage/src/test/java/com/kylinolap/storage/filter/FilterEvaluateTest.java
+++ b/storage/src/test/java/com/kylinolap/storage/filter/FilterEvaluateTest.java
@@ -21,6 +21,8 @@ import static org.junit.Assert.*;
 import java.util.Collection;
 import java.util.List;
 
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.filter.TupleFilterSerializer;
 import org.junit.Test;
 
 import com.kylinolap.metadata.model.TblColRef;

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/test/java/com/kylinolap/storage/filter/FilterSerializeTest.java
----------------------------------------------------------------------
diff --git a/storage/src/test/java/com/kylinolap/storage/filter/FilterSerializeTest.java b/storage/src/test/java/com/kylinolap/storage/filter/FilterSerializeTest.java
index c948dbd..a84a8a5 100644
--- a/storage/src/test/java/com/kylinolap/storage/filter/FilterSerializeTest.java
+++ b/storage/src/test/java/com/kylinolap/storage/filter/FilterSerializeTest.java
@@ -19,12 +19,15 @@ package com.kylinolap.storage.filter;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.kylinolap.metadata.filter.LogicalTupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.filter.TupleFilterSerializer;
 import org.junit.Test;
 
 import com.kylinolap.metadata.model.ColumnDesc;
 import com.kylinolap.metadata.model.TableDesc;
 import com.kylinolap.metadata.model.TblColRef;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
 
 /**
  * @author xjiang

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/test/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointAggregationTest.java
----------------------------------------------------------------------
diff --git a/storage/src/test/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointAggregationTest.java b/storage/src/test/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointAggregationTest.java
index 672f037..1a4301e 100644
--- a/storage/src/test/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointAggregationTest.java
+++ b/storage/src/test/java/com/kylinolap/storage/hbase/coprocessor/endpoint/EndpointAggregationTest.java
@@ -10,10 +10,10 @@ import com.kylinolap.invertedindex.index.TableRecordInfo;
 import com.kylinolap.metadata.MetadataManager;
 import com.kylinolap.metadata.measure.MeasureAggregator;
 import com.kylinolap.metadata.model.*;
-import com.kylinolap.storage.filter.ColumnTupleFilter;
-import com.kylinolap.storage.filter.CompareTupleFilter;
-import com.kylinolap.storage.filter.ConstantTupleFilter;
-import com.kylinolap.storage.filter.TupleFilter;
+import com.kylinolap.metadata.filter.ColumnTupleFilter;
+import com.kylinolap.metadata.filter.CompareTupleFilter;
+import com.kylinolap.metadata.filter.ConstantTupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
 import com.kylinolap.storage.hbase.coprocessor.CoprocessorFilter;
 import com.kylinolap.storage.hbase.coprocessor.CoprocessorProjector;
 

http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/94352aec/storage/src/test/java/com/kylinolap/storage/test/StorageTest.java
----------------------------------------------------------------------
diff --git a/storage/src/test/java/com/kylinolap/storage/test/StorageTest.java b/storage/src/test/java/com/kylinolap/storage/test/StorageTest.java
index 1573d34..e1cf96f 100644
--- a/storage/src/test/java/com/kylinolap/storage/test/StorageTest.java
+++ b/storage/src/test/java/com/kylinolap/storage/test/StorageTest.java
@@ -18,8 +18,10 @@ package com.kylinolap.storage.test;
 import static org.junit.Assert.*;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
+import com.kylinolap.metadata.realization.SQLDigest;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
@@ -40,15 +42,15 @@ import com.kylinolap.metadata.model.TblColRef;
 import com.kylinolap.storage.IStorageEngine;
 import com.kylinolap.storage.StorageContext;
 import com.kylinolap.storage.StorageEngineFactory;
-import com.kylinolap.storage.filter.ColumnTupleFilter;
-import com.kylinolap.storage.filter.CompareTupleFilter;
-import com.kylinolap.storage.filter.ConstantTupleFilter;
-import com.kylinolap.storage.filter.LogicalTupleFilter;
-import com.kylinolap.storage.filter.TupleFilter;
-import com.kylinolap.storage.filter.TupleFilter.FilterOperatorEnum;
+import com.kylinolap.metadata.filter.ColumnTupleFilter;
+import com.kylinolap.metadata.filter.CompareTupleFilter;
+import com.kylinolap.metadata.filter.ConstantTupleFilter;
+import com.kylinolap.metadata.filter.LogicalTupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter;
+import com.kylinolap.metadata.filter.TupleFilter.FilterOperatorEnum;
 import com.kylinolap.storage.hbase.ScanOutOfLimitException;
-import com.kylinolap.storage.tuple.ITuple;
-import com.kylinolap.storage.tuple.ITupleIterator;
+import com.kylinolap.metadata.tuple.ITuple;
+import com.kylinolap.metadata.tuple.ITupleIterator;
 
 public class StorageTest extends HBaseMetadataTestCase {
 
@@ -146,7 +148,8 @@ public class StorageTest extends HBaseMetadataTestCase {
         int count = 0;
         ITupleIterator iterator = null;
         try {
-            iterator = storageEngine.search(groups, filter, groups, aggregations, context);
+            SQLDigest sqlDigest = new SQLDigest("default.test_kylin_fact", filter, null, Collections.<TblColRef> emptySet(), groups, Collections.<TblColRef> emptySet(), Collections.<TblColRef> emptySet(), aggregations);
+            iterator = storageEngine.search(context, sqlDigest);
             while (iterator.hasNext()) {
                 ITuple tuple = iterator.next();
                 System.out.println("Tuple = " + tuple);