All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scriptella.jdbc.CachedSqlTokenizer Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2006-2012 The Scriptella Project Team.
 *
 * 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 scriptella.jdbc;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * This tokenizer uses target to tokenize statements and remembers
 * parsed statements and injections, so it can be reset and iterated several times.
 * Call {@link #close()} to reset tokenizer.
 *
 * @author Fyodor Kupolov
 * @version 1.0
 */
final class CachedSqlTokenizer implements SqlTokenizer {
    private SqlTokenizer target;
    private List statements;
    private String[] statementsArray; //For better performance
    private List injections;
    private int[][] injectionsArray; //For better performance
    private int index=-1;


    /**
     * Instantiates tokenizer based on the specified target.
     * @param target target to use. The statements are cached lazily as they
     * are obtained by calling {@link #nextStatement()}.
     */
    public CachedSqlTokenizer(SqlTokenizer target) {
        this.target = target;
    }

    public String nextStatement() throws IOException {
        if (target != null) {
            String st = target.nextStatement();
            if (st != null) {
                if (statements == null) {
                    statements = new ArrayList();
                    injections = new ArrayList();
                }
                statements.add(st);
            }
            return st;
        } else {
            index++;
            if (statementsArray == null || index >= statementsArray.length) {
                return null;
            }
            return statementsArray[index];
        }
    }

    /**
     * This method returns list of injections for the last returned statement.
     *
     * @return injections for the last returned statement.
     */
    public int[] getInjections() {
        if (target != null) {
            int[] inj = target.getInjections();
            injections.add(inj);
            return inj;
        } else {
            if (injectionsArray != null && index
     * 
  • calling close first time closes target tokenizer, * subsequent close invocations reset index to start iteration. *
  • After close is called for the first time, unread statements * are skipped and not returned in subsequent iterations. * * */ public void close() throws IOException { if (target != null) { if (statements!=null) { statementsArray=statements.toArray(new String[statements.size()]); injectionsArray=injections.toArray(new int[injections.size()][]); statements=null; injections=null; } try { target.close(); } finally { target = null; //We do not need target anymore } } else { index = -1; } } }




  • © 2015 - 2025 Weber Informatics LLC | Privacy Policy