Package org.voltdb.expressions

Examples of org.voltdb.expressions.AbstractExpression


            // matches
            int orig_guid = node.getOutputColumnGUID(i);
            PlanColumn orig_pc = state.plannerContext.get(orig_guid);
            assert (orig_pc != null);

            AbstractExpression orig_pc_exp = orig_pc.getExpression();
            if (!(orig_pc_exp instanceof TupleValueExpression)) {
                TupleValueExpression new_exp = new TupleValueExpression();
                new_exp.setColumnIndex(i);
                new_exp.setColumnAlias(orig_pc.getDisplayName());
                new_exp.setValueType(VoltType.STRING);
View Full Code Here


                    // PlanColumn
                    for (int i = 0, cnt = element.getOutputColumnGUIDCount(); i < cnt; i++) {
                        Integer col_guid = element.getOutputColumnGUID(i);
                        PlanColumn pc_col = state.plannerContext.get(col_guid);
                        assert (pc_col != null) : "Missing output column " + i + " for " + element;
                        AbstractExpression exp = pc_col.getExpression();

                        if (exp.getExpressionType() == ExpressionType.VALUE_TUPLE && ((TupleValueExpression) exp).getColumnIndex() != i) {
                            // NOTE: You can't just update the
                            // TupleValueExpression because other nodes might be
                            // referencing it. We have to clone the expression
                            // tree, update the offset and then register
                            // the PlanColumn
                            TupleValueExpression clone_exp = null;
                            try {
                                clone_exp = (TupleValueExpression) exp.clone();
                            } catch (CloneNotSupportedException ex) {
                                LOG.fatal("Unexpected error", ex);
                                throw new RuntimeException(ex);
                            }
                            assert (clone_exp != null);
View Full Code Here

            assert(node.getNodeValue().equalsIgnoreCase(table.getTypeName()));
            node = attrs.getNamedItem("name");
            assert(node != null);
            col = table.getColumns().getIgnoreCase(node.getNodeValue().trim());

            AbstractExpression expr = null;
            for (Node subChild = child.getFirstChild(); subChild != null; subChild = subChild.getNextSibling()) {
                if (subChild.getNodeType() != Node.ELEMENT_NODE)
                    continue;
                expr = parseExpressionTree(subChild, db);
                ExpressionUtil.assignLiteralConstantTypesRecursively(expr, VoltType.get((byte)col.getType()));
View Full Code Here

            }

            int outputColumnIndex = 0;
            for (ParsedSelectStmt.ParsedColInfo col : m_parsedSelect.displayColumns) {

                AbstractExpression rootExpr = col.expression;
                ExpressionType agg_expression_type = rootExpr.getExpressionType();
                if (rootExpr.getExpressionType() == ExpressionType.AGGREGATE_SUM ||
                    rootExpr.getExpressionType() == ExpressionType.AGGREGATE_MIN ||
                    rootExpr.getExpressionType() == ExpressionType.AGGREGATE_MAX ||
                    rootExpr.getExpressionType() == ExpressionType.AGGREGATE_AVG ||
                    rootExpr.getExpressionType() == ExpressionType.AGGREGATE_COUNT ||
                    rootExpr.getExpressionType() == ExpressionType.AGGREGATE_COUNT_STAR)
                {
                    PlanColumn aggregateColumn = null;
                    if (rootExpr.getLeft() instanceof TupleValueExpression)
                    {
                        TupleValueExpression nested =
                            (TupleValueExpression) rootExpr.getLeft();

                        if (((AggregateExpression)rootExpr).m_distinct) {
                            root = addDistinctNode(root, nested);
                        }

                        aggregateColumn =
                            root.findMatchingOutputColumn(nested.getTableName(),
                                                          nested.getColumnName(),
                                                          nested.getColumnAlias());
                    }
                    // count(*) hack.  we're not getting AGGREGATE_COUNT_STAR
                    // expression types from the parsing, so we have
                    // to detect the null inner expression case and do the
                    // switcharoo ourselves.
                    else if (rootExpr.getExpressionType() == ExpressionType.AGGREGATE_COUNT &&
                             rootExpr.getLeft() == null)
                    {
                        aggregateColumn =
                            m_context.get(root.getOutputColumnGUIDs().get(0));
                        agg_expression_type = ExpressionType.AGGREGATE_COUNT_STAR;
                    }
                    else
                    {
                        throw new PlanningErrorException("Expressions in aggregates currently unsupported");
                    }

                    aggNode.getAggregateColumnGuids().add(aggregateColumn.guid());
                    aggNode.getAggregateColumnNames().add(aggregateColumn.getDisplayName());
                    aggNode.getAggregateTypes().add(agg_expression_type);

                    // A bit of a hack: ProjectionNodes using PlanColumns after the
                    // aggregate node need the output columns here to
                    // contain TupleValueExpressions (effectively on a temp table).
                    // So we construct one based on the output of the
                    // aggregate expression, the column alias provided by HSQL,
                    // and the offset into the output table schema for the
                    // aggregate node that we're computing.
                    TupleValueExpression tve = new TupleValueExpression();
                   
                    // If this is an AVG, then our type should be DECIMAL
                    if (agg_expression_type == ExpressionType.AGGREGATE_AVG) {
                        tve.setValueType(VoltType.FLOAT);
                        tve.setValueSize(VoltType.FLOAT.getLengthInBytesForFixedTypes());
                    }
                    // Otherwise it can be whatever the rootExpression is
                    else {
                        tve.setValueType(rootExpr.getValueType());
                        tve.setValueSize(rootExpr.getValueSize());
                    }
                    tve.setColumnIndex(outputColumnIndex);
                    tve.setColumnName("");
                    tve.setColumnAlias(col.alias);
                    tve.setTableName(AGGREGATE_TEMP_TABLE);
View Full Code Here

        super.validate();

        // Validate Expression Trees
        for (int ctr = 0; ctr < m_outputSchema.getColumns().size(); ctr++) {
            SchemaColumn column = m_outputSchema.getColumns().get(ctr);
            AbstractExpression exp = column.getExpression();
            if (exp == null) {
                throw new Exception("ERROR: The Output Column Expression at position '" + ctr + "' is NULL");
            }
            exp.validate();
        }
    }
View Full Code Here

    {
        String tableName = "";
        String tableAlias = "";
        String columnName = "";
        String columnAlias = "";
        AbstractExpression expression = null;
        if( !jobj.isNull( Members.COLUMN_NAME.name() ) ){
            columnName = jobj.getString( Members.COLUMN_NAME.name() );
        }
        expression = AbstractExpression.fromJSONChild(jobj, Members.EXPRESSION.name());
        return new SchemaColumn( tableName, tableAlias, columnName, columnAlias, expression );
View Full Code Here

        for (int ii = 0; ii < m_aggregateTypes.size(); ii++) {
            stringer.object();
            stringer.key(Members.AGGREGATE_TYPE.name()).value(m_aggregateTypes.get(ii).name());
            stringer.key(Members.AGGREGATE_DISTINCT.name()).value(m_aggregateDistinct.get(ii));
            stringer.key(Members.AGGREGATE_OUTPUT_COLUMN.name()).value(m_aggregateOutputColumns.get(ii));
            AbstractExpression ae = m_aggregateExpressions.get(ii);
            if (ae != null) {
                stringer.key(Members.AGGREGATE_EXPRESSION.name());
                stringer.object();
                ae.toJSONString(stringer);
                stringer.endObject();
            }
            stringer.endObject();
        }
        stringer.endArray();
View Full Code Here

            if (e != ExpressionType.AGGREGATE_COUNT_STAR) {
                if (m_aggregateDistinct.get(ii) == 1) {
                    sb.append(" DISTINCT");
                }
                sb.append("(");
                AbstractExpression ae = m_aggregateExpressions.get(ii);
                if (ae != null) {
                    sb.append(ae.explain(optionalTableName));
                }
                sb.append("), ");
            }
            ++ii;
        }
View Full Code Here

            }
        }

        List<AbstractExpression> exprs = new ArrayList<AbstractExpression>();
        for (int i = 0; i < nextKeyIndex; i++) {
            AbstractExpression idxExpr = indexedExprs.get(i);
            AbstractExpression expr = new ComparisonExpression(ExpressionType.COMPARE_EQUAL,
                    idxExpr, (AbstractExpression) m_searchkeyExpressions.get(i).clone());
            exprs.add(expr);
        }
        AbstractExpression nullExpr = indexedExprs.get(nextKeyIndex);
        AbstractExpression expr = new OperatorExpression(ExpressionType.OPERATOR_IS_NULL, nullExpr, null);
        exprs.add(expr);

        m_skip_null_predicate = ExpressionUtil.combine(exprs);
        m_skip_null_predicate.finalizeValueTypes();
    }
View Full Code Here

        // if the size of predicates doesn't equal 1, can't be our added artifact predicates
        if (predicates.size() != 1) {
            return false;
        }
        // examin the possible "added" predicates: NOT NULL expr.
        AbstractExpression expr = predicates.get(0);
        if (expr.getExpressionType() != ExpressionType.OPERATOR_NOT) {
            return false;
        }
        if (expr.getLeft().getExpressionType() != ExpressionType.OPERATOR_IS_NULL) {
            return false;
        }
        // Not reverse scan.
        if (m_lookupType != IndexLookupType.LT && m_lookupType != IndexLookupType.LTE) {
            return false;
View Full Code Here

TOP

Related Classes of org.voltdb.expressions.AbstractExpression

Copyright © 2018 www.massapicom. 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.