Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2015 The University of Vermont and State
   * Agricultural College.  All rights reserved.
   *
   * Written by Matthew B. Storer <matthewbstorer@gmail.com>
   *
   * This file is part of CCTS Common.
   *
   * CCTS Common is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
  *
  * CCTS Common is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with CCTS Common.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package edu.uvm.ccts.common.sql;
 
 
 import java.util.Date;
 import java.util.List;

Created by mstorer on 11/1/13.
 
 public class SqlStatement {
     private static final Log log = LogFactory.getLog(SqlStatement.class);
 
     private static final List<CharacterwhitespaceChars = Arrays.asList(' ''\n''\r''\t');
 
     private String sql;
     private StatementNode stmtNode;
     private List<FieldselectedFields = null;
     private List<Tabletables = null;
     private List<ObjectwhereClauseValues = null;
 
     public SqlStatement(String sqlthrows StandardException {
         this. = sql;
         refresh();
     }
 
     public void treePrint() {
         .treePrint();
     }
 
     @Override
     public String toString() {
         return getSql();
     }
 
     public String getSql() {
         return ;
     }
 
     public List<ObjectgetWhereClauseValues() {
         return ;
     }
 
     public List<FieldgetSelectedFields() {
         if ( == null) {
              = new ArrayList<Field>();
 
             ResultSetNode rsNode = ((CursorNode).getResultSetNode();
             ResultColumnList selectCols = rsNode.getResultColumns();
 
             for (String colName : selectCols.getColumnNames()) {
                 Field sf;
                 if (colName == null) {
                     // query selects a non-table field (e.g. null, 3+5, etc.) without an alias
 
                     String tn = getTables().get(0).getAliasOrName();
                     sf = new Field(tn..);
 
                 } else {
                     ResultColumn col = selectCols.getResultColumn(colName);
                     ValueNode expr = col.getExpression();
 
                     if (expr.getColumnName() == null) {
                         // query selects a non-table field (e.g. null, 3+5, etc.) with an alias
 
                         String tn = getTables().get(0).getAliasOrName();
                         sf = new Field(tn.col.getName());
 
                    } else {
                        sf = new Field(expr.getTableName(), expr.getColumnName(), col.getName());
                    }
                }
                .add(sf);
            }
        }
        return ;
    }
    public List<TablegetTables() {
        if ( == null) {
             = new ArrayList<Table>();
            SelectNode selNode = (SelectNode) ((CursorNode).getResultSetNode();
            FromList fromList = selNode.getFromList();
            for (int i = 0; i < fromList.size(); i ++) {
                populateTableList(fromList.get(i), );
            }
        }
        return ;
    }
    public String getActualNameForTable(String tableNamethrows TableNotFoundException {
        for (Table t : getTables()) {
            if (t.hasNameOrAlias(tableName)) {
                return t.getName();
            }
        }
        throw new TableNotFoundException("unknown table '" + tableName + "'");
    }
    public String getAliasOrNameForTable(String tableNamethrows TableNotFoundException {
        for (Table t : getTables()) {
            if (t.hasNameOrAlias(tableName)) {
                return t.getAliasOrName();
            }
        }
        throw new TableNotFoundException("unknown table '" + tableName + "'");
    }
    public void addSelectField(Field fieldthrows StandardException {
        SelectNode selNode = (SelectNode) ((CursorNode).getResultSetNode();
        FromList fromList = selNode.getFromList();
        int offset = fromList.getBeginOffset() - 6;
        char c = .charAt(offset);
        while (.contains(c)) c = .charAt(--offset);
        offset += 1;
        StringBuilder sb = new StringBuilder();
        sb.append(.substring(0, offset));
        sb.append(", ").append(field.asSelectField());
        sb.append(.substring(offset));
         = sb.toString();
        refresh();
    }
    public void addWhereClause(String whereClauseFragmentList<Objectvaluesthrows StandardException {
        if (whereClauseFragment.trim().isEmpty()) return;
        assert StringUtils.countMatches(whereClauseFragment"?") == values.size() : "SQL value placeholder count mismatch";
        SelectNode selNode = (SelectNode) ((CursorNode).getResultSetNode();
        ValueNode whereClause = selNode.getWhereClause();
        int offset = whereClause != null ?
                whereClause.getEndOffset() + 1 :
                selNode.getFromList().getEndOffset() + 1;
        StringBuilder sb = new StringBuilder();
        sb.append(.substring(0, offset));
        if (whereClause == nullsb.append(" where ");
        else                     sb.append(" and ");
        sb.append(whereClauseFragment);
        sb.append(.substring(offset));
         = sb.toString();
        if ( == null = new ArrayList<Object>();
        for (Object value : values) {
            if (value instanceof Date)  .add(new java.sql.Timestamp(((Datevalue).getTime()));
            else                        .add(value);
        }
//        whereClauseValues.addAll(values);
        refresh();
    }
///////////////////////////////////////////////////////////////////////////////////
// Private methods
//
    protected void refresh() throws StandardException {
        SQLParser parser = new SQLParser();
         = parser.parseStatement();
         = null;
         = null;
    }
    private void populateTableList(ResultSetNode nodeList<Tablelist) {
        if (node instanceof JoinNode) {
            JoinNode jn = (JoinNodenode;
            populateTableList(jn.getLogicalLeftResultSet(), list);
            populateTableList(jn.getLogicalRightResultSet(), list);
        } else if (node instanceof FromBaseTable) {
            FromBaseTable fbt = (FromBaseTablenode;
            Table t = new Table(fbt.getOrigTableName().getTableName(), fbt.getCorrelationName());
            list.add(t);
        }
    }
New to GrepCode? Check out our FAQ X