Android Open Source - jepldroid J E P L Query Parsed Impl






From Project

Back to project page jepldroid.

License

The source code is released under:

Apache License

If you think the Android project jepldroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
   Copyright 2011 Jose Maria Arranz Santamaria
/* w  w  w.  j  a  v  a 2s .c o  m*/
   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 jepl.impl.query;

import java.util.ArrayList;
import java.util.LinkedList;

import jepl.JEPLException;
import jepl.impl.lex.JDBCParamStandardToken;
import jepl.impl.lex.JDBCParamToken;
import jepl.impl.lex.JDBCParamWithNameToken;
import jepl.impl.lex.JDBCParamWithNumberToken;
import jepl.impl.lex.SourceCode;
import jepl.impl.lex.Token;
import jepl.impl.lex.TokenFilter;

/**
 *
 * @author jmarranz
 */
public class JEPLQueryParsedImpl
{
    protected static final TokenFilter tokenFilter = new TokenFilter()
    {
        @Override
        public boolean accept(Token token)
        {
            return token instanceof JDBCParamToken;
        }
    };
    protected String sqlOriginal; // Con los tipos de parmetros de JEPLayer
    protected String sqlJDBC; // Vlido para JDBC
    protected ArrayList<JEPLParameterDecImpl> paramsByJDBCPosition;

    
    public JEPLQueryParsedImpl(String sqlOriginal)
    {
        this.sqlOriginal = sqlOriginal;

        if (isNeededParsing(sqlOriginal))
        {
            SourceCode sc = new SourceCode(sqlOriginal,tokenFilter);
            LinkedList<Token> tokenList = sc.getTokenList();
            StringBuilder sqlBuff = new StringBuilder();
            int currentSQLPos = 0;
            for(Token token : tokenList)
            {
                JDBCParamToken tokenParam = (JDBCParamToken)token;
                addParameter(tokenParam);

                int start = tokenParam.getStart();
                int end = tokenParam.getEnd();
                sqlBuff.append(sqlOriginal.substring(currentSQLPos, start));
                sqlBuff.append("?");
                currentSQLPos = end + 1;
            }

            sqlBuff.append(sqlOriginal.substring(currentSQLPos)); // El tramo ltimo pendiente (o la SQL completa)

            this.sqlJDBC = sqlBuff.toString();
        }
        else
        {
            this.sqlJDBC = sqlOriginal;
        }
    }


    public String getSQLJDBC()
    {
        return sqlJDBC;
    }

    private void addParameter(JDBCParamToken tokenParam)
    {
        // Algunas ideas son de JPA
        // http://www.objectdb.com/java/jpa/query/parameter
        // Podemos mezclar tipos y repetir nombres:  "... ? ... ?2 ... :myname ... ?4 ... :myname ..."

        if (paramsByJDBCPosition == null)
            this.paramsByJDBCPosition = new ArrayList<JEPLParameterDecImpl>();

        int jdbcPosition = paramsByJDBCPosition.size() + 1;

        JEPLParameterDecImpl param = null;
        if (tokenParam instanceof JDBCParamStandardToken)
        {
            param = new JEPLParameterDecWithNumberImpl(jdbcPosition);
        }
        else if (tokenParam instanceof JDBCParamWithNumberToken)
        {
            int paramNumber = ((JDBCParamWithNumberToken)tokenParam).getNumber();
            // paramNumber DEBE ser igual a paramsByJDBCPosition.size() + 1  (ej. el primer param es 1 y size es 0 antes de insertar)

            if (paramNumber > jdbcPosition)
                throw new JEPLException("Parameter in SQL query with number ?" + paramNumber + " is bigger than expected ?" + jdbcPosition);
            else if (paramNumber < paramsByJDBCPosition.size())
                throw new JEPLException("Parameter in SQL query with number ?" + paramNumber + " is smaller than expected ?" + jdbcPosition);

            // paramNumber coincide con la posicin JDBC
            param = new JEPLParameterDecWithNumberImpl(paramNumber);
        }
        else if(tokenParam instanceof JDBCParamWithNameToken)
        {
            String name = ((JDBCParamWithNameToken)tokenParam).getName();
            param = new JEPLParameterDecWithNameImpl(jdbcPosition,name);
        }
        // No hay ms casos

        paramsByJDBCPosition.add(param);
    }


    public static boolean isNeededParsing(String sqlOriginal)
    {
        for(int i = 0; i < sqlOriginal.length(); i++)
        {
            char c = sqlOriginal.charAt(i);
            if (c == '?' || c == ':')
                return true; // Ojo que es posible que est dentro de una cadena literal pero necesitamos parsear para saberlo
        }
        return false;
    }

    public ArrayList<JEPLParameterDecImpl> getParamsByJDBCPosition()
    {
        return paramsByJDBCPosition;
    }
}




Java Source Code List

com.innowhere.jepldroidtest.JEPLDroidTestActivity.java
jepl.JEPLBootNonJTA.java
jepl.JEPLBootRoot.java
jepl.JEPLBoot.java
jepl.JEPLCachedResultSet.java
jepl.JEPLConnectionListener.java
jepl.JEPLConnection.java
jepl.JEPLDALQuery.java
jepl.JEPLDAL.java
jepl.JEPLDAOQuery.java
jepl.JEPLDAO.java
jepl.JEPLDataSource.java
jepl.JEPLException.java
jepl.JEPLListener.java
jepl.JEPLNonJTADataSource.java
jepl.JEPLParameter.java
jepl.JEPLPreparedStatementListener.java
jepl.JEPLPreparedStatement.java
jepl.JEPLResultSetDALListener.java
jepl.JEPLResultSetDAOListenerDefault.java
jepl.JEPLResultSetDAOListener.java
jepl.JEPLResultSetDAO.java
jepl.JEPLResultSet.java
jepl.JEPLRowBeanMapper.java
jepl.JEPLStatement.java
jepl.JEPLTask.java
jepl.JEPLTransactionPropagation.java
jepl.JEPLTransaction.java
jepl.JEPLTransactionalJTA.java
jepl.JEPLTransactionalNonJTA.java
jepl.JEPLUserData.java
jepl.impl.JEPLBootImpl.java
jepl.impl.JEPLBootRootImpl.java
jepl.impl.JEPLConnectionImpl.java
jepl.impl.JEPLCurrentTransactionImpl.java
jepl.impl.JEPLDALDefaultImpl.java
jepl.impl.JEPLDALImpl.java
jepl.impl.JEPLDAOImpl.java
jepl.impl.JEPLDataSourceImpl.java
jepl.impl.JEPLListenerListImpl.java
jepl.impl.JEPLPreparedStatementDefaultImpl.java
jepl.impl.JEPLPreparedStatementImpl.java
jepl.impl.JEPLStatementImpl.java
jepl.impl.JEPLTaskExecContextImpl.java
jepl.impl.JEPLTaskExecContextInConnectionImpl.java
jepl.impl.JEPLTaskOneExecWithConnectionImpl.java
jepl.impl.JEPLTaskOneExecWithConnectionWrapperImpl.java
jepl.impl.JEPLTaskOneExecutionImpl.java
jepl.impl.JEPLTaskOneExecutionWrapperImpl.java
jepl.impl.JEPLUserDataMonoThreadImpl.java
jepl.impl.JEPLUserDataMultiThreadImpl.java
jepl.impl.JEPLUtilImpl.java
jepl.impl.lex.Cursor.java
jepl.impl.lex.Identifier.java
jepl.impl.lex.JDBCParamStandardToken.java
jepl.impl.lex.JDBCParamToken.java
jepl.impl.lex.JDBCParamWithNameToken.java
jepl.impl.lex.JDBCParamWithNumberToken.java
jepl.impl.lex.OtherCharToken.java
jepl.impl.lex.SourceCode.java
jepl.impl.lex.Space.java
jepl.impl.lex.StringDoubleQuote.java
jepl.impl.lex.StringLiteral.java
jepl.impl.lex.StringSimpleQuote.java
jepl.impl.lex.TestSourceCode.java
jepl.impl.lex.TokenFilter.java
jepl.impl.lex.Token.java
jepl.impl.nonjta.JEPLBootNonJTAImpl.java
jepl.impl.nonjta.JEPLCurrentTransactionNonJTAImpl.java
jepl.impl.nonjta.JEPLNonJTAConnectionDefaultImpl.java
jepl.impl.nonjta.JEPLNonJTAConnectionImpl.java
jepl.impl.nonjta.JEPLNonJTADataSourceDefaultImpl.java
jepl.impl.nonjta.JEPLNonJTADataSourceImpl.java
jepl.impl.nonjta.JEPLTaskExecContextInConnectionNonJTAImpl.java
jepl.impl.nonjta.android.JEPLNonJTAConnectionSQLDroidImpl.java
jepl.impl.nonjta.android.JEPLNonJTADataSourceAndroidImpl.java
jepl.impl.nonjta.android.JEPLPreparedStatementSQLDroidImpl.java
jepl.impl.query.JEPLCachedResultSetImpl.java
jepl.impl.query.JEPLDALQueryImpl.java
jepl.impl.query.JEPLDAOQueryImpl.java
jepl.impl.query.JEPLParameterDecImpl.java
jepl.impl.query.JEPLParameterDecWithNameImpl.java
jepl.impl.query.JEPLParameterDecWithNumberImpl.java
jepl.impl.query.JEPLParameterImpl.java
jepl.impl.query.JEPLParameterValueImpl.java
jepl.impl.query.JEPLParameterValueNamedImpl.java
jepl.impl.query.JEPLParameterWithNameImpl.java
jepl.impl.query.JEPLParameterWithNumberImpl.java
jepl.impl.query.JEPLPropertyDescriptorImpl.java
jepl.impl.query.JEPLPropertyDescriptorJavaBeansImpl.java
jepl.impl.query.JEPLQueryParsedCacheImpl.java
jepl.impl.query.JEPLQueryParsedImpl.java
jepl.impl.query.JEPLResultSetBeanInfo.java
jepl.impl.query.JEPLResultSetDAOImpl.java
jepl.impl.query.JEPLResultSetDAOIteratorImpl.java
jepl.impl.query.JEPLResultSetDAOListenerDefaultImpl.java
jepl.impl.query.JEPLResultSetDefaultImpl.java
jepl.impl.query.JEPLResultSetImpl.java