1 34 package smallsql.database; 35 36 37 40 public class ExpressionFunctionTimestampAdd extends ExpressionFunction { 41 42 final private int interval; 43 44 45 ExpressionFunctionTimestampAdd(int intervalType, Expression p1, Expression p2){ 46 interval = ExpressionFunctionTimestampDiff.mapIntervalType( intervalType ); 47 setParams( new Expression[]{p1,p2}); 48 } 49 50 51 int getFunction() { 52 return SQLTokenizer.TIMESTAMPADD; 53 } 54 55 56 boolean isNull() throws Exception { 57 return param1.isNull() || param2.isNull(); 58 } 59 60 61 boolean getBoolean() throws Exception { 62 return getLong() != 0; 63 } 64 65 66 int getInt() throws Exception { 67 return (int)getLong(); 68 } 69 70 71 long getLong() throws Exception { 72 if(isNull()) return 0; 73 switch(interval){ 74 case SQLTokenizer.SQL_TSI_FRAC_SECOND: 75 return param2.getLong() + param1.getLong(); 76 case SQLTokenizer.SQL_TSI_SECOND: 77 return param2.getLong() + param1.getLong() * 1000; 78 case SQLTokenizer.SQL_TSI_MINUTE: 79 return param2.getLong() + param1.getLong() * 60000; 80 case SQLTokenizer.SQL_TSI_HOUR: 81 return param2.getLong() + param1.getLong() * 3600000; 82 case SQLTokenizer.SQL_TSI_DAY: 83 return param2.getLong() + param1.getLong() * 86400000; 84 case SQLTokenizer.SQL_TSI_WEEK:{ 85 return param2.getLong() + param1.getLong() * 604800000; 86 }case SQLTokenizer.SQL_TSI_MONTH:{ 87 DateTime.Details details2 = new DateTime.Details(param2.getLong()); 88 details2.month += param1.getLong(); 89 return DateTime.calcMillis(details2); 90 } 91 case SQLTokenizer.SQL_TSI_QUARTER:{ 92 DateTime.Details details2 = new DateTime.Details(param2.getLong()); 93 details2.month += param1.getLong() * 3; 94 return DateTime.calcMillis(details2); 95 } 96 case SQLTokenizer.SQL_TSI_YEAR:{ 97 DateTime.Details details2 = new DateTime.Details(param2.getLong()); 98 details2.year += param1.getLong(); 99 return DateTime.calcMillis(details2); 100 } 101 default: throw new Error (); 102 } 103 } 105 106 107 float getFloat() throws Exception { 108 return getLong(); 109 } 110 111 112 double getDouble() throws Exception { 113 return getLong(); 114 } 115 116 117 long getMoney() throws Exception { 118 return getLong() * 10000; 119 } 120 121 122 MutableNumeric getNumeric() throws Exception { 123 if(isNull()) return null; 124 return new MutableNumeric(getLong()); 125 } 126 127 128 Object getObject() throws Exception { 129 if(isNull()) return null; 130 return new DateTime( getLong(), SQLTokenizer.TIMESTAMP ); 131 } 132 133 134 String getString() throws Exception { 135 if(isNull()) return null; 136 return new DateTime( getLong(), SQLTokenizer.TIMESTAMP ).toString(); 137 } 138 139 140 int getDataType() { 141 return SQLTokenizer.TIMESTAMP; 142 } 143 144 } 145 | Popular Tags |