[Mulgara-svn] r1892 - in trunk/src/jar/query/java/org/mulgara/query/filter: . arithmetic value

pag at mulgara.org pag at mulgara.org
Wed Jan 27 19:18:48 UTC 2010


Author: pag
Date: 2010-01-27 11:18:47 -0800 (Wed, 27 Jan 2010)
New Revision: 1892

Modified:
   trunk/src/jar/query/java/org/mulgara/query/filter/AbstractFilterValue.java
   trunk/src/jar/query/java/org/mulgara/query/filter/AbstractIsIriFnUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/CompoundStatementUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/Context.java
   trunk/src/jar/query/java/org/mulgara/query/filter/EqualityComparisonUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/Filter.java
   trunk/src/jar/query/java/org/mulgara/query/filter/InequalityComparisonUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/IsBlankFnUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/IsLiteralFnUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/LangMatchesUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/Not.java
   trunk/src/jar/query/java/org/mulgara/query/filter/RDFTerm.java
   trunk/src/jar/query/java/org/mulgara/query/filter/RegexFnUnitTest.java
   trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java
   trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/BinaryOperation.java
   trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/UnaryMinus.java
   trunk/src/jar/query/java/org/mulgara/query/filter/value/BlankNodeValue.java
   trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java
   trunk/src/jar/query/java/org/mulgara/query/filter/value/IRI.java
   trunk/src/jar/query/java/org/mulgara/query/filter/value/SimpleLiteral.java
   trunk/src/jar/query/java/org/mulgara/query/filter/value/TypedLiteral.java
   trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java
Log:
Added a method to get access to all the variables in an expression

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/AbstractFilterValue.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/AbstractFilterValue.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/AbstractFilterValue.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -11,8 +11,13 @@
  */
 package org.mulgara.query.filter;
 
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
 import org.jrdf.graph.Node;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.value.Bool;
 import org.mulgara.query.filter.value.ComparableExpression;
 import org.mulgara.query.filter.value.IRI;
@@ -33,6 +38,9 @@
   /** Serialization ID */
   private static final long serialVersionUID = 7034034367736302522L;
 
+  /** The logger. */
+  final static Logger logger = Logger.getLogger(AbstractFilterValue.class.getName());
+
   /** The operands for the operation */
   protected RDFTerm[] operands;
 
@@ -109,6 +117,16 @@
     return true;
   }
 
+  /**
+   * Return all the variables in this term.
+   * @see org.mulgara.query.filter.RDFTerm#getVariables()
+   */
+  public Set<Variable> getVariables() {
+    Set<Variable> result = new HashSet<Variable>();
+    for (RDFTerm term: operands) result.addAll(term.getVariables());
+    return result;
+  }
+
   /** @see org.mulgara.query.filter.RDFTerm#sameTerm(org.mulgara.query.filter.RDFTerm) */
   public boolean sameTerm(RDFTerm v) throws QueryException { return resolve().sameTerm(v); }
 
@@ -158,7 +176,6 @@
 
   /** @see org.mulgara.query.filter.ContextOwner#setCurrentContext(org.mulgara.query.filter.Context) */
   public void setCurrentContext(Context context) {
-    if (!(context.equals(contextOwner.getCurrentContext()))) throw new AssertionError("Filter context being set differently to initial calling context.");
     super.setCurrentContext(context);
   }
 

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/AbstractIsIriFnUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/AbstractIsIriFnUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/AbstractIsIriFnUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -80,7 +80,7 @@
       assertTrue(f.equals(fn));
       fail("No exception when testing an unbound value");
     } catch (QueryException qe) {
-      assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+      assertTrue(qe.getMessage().startsWith("Unbound column"));
     }
   
     assertTrue(c.next());

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/CompoundStatementUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/CompoundStatementUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/CompoundStatementUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -123,7 +123,8 @@
       assertTrue(stmt.test(c));  // null + 5 < 10
       fail("No exception when testing an unbound value for equality");
     } catch (QueryException qe) {
-      assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+      String msg = qe.getMessage();
+      assertTrue("Unexpected message: \"" + msg + "\"", msg.startsWith("Unbound column"));
     }
 
   }

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/Context.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/Context.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/Context.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -41,6 +41,13 @@
    */
   public boolean isBound(int columnNumber) throws QueryException;
 
+  /**
+   * Returns the internal value used to indicate an unbound variable.
+   * This is to facilitate faster lookups, while still keeping the value
+   * in Tuples opaque.
+   * @return The value representing an unbound value after looking it up.
+   */
+  public long getUnboundVal();
   
   /**
    * Gets the internal column number for a column with the given name
@@ -64,5 +71,5 @@
    * @throws QueryException If a localize exception is encountered.
    */
   public long localize(Node node) throws QueryException;
-  
+
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/EqualityComparisonUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/EqualityComparisonUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/EqualityComparisonUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -281,19 +281,19 @@
           assertTrue(it, f.equals(eq));
           fail("No exception when testing an unbound value for equality: " + i);
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         try {
           assertTrue(it, f.equals(same));
           fail("No exception when testing an unbound value for equivalency: " + i);
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         try {
           assertTrue(it, f.equals(ne));
           fail("No exception when testing an unbound value for inequality: " + i);
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         break;
         

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/Filter.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/Filter.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/Filter.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -15,10 +15,13 @@
  */
 package org.mulgara.query.filter;
 
+import java.util.Collections;
+import java.util.Set;
 import org.jrdf.graph.Node;
 import org.mulgara.query.rdf.LiteralImpl;
 import org.mulgara.query.rdf.XSD;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 
 
 /**
@@ -58,6 +61,7 @@
     public boolean sameTerm(RDFTerm v) throws QueryException { return equals(v); }
     public void setContextOwner(ContextOwner owner) { }
     public void addContextListener(ContextOwner l) { }
+    public Set<Variable> getVariables() { return Collections.emptySet(); }
   };
 
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/InequalityComparisonUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/InequalityComparisonUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/InequalityComparisonUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -350,25 +350,25 @@
           assertTrue(it, f.equals(lt));
           fail("No exception when testing an unbound value for equality: " + i);
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         try {
           assertTrue(it, f.equals(lte));
           fail("No exception when testing an unbound value for equivalency: " + i);
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         try {
           assertTrue(it, f.equals(gt));
           fail("No exception when testing an unbound value for inequality: " + i);
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         try {
           assertTrue(it, f.equals(gte));
           fail("No exception when testing an unbound value for inequality: " + i);
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         break;
         

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/IsBlankFnUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/IsBlankFnUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/IsBlankFnUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -101,7 +101,7 @@
       assertTrue(f.equals(fn));
       fail("No exception when testing an unbound value");
     } catch (QueryException qe) {
-      assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+      assertTrue(qe.getMessage().startsWith("Unbound column"));
     }
 
     assertTrue(c.next());

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/IsLiteralFnUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/IsLiteralFnUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/IsLiteralFnUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -104,7 +104,7 @@
       assertTrue(f.equals(fn));
       fail("No exception when testing an unbound value");
     } catch (QueryException qe) {
-      assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+      assertTrue(qe.getMessage().startsWith("Unbound column"));
     }
 
     assertTrue(c.next());

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/LangMatchesUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/LangMatchesUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/LangMatchesUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -189,7 +189,7 @@
           assertTrue(f.equals(fn));
           fail("No exception when testing an unbound value");
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         break;
         

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/Not.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/Not.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/Not.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -1,13 +1,17 @@
-/**
- * The contents of this file are subject to the Open Software License
- * Version 3.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.opensource.org/licenses/osl-3.0.txt
+/*
+ * Copyright 2008 Fedora Commons, Inc.
  *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.mulgara.query.filter;
 
@@ -20,8 +24,6 @@
  *
  * @created Mar 7, 2008
  * @author Paul Gearon
- * @copyright &copy; 2008 <a href="mailto:pgearon at users.sourceforge.net">Paul Gearon</a>
- * @licence <a href="{@docRoot}/../../LICENCE.txt">Open Software License v3.0</a>
  */
 public class Not extends AbstractFilterValue implements Filter {
 

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/RDFTerm.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/RDFTerm.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/RDFTerm.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -12,9 +12,11 @@
 package org.mulgara.query.filter;
 
 import java.io.Serializable;
+import java.util.Set;
 
 import org.jrdf.graph.Node;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 
 
 /**
@@ -86,4 +88,9 @@
    */
   public boolean isGrounded() throws QueryException;
 
+  /**
+   * Returns all the variables referred to by this term.
+   * @return A set of variables.
+   */
+  public Set<Variable> getVariables();
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/RegexFnUnitTest.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/RegexFnUnitTest.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/RegexFnUnitTest.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -194,7 +194,7 @@
           assertTrue(f.equals(fn));
           fail("No exception when testing an unbound value");
         } catch (QueryException qe) {
-          assertTrue(qe.getMessage().startsWith("Resolving unbound variable"));
+          assertTrue(qe.getMessage().startsWith("Unbound column"));
         }
         break;
         

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -120,6 +120,11 @@
     return rows[rowNumber][columnNumber] != null;
   }
 
+  /** @see org.mulgara.query.filter.Context#getUnboundVal() */
+  public long getUnboundVal() {
+    return 0;
+  }
+
   /**
    * Gets a previously unused node ID.
    * @return a new Node ID.

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/BinaryOperation.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/BinaryOperation.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/BinaryOperation.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -12,9 +12,12 @@
 package org.mulgara.query.filter.arithmetic;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.value.NumericExpression;
 
 
@@ -54,6 +57,13 @@
     return lhs.isGrounded() && rhs.isGrounded();
   }
 
+  /** @see org.mulgara.query.filter.RDFTerm#getVariables() */
+  public Set<Variable> getVariables() {
+    Set<Variable> result = new HashSet<Variable>(lhs.getVariables());
+    result.addAll(rhs.getVariables());
+    return result;
+  }
+
   // Not using generics in NumberOps as we can't know the types at this stage, but they are handy
   // for defining the classes correctly
   /**

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/UnaryMinus.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/UnaryMinus.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/arithmetic/UnaryMinus.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -13,8 +13,10 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.value.NumericExpression;
 
 
@@ -43,6 +45,11 @@
     operand.setContextOwner(this);
   }
 
+  /** @see org.mulgara.query.filter.RDFTerm#getVariables() */
+  public Set<Variable> getVariables() {
+    return operand.getVariables();
+  }
+
   /** {@inheritDoc} */
   public boolean isGrounded() throws QueryException {
     return operand.isGrounded();

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/BlankNodeValue.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/BlankNodeValue.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/BlankNodeValue.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -11,9 +11,13 @@
  */
 package org.mulgara.query.filter.value;
 
+import java.util.Collections;
+import java.util.Set;
+
 import org.jrdf.graph.BlankNode;
 import org.jrdf.graph.Node;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.Context;
 import org.mulgara.query.filter.ContextOwner;
 import org.mulgara.query.filter.RDFTerm;
@@ -93,4 +97,8 @@
   /** This value does not need a context */
   public void addContextListener(ContextOwner l) { }
 
+  public Set<Variable> getVariables() {
+    return Collections.emptySet();
+  }
+
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/ExternalFn.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -85,7 +85,7 @@
       isConstructor = true;
     } else {
       extFn = findFunction(fn, operands.length);
-      if (extFn == null) logger.error("Unknown function: " + fn);
+      if (extFn == null) logger.debug("Unknown function: " + fn);
     }
   }
 

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/IRI.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/IRI.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/IRI.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -12,11 +12,14 @@
 package org.mulgara.query.filter.value;
 
 import java.net.URI;
+import java.util.Collections;
+import java.util.Set;
 
 import javax.xml.namespace.QName;
 
 import org.jrdf.graph.Node;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.Context;
 import org.mulgara.query.filter.ContextOwner;
 import org.mulgara.query.filter.RDFTerm;
@@ -131,4 +134,9 @@
   public String toString() {
     return qname == null ? value.toString() : value.toString() + " (" + qname + ")";
   }
+
+  /** @see org.mulgara.query.filter.RDFTerm#getVariables() */
+  public Set<Variable> getVariables() {
+    return Collections.emptySet();
+  }
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/SimpleLiteral.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/SimpleLiteral.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/SimpleLiteral.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -11,8 +11,12 @@
  */
 package org.mulgara.query.filter.value;
 
+import java.util.Collections;
+import java.util.Set;
+
 import org.jrdf.graph.Node;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.Context;
 import org.mulgara.query.filter.ContextOwner;
 import org.mulgara.query.filter.RDFTerm;
@@ -180,4 +184,9 @@
     return ((String)lang.getValue()).compareTo((String)sl.getLang().getValue());
   }
 
+  /**@see org.mulgara.query.filter.RDFTerm#getVariables() */
+  public Set<Variable> getVariables() {
+    return Collections.emptySet();
+  }
+
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/TypedLiteral.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/TypedLiteral.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/TypedLiteral.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -13,13 +13,16 @@
 
 import java.math.BigDecimal;
 import java.net.URI;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.log4j.Logger;
 import org.jrdf.graph.Node;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.Context;
 import org.mulgara.query.filter.ContextOwner;
 import org.mulgara.query.rdf.LiteralImpl;
@@ -163,6 +166,11 @@
     return test.ebv(value.toString());
   }
 
+  /** @see org.mulgara.query.filter.RDFTerm#getVariables() */
+  public Set<Variable> getVariables() {
+    return Collections.emptySet();
+  }
+
   /**
    * Converts abbreviated URIs for XSD types into the full URI.
    * @param type The URI of the datatype.

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java	2010-01-27 18:29:32 UTC (rev 1891)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java	2010-01-27 19:18:47 UTC (rev 1892)
@@ -11,12 +11,16 @@
  */
 package org.mulgara.query.filter.value;
 
+import java.util.Collections;
+import java.util.Set;
+
 import org.apache.log4j.Logger;
 import org.jrdf.graph.BlankNode;
 import org.jrdf.graph.Literal;
 import org.jrdf.graph.Node;
 import org.jrdf.graph.URIReference;
 import org.mulgara.query.QueryException;
+import org.mulgara.query.Variable;
 import org.mulgara.query.filter.AbstractContextOwner;
 import org.mulgara.query.filter.Context;
 import org.mulgara.query.filter.ContextOwner;
@@ -62,6 +66,11 @@
     this.name = name;
   }
 
+  /** @see org.mulgara.query.filter.RDFTerm#getVariables() */
+  public Set<Variable> getVariables() {
+    return Collections.singleton(new Variable(name));
+  }
+
   /**
    * Tests if this variable is bound.
    * @return <code>true</code> if the variable is unknown, or known and not bound.
@@ -239,10 +248,10 @@
    */
   public long resolveLocal() throws QueryException {
     Context localContext = getLocalContext();
-    if (!localContext.isBound(varIndex)) {
-      throw new QueryException("Resolving unbound variable: " + name);
-    }
-    return localContext.getColumnValue(varIndex);
+    if (varIndex == Context.NOT_BOUND) throw new QueryException("Resolving unbound variable: " + name);
+    long result = localContext.getColumnValue(varIndex);
+    if (result == localContext.getUnboundVal()) throw new QueryException("Resolving unbound variable: " + name);
+    return result;
   }
 
   /**
@@ -271,7 +280,7 @@
     if (localContext == null) {
       localContext = getContextOwner().getCurrentContext();
     } else {
-      if (localContext != getContextOwner().getCurrentContext()) logger.warn("Unexpected different local context");
+      if (localContext != getContextOwner().getCurrentContext()) logger.debug("Changed context. This should be in a cloned filter.");
     }
     return setVarIndex(localContext);
   }




More information about the Mulgara-svn mailing list