1 21 22 package org.apache.derby.impl.sql.execute; 23 24 import org.apache.derby.iapi.types.DataValueDescriptor; 25 import org.apache.derby.iapi.services.sanity.SanityManager; 26 import org.apache.derby.iapi.error.StandardException; 27 28 import org.apache.derby.iapi.sql.execute.ExecAggregator; 29 import org.apache.derby.iapi.services.io.StoredFormatIds; 30 import org.apache.derby.iapi.services.io.Formatable; 31 import java.io.ObjectOutput ; 32 import java.io.ObjectInput ; 33 import java.io.IOException ; 34 35 39 public final class CountAggregator 40 extends SystemAggregator 41 { 42 private long value; 43 private boolean isCountStar; 44 45 47 public void setup(String aggregateName) 48 { 49 isCountStar = aggregateName.equals("COUNT(*)"); 50 } 51 52 57 public void merge(ExecAggregator addend) 58 throws StandardException 59 { 60 if (SanityManager.DEBUG) 61 { 62 SanityManager.ASSERT(addend instanceof CountAggregator, 63 "addend is supposed to be the same type of aggregator for the merge operator"); 64 } 65 66 value += ((CountAggregator)addend).value; 67 } 68 69 75 public DataValueDescriptor getResult() 76 { 77 return new org.apache.derby.iapi.types.SQLLongint(value); 78 } 79 80 81 90 public void accumulate(DataValueDescriptor addend, Object ga) 91 throws StandardException 92 { 93 if (isCountStar) 94 value++; 95 else 96 super.accumulate(addend, ga); 97 } 98 99 protected final void accumulate(DataValueDescriptor addend) { 100 value++; 101 } 102 103 106 public ExecAggregator newAggregator() 107 { 108 CountAggregator ca = new CountAggregator(); 109 ca.isCountStar = isCountStar; 110 return ca; 111 } 112 113 public boolean isCountStar() 114 { 115 return isCountStar; 116 } 117 118 131 public final void writeExternal(ObjectOutput out) throws IOException 132 { 133 super.writeExternal(out); 134 out.writeBoolean(isCountStar); 135 out.writeLong(value); 136 } 137 138 144 public final void readExternal(ObjectInput in) 145 throws IOException , ClassNotFoundException 146 { 147 super.readExternal(in); 148 isCountStar = in.readBoolean(); 149 value = in.readLong(); 150 } 151 161 public int getTypeFormatId() { return StoredFormatIds.AGG_COUNT_V01_ID; } 162 } 163 | Popular Tags |