1 package sharin.sql.generator; 2 3 public class JoinInfo { 4 5 private final String sourceColumnName; 6 7 private final EntityInfo targetEntityInfo; 8 9 private final String targetTableAlias; 10 11 private final String targetColumnName; 12 13 private final String[] targetColumnAliases; 14 15 public JoinInfo(String sourceColumnName, EntityInfo targetEntityInfo, 16 String targetTableAlias) { 17 18 this(sourceColumnName, targetEntityInfo, targetTableAlias, 19 targetEntityInfo.getIdColumnName()); 20 } 21 22 public JoinInfo(String sourceColumnName, EntityInfo targetEntityInfo, 23 String targetTableAlias, String targetColumnName) { 24 25 this.sourceColumnName = sourceColumnName; 26 this.targetEntityInfo = targetEntityInfo; 27 this.targetTableAlias = targetTableAlias; 28 this.targetColumnName = targetColumnName; 29 30 String[] propertyNames = targetEntityInfo.getPropertyNames(); 31 String[] targetColumnAliases = new String[propertyNames.length]; 32 33 for (int i = 0; i < propertyNames.length; i++) { 34 targetColumnAliases[i] = targetTableAlias + '.' + propertyNames[i]; 35 } 36 37 this.targetColumnAliases = targetColumnAliases; 38 } 39 40 public void appendJoin(StringBuilder builder, String sourceTableAlias) { 41 builder.append("LEFT JOIN "); 42 43 String targetTableName = targetEntityInfo.getTableName(); 44 builder.append(targetTableName); 45 46 if (!targetTableAlias.equals(targetTableName)) { 47 builder.append(' '); 48 builder.append(targetTableAlias); 49 } 50 51 builder.append(" ON "); 52 builder.append(sourceTableAlias); 53 builder.append('.'); 54 builder.append(sourceColumnName); 55 builder.append(" = "); 56 builder.append(targetTableAlias); 57 builder.append('.'); 58 builder.append(targetColumnName); 59 } 60 61 public void appendField(StringBuilder builder, String propertyName) { 62 builder.append(targetTableAlias); 63 builder.append('.'); 64 builder.append(targetEntityInfo.getColumnName(propertyName)); 65 builder.append(" AS \""); 66 builder.append(targetTableAlias); 67 builder.append('.'); 68 builder.append(propertyName); 69 builder.append('"'); 70 } 71 72 public String[] getTargetColumnAliases() { 73 return targetColumnAliases; 74 } 75 76 public String getTargetColumnName(String propertyName) { 77 return targetTableAlias + '.' 78 + targetEntityInfo.getColumnName(propertyName); 79 } 80 81 public boolean hasTargetColumnName(String propertyName) { 82 return targetEntityInfo.hasColumnName(propertyName); 83 } 84 85 public String getTargetTableAlias() { 86 return targetTableAlias; 87 } 88 }