You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/10/30 19:57:36 UTC

svn commit: r1195219 - in /incubator/jena/Experimental/JenaPerf/trunk: Benchmarks/LUBM/manifest.ttl src/main/scala/org/apache/jena/perf/TemplatedQuery.scala

Author: andy
Date: Sun Oct 30 18:57:36 2011
New Revision: 1195219

URL: http://svn.apache.org/viewvc?rev=1195219&view=rev
Log: (empty)

Added:
    incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala
Modified:
    incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/manifest.ttl

Modified: incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/manifest.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/Benchmarks/LUBM/manifest.ttl?rev=1195219&r1=1195218&r2=1195219&view=diff
==============================================================================
Binary files - no diff available.

Added: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala?rev=1195219&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/TemplatedQuery.scala Sun Oct 30 18:57:36 2011
@@ -0,0 +1,74 @@
+package org.apache.jena.perf
+import java.util.regex.Pattern
+
+import scala.collection._  
+import scala.collection.mutable.{Map => MMap, Set => MSet}
+
+
+object TemplatedQuery {
+  def main(args: Array[String]): Unit = {
+    
+    val template = 
+      """
+SELECT *
+{ ?s :p %X% ;
+     :q <uri> ;
+     :r ?o
+  FILTER ( ?o < %Z% )
+}
+"""
+      
+    val qt = new TemplatedQuery(template)
+    val map = Map("%X%" -> "<XYZ>", "%Z%" -> "123" )
+    val s = qt.subst(x => map.getOrElse(x, "UNDEF"))
+    println(s)
+    
+    val x = qt.generator()
+    println(x._1)
+    println(x._2)
+  }
+}
+
+// , options:Map[String, Array[String]]
+class TemplatedQuery(template:String) {
+    import scala.util.matching.Regex
+    import scala.util.matching.Regex.Match
+  
+    private val regex = new Regex("%[^%\n]*%")
+    
+    private val vars = MSet[String]()
+    regex.findAllIn(template).foreach( x => vars += x )
+
+    def subst(func: String=>String) : String = {
+      regex.replaceAllIn(template, m => func(m.matched))
+    }
+    
+    // Not perfect - might be in a FILTER
+    def generator():(String, List[String]) = {
+      var tvars = MMap[String, String]() 
+      var count = 0
+      vars.foreach(p => { count += 1 ; tvars.put(p , "?V"+count)})
+      val qs1 = subst( p => tvars.getOrElse(p, p))
+      
+      val selectVars = tvars.values.foldLeft[String]("")((p,v) => " "+v)
+      val qs = new Regex("(?i:SELECT)[^\\{]*\\{").replaceFirstIn(qs1, "SELECT"+selectVars+"\n{")
+      (qs, tvars.values.toList)
+    }
+    
+    //private def foreach(f: String => String): Unit
+    
+    private def _vars(string:String):Set[String] = {
+      val pattern = Pattern.compile("%[^%\n]*%")
+      val matcher = pattern.matcher(template)
+      val vars = MSet[String]()
+      matcher.reset() 
+      while(matcher.find())
+      {
+        val s = matcher.start()
+        val t = matcher.end()
+        val x = template.substring(s,t)
+        vars += x 
+     }
+     vars
+    }
+}
\ No newline at end of file