Exemplo n.º 1
0
        /**
         * Method declaration
         *
         *
         * @param e
         */
        private void addAndCondition(Expression e)
        {
            Expression e2 = new Expression(e);

            if (eAnd == null)
            {
                eAnd = e2;
            }
            else
            {
                Expression and = new Expression(Expression.AND, eAnd, e2);

                eAnd = and;
            }

            e.setTrue();
        }
Exemplo n.º 2
0
        /**
         * Method declaration
         *
         *
         * @param e
         */
        private void addAndCondition(Expression e)
        {
            Expression e2 = new Expression(e);

            if (eAnd == null)
            {
                eAnd = e2;
            }
            else
            {
                Expression and = new Expression(Expression.AND, eAnd, e2);

                eAnd = and;
            }

            e.setTrue();
        }
Exemplo n.º 3
0
        /**
         * Method declaration
         *
         *
         * @param e
         *
         * @throws Exception
         */
        public void setCondition(Expression e)
        {
            int	   type = e.getType();
            Expression e1 = e.getArg();
            Expression e2 = e.getArg2();

            if (type == Expression.AND)
            {
                setCondition(e1);
                setCondition(e2);

                return;
            }

            int candidate;

            switch (type)
            {

                case Expression.NOT_EQUAL:

                case Expression.LIKE:    // todo: maybe use index

                case Expression.IN:
                    candidate = 0;

                    break;

                case Expression.EQUAL:
                    candidate = 1;

                    break;

                case Expression.BIGGER:

                case Expression.BIGGER_EQUAL:
                    candidate = 2;

                    break;

                case Expression.SMALLER:

                case Expression.SMALLER_EQUAL:
                    candidate = 3;

                    break;

                default:

                    // not a condition so forget it
                    return;
            }

            if (e1.getFilter() == this)
            {

                // ok include this
            }
            else if (e2.getFilter() == this && candidate != 0)
            {

                // swap and try again to allow index usage
                e.swapCondition();
                setCondition(e);

                return;
            }
            else
            {

                // unrelated: don't include
                return;
            }

            Trace.assert(e1.getFilter() == this, "setCondition");

            if (!e2.isResolved())
            {
                return;
            }

            if (candidate == 0)
            {
                addAndCondition(e);

                return;
            }

            int   i = e1.getColumnNr();
            Index index = tTable.getIndexForColumn(i);

            if (index == null || (iIndex != index && iIndex != null))
            {

                // no index or already another index is used
                addAndCondition(e);

                return;
            }

            iIndex = index;

            if (candidate == 1)
            {

                // candidate for both start & end
                if (eStart != null || eEnd != null)
                {
                    addAndCondition(e);

                    return;
                }

                eStart = new Expression(e);
                eEnd = eStart;
            }
            else if (candidate == 2)
            {

                // candidate for start
                if (eStart != null)
                {
                    addAndCondition(e);

                    return;
                }

                eStart = new Expression(e);
            }
            else if (candidate == 3)
            {

                // candidate for end
                if (eEnd != null)
                {
                    addAndCondition(e);

                    return;
                }

                eEnd = new Expression(e);
            }

            e.setTrue();
        }
Exemplo n.º 4
0
        /**
         * Method declaration
         *
         *
         * @param e
         *
         * @throws Exception
         */
        public void setCondition(Expression e)
        {
            int        type = e.getType();
            Expression e1   = e.getArg();
            Expression e2   = e.getArg2();

            if (type == Expression.AND)
            {
                setCondition(e1);
                setCondition(e2);

                return;
            }

            int candidate;

            switch (type)
            {
            case Expression.NOT_EQUAL:

            case Expression.LIKE:                        // todo: maybe use index

            case Expression.IN:
                candidate = 0;

                break;

            case Expression.EQUAL:
                candidate = 1;

                break;

            case Expression.BIGGER:

            case Expression.BIGGER_EQUAL:
                candidate = 2;

                break;

            case Expression.SMALLER:

            case Expression.SMALLER_EQUAL:
                candidate = 3;

                break;

            default:

                // not a condition so forget it
                return;
            }

            if (e1.getFilter() == this)
            {
                // ok include this
            }
            else if (e2.getFilter() == this && candidate != 0)
            {
                // swap and try again to allow index usage
                e.swapCondition();
                setCondition(e);

                return;
            }
            else
            {
                // unrelated: don't include
                return;
            }

            Trace.assert(e1.getFilter() == this, "setCondition");

            if (!e2.isResolved())
            {
                return;
            }

            if (candidate == 0)
            {
                addAndCondition(e);

                return;
            }

            int   i     = e1.getColumnNr();
            Index index = tTable.getIndexForColumn(i);

            if (index == null || (iIndex != index && iIndex != null))
            {
                // no index or already another index is used
                addAndCondition(e);

                return;
            }

            iIndex = index;

            if (candidate == 1)
            {
                // candidate for both start & end
                if (eStart != null || eEnd != null)
                {
                    addAndCondition(e);

                    return;
                }

                eStart = new Expression(e);
                eEnd   = eStart;
            }
            else if (candidate == 2)
            {
                // candidate for start
                if (eStart != null)
                {
                    addAndCondition(e);

                    return;
                }

                eStart = new Expression(e);
            }
            else if (candidate == 3)
            {
                // candidate for end
                if (eEnd != null)
                {
                    addAndCondition(e);

                    return;
                }

                eEnd = new Expression(e);
            }

            e.setTrue();
        }