User: dsundstrom
  Date: 01/08/18 08:56:43

  Modified:    src/main/org/jboss/ejb/plugins/cmp/ejbql Assembly.java
                        InputParameterToken.java Literal.java
                        NumberState.java Parser.java StringLiteral.java
                        Symbol.java Terminal.java
  Log:
  fixed many small anoying bugs while implementing the ejbql to sql translation engine
  
  Revision  Changes    Path
  1.2       +14 -5     jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Assembly.java
  
  Index: Assembly.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Assembly.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Assembly.java     2001/08/09 05:20:49     1.1
  +++ Assembly.java     2001/08/18 15:56:43     1.2
  @@ -4,11 +4,12 @@
   import java.util.ArrayList;
   import java.util.List;
   
  -public class Assembly implements DeepCloneable {
  +public class Assembly {
        private DeepCloneable target;
        private List stack = new ArrayList();
        private List tokens = new ArrayList();
        private int tokenIndex;
  +     private boolean valid = true;
   
        public Assembly(Assembly a) {
                if(a.target != null) {
  @@ -17,6 +18,7 @@
                stack = new ArrayList(a.stack);
                tokens = new ArrayList(a.tokens);
                tokenIndex = a.tokenIndex;
  +             valid = a.valid;
        }
                
        public Assembly(String string) {
  @@ -34,7 +36,18 @@
                tokenIndex = 0;
        }
        
  +     public boolean isValid() {
  +             return valid;
  +     }
  +     
  +     public void setInvalid() {
  +             valid = false;
  +     }
  +     
        public void push(Object object) {
  +             if(object == null) {
  +                     throw new IllegalArgumentException("object is null");
  +             }
                stack.add(object);
        }
   
  @@ -89,9 +102,5 @@
                        buf.append("^");
                }
                return buf.toString();
  -     }
  -     
  -     public Object deepClone() {
  -             return new Assembly(this);
        }
   }
  
  
  
  1.2       +4 -0      
jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/InputParameterToken.java
  
  Index: InputParameterToken.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/InputParameterToken.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InputParameterToken.java  2001/08/09 05:20:49     1.1
  +++ InputParameterToken.java  2001/08/18 15:56:43     1.2
  @@ -7,6 +7,10 @@
                this.num = num;
        }
        
  +     public int getNumber() {
  +             return num;
  +     }
  +     
        public int hashCode() {
                return 37 * 17 + num;
        }
  
  
  
  1.2       +4 -0      jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Literal.java
  
  Index: Literal.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Literal.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Literal.java      2001/08/09 05:20:49     1.1
  +++ Literal.java      2001/08/18 15:56:43     1.2
  @@ -16,4 +16,8 @@
                }
                return false;
        }
  +     
  +     public String toString() {
  +             return "[Literal: literal="+literal+"]";
  +     }
   }
  
  
  
  1.5       +0 -5      jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/NumberState.java
  
  Index: NumberState.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/NumberState.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- NumberState.java  2001/08/09 21:51:14     1.4
  +++ NumberState.java  2001/08/18 15:56:43     1.5
  @@ -49,7 +49,6 @@
                readSuffix(in, out);
                
                String number = out.toString().toLowerCase();
  -             System.out.println("number is ["+number+"]");
                if(isExactNumeric(number)) {
                        return createExactNumericToken(number);
                } else {
  @@ -65,7 +64,6 @@
   
                        // is it a hex number
                        int second = peekChar(in);      
  -                     System.out.println("HEX? " + (char)first + (char)second);
                        if(first == '0' && (second == 'x' || second == 'X')) {
                                // read the x off the stream and write it out
                                out.write(in.read());
  @@ -89,8 +87,6 @@
                        
                        // get all the decimal digits
                        readNumber(in, out, 10);
  -                     
  -                     System.out.println("Read fractional part numebr is 
["+out.toString()+"]");
                }
        }
        
  @@ -175,7 +171,6 @@
               // chop off the suffix
               number = number.substring(0, number.length() - 1);
           }
  -        System.out.println("decode exact number [" + number + "]");
           if (number.startsWith("0X") || number.startsWith("0x")) {  // hex
               // handle literals from 0x8000000000000000L to 0xffffffffffffffffL:
               // remove sign bit, parse as positive, then calculate the negative 
value with the sign bit
  
  
  
  1.2       +36 -5     jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Parser.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Parser.java       2001/08/09 05:20:49     1.1
  +++ Parser.java       2001/08/18 15:56:43     1.2
  @@ -11,10 +11,17 @@
        public abstract AssemblySet match(AssemblySet in);
        
        public AssemblySet matchAndAssemble(AssemblySet in) {
  -             AssemblySet out = match(in);
  -             if(assembler != null) {
  -                     for(Iterator i = out.iterator(); i.hasNext(); ) {
  -                             assembler.workOn((Assembly)i.next());
  +             AssemblySet matchedSet = match(in);
  +             if(assembler == null) {
  +                     return matchedSet;
  +             }
  +             
  +             AssemblySet out = new AssemblySet();
  +             for(Iterator i = matchedSet.iterator(); i.hasNext(); ) {
  +                     Assembly a = (Assembly)i.next();
  +                     assembler.workOn(a);
  +                     if(a.isValid()) {
  +                             out.add(a);
                        }
                }
                return out;
  @@ -34,8 +41,32 @@
                }
                return best;
        }
  +     
  +     public Assembly soleMatch(Assembly in) {
  +             AssemblySet set = new AssemblySet();
  +             set.add(in);
  +             set = matchAndAssemble(set);
  +             
  +             AssemblySet completeMatches = new AssemblySet();
  +             for(Iterator i = set.iterator(); i.hasNext(); ) {
  +                     Assembly a = (Assembly) i.next();
  +
  +                     // is this a complete match, can't get better then that
  +                     if(!a.hasNextToken()) {
  +                             completeMatches.add(a);
  +                     }
  +             }
  +
  +             if(completeMatches.size()==0) {
  +                     return best(set);
  +             }
  +             if(completeMatches.size() > 1) {
  +                     throw new IllegalStateException("Multiple assemblies matched: 
"+set.size());
  +             }
  +             return (Assembly)completeMatches.iterator().next();;
  +     }
        
  -     public void setAssembler(Assembler a) {
  +     public void setAssembler(Assembler assembler) {
                this.assembler = assembler;
        }
        
  
  
  
  1.3       +4 -0      
jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/StringLiteral.java
  
  Index: StringLiteral.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/StringLiteral.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- StringLiteral.java        2001/08/09 05:20:49     1.2
  +++ StringLiteral.java        2001/08/18 15:56:43     1.3
  @@ -8,4 +8,8 @@
        protected boolean isValidToken(Token token) {
                return token instanceof StringToken;
        }
  +     
  +     public String toString() {
  +             return "[StringLiteral]";
  +     }
   }
  
  
  
  1.2       +4 -0      jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Symbol.java
  
  Index: Symbol.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Symbol.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Symbol.java       2001/08/09 05:20:49     1.1
  +++ Symbol.java       2001/08/18 15:56:43     1.2
  @@ -13,4 +13,8 @@
        protected boolean isValidToken(Token token) {
                return symbol.equals(token);
        }
  +     
  +     public String toString() {
  +             return "[Symbol: symbol="+symbol+"]";
  +     }
   }
  
  
  
  1.2       +13 -0     jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Terminal.java
  
  Index: Terminal.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/Terminal.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Terminal.java     2001/08/09 05:20:49     1.1
  +++ Terminal.java     2001/08/18 15:56:43     1.2
  @@ -4,6 +4,7 @@
   
   public abstract class Terminal extends Parser {
        private boolean discardTokens = false;
  +     private boolean debug = false;
   
        public Terminal() {
        }
  @@ -16,6 +17,16 @@
                this.discardTokens = discardTokens;
        }
        
  +     public Terminal discard() {
  +             discardTokens = true;
  +             return this;
  +     }
  +     
  +     public Terminal debug() {
  +             debug = true;
  +             return this;
  +     }
  +
        public AssemblySet match(AssemblySet inSet) {
                AssemblySet out = new AssemblySet();
                for(Iterator i = inSet.iterator(); i.hasNext(); ) {
  @@ -44,9 +55,11 @@
                                out.push(token);
                        }
                        // return the new assembly
  +                     if(debug)System.out.println("Terminal "+this+" matched. 
newAssembly="+out);
                        return out;
                }
                // no match return null
  +             if(debug)System.out.println("Terminal "+this+" DID NOT match 
assembly="+assembly);
                return null;
        }
        
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to