diff --git a/DBDI.pm6 b/DBDI.pm6 index 5e2530c..2f2f805 100644 --- a/DBDI.pm6 +++ b/DBDI.pm6 @@ -51,42 +51,74 @@ class DBDI::DriverManager does java::sql::DriverManager { } die "Unable to find a driver to handle $url" if not $con; + if (1) { + my sub log-calls($obj, Role $r) { + my $wrapper = RoleHOW.new; + # XXX add caching of log-wrapped variants of roles + for $r.^methods -> $m { + $wrapper.^add_method($m.name, method (|$c) { + warn ">> $m\n"; + nextsame; + # XXX ideally should be + # my |$retval = callsame; + # warn "< $m"; + # return |$retval; + + # XXX introspect return type and, if appropriate, add a call + # to wrap the returned object with a logging wrapper + # so logging gets automatically applied to other types + }); + } + $obj does $wrapper.^compose(); + } + log-calls($con, java::sql::Connection); + } + say "< getConnection $con"; return $con; } # throws java.sql.SQLException + method deregisterDriver ( java::sql::Driver $v1, # java.sql.Driver ) { ... } # throws java.sql.SQLException + method getDriver ( Str $v1, # java.lang.String --> java::sql::Driver # java.sql.Driver ) { ... } # throws java.sql.SQLException + method getDrivers ( --> Iterable # java.util.Enumeration ) { ... } + method getLogWriter ( --> IO # java.io.PrintWriter ) { ... } + method getLoginTimeout ( --> Int # int ) { ... } + method initialize ( ) { ... } + method println ( Str $v1, # java.lang.String ) { ... } + method setLogWriter ( IO $v1, # java.io.PrintWriter ) { ... } + method setLoginTimeout ( Int $v1, # int ) { ... }