1 package com.lavans.lacoder.writer;
\r
3 import java.util.List;
\r
5 import org.apache.commons.logging.Log;
\r
6 import org.apache.commons.logging.LogFactory;
\r
8 import com.lavans.lacoder.db.OracleDialect;
\r
9 import com.lavans.lacoder.db.TypeManager;
\r
10 import com.lavans.lacoder.model.Attribute;
\r
11 import com.lavans.lacoder.model.Entity;
\r
12 import com.lavans.luz2.commons.StringUtils;
\r
14 public class DaoXmlWriter {
\r
15 private static Log logger = LogFactory.getLog(DaoXmlWriter.class);
\r
16 private Entity entity;
\r
17 private String pkWhere;
\r
20 private String pkSelectColumns;
\r
21 private String allSelectColumns;
\r
22 private String allInsertColumns;
\r
23 private String allUpdateColumns;
\r
25 public DaoXmlWriter(Entity entity){
\r
26 this.entity = entity;
\r
30 public Entity getEntity() {
\r
34 public void setEntity(Entity entity) {
\r
35 this.entity = entity;
\r
39 public void parse(){
\r
40 tableName = StringUtils.toUnderscore(entity.getName()).toUpperCase();
\r
41 // primaryKeyが2つ以上の場合はとりあえず両方ともStringとして扱う?。
\r
42 List<Attribute> primaryKeyList = entity.getPrimaryKeyList();
\r
43 logger.info("--pk数:"+primaryKeyList.size());
\r
46 StringBuffer whereBuf = new StringBuffer();
\r
47 StringBuffer pkBuf = new StringBuffer();
\r
49 StringBuffer allSelectBuf = new StringBuffer();
\r
50 StringBuffer allInsertBuf = new StringBuffer();
\r
51 StringBuffer allUpdateBuf = new StringBuffer();
\r
52 for(Attribute attr: entity.getAttrList()){
\r
53 if(attr.isPrimaryKey()){
\r
54 whereBuf.append(" AND "+ attr.getConstName() +"=:"+ attr.getName());
\r
55 pkBuf.append(", ").append(tableName).append(".").append(attr.getConstName());
\r
57 allSelectBuf.append(", ").append(tableName).append(".").append(attr.getConstName());
\r
58 allInsertBuf.append(attr.getInsertSql());
\r
59 allUpdateBuf.append(attr.getUpdateSql());
\r
61 pkWhere = whereBuf.substring(5);
\r
62 pkSelectColumns = pkBuf.substring(2);
\r
63 allSelectColumns = allSelectBuf.substring(2);
\r
64 allInsertColumns = allInsertBuf.substring(2);
\r
65 allUpdateColumns = allUpdateBuf.substring(2);
\r
68 public String writeSelectSql(){
\r
69 return "SELECT "+ allSelectColumns +" FROM "+ tableName +" WHERE "+ pkWhere;
\r
72 public String writeNextValSql(){
\r
73 return entity.getTypeManager().getNextval(entity.get(0));
\r
76 public String writeInsertSql(){
\r
77 StringBuffer buf = new StringBuffer();
\r
78 buf.append("INSERT INTO "+ tableName +" VALUES(");
\r
79 buf.append(""+ allInsertColumns +")");
\r
80 return buf.toString();
\r
82 public String writeUpdateSql(){
\r
83 StringBuffer buf = new StringBuffer();
\r
84 buf.append("UPDATE "+ tableName +" SET ");
\r
85 buf.append(""+ allUpdateColumns +" WHERE "+ pkWhere);
\r
86 return buf.toString();
\r
90 public String writeDeleteSql(){
\r
91 StringBuffer buf = new StringBuffer();
\r
92 buf.append("DELETE FROM "+ tableName +" WHERE "+ pkWhere);
\r
93 return buf.toString();
\r
95 public String writeDeleteAnySql(){
\r
96 StringBuffer buf = new StringBuffer();
\r
97 buf.append("DELETE FROM "+ tableName +" $condition");
\r
98 return buf.toString();
\r
102 public String writeListCountSql(){
\r
103 StringBuffer buf = new StringBuffer();
\r
104 buf.append("SELECT COUNT(1) FROM "+ tableName +" $condition");
\r
105 return buf.toString();
\r
107 public String writeListPagerSql(){
\r
108 TypeManager typeManager = entity.getTypeManager();
\r
109 StringBuffer buf = new StringBuffer();
\r
110 if(typeManager instanceof OracleDialect){
\r
111 buf.append("SELECT * FROM (SELECT A.*, ROWNUM AS NUM FROM (\n ");
\r
113 buf.append(writeListAnySql()).append("\n$condition \n");
\r
114 if(typeManager instanceof OracleDialect){
\r
115 buf.append(") A ) WHERE NUM>:_start AND NUM<=:_end\n");
\r
117 // Postgres/H2DB用 MySQLもOK?
\r
118 buf.append("LIMIT :_rows OFFSET :_offset\n");
\r
120 return buf.toString();
\r
122 public String writeListPagerPkSql(){
\r
123 TypeManager typeManager = entity.getTypeManager();
\r
124 StringBuffer buf = new StringBuffer();
\r
125 if(typeManager instanceof OracleDialect){
\r
126 buf.append("SELECT * FROM (SELECT A.*, ROWNUM AS NUM FROM (\n ");
\r
128 buf.append(writeListAnySql()).append("\n$condition \n");
\r
129 if(typeManager instanceof OracleDialect){
\r
130 buf.append(") A ) WHERE NUM>:_start AND NUM<=:_end");
\r
132 // Postgres用 MySQLもOK?
\r
133 buf.append("LIMIT :_rows OFFSET :_offset");
\r
135 return buf.toString();
\r
137 public String writeListAnySql(){
\r
138 StringBuffer buf = new StringBuffer();
\r
139 buf.append("SELECT "+ allSelectColumns +"\nFROM "+ tableName); // $condition\n$order"
\r
140 return buf.toString();
\r
143 public String writeListAnyPkSql(){
\r
144 StringBuffer buf = new StringBuffer();
\r
145 buf.append("SELECT "+ pkSelectColumns +"\nFROM "+ tableName); // $condition\n$order"
\r
146 return buf.toString();
\r
149 public String writeBackupSql(){
\r
150 StringBuffer buf = new StringBuffer();
\r
151 buf.append("INSERT INTO "+ tableName +"_BAK SELECT :pk,"+ allSelectColumns +"\nFROM "+ tableName +" WHERE "+ pkWhere); // $condition\n$order"
\r
152 return buf.toString();
\r
154 public String writeBackupNextValSql(){
\r
155 return entity.getTypeManager().getNextval(entity.get(0)).replace(tableName +"_PK_SEQ", tableName +"_BAK_PK_SEQ");
\r
158 public String writePagerBakSql(){
\r
159 TypeManager typeManager = entity.getTypeManager();
\r
160 StringBuffer buf = new StringBuffer();
\r
161 if(typeManager instanceof OracleDialect){
\r
162 buf.append("SELECT * FROM (SELECT A.*, ROWNUM AS NUM FROM (\n ");
\r
164 buf.append("SELECT BACKUP_ID,BACKUP_DATE,"+ allSelectColumns +"\nFROM "+ tableName +"_BAK");
\r
165 buf.append("\n$condition \n");
\r
166 if(typeManager instanceof OracleDialect){
\r
167 buf.append(") A ) WHERE NUM>:_start AND NUM<=:_end\n");
\r
169 // Postgres/H2DB用 MySQLもOK?
\r
170 buf.append("LIMIT :_rows OFFSET :_offset\n");
\r
172 return buf.toString();
\r
175 public String writeRestoreSql(){
\r
176 StringBuffer buf = new StringBuffer();
\r
177 buf.append("INSERT INTO "+ tableName +"_BAK");
\r
178 buf.append("SELECT "+ pkSelectColumns + allSelectColumns +"\nFROM "+ tableName +"_BAK \nWHERE "+ pkWhere);
\r
179 return buf.toString();
\r