~ migrating toward stemGraph model
authorEric Prud'hommeaux <eric@w3.org>
Thu, 14 Oct 2010 08:31:17 -0400
changeset 230 a0034477e0af
parent 229 ddba73b10a82
child 231 00ce5ca1dcf3
~ migrating toward stemGraph model
src/main/scala/SQL.scala
src/main/scala/Servlet.scala
src/main/scala/SparqlToSparqlToSql.scala
src/main/scala/SparqlToSql.scala
src/test/scala/SQLTest.scala
src/test/scala/SparqlToSparqlToSqlTest.scala
src/test/scala/SparqlToSqlTest.scala
--- a/src/main/scala/SQL.scala	Wed Oct 13 23:21:16 2010 -0400
+++ b/src/main/scala/SQL.scala	Thu Oct 14 08:31:17 2010 -0400
@@ -113,8 +113,11 @@
     { if (offset.isDefined) {"OFFSET " + offset + " "} else "" }+
     { if (limit.isDefined) {"LIMIT " + limit + " "} else "" }
 }
-case class RelName(n:String) extends RelationORSubselect {
-  override def toString = n
+case class RelationResource(rn:RDB.RelName) extends RelationORSubselect {
+  override def toString = rn.toString
+}
+object foo { // doesn't work
+  implicit def relname2relationref (rn:RDB.RelName) = RelationResource(rn)
 }
 case class Union(disjoints:Set[Select]) extends SelectORUnion {
   override def toString = "  " + (disjoints.toList.map(s => s.toString.replace("\n", "\n  ")).mkString("\nUNION\n  "))
@@ -126,15 +129,12 @@
 case class ProjectAttribute(value:RelVarAttrORExpression, attralias:AttrAlias) {
   override def toString = value + " AS " + attralias
 }
-//case class RelAttribute(relation:Relation, attribute:AttrName) c.f. ForeignKey
+//case class RelAttribute(relation:Relation, attribute:RDB.AttrName) c.f. ForeignKey
 sealed abstract class RelVarAttrORExpression
-case class RelVarAttr(relvar:RelVar, attribute:AttrName) extends RelVarAttrORExpression {
+case class RelVarAttr(relvar:RelVar, attribute:RDB.AttrName) extends RelVarAttrORExpression {
   override def toString = relvar + "." + attribute
 }
 
-case class AttrName(n:String) {
-  override def toString = n
-}
 case class AttrAlias(n:Name) {
   override def toString = n.s /* "'" + n.s + "'" */
 }
@@ -256,16 +256,16 @@
 
 sealed abstract class ValueDescription
 case class Value(datatype:Datatype) extends ValueDescription
-case class ForeignKey(rel:RelName, attr:AttrName) extends ValueDescription
+case class ForeignKey(rel:RDB.RelName, attr:RDB.AttrName) extends ValueDescription
 
-case class DatabaseDesc(relationdescs:Map[RelName,RelationDesc])
-case class RelationDesc(primarykey:Option[AttrName], attributes:Map[AttrName, ValueDescription])
+case class DatabaseDesc(relationdescs:Map[RDB.RelName,RelationDesc])
+case class RelationDesc(primarykey:Option[RDB.AttrName], attributes:Map[RDB.AttrName, ValueDescription])
 sealed abstract class FieldDescOrKeyDeclaration
-case class FieldDesc(attr:AttrName, value:Value, pkness:Boolean) extends FieldDescOrKeyDeclaration
+case class FieldDesc(attr:RDB.AttrName, value:Value, pkness:Boolean) extends FieldDescOrKeyDeclaration
 sealed abstract class KeyDeclaration extends FieldDescOrKeyDeclaration
-case class PrimaryKeyDeclaration(attr:AttrName) extends KeyDeclaration
-case class ForeignKeyDeclaration(fk:AttrName, rel:RelName, pk:AttrName) extends KeyDeclaration
-case class View(rel:RelName, defn:SelectORUnion) { // sibling of RelationDesc
+case class PrimaryKeyDeclaration(attr:RDB.AttrName) extends KeyDeclaration
+case class ForeignKeyDeclaration(fk:RDB.AttrName, rel:RDB.RelName, pk:RDB.AttrName) extends KeyDeclaration
+case class View(rel:RDB.RelName, defn:SelectORUnion) { // sibling of RelationDesc
   override def toString = "CREATE VIEW " + rel + " AS\n" + defn
 }
 
@@ -278,19 +278,19 @@
   def ddl:Parser[DatabaseDesc] =
     rep1sep(createtable, ";") ~ opt(";") ^^
   {
-    case l~x => DatabaseDesc(l.foldLeft(Map[RelName, RelationDesc]())((m, p) => {
-      val (rel:RelName, desc:RelationDesc) = p
+    case l~x => DatabaseDesc(l.foldLeft(Map[RDB.RelName, RelationDesc]())((m, p) => {
+      val (rel:RDB.RelName, desc:RelationDesc) = p
       m + (rel -> desc)
     }))
   }
 
-  def createtable:Parser[(RelName, RelationDesc)] =
+  def createtable:Parser[(RDB.RelName, RelationDesc)] =
     "CREATE" ~ "TABLE" ~ relation ~ "(" ~ rep1sep(fielddescorkeydef, ",") ~ ")" ^^
   {
     case "CREATE"~"TABLE"~relation~"("~reldesc~")" => {
-      val pk0:Option[AttrName] = None
-      val attrs0 = Map[AttrName, ValueDescription]()
-      val fks0 = Map[AttrName, ForeignKey]()
+      val pk0:Option[RDB.AttrName] = None
+      val attrs0 = Map[RDB.AttrName, ValueDescription]()
+      val fks0 = Map[RDB.AttrName, ForeignKey]()
       /* <pk>: (most recently parsed) PRIMARY KEY
        * <attrs>: map of attribute to type (e.g. INTEGER)
        * <fks>: map holding FOREIGN KEY relation REFERENCES attr
@@ -315,7 +315,7 @@
        * The type isn't really lost -- it's the same as the referenced type.
        */
       val attrs2 = attrs.map(x => {
-	val (attr:AttrName, value:Value) = x
+	val (attr:RDB.AttrName, value:Value) = x
 	if (fks.contains(attr))	(attr -> fks(attr))
 	else (attr -> value)
       })
@@ -406,19 +406,19 @@
     relvar ~ "." ~ attribute ^^
     { case relvar ~ "." ~ attribute => RelVarAttr(relvar, attribute) }
 
-  def attribute:Parser[AttrName] =
-    """[a-zA-Z_]\w*""".r ^^ { x => AttrName(x) }
+  def attribute:Parser[RDB.AttrName] =
+    """[a-zA-Z_]\w*""".r ^^ { x => RDB.AttrName(x) }
 
   def attralias:Parser[AttrAlias] =
     """[a-zA-Z_]\w*""".r ^^ { x => AttrAlias(Name(x)) }
 
   def relationORsubselect:Parser[RelationORSubselect] = (
-      relation ^^ { x => x }
+      relation ^^ { x => RelationResource(x) }
     | "(" ~ selectORunion ~ ")" ^^ { case "("~s~")" => Subselect(s) }
   )
 
-  def relation:Parser[RelName] =
-    """[a-zA-Z_]\w*""".r ^^ { x => RelName(x) }
+  def relation:Parser[RDB.RelName] =
+    """[a-zA-Z_]\w*""".r ^^ { x => RDB.RelName(x) }
 
   def relvar:Parser[RelVar] =
     """[a-zA-Z_]\w*""".r ^^ { x => RelVar(Name(x)) }
@@ -498,12 +498,12 @@
 	case InnerJoin(AliasedResource(rel, as), optOn) => InnerJoin(AliasedResource({ rel match {
 	  case Subselect(s:Select) => Subselect(PrettySql(s).makePretty())
 	  case Subselect(Union(disjoints)) => Subselect(Union(disjoints.map(s => PrettySql(s).makePretty())))
-	  case r:RelName => r
+	  case r:RelationResource => r
 	}}, as), None)
 	case LeftOuterJoin(AliasedResource(rel, as), on:Expression) => LeftOuterJoin(AliasedResource({ rel match {
 	  case Subselect(s:Select) => Subselect(PrettySql(s).makePretty())
 	  case Subselect(Union(disjoints)) => Subselect(Union(disjoints.map(s => PrettySql(s).makePretty())))
-	  case r:RelName => r
+	  case r:RelationResource => r
 	}}, as), on)
       }})
     Select(distinct, projection, TableList(strippedTables), XeqXStripped, order, offset, limit)
--- a/src/main/scala/Servlet.scala	Wed Oct 13 23:21:16 2010 -0400
+++ b/src/main/scala/Servlet.scala	Thu Oct 14 08:31:17 2010 -0400
@@ -8,7 +8,8 @@
 import java.sql.{Types => T}
 
 import java.net.URI
-import w3c.sw.sql.{Sql,DatabaseDesc,RelName,RelationDesc,AttrName,Value,Datatype,ForeignKey,Name}
+import w3c.sw.sql.RDB.{RelName,AttrName}
+import w3c.sw.sql.{Sql,DatabaseDesc,RelationDesc,Value,Datatype,ForeignKey,Name}
 import w3c.sw.sparql
 import w3c.sw.sparql.Sparql
 import w3c.sw.sql
--- a/src/main/scala/SparqlToSparqlToSql.scala	Wed Oct 13 23:21:16 2010 -0400
+++ b/src/main/scala/SparqlToSparqlToSql.scala	Thu Oct 14 08:31:17 2010 -0400
@@ -5,6 +5,7 @@
 package w3c.sw.sparql2sparql2sql
 
 import w3c.sw.sql
+import w3c.sw.sql.RDB.{RelName}
 import w3c.sw.sparql
 import w3c.sw.sparql2sparql
 import w3c.sw.sparql2sql
@@ -65,7 +66,7 @@
       case 1 => disjoints.toList(0)
       case _ => sql.Union(disjoints.toSet)
     }
-    sql.View(sql.RelName("triples"), body)
+    sql.View(sql.RDB.RelName("triples"), body)
   }
 }
 
--- a/src/main/scala/SparqlToSql.scala	Wed Oct 13 23:21:16 2010 -0400
+++ b/src/main/scala/SparqlToSql.scala	Thu Oct 14 08:31:17 2010 -0400
@@ -20,7 +20,7 @@
 import w3c.sw.util
 
 case class StemURI(s:String)
-case class PrimaryKey(attr:sql.AttrName)
+case class PrimaryKey(attr:sql.RDB.AttrName)
 
 sealed abstract class Binding
 case class RDFNode(relvarattr:sql.RelVarAttr) extends Binding
@@ -109,11 +109,11 @@
   /**
    * map to a URL for a tuple in the database.
    */
-  case class RDFNoder(relation:sql.RelName, binding:FullOrPartialBinding) extends SQL2RDFValueMapper(binding)
+  case class RDFNoder(relation:sql.RDB.RelName, binding:FullOrPartialBinding) extends SQL2RDFValueMapper(binding)
   /**
    * map to a blank node label for a tuple in the database.
    */
-  case class RDFBNoder(relation:sql.RelName, binding:FullOrPartialBinding) extends SQL2RDFValueMapper(binding)
+  case class RDFBNoder(relation:sql.RDB.RelName, binding:FullOrPartialBinding) extends SQL2RDFValueMapper(binding)
 
   /**
    * a URL representing a tuple in a database.
@@ -279,8 +279,8 @@
    *   return: (VarAssignable(?emp),RDFNoder(Employee,FullBinding(R_emp.empid)))
    *   which maps 4 to &lt;http://hr.example/our/favorite/DB/Employee/id.4#record&gt;
    */
-  def varConstraint(state:R2RState, alias:sql.RelVar, optAttr:Option[sql.AttrName], v:sparql.Assignable, db:sql.DatabaseDesc, rel:sql.RelName):R2RState = {
-    val constrainMe = if (optAttr.isDefined) sql.RelVarAttr(alias, optAttr.get) else sql.RelVarAttr(alias, sql.AttrName("_no_such_attribute"))
+  def varConstraint(state:R2RState, alias:sql.RelVar, optAttr:Option[sql.RDB.AttrName], v:sparql.Assignable, db:sql.DatabaseDesc, rel:sql.RDB.RelName):R2RState = {
+    val constrainMe = if (optAttr.isDefined) sql.RelVarAttr(alias, optAttr.get) else sql.RelVarAttr(alias, sql.RDB.AttrName("_no_such_attribute"))
     val reldesc = db.relationdescs(rel)
     val boundTo = FullBinding(constrainMe)
 
@@ -289,7 +289,7 @@
      */
     val binding = reldesc.primarykey match {
       /** <pre>varConstraint(R_emp, Some(empid), VarAssignable(?emp), Employee) -&gt; RDFNoder(Employee,FullBinding(R_emp.empid))</pre> */
-      case Some(sql.AttrName(constrainMe.attribute.n)) => RDFNoder(rel, boundTo)
+      case Some(sql.RDB.AttrName(constrainMe.attribute.n)) => RDFNoder(rel, boundTo)
       case _ => {
 
 	if (reldesc.attributes.contains(constrainMe.attribute)) {
@@ -374,8 +374,8 @@
       case sparql.TermUri(uri) => {
 	val PUri(stem, spRel, spAttr) = parsePredicateURI(uri)
 	/** The relation and attribute come from the predicate, e.g. Employee.fname =&gt; Employee and fname. */
-	val rel = sql.RelName(spRel.s)
-	val attr = sql.AttrName(spAttr.s)
+	val rel = sql.RDB.RelName(spRel.s)
+	val attr = sql.RDB.AttrName(spAttr.s)
 
 	/**
 	 * The particular join for e.g. Employee is controled by the subject.
@@ -629,7 +629,7 @@
 		    nestedVarmap:Map[sparql.Assignable, SQL2RDFValueMapper],
 		    isOpt:Boolean):R2RState = {
 
-    val varAliasAttr = sql.RelVarAttr(optionalAlias, sql.AttrName(attrAliasNameFromVar(v)))
+    val varAliasAttr = sql.RelVarAttr(optionalAlias, sql.RDB.AttrName(attrAliasNameFromVar(v)))
     if (startState.varmap.contains(v)) {
 
       /** The variable has already been bound. */
@@ -763,7 +763,7 @@
      * _DISJOINT_ as OPTIONAL behaves pretty much like a disjunction).
      */
     val nestedCond = sql.RelationalExpressionNull(sql.PrimaryExpressionAttr(
-      sql.RelVarAttr(leftJoinAlias, sql.AttrName("_DISJOINT_"))))
+      sql.RelVarAttr(leftJoinAlias, sql.RDB.AttrName("_DISJOINT_"))))
 
     /** Bind variables to the attributes projected from the subselect;
      * handle corefs (equivalence with earlier bindings).
@@ -795,7 +795,7 @@
        )
     val exprs =
       if (negate) {
-	initState.exprs + sql.RelationalExpressionNull(sql.PrimaryExpressionAttr(sql.RelVarAttr(leftJoinAlias, sql.AttrName("_DISJOINT_"))))
+	initState.exprs + sql.RelationalExpressionNull(sql.PrimaryExpressionAttr(sql.RelVarAttr(leftJoinAlias, sql.RDB.AttrName("_DISJOINT_"))))
       } else initState.exprs
     R2RState(initState.joins + join, outerState2.varmap, exprs)
   }
@@ -968,7 +968,7 @@
 	  val (disjointState, disjointVars, uniqueConst) = state
 
 	  /** Create a condition to test if this disjoint was matched. */
-	  val disjointCond = sql.RelationalExpressionNe(sql.PrimaryExpressionAttr(sql.RelVarAttr(unionAlias, sql.AttrName("_DISJOINT_"))),
+	  val disjointCond = sql.RelationalExpressionNe(sql.PrimaryExpressionAttr(sql.RelVarAttr(unionAlias, sql.RDB.AttrName("_DISJOINT_"))),
 							uniqueConst)
 	  val outerState2 = disjointVars.foldLeft(outerState)((myState, v) =>
 	      subselectVars(myState, sparql.VarAssignable(v), unionAlias, disjointCond, outerState.varmap, disjointState.varmap, false))
@@ -1106,6 +1106,12 @@
     }
   }
 
+  /**
+   * junk that should be elsewhere
+   */
+
+  implicit def relname2relresource (rn:sql.RDB.RelName) : sql.RelationResource = sql.RelationResource(rn)
+
 }
 
 /**
@@ -1155,7 +1161,7 @@
    * @param stem  stem URI for all generated RDF URIs.
    */
   def binding (name:String, value:String, varmap:Map[sparql.Assignable, SparqlToSql.SQL2RDFValueMapper], stem:StemURI) : String = {
-    def getattr (b:SparqlToSql.FullOrPartialBinding) : sql.AttrName = {
+    def getattr (b:SparqlToSql.FullOrPartialBinding) : sql.RDB.AttrName = {
       b match {
 	case SparqlToSql.FullBinding(sql.RelVarAttr(_, attr)) =>
 	  attr
@@ -1188,5 +1194,6 @@
   def foot () : String = {
     "  </results>\n</sparql>\n"
   }
+
 }
 
--- a/src/test/scala/SQLTest.scala	Wed Oct 13 23:21:16 2010 -0400
+++ b/src/test/scala/SQLTest.scala	Thu Oct 14 08:31:17 2010 -0400
@@ -13,10 +13,10 @@
 R_manager.id=R_emp.manager AND R_emp.lastName IS NOT NULL AND R_manager.lastName IS NOT NULL
 """
     val expected = ExprConjunction(Set(
-      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id"))),
-			     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager")))),
-      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName")))),
-      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("lastName"))))))
+      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id"))),
+			     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager")))),
+      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName")))),
+      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("lastName"))))))
     assert(expected === (a.parseAll(a.expression, e).get))
   }
 
@@ -27,10 +27,10 @@
 R_manager.id=R_emp.manager OR R_emp.lastName IS NOT NULL OR R_manager.lastName IS NOT NULL
 """
     val expected = ExprDisjunction(Set(
-      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id"))),
-			     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager")))),
-      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName")))),
-      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("lastName"))))))
+      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id"))),
+			     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager")))),
+      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName")))),
+      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("lastName"))))))
     assert(expected === (a.parseAll(a.expression, e).get))
   }
 
@@ -41,10 +41,10 @@
 ( R_manager.id=R_emp.manager OR R_emp.lastName IS NOT NULL OR R_manager.lastName IS NOT NULL )
 """
     val expected = ExprDisjunction(Set(
-      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id"))),
-			     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager")))),
-      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName")))),
-      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("lastName"))))))
+      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id"))),
+			     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager")))),
+      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName")))),
+      RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("lastName"))))))
     assert(expected === (a.parseAll(a.expression, e).get))
   }
 
@@ -75,19 +75,19 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),
-						  AttrName("lastName")),
+						  RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_empName"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None),
-			      InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_manager"))), None))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_manager"))), None))),
       Some(
-	RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id"))),
-			       PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager"))))),
+	RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id"))),
+			       PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager"))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
 
   test("parse INNER JOIN ON") {
-    // AliasedResource(RelName("Employee"),RelVar(Name("R_emp")))
+    // AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp")))
     val a = Sql()
     val e = """
 SELECT R_emp.lastName AS A_empName
@@ -97,19 +97,19 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),
-						  AttrName("lastName")),
+						  RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_empName"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None),
-			      InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_manager"))), None))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_manager"))), None))),
       Some(
-	RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id"))),
-			       PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager"))))),
+	RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id"))),
+			       PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager"))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
 
   test("parse SQLbgp") {
-    // AliasedResource(RelName("Employee"),RelVar(Name("R_emp")))
+    // AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp")))
     val a = Sql()
     val e = """
 SELECT R_emp.lastName AS A_empName, R_manager.lastName AS A_managName
@@ -120,18 +120,18 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),
-						  AttrName("lastName")),
+						  RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_empName"))),
 			ProjectAttribute(RelVarAttr(RelVar(Name("R_manager")),
-						  AttrName("lastName")),
+						  RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_managName"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None),
-			      InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_manager"))), None))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_manager"))), None))),
       Some(ExprConjunction(Set(
-	RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id"))),
-			       PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager")))),
-	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName")))),
-	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("lastName"))))))),
+	RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id"))),
+			       PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager")))),
+	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName")))),
+	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("lastName"))))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
@@ -146,12 +146,12 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),
-						  AttrName("lastName")),
+						  RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_empName"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None))),
-      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager"))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None))),
+      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager"))),
 						      PrimaryExpressionTyped(Datatype.INTEGER,Name("18"))),
-			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName"))))))),
+			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName"))))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
@@ -167,15 +167,15 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),
-						  AttrName("lastName")),
+						  RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_empName"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None),
-			      InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_manager"))), None))),
-      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("manager"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id")))),
-			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("lastName"))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_manager"))), None))),
+      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("manager"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id")))),
+			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("lastName"))),
 						      PrimaryExpressionTyped(Datatype.STRING,Name("Johnson"))),
-			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName"))))))),
+			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName"))))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
@@ -197,29 +197,29 @@
 """
     val expected = Select(
       false,
-      Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")), AttrName("lastName")),
+      Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")), RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_empName"))),
-			ProjectAttribute(RelVarAttr(RelVar(Name("R_grandManager")),AttrName("lastName")),
+			ProjectAttribute(RelVarAttr(RelVar(Name("R_grandManager")),RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_grandManagName"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None),
-			      InnerJoin(AliasedResource(RelName("Manage"),RelVar(Name("R_lower"))), None),
-			      InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_manager"))), None),
-			      InnerJoin(AliasedResource(RelName("Manage"),RelVar(Name("R_upper"))), None),
-			      InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_grandManager"))), None))),
-      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_lower")),AttrName("manages"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("id")))),
-			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_lower")),AttrName("manager")))),
-			       RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("birthday"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("birthday")))),
-			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_upper")),AttrName("manages"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id")))),
-			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_grandManager")),AttrName("id"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_upper")),AttrName("manager")))),
-			       RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_grandManager")),AttrName("birthday"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("birthday")))),
-			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName")))),
-			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_grandManager")),AttrName("lastName"))))))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Manage"),RelVar(Name("R_lower"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_manager"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Manage"),RelVar(Name("R_upper"))), None),
+			      InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_grandManager"))), None))),
+      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_lower")),RDB.AttrName("manages"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("id")))),
+			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_lower")),RDB.AttrName("manager")))),
+			       RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("birthday"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("birthday")))),
+			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_upper")),RDB.AttrName("manages"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id")))),
+			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_grandManager")),RDB.AttrName("id"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_upper")),RDB.AttrName("manager")))),
+			       RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_grandManager")),RDB.AttrName("birthday"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("birthday")))),
+			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName")))),
+			       RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_grandManager")),RDB.AttrName("lastName"))))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
@@ -244,42 +244,42 @@
 """
     val expected = Select(
       false,
-      Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_union1")), AttrName("name")),
+      Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_union1")), RDB.AttrName("name")),
 				       AttrAlias(Name("A_name"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_who"))), None),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_who"))), None),
 			      InnerJoin(AliasedResource(Subselect(Union(Set(
 				Select(
 				  false,
-				  Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_manager")), AttrName("lastName")),
+				  Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_manager")), RDB.AttrName("lastName")),
 								   AttrAlias(Name("A_name"))), 
-						    ProjectAttribute(RelVarAttr(RelVar(Name("R_above")), AttrName("manages")),
+						    ProjectAttribute(RelVarAttr(RelVar(Name("R_above")), RDB.AttrName("manages")),
 								   AttrAlias(Name("A_who"))))),
 				  TableList(AddOrderedSet(
-				    InnerJoin(AliasedResource(RelName("Manage"),RelVar(Name("R_above"))), None),
-				    InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_manager"))), None)
+				    InnerJoin(AliasedResource(RDB.RelName("Manage"),RelVar(Name("R_above"))), None),
+				    InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_manager"))), None)
 				  )), 
-				  Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),AttrName("manager"))),
-										  PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("id")))),
-							   RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),AttrName("lastName"))))))),
+				  Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),RDB.AttrName("manager"))),
+										  PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("id")))),
+							   RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_manager")),RDB.AttrName("lastName"))))))),
 				  List[OrderElt](), None, None), 
 				Select(
 				  false,
-				  Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_managed")), AttrName("lastName")),
+				  Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_managed")), RDB.AttrName("lastName")),
 								   AttrAlias(Name("A_name"))), 
-						    ProjectAttribute(RelVarAttr(RelVar(Name("R_below")), AttrName("manager")),
+						    ProjectAttribute(RelVarAttr(RelVar(Name("R_below")), RDB.AttrName("manager")),
 								   AttrAlias(Name("A_who"))))),
 				  TableList(AddOrderedSet(
-				    InnerJoin(AliasedResource(RelName("Manage"),RelVar(Name("R_below"))), None),
-				    InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_managed"))), None)
+				    InnerJoin(AliasedResource(RDB.RelName("Manage"),RelVar(Name("R_below"))), None),
+				    InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_managed"))), None)
 				  )), 
-				  Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_below")),AttrName("manages"))),
-										  PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_managed")),AttrName("id")))),
-							   RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_managed")),AttrName("lastName"))))))),
+				  Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_below")),RDB.AttrName("manages"))),
+										  PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_managed")),RDB.AttrName("id")))),
+							   RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_managed")),RDB.AttrName("lastName"))))))),
 				  List[OrderElt](), None, None)))),
 							RelVar(Name("R_union1"))), None))), 
-      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_union1")),AttrName("A_who"))),
-						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_who")),AttrName("id")))),
-			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_who")),AttrName("lastName"))),
+      Some(ExprConjunction(Set(RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_union1")),RDB.AttrName("A_who"))),
+						      PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_who")),RDB.AttrName("id")))),
+			       RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_who")),RDB.AttrName("lastName"))),
 						      PrimaryExpressionTyped(Datatype.STRING,Name("Smith")))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
@@ -295,13 +295,13 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_above")),
-						  AttrName("manages")),
+						  RDB.AttrName("manages")),
 				       AttrAlias(Name("A_who"))),
 			ProjectAttribute(ConstNULL(),
 				       AttrAlias(Name("A_bday"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Manage"),RelVar(Name("R_above"))), None))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Manage"),RelVar(Name("R_above"))), None))),
       Some(
-	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),AttrName("id"))))),
+	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),RDB.AttrName("id"))))),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
@@ -319,10 +319,10 @@
 							  PrimaryExpressionTyped(Datatype("String"),Name("/")),
 							  PrimaryExpressionTyped(Datatype("String"),Name("id")),
 							  PrimaryExpressionTyped(Datatype("String"),Name(".")),
-							  PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("id"))),
+							  PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("id"))),
 							  PrimaryExpressionTyped(Datatype("String"),Name("#record")))),
 					      AttrAlias(Name("A_emp"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None))),
       None, List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
@@ -337,18 +337,18 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_above")),
-						  AttrName("manages")),
+						  RDB.AttrName("manages")),
 				       AttrAlias(Name("A_who"))),
 			ProjectAttribute(ConstNULL(),
 				       AttrAlias(Name("A_bday"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Manage"),RelVar(Name("R_above"))), None))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Manage"),RelVar(Name("R_above"))), None))),
       Some(
 	ExprDisjunction(Set(
-	  RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),AttrName("id")))),
+	  RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),RDB.AttrName("id")))),
 	  ExprConjunction(Set(
-	    RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),AttrName("id"))),
+	    RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),RDB.AttrName("id"))),
 				   PrimaryExpressionTyped(Datatype.INTEGER,Name("5"))),
-	    RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),AttrName("id"))),
+	    RelationalExpressionLt(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_above")),RDB.AttrName("id"))),
 				   PrimaryExpressionTyped(Datatype.INTEGER,Name("3")))
 	  ))))),
       List[OrderElt](), None, None)
@@ -366,18 +366,18 @@
     val expected = Select(
       false,
       Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),
-						  AttrName("lastName")),
+						  RDB.AttrName("lastName")),
 				       AttrAlias(Name("A_empName"))),
 			ProjectAttribute(RelVarAttr(RelVar(Name("R_mang")),
-						  AttrName("manageName")),
+						  RDB.AttrName("manageName")),
 				       AttrAlias(Name("A_manageName"))))),
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None),
-			      LeftOuterJoin(AliasedResource(RelName("Manage"),RelVar(Name("R_mang"))),
-					    RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_mang")),AttrName("emp"))),
-								   PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("id")))
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None),
+			      LeftOuterJoin(AliasedResource(RDB.RelName("Manage"),RelVar(Name("R_mang"))),
+					    RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_mang")),RDB.AttrName("emp"))),
+								   PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("id")))
 								 )))),
       Some(
-	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName"))))
+	RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName"))))
       ),
       List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
@@ -397,20 +397,20 @@
     val expected = 
       Select(
 	false,
-	Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName")),AttrAlias(Name("A_empName"))),
-			  ProjectAttribute(RelVarAttr(RelVar(Name("R_mang")),AttrName("manageName")),AttrAlias(Name("A_manageName"))))),
-	TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None),
+	Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName")),AttrAlias(Name("A_empName"))),
+			  ProjectAttribute(RelVarAttr(RelVar(Name("R_mang")),RDB.AttrName("manageName")),AttrAlias(Name("A_manageName"))))),
+	TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None),
 				LeftOuterJoin(AliasedResource(
 				  Subselect(Select(
 				    false,
-				    Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName")),AttrAlias(Name("A_empName"))),
-								     ProjectAttribute(RelVarAttr(RelVar(Name("R_mang")),AttrName("manageName")),AttrAlias(Name("A_manageName"))))),
-						   TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None))),
+				    Projection(Set(ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName")),AttrAlias(Name("A_empName"))),
+								     ProjectAttribute(RelVarAttr(RelVar(Name("R_mang")),RDB.AttrName("manageName")),AttrAlias(Name("A_manageName"))))),
+						   TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None))),
 				    None, List[OrderElt](), None, None)),
 				  RelVar(Name("R_mang"))),
-					      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_mang")),AttrName("emp"))),
-								     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("id"))))))),
-	Some(RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("lastName"))))),
+					      RelationalExpressionEq(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_mang")),RDB.AttrName("emp"))),
+								     PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("id"))))))),
+	Some(RelationalExpressionNotNull(PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("lastName"))))),
 	List[OrderElt](), None, None)
     assert(expected === (a.parseAll(a.select, e).get))
   }
@@ -420,7 +420,7 @@
     val e = """
 ID INT PRIMARY KEY
 """
-    val expected = FieldDesc(AttrName("ID"), Value(Datatype.INTEGER), true)
+    val expected = FieldDesc(RDB.AttrName("ID"), Value(Datatype.INTEGER), true)
     assert(expected === (a.parseAll(a.fielddescorkeydef, e).get))
   }
 
@@ -430,9 +430,9 @@
 CREATE TABLE Sex_DE (ID INT PRIMARY KEY)
 """
     val expected = 
-      (RelName("Sex_DE") -> 
-       RelationDesc(Option(AttrName("ID")),
-		    Map(AttrName("ID") -> Value(Datatype.INTEGER))))
+      (RDB.RelName("Sex_DE") -> 
+       RelationDesc(Option(RDB.AttrName("ID")),
+		    Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER))))
       assert(expected === (a.parseAll(a.createtable, e).get))
   }
 
@@ -442,10 +442,10 @@
 CREATE TABLE Sex_DE (ID INT PRIMARY KEY, EnterpriseEntryID INT)
 """
     val expected = DatabaseDesc(
-      Map(RelName("Sex_DE") -> 
-	  RelationDesc(Option(AttrName("ID")),
-		       Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			   AttrName("EnterpriseEntryID") -> Value(Datatype.INTEGER)))))
+      Map(RDB.RelName("Sex_DE") -> 
+	  RelationDesc(Option(RDB.AttrName("ID")),
+		       Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			   RDB.AttrName("EnterpriseEntryID") -> Value(Datatype.INTEGER)))))
 
     assert(expected === (a.parseAll(a.ddl, e).get))
   }
@@ -456,10 +456,10 @@
 CREATE TABLE Sex_DE (ID INT, EnterpriseEntryID INT, PRIMARY KEY (ID))
 """
     val expected = DatabaseDesc(
-      Map(RelName("Sex_DE") -> 
-	  RelationDesc(Option(AttrName("ID")),
-		       Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			   AttrName("EnterpriseEntryID") -> Value(Datatype.INTEGER)))))
+      Map(RDB.RelName("Sex_DE") -> 
+	  RelationDesc(Option(RDB.AttrName("ID")),
+		       Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			   RDB.AttrName("EnterpriseEntryID") -> Value(Datatype.INTEGER)))))
 
     assert(expected === (a.parseAll(a.ddl, e).get))
   }
@@ -471,16 +471,16 @@
 CREATE TABLE Sex_DE (ID INT PRIMARY KEY, EntryName STRING)
 """
   val expected:DatabaseDesc = DatabaseDesc(
-    Map(RelName("Person") -> 
-	RelationDesc(Option(AttrName("ID")), 
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("MiddleName") -> Value(Datatype.STRING),
-			 AttrName("DateOfBirth") -> Value(Datatype.DATE),
-			 AttrName("SexDE") -> ForeignKey(RelName("Sex_DE"), AttrName("ID")))),
-	RelName("Sex_DE") -> 
-	RelationDesc(Option(AttrName("ID")),
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("EntryName") -> Value(Datatype.STRING)))
+    Map(RDB.RelName("Person") -> 
+	RelationDesc(Option(RDB.AttrName("ID")), 
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("MiddleName") -> Value(Datatype.STRING),
+			 RDB.AttrName("DateOfBirth") -> Value(Datatype.DATE),
+			 RDB.AttrName("SexDE") -> ForeignKey(RDB.RelName("Sex_DE"), RDB.AttrName("ID")))),
+	RDB.RelName("Sex_DE") -> 
+	RelationDesc(Option(RDB.AttrName("ID")),
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("EntryName") -> Value(Datatype.STRING)))
       ))
     assert(expected === (a.parseAll(a.ddl, e).get))
   }
@@ -496,42 +496,42 @@
 CREATE TABLE NDCcodes (ID INT PRIMARY KEY, NDC INT, ingredient INT);
 """
   val expected:DatabaseDesc = DatabaseDesc(
-    Map(RelName("Person") -> 
-	RelationDesc(Option(AttrName("ID")), 
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("MiddleName") -> Value(Datatype.STRING),
-			 AttrName("DateOfBirth") -> Value(Datatype.DATE),
-			 AttrName("SexDE") -> ForeignKey(RelName("Sex_DE"), AttrName("ID")))),
-	RelName("Sex_DE") -> 
-	RelationDesc(Option(AttrName("ID")),
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("EntryName") -> Value(Datatype.STRING))),
-	RelName("Item_Medication") -> 
-	RelationDesc(Option(AttrName("ID")),
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("PatientID") -> ForeignKey(RelName("Person"),  AttrName("ID")),
-			 AttrName("PerformedDTTM") -> Value(Datatype.DATE),
-			 AttrName("EntryName") -> Value(Datatype.STRING))),
-	RelName("Medication") -> 
-	RelationDesc(Option(AttrName("ID")),
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("ItemID") -> ForeignKey(RelName("Item_Medication"),  AttrName("ID")),
-			 AttrName("MedDictDE") -> ForeignKey(RelName("Medication_DE"), AttrName("ID")))),
-	RelName("Medication_DE") -> 
-	RelationDesc(Option(AttrName("ID")),
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("NDC") -> Value(Datatype.INTEGER))),
-	RelName("NDCcodes") -> 
-	RelationDesc(Option(AttrName("ID")),
-		     Map(AttrName("ID") -> Value(Datatype.INTEGER),
-			 AttrName("NDC") -> Value(Datatype.INTEGER),
-			 AttrName("ingredient") -> Value(Datatype.INTEGER)))
+    Map(RDB.RelName("Person") -> 
+	RelationDesc(Option(RDB.AttrName("ID")), 
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("MiddleName") -> Value(Datatype.STRING),
+			 RDB.AttrName("DateOfBirth") -> Value(Datatype.DATE),
+			 RDB.AttrName("SexDE") -> ForeignKey(RDB.RelName("Sex_DE"), RDB.AttrName("ID")))),
+	RDB.RelName("Sex_DE") -> 
+	RelationDesc(Option(RDB.AttrName("ID")),
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("EntryName") -> Value(Datatype.STRING))),
+	RDB.RelName("Item_Medication") -> 
+	RelationDesc(Option(RDB.AttrName("ID")),
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("PatientID") -> ForeignKey(RDB.RelName("Person"),  RDB.AttrName("ID")),
+			 RDB.AttrName("PerformedDTTM") -> Value(Datatype.DATE),
+			 RDB.AttrName("EntryName") -> Value(Datatype.STRING))),
+	RDB.RelName("Medication") -> 
+	RelationDesc(Option(RDB.AttrName("ID")),
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("ItemID") -> ForeignKey(RDB.RelName("Item_Medication"),  RDB.AttrName("ID")),
+			 RDB.AttrName("MedDictDE") -> ForeignKey(RDB.RelName("Medication_DE"), RDB.AttrName("ID")))),
+	RDB.RelName("Medication_DE") -> 
+	RelationDesc(Option(RDB.AttrName("ID")),
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("NDC") -> Value(Datatype.INTEGER))),
+	RDB.RelName("NDCcodes") -> 
+	RelationDesc(Option(RDB.AttrName("ID")),
+		     Map(RDB.AttrName("ID") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("NDC") -> Value(Datatype.INTEGER),
+			 RDB.AttrName("ingredient") -> Value(Datatype.INTEGER)))
       ))
     assert(expected === (a.parseAll(a.ddl, e).get))
   }
 
   test("CREATE VIEW") {
-    // AliasedResource(RelName("Employee"),RelVar(Name("R_emp")))
+    // AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp")))
     val a = Sql()
     val e = """
 CREATE VIEW triples AS SELECT
@@ -540,7 +540,7 @@
             R_emp.lastName AS O
        FROM Employee AS R_emp
 """ // "
-    val expected = View(RelName("triples"), Select(
+    val expected = View(RDB.RelName("triples"), Select(
       false,
       Projection(Set(
 	ProjectAttribute(Concat(List(PrimaryExpressionTyped(Datatype("String"),Name("http://hr.example/DB/")),
@@ -548,17 +548,23 @@
 				   PrimaryExpressionTyped(Datatype("String"),Name("/")),
 				   PrimaryExpressionTyped(Datatype("String"),Name("empid")),
 				   PrimaryExpressionTyped(Datatype("String"),Name(".")),
-				   PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),AttrName("id"))),
+				   PrimaryExpressionAttr(RelVarAttr(RelVar(Name("R_emp")),RDB.AttrName("id"))),
 				   PrimaryExpressionTyped(Datatype("String"),Name("#record")))),
 		       AttrAlias(Name("S"))),
 	ProjectAttribute(PrimaryExpressionTyped(Datatype.STRING,Name("<http://hr.example/DB/Employee#lastName>")),
 		       AttrAlias(Name("P"))),
 	ProjectAttribute(RelVarAttr(RelVar(Name("R_emp")),
-				  AttrName("lastName")),
+				  RDB.AttrName("lastName")),
 		       AttrAlias(Name("O"))))), 
-      TableList(AddOrderedSet(InnerJoin(AliasedResource(RelName("Employee"),RelVar(Name("R_emp"))), None))),
+      TableList(AddOrderedSet(InnerJoin(AliasedResource(RDB.RelName("Employee"),RelVar(Name("R_emp"))), None))),
       None, List[OrderElt](), None, None))
     assert(expected === (a.parseAll(a.createview, e).get))
   }
 
+  /**
+   * junk that should be elsewhere
+   */
+
+  implicit def relname2relresource (rn:RDB.RelName) : RelationResource = RelationResource(rn)
+
 }
--- a/src/test/scala/SparqlToSparqlToSqlTest.scala	Wed Oct 13 23:21:16 2010 -0400
+++ b/src/test/scala/SparqlToSparqlToSqlTest.scala	Thu Oct 14 08:31:17 2010 -0400
@@ -9,7 +9,8 @@
 import java.net.URI
 import w3c.sw.sparql.Sparql
 import w3c.sw.sparql2sparql.{SparqlToSparql,NodePatternMap,NodePattern,SparqlMap}
-import w3c.sw.sql.{Sql,DatabaseDesc,RelName,RelationDesc,AttrName,Value,Datatype,ForeignKey,Name}
+import w3c.sw.sql.RDB.{RelName,AttrName}
+import w3c.sw.sql.{Sql,DatabaseDesc,RelationDesc,Value,Datatype,ForeignKey,Name}
 import w3c.sw.sparql2sql.{SparqlToSql,StemURI}
 import w3c.sw.sparql2sparql2sql.SparqlToSparqlToSql.toView
 
--- a/src/test/scala/SparqlToSqlTest.scala	Wed Oct 13 23:21:16 2010 -0400
+++ b/src/test/scala/SparqlToSqlTest.scala	Thu Oct 14 08:31:17 2010 -0400
@@ -6,7 +6,8 @@
 
 import org.scalatest.FunSuite
 import java.net.URI
-import w3c.sw.sql.{Sql,DatabaseDesc,RelName,RelationDesc,AttrName,Value,Datatype,ForeignKey,Name}
+import w3c.sw.sql.RDB.{RelName,AttrName}
+import w3c.sw.sql.{Sql,DatabaseDesc,RelationDesc,Value,Datatype,ForeignKey,Name}
 import w3c.sw.sparql.Sparql
 import w3c.sw.sparql2sql.{SparqlToSql,StemURI,SqlToXMLRes}