001    package biz.hammurapi.sql.syntax;
002    
003    import java.io.Serializable;
004    import java.sql.PreparedStatement;
005    import java.sql.SQLException;
006    
007    import biz.hammurapi.sql.Variant;
008    
009    /**
010     * Equalt
011     * @author Pavel
012     *
013     */
014    public class Between implements StatementFragment, Serializable {
015            
016            private Variant lower;
017            private Variant upper;
018            private String columnName;
019            
020            public Between(String columnName, boolean lower, boolean upper) {
021                    this.lower = new Variant(lower);
022                    this.upper = new Variant(upper);
023                    this.columnName = columnName;
024            }
025    
026            public Between(String columnName, byte lower, byte upper) {
027                    this.lower = new Variant(lower);
028                    this.upper = new Variant(upper);
029                    this.columnName = columnName;
030            }
031    
032            public Between(String columnName, char lower, char upper) {
033                    this.lower = new Variant(lower);
034                    this.upper = new Variant(upper);
035                    this.columnName = columnName;
036            }
037    
038            public Between(String columnName, double lower, double upper) {
039                    this.lower = new Variant(lower);
040                    this.upper = new Variant(upper);
041                    this.columnName = columnName;
042            }
043    
044            public Between(String columnName, float lower, float upper) {
045                    this.lower = new Variant(lower);
046                    this.upper = new Variant(upper);
047                    this.columnName = columnName;
048            }
049    
050            public Between(String columnName, int lower, int upper) {
051                    this.lower = new Variant(lower);
052                    this.upper = new Variant(upper);
053                    this.columnName = columnName;
054            }
055    
056            public Between(String columnName, long lower, long upper) {
057                    this.lower = new Variant(lower);
058                    this.upper = new Variant(upper);
059                    this.columnName = columnName;
060            }
061    
062            public Between(String columnName, String lower, String upper) {
063                    this.lower = new Variant(lower);
064                    this.upper = new Variant(upper);
065                    this.columnName = columnName;
066            }
067    
068            public Between(String columnName, Object lower, Object upper) {
069                    this.lower = new Variant(lower);
070                    this.upper = new Variant(upper);
071                    this.columnName = columnName;
072            }
073    
074            public Between(String columnName, Object lower, Object upper, int sqlType) {
075                    this.lower = new Variant(lower, sqlType);
076                    this.upper = new Variant(upper, sqlType);
077                    this.columnName = columnName;
078            }
079    
080            public Between(String columnName, short lower, short upper) {
081                    this.lower = new Variant(lower);
082                    this.upper = new Variant(upper);
083                    this.columnName = columnName;
084            }
085    
086            public String toSqlString() {           
087                    return columnName + " BETWEEN ? AND ?";
088            }
089    
090            public int parameterize(PreparedStatement ps, int idx) throws SQLException {
091                    return upper.parameterize(ps, lower.parameterize(ps, idx));
092            }
093    
094            public int hashCode() {
095                    final int prime = 31;
096                    int result = 1;
097                    result = prime * result
098                                    + ((columnName == null) ? 0 : columnName.hashCode());
099                    result = prime * result + ((lower == null) ? 0 : lower.hashCode());
100                    result = prime * result + ((upper == null) ? 0 : upper.hashCode());
101                    return result;
102            }
103    
104            public boolean equals(Object obj) {
105                    if (this == obj)
106                            return true;
107                    if (obj == null)
108                            return false;
109                    if (getClass() != obj.getClass())
110                            return false;
111                    final Between other = (Between) obj;
112                    if (columnName == null) {
113                            if (other.columnName != null)
114                                    return false;
115                    } else if (!columnName.equals(other.columnName))
116                            return false;
117                    if (lower == null) {
118                            if (other.lower != null)
119                                    return false;
120                    } else if (!lower.equals(other.lower))
121                            return false;
122                    if (upper == null) {
123                            if (other.upper != null)
124                                    return false;
125                    } else if (!upper.equals(other.upper))
126                            return false;
127                    return true;
128            }
129    
130    }