コード例 #1
0
  /**
   * sqlite의 relation을 만든다.
   *
   * @param userDB
   * @return
   */
  private static List<ReferencedTableDAO> makeSQLiteRelation(UserDBDAO userDB) {
    List<ReferencedTableDAO> listRealRefTableDAO = new ArrayList<ReferencedTableDAO>();

    try {
      // 실제 레퍼런스를 생성합니다.
      for (SQLiteRefTableDAO sqliteRefTableDAO : getSQLiteRefTbl(userDB)) {

        int indexKey = StringUtils.indexOf(sqliteRefTableDAO.getSql(), "FOREIGN KEY");
        String forKey = sqliteRefTableDAO.getSql().substring(indexKey);
        if (logger.isDebugEnabled()) logger.debug("\t full text:" + sqliteRefTableDAO.getSql());
        if (logger.isDebugEnabled()) logger.debug("\t=================>[forKeys]\n" + forKey);
        String[] foreignInfo = forKey.split("FOREIGN KEY");

        for (int i = 1; i < foreignInfo.length; i++) {
          try {
            String strForeign = foreignInfo[i];
            if (logger.isDebugEnabled())
              logger.debug("\t ==========================> sub[\n" + strForeign + "]");
            ReferencedTableDAO ref = new ReferencedTableDAO();

            // 테이블 명
            ref.setTable_name(sqliteRefTableDAO.getTbl_name());

            // 컬럼명, 첫번째 ( 시작 부터 ) 끝날때까지...
            String colName = StringUtils.substringBetween(strForeign, "(", ")");

            // 참조 테이블,  REFERENCES 로 시작 하는 다음 부터 (까지
            String refTbName = StringUtils.substringBetween(strForeign, "REFERENCES", "(");

            // 참조 컬럼,  refTbName의 끝나는 것부터 ) 까지...
            String refCol = StringUtils.substringBetween(strForeign, refTbName + "(", ")");

            ref.setColumn_name(moveSpec(colName));
            ref.setReferenced_table_name(moveSpec(refTbName));
            ref.setReferenced_column_name(moveSpec(refCol));

            // sqlite는 인덱스 네임이 없으므로.... 생성합니다.
            ref.setConstraint_name(ref.toString());

            listRealRefTableDAO.add(ref);

          } catch (Exception e) {
            logger.error("SQLLite Relation making", e);
          }
        } // inner if
      } // last for
    } catch (Exception e) {
      logger.error("SQLite Relation check 2", e);
    }

    return listRealRefTableDAO;
  }