Hi Derek and interested parties

I know there is a showSQL option that can be enabled with
JTA/Hibernate but I find the output verbose and uninformative about
parameter replacement.

So, I have my own ScalaQuery that allows simple debugging - the main
differences are -

    var queryParams: List[Pair[String,Any]] = Nil
   /*  the following method needs to be called by the various
SetParameter methods */
    def addParam(one: String,two: Any) = {
        query.setParameter(one, two)
        queryParams = (one, two) :: queryParams
     output the query with parameters substitued, for debugging ...
    def getQueryWithParams() = {
        var q = queryStr
        try {
            queryParams.foreach{v =>
                var rep = v._2 match {
                    case d: Date => "'"+SUtil.formatDate(d, "dd/MM/yyyy")+"'"
                    case s: String => "'"+s+"'"
                    case x => if (x==null) "" else x.toString
                rep = rep.replaceAll("\\$", "ddDollardd") // stupid bug
                q = q.replaceAll(":"+v._1, rep)
            q.replaceAll("ddDollardd", "\\$")
        } catch {
            case e: Exception => q+" PARAMS "+queryParams+ " EXCEPTION "+e

With this I can log the query via

Better still, (assuming execOnce exists in a utility object) when I
only need to see the query once in the log
     execulte execFn, just once for the jvm.
    val execOnceSet = scala.collection.mutable.Set("")
    def execOnce(key: String, execFn: => Unit) = {
        if (!execOnceSet.contains(key)) {
            execOnceSet += key

  execOnce("findByEmail",  Log.info(emailQuery.getQueryWithParams()) )

You can add the functionality if you find it useful


You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
For more options, visit this group at 

Reply via email to