Skip to content
Snippets Groups Projects
Commit 86d306e0 authored by cmaeder's avatar cmaeder
Browse files

command line interface for counting

supports batch mode if "-q" is given on the command line
The initial field to search in must be adjusted
in the code (after merge with master)
parent 5466872d
No related branches found
No related tags found
No related merge requests found
#!/bin/sh
mvn -q exec:java -Dexec.mainClass=info.kwarc.mmt.errorview.QueryDB -Dexec.args=-q < src/test/data/strings.txt
......@@ -2,7 +2,6 @@ package info.kwarc.mmt.errorview
import java.util
import org.apache.camel.Exchange
import org.apache.camel.model.RouteDefinition
import org.apache.camel.scala.dsl.builder.RouteBuilder
......@@ -10,11 +9,12 @@ import scala.collection.JavaConverters._
class QueryDB extends RouteBuilder {
def body2str(dirPrefix: String, count: Boolean, subString: String, field: String, b: Object): String = {
def body2str(ask: Boolean, dirPrefix: String, count: Boolean, subString: String, field: String, b: Object): String = {
try {
(b.asInstanceOf[util.ArrayList[_]].asScala map {
case jm if count =>
// "count where " + field + " contains " + subString + ": " +
(if (ask) "occurrence count in \"" + field + "\" : "
else "") +
jm.asInstanceOf[util.HashMap[String, Integer]].asScala.getOrElse("COUNT(*)", 0) +
" \"" + subString + "\""
case jm if !count =>
......@@ -27,34 +27,39 @@ class QueryDB extends RouteBuilder {
}
}
def queryValues(dirPrefix: String, count: Boolean, subString: String, field: String): Unit = {
def queryValues(ask: Boolean, dirPrefix: String, count: Boolean, subString: String, field: String): Unit = {
val w = field + " LIKE '%" + subString.replaceAll("'", "''") + "%'"
val q = "db:SELECT " + (if (count) "COUNT(*)" else "*") + " FROM " + Table.name + " WHERE " + w
val d = "direct:" + q
val r: RouteDefinition = d ==> {
-->(q).transform(ex =>
body2str(dirPrefix, count, subString, field, ex.getIn.getBody))
body2str(ask, dirPrefix, count, subString, field, ex.getIn.getBody))
-->("stream:out")
}
getContext.addRouteDefinition(r)
getContext.createProducerTemplate().sendBody(d, null)
getContext.removeRouteDefinition(r)
}
def processIn(ex: Exchange): Unit = {
val input = ex.getIn.getBody.toString
queryValues(QueryDB.dirPrefix, false, input, QueryDB.field)
}
// ("stream:in?scanStream=true&promptMessage=Enter field or search string: " transform processIn) --> ("log:" + this.getClass)
}
object QueryDB {
var dirPrefix = ""
var field = Table.columns(2)
// use "-q" argument to avoid questions for batch mode
def parseArgs(args: List[String]): (Boolean, List[String]) = {
args match {
case "-q" :: tl => (false, tl)
case hd :: tl =>
val (b, r) = parseArgs(tl)
(b, hd :: tl)
case _ => (true, Nil)
}
}
def main(args: scala.Array[String]): Unit = {
val (context, dir) = Table.initArgs(args)
val (ask, restArgs) = parseArgs(args.toList)
val (context, dir) = Table.initArgs(restArgs.toArray)
val dbBuilder = new PopulateDB()
val dbSearch = new QueryDB()
context.addRoutes(dbSearch)
......@@ -62,12 +67,18 @@ object QueryDB {
dirPrefix = if (dir.endsWith("/")) dir else dir + "/"
var ok = true
while (ok) {
// println("Enter field or search string:")
val ln = readLine
if (ask) println("Enter field or search string:")
val ln = readLine()
ok = ln != null
if (ok) {
// dbSearch.queryValues(QueryDB.dirPrefix, false, ln, QueryDB.field)
dbSearch.queryValues(QueryDB.dirPrefix, true, ln, QueryDB.field)
if (Table.columns.contains(ln)) {
field = ln
println("next search in field: " + field)
}
else {
if (ask) dbSearch.queryValues(ask, QueryDB.dirPrefix, count = false, ln, field)
dbSearch.queryValues(ask, QueryDB.dirPrefix, count = true, ln, field)
}
}
}
}
......
......@@ -7,8 +7,8 @@ object TestQueryDB {
context.addRoutes(dbSearch)
context.start()
val dirPrefix = if (dir.endsWith("/")) dir else dir + "/"
dbSearch.queryValues(dirPrefix, false, "skipped", "shortMsg")
dbSearch.queryValues(dirPrefix, false, "", "errType")
dbSearch.queryValues(dirPrefix, true, "LocalError", "errType")
dbSearch.queryValues(true, dirPrefix, false, "skipped", "shortMsg")
dbSearch.queryValues(true, dirPrefix, false, "", "errType")
dbSearch.queryValues(true, dirPrefix, true, "LocalError", "errType")
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment