/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: James Moger */ package org.h2.jaqu.util; import java.io.PrintWriter; import java.text.DecimalFormat; import java.util.concurrent.atomic.AtomicLong; /** * Utility class to optionally log generated statements to an output stream.<br> * Default output stream is System.out.<br> * Statement logging is disabled by default. * <p> * This class also tracks the counts for generated statements by major type. * */ public class StatementLogger { public static boolean logStatements; private static PrintWriter out = new PrintWriter(System.out); private static final AtomicLong SELECT_COUNT = new AtomicLong(); private static final AtomicLong CREATE_COUNT = new AtomicLong(); private static final AtomicLong INSERT_COUNT = new AtomicLong(); private static final AtomicLong UPDATE_COUNT = new AtomicLong(); private static final AtomicLong MERGE_COUNT = new AtomicLong(); private static final AtomicLong DELETE_COUNT = new AtomicLong(); public static void create(String statement) { CREATE_COUNT.incrementAndGet(); log(statement); } public static void insert(String statement) { INSERT_COUNT.incrementAndGet(); log(statement); } public static void update(String statement) { UPDATE_COUNT.incrementAndGet(); log(statement); } public static void merge(String statement) { MERGE_COUNT.incrementAndGet(); log(statement); } public static void delete(String statement) { DELETE_COUNT.incrementAndGet(); log(statement); } public static void select(String statement) { SELECT_COUNT.incrementAndGet(); log(statement); } private static void log(String statement) { if (logStatements) { out.println(statement); } } public static void printStats() { out.println("JaQu Runtime Statistics"); out.println("======================="); printStat("CREATE", CREATE_COUNT); printStat("INSERT", INSERT_COUNT); printStat("UPDATE", UPDATE_COUNT); printStat("MERGE", MERGE_COUNT); printStat("DELETE", DELETE_COUNT); printStat("SELECT", SELECT_COUNT); } private static void printStat(String name, AtomicLong value) { if (value.get() > 0) { DecimalFormat df = new DecimalFormat("###,###,###,###"); out.println(name + "=" + df.format(CREATE_COUNT.get())); } } }