190 lines
6.8 KiB
Transact-SQL
190 lines
6.8 KiB
Transact-SQL
use AnP
|
|
|
|
if object_id(N'dbo.logs_tables_drop', N'P') is not null drop procedure dbo.logs_tables_drop
|
|
go
|
|
create procedure dbo.logs_tables_drop as begin set nocount on
|
|
|
|
if object_id(N'dbo.Exceptions', N'U') is not null drop table dbo.Exceptions
|
|
if object_id(N'dbo.Logs', N'U') is not null drop table dbo.Logs
|
|
if object_id(N'dbo.Errors', N'U') is not null drop table dbo.Errors
|
|
if object_id(N'dbo.Data', N'U') is not null drop table dbo.Data
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.logs_tables_create', N'P') is not null drop procedure dbo.logs_tables_create
|
|
go
|
|
create procedure dbo.logs_tables_create as begin set nocount on
|
|
|
|
if object_id(N'dbo.Data', N'U') is null create table dbo.[Data](
|
|
id integer not null identity(1, 1),
|
|
[hash] varbinary(32) not null,
|
|
[data] varchar(max) not null,
|
|
date_in datetime not null constraint df_parameters_date_in default getdate(),
|
|
date_out datetime,
|
|
constraint pk_parameters primary key clustered(id),
|
|
constraint uq_parameters_name unique (name asc) with (fillfactor = 90),
|
|
constraint uq_parameters_hash unique (hash asc) with (fillfactor = 90),
|
|
constraint ck_parameters_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
|
|
)
|
|
|
|
if object_id(N'dbo.Errors', N'U') is null create table dbo.Errors(
|
|
id integer not null identity(1, 1),
|
|
[error] varchar(max) not null,
|
|
date_in datetime not null constraint df_errors_date_in default getdate(),
|
|
date_out datetime,
|
|
constraint pk_errors primary key clustered(id),
|
|
constraint uq_errors_name unique (name asc) with (fillfactor = 90),
|
|
constraint ck_errors_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
|
|
)
|
|
|
|
if object_id(N'dbo.Logs', N'U') is null create table dbo.Logs(
|
|
id integer not null identity(1, 1),
|
|
[session] integer not null,
|
|
[procedure] integer not null,
|
|
parameters integer not null,
|
|
error integer not null,
|
|
date_in datetime not null constraint df_logs_date_in default getdate(),
|
|
date_out datetime,
|
|
constraint pk_logs primary key clustered(id),
|
|
constraint fk_logs_session foreign key([session]) references dbo.Sessions(id)
|
|
on update no action
|
|
on delete no action,
|
|
constraint fk_logs_procedure foreign key([procedure]) references dbo.Procedures(id)
|
|
on update no action
|
|
on delete no action,
|
|
constraint fk_logs_parameters foreign key(parameters) references dbo.[Data](id)
|
|
on update no action
|
|
on delete no action,
|
|
constraint fk_logs_errors foreign key(errors) references dbo.Errors(id)
|
|
on update no action
|
|
on delete no action
|
|
)
|
|
|
|
if object_id(N'dbo.Exceptions', N'U') is null create table dbo.Exceptions(
|
|
id integer not null identity(1, 1),
|
|
[session] integer not null,
|
|
[procedure] integer not null,
|
|
parameters integer not null,
|
|
error integer not null,
|
|
[message] integer not null,
|
|
[status] varchar(16) not null,
|
|
code integer not null,
|
|
date_in datetime not null constraint df_exceptions_date_in default getdate(),
|
|
date_out datetime,
|
|
constraint pk_exceptions primary key clustered(id),
|
|
constraint fk_exceptions_session foreign key([session]) references dbo.Sessions(id)
|
|
on update no action
|
|
on delete no action,
|
|
constraint fk_exceptions_procedure foreign key([procedure]) references dbo.Procedures(id)
|
|
on update no action
|
|
on delete no action,
|
|
constraint fk_exceptions_parameters foreign key(parameters) references dbo.[Data](id)
|
|
on update no action
|
|
on delete no action,
|
|
constraint fk_logs_errors foreign key(errors) references dbo.Errors(id)
|
|
on update no action
|
|
on delete no action,
|
|
constraint fk_logs_message foreign key([message]) references dbo.[Data](id)
|
|
on update no action
|
|
on delete no action
|
|
)
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.data_get_id', N'P') is not null drop procedure dbo.data_get_id
|
|
go
|
|
create procedure dbo.data_get_id (
|
|
@data varchar(max),
|
|
@id integer output
|
|
) as begin set nocount on
|
|
|
|
declare @hash varbinary(64) = hashbytes(dbo.get_settings('data_hash_algorithm', 'SHA2_512'), @data)
|
|
|
|
set @id = (select top 1 id from dbo.[Data] where date_out is null and [hash] = @hash)
|
|
|
|
if @id is null begin
|
|
insert into dbo.[Data] ([hash], [data]) values (@hash, @data)
|
|
set @id = scope_identity()
|
|
end
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.error_get_id', N'P') is not null drop procedure dbo.error_get_id
|
|
go
|
|
create procedure dbo.error_get_id (
|
|
@error varchar(max),
|
|
@id integer output
|
|
) as begin set nocount on
|
|
|
|
set @id = (select top 1 id from dbo.Errors where date_out is null and error = @error)
|
|
|
|
if @id is null begin
|
|
insert into dbo.Errors (error) values (@error)
|
|
set @id = scope_identity()
|
|
end
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.exceptions_set', N'P') is not null drop procedure dbo.exceptions_set
|
|
go
|
|
create procedure dbo.exceptions_set(
|
|
@procedure integer,
|
|
@session integer,
|
|
@parameters varchar(max),
|
|
@error varchar(512)
|
|
) as begin set nocount on
|
|
|
|
declare @paramaters_id integer
|
|
declare @error_id integer
|
|
declare @message varchar(max) = error_message()
|
|
declare @state varchar(16) = error_state()
|
|
declare @code integer = error_number()
|
|
declare @message_id integer
|
|
|
|
if @parameters is null set @parameters = ''
|
|
if @error is null set @error = ''
|
|
|
|
execute dbo.data_get_id @parameters, @paramaters_id output
|
|
execute dbo.error_get_id @error, @error_id output
|
|
execute dbo.data_get_id @message, @message_id output
|
|
|
|
insert into dbo.Exceptions([procedure], [session], [parameters], [error], [message], [state], [code]) values
|
|
(@procedure, @session, @paramaters_id, @error_id, @message_id, @state, @code)
|
|
|
|
end
|
|
go
|
|
|
|
if object_id(N'dbo.logs_set', N'P') is not null drop procedure dbo.logs_set
|
|
go
|
|
create procedure dbo.logs_set(
|
|
@procedure integer,
|
|
@session integer,
|
|
@parameters varchar(max),
|
|
@error varchar(512),
|
|
@level integer = 1
|
|
) as begin set nocount on
|
|
|
|
declare @levels integer = dbo.settings_get_int('logs_levels', null, 15)
|
|
|
|
if @levels & @level != 0 begin
|
|
|
|
declare @paramaters_id integer
|
|
declare @error_id integer
|
|
|
|
if @parameters is null set @parameters = ''
|
|
if @error is null set @error = ''
|
|
|
|
execute dbo.data_get_id @parameters, @paramaters_id output
|
|
execute dbo.error_get_id @error, @error_id output
|
|
|
|
insert into dbo.Logs([procedure], [session], [parameters], error) values
|
|
(@procedure, @session, @paramaters_id, @error_id)
|
|
|
|
end
|
|
|
|
end
|
|
go |