001 002 package railo.runtime.sql.old; 003 004 import java.util.Hashtable; 005 006 public final class ZUtils 007 { 008 public static void init() { 009 if(fcts_ != null) return ; 010 fcts_ = new Hashtable(); 011 //addCustomFunction("upper",1); 012 addCustomFunction("lower",1); 013 addCustomFunction("lcase",1); 014 addCustomFunction("ucase",1); 015 addCustomFunction("abs",1); 016 addCustomFunction("acos",1); 017 addCustomFunction("asin",1); 018 addCustomFunction("atan",1); 019 addCustomFunction("atan2",2); 020 addCustomFunction("bitand",2); 021 addCustomFunction("bitor",2); 022 addCustomFunction("ceiling",1); 023 addCustomFunction("cos",1); 024 addCustomFunction("cot",1); 025 addCustomFunction("degrees",1); 026 addCustomFunction("exp",1); 027 addCustomFunction("floor",1); 028 addCustomFunction("log",1); 029 addCustomFunction("log10",1); 030 addCustomFunction("mod",2); 031 addCustomFunction("pi",0); 032 addCustomFunction("power",2); 033 addCustomFunction("radians",1); 034 addCustomFunction("rand",0); 035 addCustomFunction("round",2); 036 addCustomFunction("roundmagic",1); 037 addCustomFunction("sign",1); 038 addCustomFunction("sin",1); 039 addCustomFunction("sqrt",1); 040 addCustomFunction("tan",1); 041 addCustomFunction("truncate",2); 042 addCustomFunction("ascii",1); 043 addCustomFunction("bit_length",1); 044 addCustomFunction("char",1); 045 addCustomFunction("char_length",1); 046 addCustomFunction("concat",2); 047 addCustomFunction("difference",2); 048 addCustomFunction("hextoraw",1); 049 addCustomFunction("insert",4); 050 addCustomFunction("lcase",1); 051 addCustomFunction("left",2); 052 addCustomFunction("length",1); 053 addCustomFunction("locate",3); 054 addCustomFunction("ltrim",1); 055 addCustomFunction("octet_length",1); 056 addCustomFunction("rawtohex",1); 057 addCustomFunction("repeat",2); 058 addCustomFunction("replace",3); 059 addCustomFunction("right",2); 060 addCustomFunction("rtrim",1); 061 addCustomFunction("soundex",1); 062 addCustomFunction("space",1); 063 addCustomFunction("substr",3); 064 addCustomFunction("substring",3); 065 addCustomFunction("ucase",1); 066 addCustomFunction("lower",1); 067 addCustomFunction("upper",1); 068 addCustomFunction("curdate",0); 069 addCustomFunction("curtime",0); 070 addCustomFunction("datediff",3); 071 addCustomFunction("dayname",1); 072 addCustomFunction("dayofmonth",1); 073 addCustomFunction("dayofweek",1); 074 addCustomFunction("dayofyear",1); 075 addCustomFunction("hour",1); 076 addCustomFunction("minute",1); 077 addCustomFunction("month",1); 078 addCustomFunction("monthname",1); 079 addCustomFunction("now",0); 080 addCustomFunction("quarter",1); 081 addCustomFunction("second",1); 082 addCustomFunction("week",1); 083 addCustomFunction("year",1); 084 addCustomFunction("current_date",1); 085 addCustomFunction("current_time",1); 086 addCustomFunction("current_timestamp",1); 087 addCustomFunction("database",0); 088 addCustomFunction("user",0); 089 addCustomFunction("current_user",0); 090 addCustomFunction("identity",0); 091 addCustomFunction("ifnull",2); 092 addCustomFunction("casewhen",3); 093 addCustomFunction("convert",2); 094 //addCustomFunction("cast",1); 095 addCustomFunction("coalesce",1000); 096 addCustomFunction("nullif",2); 097 addCustomFunction("extract",1); 098 addCustomFunction("position",1); 099 addCustomFunction("trim",1); 100 //LOCATE(search,s,[start]) 101 //SUBSTR(s,start[,len]) 102 //SUBSTRING(s,start[,len]) 103 //COALESCE(expr1,expr2,expr3,...)[1] 104 105 } 106 107 public ZUtils() 108 { 109 } 110 111 public static void addCustomFunction(String s, int i) 112 { 113 if(fcts_ == null) 114 fcts_ = new Hashtable(); 115 if(i <= 0) 116 i = 1; 117 fcts_.put(s.toUpperCase(), Integer.valueOf(i)); 118 } 119 120 public static int isCustomFunction(String s) { 121 init(); 122 Integer integer; 123 if(s == null || s.length() < 1 || fcts_ == null || (integer = (Integer)fcts_.get(s.toUpperCase())) == null) 124 return -1; 125 126 return integer.intValue(); 127 } 128 129 public static boolean isAggregate(String s) 130 { 131 s = s.toUpperCase().trim(); 132 return s.equals("SUM") || s.equals("AVG") || s.equals("MAX") || s.equals("MIN") || s.equals("COUNT") || fcts_ != null && fcts_.get(s) != null; 133 } 134 135 public static String getAggregateCall(String s) 136 { 137 int i = s.indexOf('('); 138 if(i <= 0) 139 return null; 140 String s1 = s.substring(0, i); 141 if(isAggregate(s1)) 142 return s1.trim(); 143 return null; 144 } 145 146 private static Hashtable fcts_ = null; 147 148 }