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    }