Skip to content

Commit

Permalink
MONDRIAN: Add unit test for AggregationManager.
Browse files Browse the repository at this point in the history
[git-p4: depot-paths = "//open/mondrian/": change = 171]
  • Loading branch information
julianhyde committed Sep 29, 2002
1 parent d163411 commit a380e46
Show file tree
Hide file tree
Showing 9 changed files with 247 additions and 30 deletions.
3 changes: 2 additions & 1 deletion src/main/mondrian/rolap/RolapAggregationManager.java
Expand Up @@ -14,6 +14,7 @@

import mondrian.olap.Util;
import mondrian.olap.Evaluator;
import mondrian.rolap.agg.CellRequest;

import java.util.*;

Expand Down Expand Up @@ -42,7 +43,7 @@ public abstract class RolapAggregationManager implements CellReader {
* @param pinned Writes each loaded aggregation into here. The client must
* call {@link CachePool#unpin} on this list.
**/
public void loadAggregations(int arity, Set keySet, Collection pinnedSegments)
public void loadAggregations(Set keySet, Collection pinnedSegments)
{
RolapMember[] members = RolapUtil.emptyMemberArray;
Hashtable mapColumnSetToBatch = new Hashtable();
Expand Down
4 changes: 0 additions & 4 deletions src/main/mondrian/rolap/RolapCube.java
Expand Up @@ -231,7 +231,6 @@ void register()
// create measures (and stars for them, if necessary)
for (int i = 0; i < storedMeasures.length; i++) {
RolapStoredMeasure storedMeasure = storedMeasures[i];
ArrayList tables = new ArrayList();
RolapStar star = RolapStar.Pool.instance().getOrCreateStar(
(RolapConnection) getConnection(), this.factSchema,
this.factTable, this.getAlias());
Expand Down Expand Up @@ -284,11 +283,8 @@ void register()
Util.newInternal("bad exp type " + level.nameExp);
}
}
tables.add(table);
}
}
star.tables = (RolapStar.Table[]) tables.toArray(
new RolapStar.Table[tables.size()]);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/mondrian/rolap/RolapResult.java
Expand Up @@ -244,7 +244,7 @@ public Object get(Evaluator evaluator)
void loadAggregations()
{
AggregationManager.instance().loadAggregations(
cube.getDimensions().length, keys, pinnedSegments);
keys, pinnedSegments);
}
};

Expand Down
33 changes: 27 additions & 6 deletions src/main/mondrian/rolap/RolapStar.java
Expand Up @@ -11,19 +11,19 @@
*/

package mondrian.rolap;
import mondrian.olap.Util;
import mondrian.olap.Member;
import mondrian.olap.MondrianDef;
import mondrian.olap.Util;
import mondrian.rolap.sql.SqlQuery;
import mondrian.rolap.agg.CellRequest;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.io.PrintWriter;

/**
* A <code>RolapStar</code> is a star schema. It is the means to read cell
Expand All @@ -40,7 +40,6 @@ public class RolapStar {
RolapConnection connection;
Measure[] measures;
public Table factTable;
Table[] tables;
/** todo: better, the dimensional model should hold the mapping **/
Hashtable mapLevelToColumn = new Hashtable();

Expand All @@ -56,6 +55,28 @@ public Connection getJdbcConnection() {
return connection.jdbcConnection;
}

/**
* Retrieves the {@link RolapStar.Measure} in which a measure is stored.
*/
public static Measure getStarMeasure(Member member) {
return (Measure) ((RolapStoredMeasure) member).starMeasure;
}

/**
* Retrieves a named column, returns null if not found.
*/
public Column lookupColumn(String tableAlias, String columnName) {
final Table table = factTable.findDescendant(tableAlias);
if (table != null) {
for (int i = 0; i < table.columns.size(); i++) {
Column column = (Column) table.columns.get(i);
if (column.name.equals(columnName)) {
return column;
}
}
}
return null;
}
/**
* Reads a cell of <code>measure</code>, where <code>columns</code> are
* constrained to <code>values</code>. <code>values</code> must be the
Expand Down
82 changes: 80 additions & 2 deletions src/main/mondrian/rolap/RolapUtil.java
Expand Up @@ -17,7 +17,7 @@
import java.util.Vector;
import java.util.Date;
import java.lang.reflect.Array;
import java.io.PrintWriter;
import java.io.*;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
Expand Down Expand Up @@ -150,7 +150,85 @@ public static ResultSet executeQuery(
}
}
}
}


/**
* Writes to a string and also to an underlying writer.
*/
public static class TeeWriter extends FilterWriter {
StringWriter buf = new StringWriter();
public TeeWriter(Writer out) {
super(out);
}

/**
* Returns everything which has been written so far.
*/
public String toString() {
return buf.toString();
}

/**
* Returns the underlying writer.
*/
public Writer getWriter() {
return out;
}

public void write(int c) throws IOException {
super.write(c);
buf.write(c);
}

public void write(char cbuf[]) throws IOException {
super.write(cbuf);
buf.write(cbuf);
}

public void write(char cbuf[], int off, int len) throws IOException {
super.write(cbuf, off, len);
buf.write(cbuf, off, len);
}

public void write(String str) throws IOException {
super.write(str);
buf.write(str);
}

public void write(String str, int off, int len) throws IOException {
super.write(str, off, len);
buf.write(str, off, len);
}
}

/**
* Writer which throws away all input.
*/
private static class NullWriter extends Writer {
public void write(char cbuf[], int off, int len) throws IOException {
}

public void flush() throws IOException {
}

public void close() throws IOException {
}
}

/**
* Creates a {@link TeeWriter} which captures everything which goes through
* {@link #debugOut} from now on.
*/
public static synchronized TeeWriter startTracing() {
TeeWriter tw;
if (debugOut == null) {
tw = new TeeWriter(new NullWriter());
} else {
tw = new TeeWriter(RolapUtil.debugOut);
}
debugOut = new PrintWriter(tw);
return tw;
}
}

// End RolapUtil.java
1 change: 0 additions & 1 deletion src/main/mondrian/rolap/agg/AggregationManager.java
Expand Up @@ -12,7 +12,6 @@

package mondrian.rolap.agg;
import mondrian.olap.Util;
import mondrian.rolap.CellRequest;
import mondrian.rolap.RolapAggregationManager;
import mondrian.rolap.RolapStar;

Expand Down
38 changes: 23 additions & 15 deletions src/main/mondrian/rolap/agg/CellRequest.java
Expand Up @@ -10,47 +10,50 @@
// jhyde, 21 March, 2002
*/

package mondrian.rolap;
package mondrian.rolap.agg;

import mondrian.olap.Util;
import mondrian.rolap.RolapStar;

import java.util.ArrayList;

/**
* A <code>CellRequest</code> contains the context necessary to get a cell value from a star.
* A <code>CellRequest</code> contains the context necessary to get a cell
* value from a star.
*
* @author jhyde
* @since 21 March, 2002
* @version $Id$
**/
public class CellRequest
{
public class CellRequest {
private RolapStar.Measure measure;
private ArrayList columnList = new ArrayList();
private ArrayList valueList = new ArrayList();
CellRequest(RolapStar.Measure measure)
{

/** Creates a {@link CellRequest}. **/
public CellRequest(RolapStar.Measure measure) {
this.measure = measure;
this.columnList.add(measure);
}
void addConstrainedColumn(RolapStar.Column column, Object[] values)
{

public void addConstrainedColumn(RolapStar.Column column, Object[] values) {
columnList.add(column);
valueList.add(values);
}
void addConstrainedColumn(RolapStar.Column column, Object value)
{

public void addConstrainedColumn(RolapStar.Column column, Object value) {
columnList.add(column);
valueList.add(value);
}
void addColumn(RolapStar.Column column)
{

void addColumn(RolapStar.Column column) {
addConstrainedColumn(column, null);
}
public RolapStar.Measure getMeasure()
{

public RolapStar.Measure getMeasure() {
return measure;
}

public RolapStar.Column[] getColumns() {
// ignore the measure, the 0th element of columnList
RolapStar.Column[] a = new RolapStar.Column[columnList.size() - 1];
Expand All @@ -59,15 +62,18 @@ public RolapStar.Column[] getColumns() {
}
return a;
}

/** Returns a list which identifies which batch this request will
* belong to. The list contains the measure as well as the
* columns. **/
ArrayList getBatchKey() {
public ArrayList getBatchKey() {
return columnList;
}

public ArrayList getValueList() {
return valueList;
}

public Object[] getSingleValues() {
Object[] a = new Object[valueList.size()];
for (int i = 0, n = valueList.size(); i < n; i++) {
Expand All @@ -80,3 +86,5 @@ public Object[] getSingleValues() {
return a;
}
}

// End CellRequest.java

0 comments on commit a380e46

Please sign in to comment.