anchor.diff:  To perform a bunch of operations in transaction, use {javadocBase}fi/evident/dalesbred/TransactionCallback.html[TransactionCallback]
   or {javadocBase}fi/evident/dalesbred/VoidTransactionCallback.html[VoidTransactionCallback]:
   
  -[source,java]
  --------------------------------------------------------------------------------------------------------
  -db.withTransaction(new TransactionCallback<Result>() {
  -    public Result execute(TransactionContext tx) throws SQLException {
  -        // transactional operations
  -        ...
  -        return result;
  -    });
  -});
  -
  -db.withVoidTransaction(new VoidTransactionCallback() {
  -    public void execute(TransactionContext tx) throws SQLException {
  -        // transactional operations
  -        ...
  -    });
  -});
  --------------------------------------------------------------------------------------------------------
  +[source,java,indent=0]
  +----
  +        db.withTransaction(new TransactionCallback<Result>() {
  +            public Result execute(TransactionContext tx) throws SQLException {
  +                // transactional operations
  +                ...
  +                return result;
  +            });
  +        });
  +
  +        db.withVoidTransaction(new VoidTransactionCallback() {
  +            public void execute(TransactionContext tx) throws SQLException {
  +                // transactional operations
  +                ...
  +            });
  +        });
  +----
   
   If you are using Java 8, you can use the lighter lambda syntax:
   
  -[source,java]
  --------------------------------------------------------------------------------------------------------
  -db.withTransaction(tx -> {
  -    // transactional operations
  -    ...
  -    return result;
  -});
  -
  -db.withVoidTransaction(tx -> {
  -    // transactional operations
  -    ...
  -});
  --------------------------------------------------------------------------------------------------------
  +[source,java,indent=0]
  +----
  +        db.withTransaction(tx -> {
  +            // transactional operations
  +            ...
  +            return result;
  +        });
  +
  +        db.withVoidTransaction(tx -> {
  +            // transactional operations
  +            ...
  +        });
  +----
   
   Annotation based transactions
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
positive.code: so that only asterisks will be displayed whenever those values are printed, but they are still sent to database
  correctly:
  
  [source,java]
  -------------------------------------------------------------------------------------------------------
  import static fi.evident.dalesbred.SqlQuery.confidential;
  
  ...
  
  db.update("insert into credit_card (number) values (?)", confidential(creditCardNumber));
  -------------------------------------------------------------------------------------------------------
  
  Custom type-conversions
  ~~~~~~~~~~~~~~~~~~~~~~~
  
negative.code: <<_guice,Guice-support>> uses this feature to wire the dependencies of newly created objects, but you can use this
  callback anything you like:
  
  [source,java,indent=0]
  ----
          db.getInstantiatorRegistry().addInstantiationListener(new InstantiationListener() {
              @Override
              public void onInstantiation(@NotNull Object object) {
                  System.out.println("instantiated " + object);
              }
          });
  ----
  
  Note that currently instantiation listeners are not called for objects instantiated by custom instantiators
  registered by users. This limitation could be lifted in the future.
  