Package co.jirm.orm.writer

Source Code of co.jirm.orm.writer.SqlWriterStrategy

/**
* Copyright (C) 2012 the original author or authors.
*
* 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 co.jirm.orm.writer;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang3.text.StrLookup;
import org.apache.commons.lang3.text.StrSubstitutor;

import co.jirm.core.util.JirmPrecondition;
import co.jirm.mapper.definition.SqlObjectDefinition;
import co.jirm.mapper.definition.SqlParameterDefinition;

import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;


public class SqlWriterStrategy {
 
  public StringBuilder insertStatement(StringBuilder qb, final SqlObjectDefinition<?> definition, Map<String, Object> m) {
    qb.append("INSERT INTO ").append(definition.getSqlName()).append(" (");
    Joiner.on(", ").appendTo(qb, insertColumns(definition, m));
    qb.append(") VALUES (");
    Joiner.on(", ").appendTo(qb, valueMarks(m.values()));
    qb.append(")");
    return qb;
  }
 
  public StringBuilder selectStatementBeforeWhere(StringBuilder sb, final SqlObjectDefinition<?> definition) {
    sb.append("SELECT ");
    definition.selectParameters(sb);
    sb.append(" FROM ").append(definition.getSqlName());
    definition.innerJoin(sb);
    return sb;
  }
 
  public StringBuilder deleteStatementBeforeWhere(StringBuilder sb, final SqlObjectDefinition<?> definition) {
    sb.append("DELETE FROM ").append(definition.getSqlName());
    return sb;
  }
 
  public StringBuilder updateStatementBeforeSet(StringBuilder sb, final SqlObjectDefinition<?> definition) {
    sb.append("UPDATE ").append(definition.getSqlName());
    return sb;
  }
 
  protected List<String> insertColumns(SqlObjectDefinition<?> definition, Map<String, Object> m) {
    List<String> equalsKeys = new ArrayList<String>();
    for (Entry<String, Object> e : m.entrySet()) {
      Optional<String> sqlName = definition.parameterNameToSql(e.getKey());
      JirmPrecondition.check.state(sqlName.isPresent(),
          "Property: {} not found in object.", e.getKey());
      equalsKeys.add(sqlName.get());
    }
    return equalsKeys;
  }
 
  public void appendValues(final SqlObjectDefinition<?> definition, List<Object> values, Map<String, Object> keysAndValues) {
    for (Entry<String, Object> e : keysAndValues.entrySet()) {
      SqlParameterDefinition d = definition.getParameters().get(e.getKey());
      if (d == null) {
        values.add(e.getValue())
      }
      else {
        values.add(d.convertToSql(e.getValue()));
      }
    }
  }
 
  public List<Object> fillValues(final SqlObjectDefinition<?> definition, Map<String, Object> keysAndValues) {
    List<Object> values = Lists.newArrayListWithCapacity(keysAndValues.size());
    appendValues(definition, values, keysAndValues);
    return values;
  }
 
  protected List<String> valueMarks(Iterable<Object> values) {
    List<String> marks = new ArrayList<String>();
    for (@SuppressWarnings("unused") Object v : values) {
      marks.add("?");
    }
    return marks;
  }
 
  public String replacePropertyPaths(final SqlObjectDefinition<?> definition, final String sql) {
    StrLookup<String> lookup = new StrLookup<String>() {
      @Override
      public String lookup(String key) {
        return definition.parameterPathToSql(key).orNull();
      }
    };
    StrSubstitutor s = new StrSubstitutor(lookup, "{{", "}}", '$');
    String result = s.replace(sql);
    return result;
  }
 
  public String replaceProperties(final SqlObjectDefinition<?> definition, final String sql) {
    StrLookup<String> lookup = new StrLookup<String>() {
      @Override
      public String lookup(String key) {
        Optional<String> sqlName = definition.parameterNameToSql(key);
        JirmPrecondition.check.state(sqlName.isPresent(), "Property: {} not found in object.", key);
        return sqlName.get();
      }
    };
    StrSubstitutor s = new StrSubstitutor(lookup, "{{", "}}", '$');
    String result = s.replace(sql);
    return result;
  }
 
 
//  public String selectConjuntionQuery() {
//    StringBuilder qb = new StringBuilder();
//    qb.append("SELECT ");
//    definition.selectParameters(qb);
//    qb.append(" FROM ").append(definition.getSqlName());
//    definition.innerJoin(qb);
//    qb.append(" WHERE ").append(this.andClause());
//    if (limit.isPresent()) {
//      qb.append(" ");
//      qb.append("LIMIT ?"); 
//    }
//    if (offset.isPresent()) {
//      qb.append(" ");
//      qb.append("OFFSET ?");
//    }
//    String q = qb.toString();
//    return q;
//  }
// 

}
TOP

Related Classes of co.jirm.orm.writer.SqlWriterStrategy

TOP
Copyright © 2018 www.massapi.com. 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.