Package com.rapleaf.jack.test_project.database_1.impl

Source Code of com.rapleaf.jack.test_project.database_1.impl.BasePostPersistenceImpl

/**
* Autogenerated by Jack
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
*/
package com.rapleaf.jack.test_project.database_1.impl;

import java.sql.SQLRecoverableException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;
import java.sql.Timestamp;

import com.rapleaf.jack.AbstractDatabaseModel;
import com.rapleaf.jack.BaseDatabaseConnection;
import com.rapleaf.jack.queries.where_operators.IWhereOperator;
import com.rapleaf.jack.queries.WhereConstraint;
import com.rapleaf.jack.queries.ModelQuery;
import com.rapleaf.jack.ModelWithId;
import com.rapleaf.jack.test_project.database_1.iface.IPostPersistence;
import com.rapleaf.jack.test_project.database_1.models.Post;
import com.rapleaf.jack.test_project.database_1.query.PostQueryBuilder;


import com.rapleaf.jack.test_project.IDatabases;

public class BasePostPersistenceImpl extends AbstractDatabaseModel<Post> implements IPostPersistence {
  private final IDatabases databases;

  public BasePostPersistenceImpl(BaseDatabaseConnection conn, IDatabases databases) {
    super(conn, "posts", Arrays.asList("title", "posted_at_millis", "user_id", "updated_at"));
    this.databases = databases;
  }

  @Override
  public Post create(Map<Enum, Object> fieldsMap) throws IOException {
    String title = (String) fieldsMap.get(Post._Fields.title);
    Long posted_at_millis = (Long) fieldsMap.get(Post._Fields.posted_at_millis);
    Integer user_id = (Integer) fieldsMap.get(Post._Fields.user_id);
    Long updated_at = (Long) fieldsMap.get(Post._Fields.updated_at);
    return create(title, posted_at_millis, user_id, updated_at);
  }

  public Post create(final String title, final Long posted_at_millis, final Integer user_id, final Long updated_at) throws IOException {
    long __id = realCreate(new AttrSetter() {
      public void set(PreparedStatement stmt) throws SQLException {
        if (title == null) {
          stmt.setNull(1, java.sql.Types.CHAR);
        } else {
          stmt.setString(1, title);
        }
        if (posted_at_millis == null) {
          stmt.setNull(2, java.sql.Types.DATE);
        } else {
          stmt.setDate(2, new Date(posted_at_millis));
        }
        if (user_id == null) {
          stmt.setNull(3, java.sql.Types.INTEGER);
        } else {
          stmt.setInt(3, user_id);
        }
        if (updated_at == null) {
          stmt.setNull(4, java.sql.Types.DATE);
        } else {
          stmt.setTimestamp(4, new Timestamp(updated_at));
        }
      }
    }, getInsertStatement(Arrays.<String>asList("title", "posted_at_millis", "user_id", "updated_at")));
    Post newInst = new Post(__id, title, posted_at_millis, user_id, updated_at, databases);
    newInst.setCreated(true);
    cachedById.put(__id, newInst);
    clearForeignKeyCache();
    return newInst;
  }


  public Post create() throws IOException {
    long __id = realCreate(new AttrSetter() {
      public void set(PreparedStatement stmt) throws SQLException {
      }
    }, getInsertStatement(Arrays.<String>asList()));
    Post newInst = new Post(__id, null, null, null, null, databases);
    newInst.setCreated(true);
    cachedById.put(__id, newInst);
    clearForeignKeyCache();
    return newInst;
  }


  public Post createDefaultInstance() throws IOException {
    return create();
  }

  public Set<Post> find(Map<Enum, Object> fieldsMap) throws IOException {
    return find(null, fieldsMap);
  }

  public Set<Post> find(Set<Long> ids, Map<Enum, Object> fieldsMap) throws IOException {
    Set<Post> foundSet = new HashSet<Post>();
   
    if (fieldsMap == null || fieldsMap.isEmpty()) {
      return foundSet;
    }

    StringBuilder statementString = new StringBuilder();
    statementString.append("SELECT * FROM posts WHERE (");
    List<Object> nonNullValues = new ArrayList<Object>();
    List<Post._Fields> nonNullValueFields = new ArrayList<Post._Fields>();

    Iterator<Map.Entry<Enum, Object>> iter = fieldsMap.entrySet().iterator();
    while (iter.hasNext()) {
      Map.Entry<Enum, Object> entry = iter.next();
      Enum field = entry.getKey();
      Object value = entry.getValue();
     
      String queryValue = value != null ? " = ? " : " IS NULL";
      if (value != null) {
        nonNullValueFields.add((Post._Fields) field);
        nonNullValues.add(value);
      }

      statementString.append(field).append(queryValue);
      if (iter.hasNext()) {
        statementString.append(" AND ");
      }
    }
    if (ids != null) statementString.append(" AND ").append(getIdSetCondition(ids));
    statementString.append(")");

    int retryCount = 0;
    PreparedStatement preparedStatement;

    while (true) {
      preparedStatement = getPreparedStatement(statementString.toString());

      for (int i = 0; i < nonNullValues.size(); i++) {
        Post._Fields field = nonNullValueFields.get(i);
        try {
          switch (field) {
            case title:
              preparedStatement.setString(i+1, (String) nonNullValues.get(i));
              break;
            case posted_at_millis:
              preparedStatement.setDate(i+1, new Date((Long) nonNullValues.get(i)));
              break;
            case user_id:
              preparedStatement.setInt(i+1, (Integer) nonNullValues.get(i));
              break;
            case updated_at:
              preparedStatement.setTimestamp(i+1, new Timestamp((Long) nonNullValues.get(i)));
              break;
          }
        } catch (SQLException e) {
          throw new IOException(e);
        }
      }

      try {
        executeQuery(foundSet, preparedStatement);
        return foundSet;
      } catch (SQLRecoverableException e) {
        if (++retryCount > AbstractDatabaseModel.MAX_CONNECTION_RETRIES) {
          throw new IOException(e);
        }
      } catch (SQLException e) {
        throw new IOException(e);
      }
    }
  }

  @Override
  protected void setStatementParameters(PreparedStatement preparedStatement, ModelQuery query) throws IOException {
    int index = 0;
    for (WhereConstraint constraint : query.getWhereConstraints()) {
      Post._Fields field = (Post._Fields)constraint.getField();
      for (Object parameter : constraint.getParameters()) {
        if (parameter == null) {
          continue;
        }
        try {
          switch (field) {
            case title:
              preparedStatement.setString(++index, (String) parameter);
              break;
            case posted_at_millis:
              preparedStatement.setDate(++index, new Date((Long) parameter));
              break;
            case user_id:
              preparedStatement.setInt(++index, (Integer) parameter);
              break;
            case updated_at:
              preparedStatement.setTimestamp(++index, new Timestamp((Long) parameter));
              break;
          }
        } catch (SQLException e) {
          throw new IOException(e);
        }
      }
    }
  }

  @Override
  protected void setAttrs(Post model, PreparedStatement stmt) throws SQLException {
    if (model.getTitle() == null) {
      stmt.setNull(1, java.sql.Types.CHAR);
    } else {
      stmt.setString(1, model.getTitle());
    }
    if (model.getPostedAtMillis() == null) {
      stmt.setNull(2, java.sql.Types.DATE);
    } else {
      stmt.setDate(2, new Date(model.getPostedAtMillis()));
    }
    if (model.getUserId() == null) {
      stmt.setNull(3, java.sql.Types.INTEGER);
    } else {
      stmt.setInt(3, model.getUserId());
    }
    if (model.getUpdatedAt() == null) {
      stmt.setNull(4, java.sql.Types.DATE);
    } else {
      stmt.setTimestamp(4, new Timestamp(model.getUpdatedAt()));
    }
    stmt.setLong(5, model.getId());
  }

  @Override
  protected Post instanceFromResultSet(ResultSet rs, Set<Enum> selectedFields) throws SQLException {
    boolean allFields = selectedFields == null || selectedFields.isEmpty();
    return new Post(rs.getLong("id"),
      allFields || selectedFields.contains(Post._Fields.title) ? rs.getString("title") : null,
      allFields || selectedFields.contains(Post._Fields.posted_at_millis) ? getDateAsLong(rs, "posted_at_millis") : null,
      allFields || selectedFields.contains(Post._Fields.user_id) ? getIntOrNull(rs, "user_id") : null,
      allFields || selectedFields.contains(Post._Fields.updated_at) ? getDateAsLong(rs, "updated_at") : null,
      databases
    );
  }

  public Set<Post> findByTitle(final String value) throws IOException {
    return find(new HashMap<Enum, Object>(){{put(Post._Fields.title, value);}});
  }

  public Set<Post> findByPostedAtMillis(final Long value) throws IOException {
    return find(new HashMap<Enum, Object>(){{put(Post._Fields.posted_at_millis, value);}});
  }

  public Set<Post> findByUserId(final Integer value) throws IOException {
    return find(new HashMap<Enum, Object>(){{put(Post._Fields.user_id, value);}});
  }

  public Set<Post> findByUpdatedAt(final Long value) throws IOException {
    return find(new HashMap<Enum, Object>(){{put(Post._Fields.updated_at, value);}});
  }

  public PostQueryBuilder query() {
    return new PostQueryBuilder(this);
  }
}
TOP

Related Classes of com.rapleaf.jack.test_project.database_1.impl.BasePostPersistenceImpl

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.