1 26 27 package com.sqlmagic.tinysql; 28 29 import java.util.*; 30 import java.lang.*; 31 import java.io.*; 32 33 38 class tsRow extends Hashtable implements Comparable 39 { 40 Vector orderByColumns = (Vector)null; 41 boolean debug=false; 42 49 public void setOrderBy(Vector inputColumns) 50 { 51 orderByColumns = inputColumns; 52 } 53 public String columnAsString (String column) { 54 return (String ) get(column); 55 } 56 57 64 public String columnAsString (tsColumn column) 65 { 66 String outputString,valueString,functionName,argList,nextArg; 67 StringBuffer functionBuffer; 68 FieldTokenizer ft1,ft2; 69 73 outputString = (String )get(column.name); 74 if ( outputString != (String )null ) return outputString; 75 ft1 = new FieldTokenizer(column.name,'(',false); 76 if ( ft1.countFields() == 2 ) 77 { 78 84 outputString = (String )get(column.name); 85 if ( outputString != (String )null ) return outputString; 86 functionName = ft1.getField(0); 87 argList = ft1.getField(1); 88 ft2 = new FieldTokenizer(argList,',',false); 89 functionBuffer = new StringBuffer (); 90 93 while ( ft2.hasMoreFields() ) 94 { 95 nextArg = ft2.nextField(); 96 valueString = (String )get(nextArg); 97 if ( debug) System.out.println("Function " + functionName 98 + " argument " + nextArg + " has value " + valueString); 99 103 if ( valueString == (String )null ) 104 valueString = UtilString.removeQuotes(nextArg); 105 else 106 valueString = valueString.trim(); 107 if ( functionName.equals("CONCAT") ) 108 functionBuffer.append(valueString); 109 } 110 outputString = functionBuffer.toString(); 111 } else if ( column.table == (String )null ) { 112 116 outputString = UtilString.removeQuotes(column.name); 117 } else { 118 121 outputString = (String )get(column.table + "." + column.name); 122 } 123 return outputString; 124 } 125 public int compareTo(Object inputObj) 126 { 127 String tableColumnName,thisString,inputString; 128 tsColumn columnObject; 129 tsRow inputRow; 130 int i,columnType; 131 double thisValue,inputValue; 132 if ( orderByColumns == (Vector)null ) return 0; 133 inputRow = (tsRow)inputObj; 134 for ( i = 0; i < orderByColumns.size(); i++ ) 135 { 136 columnObject = (tsColumn)orderByColumns.elementAt(i); 137 tableColumnName = columnObject.name; 138 columnType = columnObject.type; 139 thisString = (String )get(tableColumnName); 140 inputString = (String )inputRow.get(tableColumnName); 141 if ( Utils.isCharColumn(columnType) | 142 Utils.isDateColumn(columnType) ) 143 { 144 if ( thisString == (String )null | inputString == (String )null ) 145 continue; 146 if ( thisString.compareTo(inputString) != 0 ) 147 return thisString.compareTo(inputString); 148 } else if ( Utils.isNumberColumn(columnType) ) { 149 thisValue = UtilString.doubleValue(thisString); 150 inputValue = UtilString.doubleValue(inputString); 151 if ( thisValue > inputValue ) return 1; 152 else if ( thisValue < inputValue ) return -1; 153 } else { 154 System.out.println("Cannot sort unknown type"); 155 } 156 } 157 return 0; 158 } 159 public String toString() 160 { 161 StringBuffer outputBuffer = new StringBuffer (); 162 String columnName,columnValue; 163 Enumeration e; 164 for ( e = this.keys(); e.hasMoreElements(); ) 165 { 166 columnName = (String )e.nextElement(); 167 columnValue = (String )this.get(columnName); 168 outputBuffer.append(columnName + "=" + columnValue + " "); 169 } 170 return outputBuffer.toString(); 171 } 172 } 173 174 | Popular Tags |