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");
 }