Skip to content

Commit

Permalink
Fix bug 3095309, "Lookup methods should use Segment, not name, before…
Browse files Browse the repository at this point in the history
… 1.0".

IdentifierNode.Segment is used a lot, so it should be a top-level interace. So:
* IdentifierNode.Segment becomes IdentifierSegment
* IdentifierNode.KeySegment becomes KeySegment
* IdentifierNode.NameSegment becomes NameSegment
* IdentifierNode.Quoting becomes Quoting

(all top-level in org.olap4j.mdx package).

Change signature of some methods from 'String...' to
'List<IdentifierSegment>'. This is safer, because not all member names are
lists of quoted name segments (some are key segments, as in
[Product].[Product Name].&[1000]). Methods affected:
* Cube.lookupMember
* Cube.lookupMembers
* QueryDimension.include
* QueryDimension.exclude
* QueryDimension.createSelection
* QueryAxis.sort

Remove deprecated and obsolete methods:
* QueryDimension.select
* QueryDimensions.getSelections
* QueryDimension.getNameParts

Remove obsolete interface XmlaOlap4jDriver.Proxy (replaced by XmlaOlap4jProxy).

Remove obsolete class constants Axis.NONE and Axis.UNUSED. (Their values were
null anyway.)


git-svn-id: https://olap4j.svn.sourceforge.net/svnroot/olap4j/trunk@360 c6a108a4-781c-0410-a6c6-c2d559e19af0
  • Loading branch information
julianhyde committed Oct 28, 2010
1 parent 4b0a021 commit e479cf9
Show file tree
Hide file tree
Showing 22 changed files with 775 additions and 684 deletions.
12 changes: 0 additions & 12 deletions src/org/olap4j/Axis.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,6 @@
*/
public interface Axis {

/**
* @deprecated Will be removed before olap4j 1.0.
*/
// REVIEW: Is it wise to remove this axis enum value?
// It's existence IS relevant.
Standard UNUSED = null;

/**
* @deprecated Will be removed before olap4j 1.0.
*/
Standard NONE = null;

/**
* Abbreviation for {@link org.olap4j.Axis.Standard#FILTER}.
*/
Expand Down
31 changes: 8 additions & 23 deletions src/org/olap4j/driver/xmla/XmlaOlap4jCube.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

import org.olap4j.OlapException;
import org.olap4j.impl.*;
import org.olap4j.mdx.IdentifierNode;
import org.olap4j.mdx.*;
import org.olap4j.metadata.*;

import java.util.*;
Expand Down Expand Up @@ -154,27 +154,12 @@ public Collection<Locale> getSupportedLocales() {
return Collections.singletonList(Locale.getDefault());
}

public Member lookupMember(String... nameParts) throws OlapException {
List<IdentifierNode.Segment> segmentList =
new ArrayList<IdentifierNode.Segment>();
for (String namePart : nameParts) {
segmentList.add(new IdentifierNode.NameSegment(namePart));
}
return lookupMember(segmentList);
}

/**
* Finds a member, given its fully qualfieid name.
*
* @param segmentList List of the segments of the name
* @return Member, or null if not found
* @throws OlapException on error
*/
private Member lookupMember(
List<IdentifierNode.Segment> segmentList) throws OlapException
public Member lookupMember(
List<IdentifierSegment> segmentList)
throws OlapException
{
StringBuilder buf = new StringBuilder();
for (IdentifierNode.Segment segment : segmentList) {
for (IdentifierSegment segment : segmentList) {
if (buf.length() > 0) {
buf.append('.');
}
Expand All @@ -197,14 +182,14 @@ MetadataReader getMetadataReader() {

public List<Member> lookupMembers(
Set<Member.TreeOp> treeOps,
String... nameParts) throws OlapException
List<IdentifierSegment> nameParts) throws OlapException
{
StringBuilder buf = new StringBuilder();
for (String namePart : nameParts) {
for (IdentifierSegment namePart : nameParts) {
if (buf.length() > 0) {
buf.append('.');
}
buf.append(new IdentifierNode.NameSegment(namePart));
buf.append(namePart);
}
final String uniqueName = buf.toString();
final List<XmlaOlap4jMember> list =
Expand Down
11 changes: 0 additions & 11 deletions src/org/olap4j/driver/xmla/XmlaOlap4jDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -313,17 +313,6 @@ public enum Property {
Olap4jUtil.discard(description);
}
}

/**
* This is a mock subclass to prevent retro-compatibility issues.
* If you're using this class, please change your code to
* use XmlaOlap4jProxy instead.
* @author Luc Boudreau
*
*/
@Deprecated
public static interface Proxy extends XmlaOlap4jProxy {
}
}

// End XmlaOlap4jDriver.java
39 changes: 19 additions & 20 deletions src/org/olap4j/impl/IdentifierParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
*/
package org.olap4j.impl;

import org.olap4j.mdx.IdentifierNode;
import org.olap4j.mdx.ParseRegion;
import org.olap4j.mdx.*;

import java.util.*;

Expand Down Expand Up @@ -211,15 +210,15 @@ public static int parseMember(
builder.segmentComplete(
null,
string.substring(start, i).trim(),
IdentifierNode.Quoting.UNQUOTED,
Quoting.UNQUOTED,
syntax);
state = AFTER_SEG;
break loop;
case '.':
builder.segmentComplete(
null,
string.substring(start, i).trim(),
IdentifierNode.Quoting.UNQUOTED,
Quoting.UNQUOTED,
syntax);
syntax = Builder.Syntax.NAME;
state = BEFORE_SEG;
Expand All @@ -229,7 +228,7 @@ public static int parseMember(
builder.segmentComplete(
null,
string.substring(start, i).trim(),
IdentifierNode.Quoting.UNQUOTED,
Quoting.UNQUOTED,
syntax);
syntax = Builder.Syntax.NEXT_KEY;
state = BEFORE_SEG;
Expand All @@ -254,7 +253,7 @@ public static int parseMember(
null,
Olap4jUtil.replace(
string.substring(start, i), "]]", "]"),
IdentifierNode.Quoting.QUOTED,
Quoting.QUOTED,
syntax);
++i;
state = AFTER_SEG;
Expand Down Expand Up @@ -332,7 +331,7 @@ private static IllegalArgumentException fail(
* @param s MDX identifier
* @return List of segments
*/
public static List<IdentifierNode.Segment> parseIdentifier(String s) {
public static List<IdentifierSegment> parseIdentifier(String s) {
final MemberBuilder builder = new MemberBuilder();
int i = parseMember(builder, s, 0);
if (i < s.length()) {
Expand All @@ -357,7 +356,7 @@ public static List<IdentifierNode.Segment> parseIdentifier(String s) {
* @param s MDX identifier list
* @return List of lists of segments
*/
public static List<List<IdentifierNode.Segment>> parseIdentifierList(
public static List<List<IdentifierSegment>> parseIdentifierList(
String s)
{
final MemberListBuilder builder = new MemberListBuilder();
Expand Down Expand Up @@ -400,7 +399,7 @@ public interface Builder {
void segmentComplete(
ParseRegion region,
String name,
IdentifierNode.Quoting quoting,
Quoting quoting,
Syntax syntax);

enum Syntax {
Expand All @@ -416,12 +415,12 @@ enum Syntax {
* It cannot handle tuples or lists of members.
*/
public static class MemberBuilder implements Builder {
protected final List<IdentifierNode.NameSegment> subSegments;
protected final List<IdentifierNode.Segment> segmentList;
protected final List<NameSegment> subSegments;
protected final List<IdentifierSegment> segmentList;

public MemberBuilder() {
segmentList = new ArrayList<IdentifierNode.Segment>();
subSegments = new ArrayList<IdentifierNode.NameSegment>();
segmentList = new ArrayList<IdentifierSegment>();
subSegments = new ArrayList<NameSegment>();
}

public void tupleComplete() {
Expand All @@ -434,19 +433,19 @@ public void memberComplete() {

private void flushSubSegments() {
if (!subSegments.isEmpty()) {
segmentList.add(new IdentifierNode.KeySegment(subSegments));
segmentList.add(new KeySegment(subSegments));
subSegments.clear();
}
}

public void segmentComplete(
ParseRegion region,
String name,
IdentifierNode.Quoting quoting,
Quoting quoting,
Syntax syntax)
{
final IdentifierNode.NameSegment segment =
new IdentifierNode.NameSegment(
final NameSegment segment =
new NameSegment(
region, name, quoting);
if (syntax != Syntax.NEXT_KEY) {
// If we were building a previous key, write it out.
Expand All @@ -467,13 +466,13 @@ public void segmentComplete(
* then collects members into lists.
*/
public static class MemberListBuilder extends MemberBuilder {
final List<List<IdentifierNode.Segment>> list =
new ArrayList<List<IdentifierNode.Segment>>();
final List<List<IdentifierSegment>> list =
new ArrayList<List<IdentifierSegment>>();

public void memberComplete() {
super.memberComplete();
list.add(
new ArrayList<IdentifierNode.Segment>(segmentList));
new ArrayList<IdentifierSegment>(segmentList));
segmentList.clear();
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/org/olap4j/mdx/DefaultMdxValidatorImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ public ParseTreeNode acceptScalar(ParseTreeNode node) {
// from IdentifierNode
public ParseTreeNode accept(IdentifierNode identifier) {
if (identifier.getSegmentList().size() == 1) {
final IdentifierNode.Segment s = identifier.getSegmentList().get(0);
if (s.getQuoting() == IdentifierNode.Quoting.UNQUOTED
final IdentifierSegment s = identifier.getSegmentList().get(0);
if (s.getQuoting() == Quoting.UNQUOTED
&& isReserved(s.getName()))
{
return LiteralNode.createSymbol(
Expand All @@ -209,7 +209,7 @@ public boolean isReserved(String name) {

private ParseTreeNode lookup(
SelectNode select,
List<IdentifierNode.Segment> segments,
List<IdentifierSegment> segments,
boolean allowProp)
{
// todo: something like
Expand Down
Loading

0 comments on commit e479cf9

Please sign in to comment.