You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by th...@apache.org on 2010/01/15 04:27:46 UTC
svn commit: r899520 - in
/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io:
ResolvingDecoder.java ValidatingDecoder.java parsing/Parser.java
parsing/SkipParser.java parsing/Symbol.java
Author: thiru
Date: Fri Jan 15 03:27:45 2010
New Revision: 899520
URL: http://svn.apache.org/viewvc?rev=899520&view=rev
Log:
Fixed AVRO-313. Reinroduced Parser.processImplicitActions() as it is still required.
Modified:
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ValidatingDecoder.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Parser.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/SkipParser.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Symbol.java
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java?rev=899520&r1=899519&r2=899520&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java Fri Jan 15 03:27:45 2010
@@ -198,6 +198,12 @@
parser.pushSymbol(branches.getSymbol(in.readIndex()));
} else if (top instanceof Symbol.ErrorAction) {
throw new AvroTypeException(((Symbol.ErrorAction) top).msg);
+ } else if (top instanceof Symbol.DefaultStartAction) {
+ Symbol.DefaultStartAction dsa = (Symbol.DefaultStartAction) top;
+ backup = in;
+ in = (new JsonDecoder(dsa.root, new ByteArrayInputStream(dsa.contents)));
+ } else if (top == Symbol.DEFAULT_END_ACTION) {
+ in = backup;
}
}
}
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ValidatingDecoder.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ValidatingDecoder.java?rev=899520&r1=899519&r2=899520&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ValidatingDecoder.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ValidatingDecoder.java Fri Jan 15 03:27:45 2010
@@ -164,6 +164,7 @@
@Override
public long arrayNext() throws IOException {
+ parser.processTrailingImplicitActions();
long result = in.arrayNext();
if (result == 0) {
parser.advance(Symbol.ARRAY_END);
@@ -195,6 +196,7 @@
@Override
public long mapNext() throws IOException {
+ parser.processTrailingImplicitActions();
long result = in.mapNext();
if (result == 0) {
parser.advance(Symbol.MAP_END);
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Parser.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Parser.java?rev=899520&r1=899519&r2=899520&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Parser.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Parser.java Fri Jan 15 03:27:45 2010
@@ -110,6 +110,22 @@
}
/**
+ * Performs any "trailing" implicit actions at the top the stack.
+ */
+ public final void processTrailingImplicitActions() throws IOException {
+ while (pos >= 1) {
+ Symbol top = stack[pos - 1];
+ if (top.kind == Symbol.Kind.IMPLICIT_ACTION
+ && ((Symbol.ImplicitAction) top).isTrailing) {
+ pos--;
+ symbolHandler.doAction(null, top);
+ } else {
+ break;
+ }
+ }
+ }
+
+ /**
* Pushes the production for the given symbol <tt>sym</tt>.
* If <tt>sym</tt> is a repeater and <tt>input</tt> is either
* {@link Symbol#ARRAY_END} or {@link Symbol#MAP_END} pushes nothing.
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/SkipParser.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/SkipParser.java?rev=899520&r1=899519&r2=899520&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/SkipParser.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/SkipParser.java Fri Jan 15 03:27:45 2010
@@ -55,6 +55,7 @@
* parser stack reaches the target level.
*/
public final void skipTo(int target) throws IOException {
+ outer:
while (target < pos) {
Symbol top = stack[pos - 1];
while (top.kind != Symbol.Kind.TERMINAL) {
@@ -65,7 +66,7 @@
--pos;
pushProduction(null, top);
}
- top = stack[pos - 1];
+ continue outer;
}
skipHandler.skipTopSymbol();
}
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Symbol.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Symbol.java?rev=899520&r1=899519&r2=899520&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Symbol.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/parsing/Symbol.java Fri Jan 15 03:27:45 2010
@@ -143,9 +143,21 @@
public String toString() { return printName; }
}
- private static class ImplicitAction extends Symbol {
+ public static class ImplicitAction extends Symbol {
+ /**
+ * Set to <tt>true</tt> if and only if this implicit action is
+ * a trailing action. That is, it is an action that follows
+ * real symbol. E.g {@link Symbol#DEFAULT_END_ACTION}.
+ */
+ public final boolean isTrailing;
+
private ImplicitAction() {
+ this(false);
+ }
+
+ private ImplicitAction(boolean isTrailing) {
super(Kind.IMPLICIT_ACTION);
+ this.isTrailing = isTrailing;
}
}
@@ -371,11 +383,11 @@
public static final Symbol FIELD_ACTION =
new Symbol.Terminal("field-action");
- public static final Symbol RECORD_START = new ImplicitAction();
- public static final Symbol RECORD_END = new ImplicitAction();
- public static final Symbol UNION_END = new ImplicitAction();
+ public static final Symbol RECORD_START = new ImplicitAction(false);
+ public static final Symbol RECORD_END = new ImplicitAction(true);
+ public static final Symbol UNION_END = new ImplicitAction(true);
- public static final Symbol DEFAULT_END_ACTION = new ImplicitAction();
+ public static final Symbol DEFAULT_END_ACTION = new ImplicitAction(true);
public static final Symbol MAP_KEY_MARKER =
new Symbol.Terminal("map-key-marker");
}