/**
* Դ�������ƣ�SqlFormater.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.core.util;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import SQLinForm_200.SQLForm;
/**
* @author liaogc
*
*/
public class SqlFormater {
/**
* ��ʽ��sql
* @param sql
* @param ���ݿ�ȡֵΪ"Any SQL","SQL Server","DB2/UDB","MSAccess","Sybase","Informix","MYSQL","PostgreSQL","Oracle"
* @return
*/
public static String formatSql(String sql, String language) {
StringBuffer newSb = new StringBuffer();
String tempsql = getSqlForm(language).formatSQLAsString(sql);
if (tempsql != null) {
ByteArrayInputStream inputStream = new ByteArrayInputStream(tempsql.getBytes());
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(reader);
String line = "";
try {
while ((line = br.readLine()) != null) {
if (newSb != null && "/".equals(line.trim())) {
newSb.append(line.trim() + "\r\n");
} else {
newSb.append(line + "\r\n");
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return newSb.toString();
}
private static SQLForm getSqlForm(String language) {
SQLForm form = new SQLForm();
form.setCase(false, false);
form.setGraphLevel(false);
form.setSuppressSpace(true);
form.setQuoteCharacter("'");
form.setSuppressEmptyLine(false);
form.setFormatLanguage("SQL");
if(StringUtils.isBlank(language)){
form.setSourceSQLLanguage("Oracle");
}else{
form.setSourceSQLLanguage(language);
}
// form.setBracketSpaces("noSpacesAroundBracket");
// form.setCommaSpaces("oneSpaceAfterComma");
// form.setEqualSpaces("oneSpaceAroundEqual");
form.setSmallSQLWidth(120);
// form.setPageWidth(80);
form.setAndOrIndention(true);
form.setInitialIndentation(0);
form.setIndention(2, true);
form.setNumCommas(4);//ÿ4��һ��
form.setLinebreakKeyword(false);//�ؼ��ֺ��治����
return form;
}
/**
* ��ʽ��sql
* @param sql
* @param ���ݿ�ȡֵΪ"Any SQL","SQL Server","DB2/UDB","MSAccess","Sybase","Informix","MYSQL","PostgreSQL","Oracle"
* @return
*/
public static String formatSqlOfCreateStatement(String sql, String language) {
SQLForm sqlForm = getSqlForm(language);
sqlForm.setCase(false, false);
sqlForm.setNumCommas(1);
sqlForm.setSmallSQLWidth(80);
StringBuffer formatedSql = new StringBuffer();
if (sql != null) {
ByteArrayInputStream inputStream = new ByteArrayInputStream(sql.getBytes());
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(reader);
String line = "";
try {
StringBuffer sqlsb = new StringBuffer();
while ((line = br.readLine()) != null) {
if (sqlsb != null && "/".equals(line.trim())) {
formatedSql.append(sqlForm.formatSQLAsString(sqlsb.toString()));
formatedSql.append("\r\n"+line.trim() + "\r\n");
sqlsb.delete(0, sqlsb.length());
} else {
sqlsb.append(line + "\r\n");
}
}
if(sqlsb.length()!=0 && !sqlsb.toString().equals("\r\n")){
formatedSql.append(sqlForm.formatSQLAsString(sqlsb.toString()));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return formatedSql.toString();
}
}