diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/sqlite.sql b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/sqlite.sql new file mode 100644 index 0000000..9399206 --- /dev/null +++ b/logback-classic/src/main/java/ch/qos/logback/classic/db/dialect/sqlite.sql @@ -0,0 +1,61 @@ +--# Logback: the reliable, generic, fast and flexible logging framework. +--# Copyright (C) 1999-2012, QOS.ch. All rights reserved. +--# +--# See http://logback.qos.ch/license.html for the applicable licensing +--# conditions. +--# +--# This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender. +--# +--# It is intended for SQLite3 databases. It has been tested on SQLite 3.7.4 +--# on Android ICS (4.0.3). + + +BEGIN; +DROP TABLE IF EXISTS logging_event_property; +DROP TABLE IF EXISTS logging_event_exception; +DROP TABLE IF EXISTS logging_event; +COMMIT; + + +BEGIN; +CREATE TABLE logging_event + ( + timestmp BIGINT NOT NULL, + formatted_message TEXT NOT NULL, + logger_name VARCHAR(254) NOT NULL, + level_string VARCHAR(254) NOT NULL, + thread_name VARCHAR(254), + reference_flag SMALLINT, + arg0 VARCHAR(254), + arg1 VARCHAR(254), + arg2 VARCHAR(254), + arg3 VARCHAR(254), + caller_filename VARCHAR(254) NOT NULL, + caller_class VARCHAR(254) NOT NULL, + caller_method VARCHAR(254) NOT NULL, + caller_line CHAR(4) NOT NULL, + event_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT + ); +COMMIT; + +BEGIN; +CREATE TABLE logging_event_property + ( + event_id BIGINT NOT NULL, + mapped_key VARCHAR(254) NOT NULL, + mapped_value TEXT, + PRIMARY KEY(event_id, mapped_key), + FOREIGN KEY (event_id) REFERENCES logging_event(event_id) + ); +COMMIT; + +BEGIN; +CREATE TABLE logging_event_exception + ( + event_id BIGINT NOT NULL, + i SMALLINT NOT NULL, + trace_line VARCHAR(254) NOT NULL, + PRIMARY KEY(event_id, i), + FOREIGN KEY (event_id) REFERENCES logging_event(event_id) + ); +COMMIT; diff --git a/logback-core/src/main/java/ch/qos/logback/core/db/dialect/DBUtil.java b/logback-core/src/main/java/ch/qos/logback/core/db/dialect/DBUtil.java index ba1cf09..670f92c 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/db/dialect/DBUtil.java +++ b/logback-core/src/main/java/ch/qos/logback/core/db/dialect/DBUtil.java @@ -32,6 +32,7 @@ public class DBUtil extends ContextAwareBase { private static final String HSQL_PART = "hsql"; private static final String H2_PART = "h2"; private static final String SYBASE_SQLANY_PART = "sql anywhere"; + private static final String SQLITE_PART = "sqlite"; public static SQLDialectCode discoverSQLDialect(DatabaseMetaData meta) { SQLDialectCode dialectCode = SQLDialectCode.UNKNOWN_DIALECT; @@ -54,6 +55,8 @@ public class DBUtil extends ContextAwareBase { return SQLDialectCode.H2_DIALECT; } else if (dbName.indexOf(SYBASE_SQLANY_PART) != -1) { return SQLDialectCode.SYBASE_SQLANYWHERE_DIALECT; + } else if (dbName.indexOf(SQLITE_PART) != -1) { + return SQLDialectCode.SQLITE_DIALECT; } else { return SQLDialectCode.UNKNOWN_DIALECT; } @@ -96,6 +99,9 @@ public class DBUtil extends ContextAwareBase { sqlDialect = new SybaseSqlAnywhereDialect(); break; + case SQLITE_DIALECT: + sqlDialect = new SQLiteDialect(); + break; } return sqlDialect; } diff --git a/logback-core/src/main/java/ch/qos/logback/core/db/dialect/SQLDialectCode.java b/logback-core/src/main/java/ch/qos/logback/core/db/dialect/SQLDialectCode.java index 0f852c5..4d79d40 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/db/dialect/SQLDialectCode.java +++ b/logback-core/src/main/java/ch/qos/logback/core/db/dialect/SQLDialectCode.java @@ -21,5 +21,6 @@ public enum SQLDialectCode { MSSQL_DIALECT, HSQL_DIALECT, H2_DIALECT, - SYBASE_SQLANYWHERE_DIALECT; + SYBASE_SQLANYWHERE_DIALECT, + SQLITE_DIALECT; } diff --git a/logback-core/src/main/java/ch/qos/logback/core/db/dialect/SQLiteDialect.java b/logback-core/src/main/java/ch/qos/logback/core/db/dialect/SQLiteDialect.java new file mode 100644 index 0000000..e310c7a --- /dev/null +++ b/logback-core/src/main/java/ch/qos/logback/core/db/dialect/SQLiteDialect.java @@ -0,0 +1,30 @@ +/** + * Logback: the reliable, generic, fast and flexible logging framework. + * Copyright (C) 1999-2012, QOS.ch. All rights reserved. + * + * This program and the accompanying materials are dual-licensed under + * either the terms of the Eclipse Public License v1.0 as published by + * the Eclipse Foundation + * + * or (per the licensee's choosing) + * + * under the terms of the GNU Lesser General Public License version 2.1 + * as published by the Free Software Foundation. + */ +package ch.qos.logback.core.db.dialect; + +/** + * SQLite dialect + * + * Note that the dialect is not needed if your JDBC driver supports the + * getGeneratedKeys method introduced in JDBC 3.0 specification. + * + * @author Anthony Trinh + */ +public class SQLiteDialect implements SQLDialect { + public static final String SELECT_CURRVAL = "SELECT last_insert_rowid();"; + + public String getSelectInsertId() { + return SELECT_CURRVAL; + } +}