CXCV/SQLite/Logs.lite.sql

167 lines
5.6 KiB
SQL

pragma foreign_keys = on;
-- Level 0.
create table if not exists Applications(
id integer primary key autoincrement,
'name' varchar(64) not null unique,
date_in datetime default current_timestamp,
date_out datetime null,
unique('name')
);
create table if not exists Languages(
id integer primary key autoincrement,
'name' varchar(64) not null unique,
date_in datetime default current_timestamp,
date_out datetime null,
unique('name')
);
create table if not exists Files(
id integer primary key autoincrement,
'path' varchar(256) not null unique,
date_in datetime default current_timestamp,
date_out datetime null,
unique('path')
);
create table if not exists Traces(
id integer primary key autoincrement,
'hash' varchar(256) not null,
trace text not null,
date_in datetime default current_timestamp,
date_out datetime null,
unique('hash')
);
create table if not exists Messages(
id integer primary key autoincrement,
'hash' varchar(256) not null,
'message' text not null,
date_in datetime default current_timestamp,
date_out datetime null,
unique('hash')
);
create table if not exists Parameters(
id integer primary key autoincrement,
'hash' varchar(256) not null,
'data' text not null,
date_in datetime default current_timestamp,
date_out datetime null,
unique('hash')
);
-- Level 1.
create table if not exists Methods(
id integer primary key autoincrement,
'application' integer not null,
'language' integer not null,
'file' integer null,
'name' varchar(64) not null,
date_in datetime default current_timestamp,
date_out datetime null,
foreign key ('application') references Applications(id) on delete restrict on update restrict,
foreign key ('language') references Languages(id) on delete restrict on update restrict,
foreign key ('file') references Files(id) on delete restrict on update restrict
);
-- Level 2.
create table if not exists Logs(
id integer primary key autoincrement,
'method' integer not null,
'message' integer not null,
parameters integer not null,
'line' integer not null,
error integer not null,
date_in datetime default current_timestamp,
date_out datetime null,
foreign key ('method') references Methods(id) on delete restrict on update restrict,
foreign key ('message') references Messages(id) on delete restrict on update restrict,
foreign key (parameters) references Parameters(id) on delete restrict on update restrict
);
create table if not exists Exceptions(
id integer primary key autoincrement,
'method' integer not null,
trace integer not null,
'message' integer not null,
exception integer not null,
parameters integer not null,
'line' integer not null,
'status' varchar(16) null,
date_in datetime default current_timestamp,
date_out datetime null,
foreign key ('method') references Methods(id) on delete restrict on update restrict,
foreign key ('trace') references Traces(id) on delete restrict on update restrict,
foreign key ('message') references Messages(id) on delete restrict on update restrict,
foreign key ('exception') references Messages(id) on delete restrict on update restrict,
foreign key (parameters) references Parameters(id) on delete restrict on update restrict
);
drop view if exists MethodsView;
create view MethodsView as select
methods.id as id,
languages.id as language_id,
applications.id as application_id,
files.id as file_id,
applications.name as 'application',
languages.name as 'language',
files.path as 'file',
methods.name as 'name'
from Methods methods
join Applications applications on methods.application = applications.id
join Languages languages on methods.language = languages.id
join Files files on methods.file = files.id
where
methods.date_out is null and
applications.date_out is null and
languages.date_out is null and
files.date_out is null;
drop view if exists LogsView;
create view LogsView as select
logs.id as id,
methods.application as 'application',
methods.language as 'language',
methods.file as 'file',
methods.name as method,
logs.line as 'line',
messages.message as 'message',
parameters.data as parameters,
logs.error as error,
logs.date_in as date_in
from Logs logs
join MethodsView methods on logs.method = methods.id
join Messages messages on logs.message = messages.id
join Parameters parameters on logs.parameters = parameters.id
where
logs.date_out is null and
messages.date_out is null and
parameters.date_out is null;
drop view if exists ExceptionsView;
create view ExceptionsView as select
exceptions.id as id,
methods.application as 'application',
methods.language as 'language',
methods.file as 'file',
methods.name as method,
exceptions.line as 'line',
messages.message as 'message',
traces.trace as 'trace',
exceptions_message.message as 'exception',
parameters.data as parameters,
exceptions.date_in as date_in
from Exceptions exceptions
join MethodsView methods on exceptions.method = methods.id
join Messages messages on exceptions.message = messages.id
join Messages exceptions_message on exceptions.exception = exceptions_message.id
join Traces traces on exceptions.trace = traces.id
join Parameters parameters on exceptions.parameters = parameters.id
where
exceptions.date_out is null and
messages.date_out is null and
exceptions_message.date_out is null and
traces.date_out is null and
parameters.date_out is null;