#wip: SQL Server base.

This commit is contained in:
mbruzon 2026-07-11 10:47:39 +02:00
parent 7a71827a9b
commit 0ce7c2c34b
13 changed files with 1768 additions and 0 deletions

34
MD/doc/es/db.md Normal file
View File

@ -0,0 +1,34 @@
# Base de datos
```mermaid
erDiagram
Common{
integer id PK "not null"
integer procedure FK "not null Procedures"
integer session FK "not null Sessions"
datetime date_in "CK not null default now()"
datetime date_out
}
_Common{
integer id PK "not null"
integer register FK "not null Entity"
integer procedure FK "not null Procedures"
integer session FK "not null Sessions"
datetime date_in "CK not null default now()"
datetime date_out
}
Databases{
varchar(64) name UK "CK not null"
}
Procedures{
integer database FK,UK "not null Database"
varchar(64) name UK "CK not null"
}
Databases ||--|{ Procedures : is
```

View File

@ -0,0 +1,118 @@
if (select top 1 0 from sys.databases where name = 'AnP') is null create database AnP collate Latin1_General_100_CI_AS_SC_UTF8
go
use AnP
if object_id(N'dbo.common_tables_drop', N'P') is not null drop procedure dbo.common_tables_drop
go
create procedure dbo.common_tables_drop as begin set nocount on
if object_id(N'dbo.Procedures', N'U') is not null drop table dbo.Procedures
if object_id(N'dbo.Databases', N'U') is not null drop table dbo.Databases
end
go
if object_id(N'dbo.common_tables_create', N'P') is not null drop procedure dbo.common_tables_create
go
create procedure dbo.common_tables_create as begin set nocount on
declare @table_names varchar(max) = ''
if object_id(N'dbo.HistoryModes', N'U') is null begin
create table dbo.HistoryModes(
id integer not null identity(1, 1),
[name] varchar(16) not null,
[description] varchar(512),
date_in datetime2 not null constraint df_history_modes_date_in default getdate(),
date_out datetime2,
constraint pk_history_modes primary key clustered(id),
constraint uq_history_modes_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint ck_history_modes_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
)
insert into dbo.HistoryModes([name]) values('insert'), ('update'), ('delete'), ('unknown')
end
if object_id(N'dbo.Databases', N'U') is null create table dbo.Databases(
id integer not null identity(1, 1),
[name] varchar(32) not null,
[description] varchar(512),
date_in datetime2 not null constraint df_databases_date_in default getdate(),
date_out datetime2,
constraint pk_databases primary key clustered(id),
constraint uq_databases_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint ck_databases_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
)
if object_id(N'dbo.Procedures', N'U') is null create table dbo.Procedures(
id integer not null identity(1, 1),
[database] integer not null,
[name] varchar(32) not null,
[description] varchar(512),
date_in datetime2 not null constraint df_procedures_date_in default getdate(),
date_out datetime2,
constraint pk_procedures primary key clustered(id),
constraint fk_procedures_database foreign key([database]) references dbo.Databases(id)
on update no action
on delete no action,
constraint uq_procedures_name unique nonclustered ([database] asc, [name] asc) with (fillfactor = 90),
constraint ck_procedures_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
)
end
go
if object_id(N'dbo.procedure_get_id', N'P') is not null drop procedure dbo.procedure_get_id
go
create procedure dbo.procedure_get_id (
@database varchar(32),
@name varchar(32),
@id integer output
) as begin set nocount on
declare @database_id integer = (select id from dbo.Databases where [name] = @database)
if @database_id is null begin
insert into dbo.Databases ([name]) values (@database)
set @database_id = scope_identity()
end
set @id = (select id from dbo.Procedures where [database] = @database_id and [name] = @name)
if @id is null begin
insert into dbo.Procedures ([database], [name]) values (@database_id, @name)
set @id = scope_identity()
end
end
go
execute dbo.common_tables_drop
execute dbo.common_tables_create
if object_id(N'dbo.bw', N'FN') is not null drop function dbo.bw
go
create function dbo.bw(
@number bigint,
@bits smallint
) returns bigint begin
return (case
when @bits > 0 then @number * power(cast(2 as bigint), @bits)
when @bits < 0 then @number / power(cast(2 as bigint), -@bits)
else @number end)
end
go
if object_id(N'dbo.history_mode_get', N'P') is not null drop procedure dbo.history_mode_get
go
create procedure dbo.history_mode_get(
@insert integer output,
@update integer output,
@delete integer output,
@unknown integer output
) as begin set nocount on
set @insert = (select top 1 id from dbo.HistoryModes where [name] = 'insert')
set @update = (select top 1 id from dbo.HistoryModes where [name] = 'update')
set @delete = (select top 1 id from dbo.HistoryModes where [name] = 'delete')
set @unknown = (select top 1 id from dbo.HistoryModes where [name] = 'unknown')
end
go

View File

@ -0,0 +1,120 @@
use AnP
if object_id(N'dbo.users_tables_remove', N'P') is not null drop procedure dbo.users_tables_remove
go
create procedure dbo.users_tables_remove as begin set nocount on
if object_id(N'dbo._Users', N'U') is not null drop table dbo._Users
if object_id(N'dbo.Users', N'U') is not null drop table dbo.Users
end
go
if object_id(N'dbo.users_tables_create', N'P') is not null drop procedure dbo.users_tables_create
go
create procedure dbo.users_tables_create as begin set nocount on
if object_id(N'dbo.Users', N'U') is null create table dbo.Users(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
nick varchar(32) not null,
[password] varbinary(64) not null,
accessible bit not null constraint df_users_accessible default 1,
date_in datetime2 not null constraint df_users_date_in default getdate(),
date_out datetime2,
constraint pk_users primary key clustered(id),
constraint fk_users_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint uq_users_nick unique(nick) with(fillfactor = 90),
constraint ck_users_nick check(nick != '' and nick not like '%[^a-zA-Z0-9_]%' and nick not like '[^a-zA-Z_]%'),
constraint ck_users_password check(datalength([password]) > 0)
)
if object_id(N'dbo._Users', N'U') is null create table dbo._Users(
id integer not null identity(1, 1),
mode integer not null,
entity integer not null,
[procedure] integer not null,
[session] integer not null,
nick varchar(32) not null,
[password] varbinary(64) not null,
accessible bit not null,
date_in datetime2 not null,
date_out datetime2,
history_date datetime2 not null constraint df__users_history_in default sysutcdatetime(),
constraint pk__users primary key clustered(id),
constraint fk__users_mode foreign key(mode) references dbo.HistoryModes(id)
on update no action
on delete no action,
constraint fk__users_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
index ix__users_history nonclustered(entity, history_date)
)
end
go
execute dbo.users_tables_create
if object_id(N'dbo.users_tables_upgrade', N'P') is not null drop procedure dbo.users_tables_upgrade
go
create procedure dbo.users_tables_upgrade as begin set nocount on
if (select top 1 0 from information_schema.table_constraints where
table_catalog = db_name() and
table_name = 'Users' and
constraint_name = 'fk_users_session'
) is null alter table dbo.Users add constraint fk_users_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.table_constraints where
table_catalog = db_name() and
table_name = '_Users' and
constraint_name = 'fk__users_session'
) is null alter table dbo._Users add constraint fk__users_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
end
go
if object_id(N'dbo.users_trigger', N'TR') is not null drop trigger dbo.users_trigger
go
create trigger dbo.users_trigger on dbo.Users for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._Users(mode, entity, [procedure], [session], nick, [password], accessible, date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.nick, inserted.[password], inserted.accessible, inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.nick != deleted.nick or
inserted.[password] != deleted.[password] or
inserted.accessible != deleted.accessible or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._Users(mode, entity, [procedure], [session], nick, [password], accessible, date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.nick, inserted.[password], inserted.accessible, inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._Users(mode, entity, [procedure], [session], nick, [password], accessible, date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.nick, deleted.[password], deleted.accessible, deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go

View File

@ -0,0 +1,125 @@
use AnP
if object_id(N'dbo.ips_tables_remove', N'P') is not null drop procedure dbo.ips_tables_remove
go
create procedure dbo.ips_tables_remove as begin set nocount on
if object_id(N'dbo._Ips', N'U') is not null drop table dbo._Ips
if object_id(N'dbo.Ips', N'U') is not null drop table dbo.Ips
end
go
if object_id(N'dbo.ips_tables_create', N'P') is not null drop procedure dbo.ips_tables_create
go
create procedure dbo.ips_tables_create as begin set nocount on
if object_id(N'dbo.Ips', N'U') is null create table dbo.Ips(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer,
[address] varchar(39) not null,
accessible bit not null constraint df_ips_accessible default 1,
date_in datetime not null constraint df_ips_date_in default getdate(),
date_out datetime,
constraint pk_ips primary key clustered(id),
constraint fk_ips_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint uq_ips_ip unique(ip) with(fillfactor = 90),
constraint ck_ips_ip check((
[ip] like '%._%._%._%' and
[ip] not like '%[^0-9.]%' and
len([ip]) - len(replace([ip], '.', '')) = 3 and
parsename([ip], 1) between 0 and 255 and
parsename([ip], 2) between 0 and 255 and
parsename([ip], 3) between 0 and 255 and
parsename([ip], 4) between 0 and 255
) or (
[ip] not like '%[^0-9a-fA-F:]%' and
[ip] like '%:%' and
[ip] not like '%:::%' and
[ip] not like '%[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]%' and
len([ip]) - len(replace([ip], ':', '')) between 2 and 7
))
)
if object_id(N'dbo._Ips', N'U') is null create table dbo._Ips(
id integer not null identity(1, 1),
entity integer not null,
[procedure] integer not null,
[session] integer,
[address] varchar(39) not null,
accessible bit not null,
date_in datetime not null,
date_out datetime,
history_date datetime2 not null constraint df__ips_history_in default sysutcdatetime(),
constraint pk__ips primary key clustered(id),
constraint fk_ips_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action
)
end
go
execute dbo.ips_tables_create
if object_id(N'dbo.ips_tables_upgrade', N'P') is not null drop procedure dbo.ips_tables_upgrade
go
create procedure dbo.ips_tables_upgrade as begin set nocount on
if (select top 1 0 from information_schema.table_constraints where
table_catalog = db_name() and
table_name = 'Ips' and
constraint_name = 'fk_ips_session'
) is null alter table dbo.Ips add constraint fk_ips_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.table_constraints where
table_catalog = db_name() and
table_name = '_Ips' and
constraint_name = 'fk__ips_session'
) is null alter table dbo._Ips add constraint fk__ips_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
end
go
if object_id(N'dbo.ips_trigger', N'TR') is not null drop trigger dbo.ips_trigger
go
create trigger dbo.ips_trigger on dbo.Ips for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._Ips(mode, entity, [procedure], [session], [address], accessible, date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.[address], inserted.accessible, inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.[address] != deleted.[address] or
inserted.accessible != deleted.accessible or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._Ips(mode, entity, [procedure], [session], [address], accessible, date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.[address], inserted.accessible, inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._Ips(mode, entity, [procedure], [session], [address], accessible, date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.[address], deleted.accessible, deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go

View File

@ -0,0 +1,190 @@
use AnP
if object_id(N'dbo.users_tables_remove', N'P') is not null drop procedure dbo.users_tables_remove
go
create procedure dbo.users_tables_remove as begin set nocount on
if object_id(N'dbo._Sessions', N'U') is not null drop table dbo._Sessions
if object_id(N'dbo.SessionsActived', N'U') is not null drop table dbo.SessionsActived
if object_id(N'dbo.Sessions', N'U') is not null drop table dbo.Sessions
end
go
if object_id(N'dbo.users_tables_create', N'P') is not null drop procedure dbo.users_tables_create
go
create procedure dbo.users_tables_create as begin set nocount on
if object_id(N'dbo.Sessions', N'U') is null create table dbo.Sessions(
id integer not null identity(1, 1),
[procedure] integer not null,
[user] integer not null,
[ip] integer not null,
date_last integer not null constraint df_sessions_date_last default getdate(),
date_in datetime not null constraint df_sessions_date_in default getdate(),
date_out datetime,
constraint pk_sessions primary key clustered(id),
constraint fk_sessions_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_sessions_user foreign key([user]) references dbo.Users(id)
on update no action
on delete no action,
constraint fk_sessions_ip foreign key([ip]) references dbo.Ips(id)
on update no action
on delete no action
)
if object_id(N'dbo.SessionsActived', N'U') is null create table dbo.SessionsActived(
id integer not null,
[procedure] integer not null,
[user] integer not null,
[ip] integer not null,
date_last integer not null constraint df_sessions_date_last default getdate(),
date_in datetime not null constraint df_sessions_date_in default getdate(),
[timeout] integer not null constraint df_sessions_timeout default 300,
constraint pk_sessions primary key clustered(id),
constraint fk_sessions_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_sessions_user foreign key([user]) references dbo.Users(id)
on update no action
on delete no action,
constraint fk_sessions_ip foreign key([ip]) references dbo.Ips(id)
on update no action
on delete no action
)
if object_id(N'dbo._Sessions', N'U') is null create table dbo._Sessions(
id integer not null identity(1, 1),
entity integer not null,
[procedure] integer not null,
[user] integer not null,
[ip] integer not null,
date_last integer not null,
date_in datetime not null,
date_out datetime,
history_date datetime2 not null constraint df__sessions_history_in default sysutcdatetime(),
constraint pk__sessions primary key clustered(id),
constraint fk__sessions_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk__sessions_user foreign key([user]) references dbo.Users(id)
on update no action
on delete no action,
constraint fk__sessions_ip foreign key([ip]) references dbo.Ips(id)
on update no action
on delete no action
)
end
go
if object_id(N'dbo.users_tables_upgrade', N'P') is not null drop procedure dbo.users_tables_upgrade
go
create procedure dbo.users_tables_upgrade as begin set nocount on
execute dbo.users_tables_upgrade
execute dbo.ips_tables_upgrade
end
go
execute dbo.users_tables_create
if object_id(N'dbo.sessions_actived_trigger', N'TR') is not null drop trigger dbo.sessions_actived_trigger on dbo.SessionsActived
go
create trigger dbo.sessions_actived_trigger on dbo.SessionsActived after insert, update, delete as begin set nocount on
-- Updates.
update sessions set
sessions.[procedure] = inserted.[procedure],
sessions.[user] = inserted.[user],
sessions.[ip] = inserted.[ip],
sessions.date_last = inserted.date_last,
sessions.date_in = inserted.date_in
from inserted inserted
join dbo.Sessions sessions on inserted.id = sessions.id
join deleted deleted on inserted.id = deleted.id
-- Inserts.
insert into dbo.Sessions(id, [procedure], [user], [ip], date_last, date_in)
select inserted.id, inserted.[procedure], inserted.[user], inserted.[ip], inserted.date_last, inserted.date_in
from inserted inserted
left join dbo.Sessions sessions on inserted.id = sessions.id
left join deleted deleted on inserted.id = deleted.id
where sessions.id is null and deleted.id is null
-- Deletes.
update sessions set
sessions.[procedure] = deleted.[procedure],
sessions.[user] = deleted.[user],
sessions.[ip] = deleted.[ip],
sessions.date_last = deleted.date_last,
sessions.date_in = deleted.date_in,
sessions.date_out = getdate()
from deleted deleted
join dbo.Sessions sessions on deleted.id = sessions.id
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
-- Deletes unexistent.
insert into dbo.Sessions(id, [procedure], [user], [ip], date_last, date_in, date_out)
select deleted.id, deleted.[procedure], deleted.[user], deleted.[ip], deleted.date_last, deleted.date_in, getdate()
from deleted deleted
left join dbo.Sessions sessions on deleted.id = sessions.id
left join inserted inserted on deleted.id = inserted.id
where sessions.id is null and inserted.id is null
end
go
if object_id(N'dbo.sessions_trigger', N'TR') is not null drop trigger dbo.sessions_trigger on dbo.Sessions
go
create trigger dbo.sessions_trigger on dbo.Sessions after insert, update, delete as begin set nocount on
-- Update.
insert into dbo._Sessions(id, [procedure], [user], [ip], date_last, date_in, date_out)
select inserted.id, inserted.[procedure], inserted.[user], inserted.[ip], inserted.date_last, inserted.date_in, null
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where (
inserted.[procedure] != deleted.[procedure] or
inserted.[user] != deleted.[user] or
inserted.[ip] != deleted.[ip] or
inserted.date_last != deleted.date_last or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
) and not (
inserted.[procedure] = deleted.[procedure] and
inserted.[user] = deleted.[user] and
inserted.[ip] = deleted.[ip] and
inserted.date_last != deleted.date_last and
inserted.date_in = deleted.date_in and
isnull(inserted.date_out, '0001-01-01') = isnull(deleted.date_out, '0001-01-01')
)
-- Insert.
insert into dbo._Sessions(id, [procedure], [user], [ip], date_last, date_in, date_out)
select inserted.id, inserted.[procedure], inserted.[user], inserted.[ip], inserted.date_last, inserted.date_in, null
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- Delete.
insert into dbo._Sessions(id, [procedure], [user], [ip], date_last, date_in, date_out, history_out)
select deleted.id, deleted.[procedure], deleted.[user], deleted.[ip], deleted.date_last, deleted.date_in, getdate(), sysutcdatetime()
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go
if object_id(N'dbo.machine_session_get', N'FN') is not null drop function dbo.machine_session_get
go
create function machine_session_get() returns integer begin
return (
select top 1 sessions.id
from dbo.Sessions sessions
join dbo.Users users on users.id = sessions.[user]
where date_out is null and users.nick = 'machine'
)
end
go

View File

@ -0,0 +1,190 @@
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', 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

View File

@ -0,0 +1,281 @@
use AnP
if object_id(N'dbo.groups_tables_remove', N'P') is not null drop procedure dbo.groups_tables_remove
go
create procedure dbo.groups_tables_remove as begin set nocount on
if object_id(N'dbo._GroupsUsers', N'U') is not null drop table dbo._GroupsUsers
if object_id(N'dbo._GroupsIps', N'U') is not null drop table dbo._GroupsIps
if object_id(N'dbo._Groups', N'U') is not null drop table dbo._Groups
if object_id(N'dbo.GroupsUsers', N'U') is not null drop table dbo.GroupsUsers
if object_id(N'dbo.GroupsIps', N'U') is not null drop table dbo.GroupsIps
if object_id(N'dbo.Groups', N'U') is not null drop table dbo.Groups
end
go
if object_id(N'dbo.groups_tables_create', N'P') is not null drop procedure dbo.groups_tables_create
go
create procedure dbo.groups_tables_create as begin set nocount on
if object_id(N'dbo.Groups', N'U') is null create table dbo.Groups(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[name] varchar(64) not null,
[description] varchar(512) not null,
date_in datetime not null constraint df_groups_date_in default getdate(),
date_out datetime,
constraint pk_groups primary key clustered(id),
constraint fk_groups_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_groups_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint uq_groups_name unique([name]) with(fillfactor = 90),
constraint ck_groups_name check([name] != '' and [name] not like '%[^a-zA-Z0-9_]%' and [name] not like '[^a-zA-Z_]%')
)
if object_id(N'dbo.GroupsUsers', N'U') is null create table dbo.GroupsUsers(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[group] integer not null,
[user] integer not null,
belongs bit not null constraint df_groups_users_belongs default 1,
date_in datetime not null constraint df_groups_users_date_in default getdate(),
date_out datetime,
constraint pk_groups_users primary key clustered(id),
constraint fk_groups_users_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_groups_users_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk_groups_users_group foreign key([group]) references dbo.Groups(id)
on update no action
on delete no action,
constraint fk_groups_users_user foreign key([user]) references dbo.Users(id)
on update no action
on delete no action,
constraint uq_groups_users unique([group], [user]) with(fillfactor = 90)
)
if object_id(N'dbo.GroupsIps', N'U') is null create table dbo.GroupsIps(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[group] integer not null,
[ip] integer not null,
belongs bit not null constraint df_groups_ips_belongs default 1,
date_in datetime not null constraint df_groups_ips_date_in default getdate(),
date_out datetime,
constraint pk_groups_ips primary key clustered(id),
constraint fk_groups_ips_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_groups_ips_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk_groups_ips_group foreign key([group]) references dbo.Groups(id)
on update no action
on delete no action,
constraint fk_groups_ips_ip foreign key([ip]) references dbo.Ips(id)
on update no action
on delete no action,
constraint uq_groups_ips unique([group], [ip]) with(fillfactor = 90)
)
if object_id(N'dbo._Groups', N'U') is null create table dbo._Groups(
id integer not null identity(1, 1),
entity integer not null,
[procedure] integer not null,
[session] integer not null,
[name] varchar(64) not null,
[description] varchar(512) not null,
date_in datetime not null,
date_out datetime,
history_date datetime2 not null constraint df__groups_history_in default sysutcdatetime(),
constraint pk__groups primary key clustered(id),
constraint fk__groups_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk__groups_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
)
if object_id(N'dbo._GroupsUsers', N'U') is null create table dbo._GroupsUsers(
id integer not null identity(1, 1),
entity integer not null,
[procedure] integer not null,
[session] integer not null,
[group] integer not null,
[user] integer not null,
belongs bit not null,
date_in datetime not null,
date_out datetime,
history_date datetime2 not null constraint df__groups_users_history_in default sysutcdatetime(),
constraint pk__groups_users primary key clustered(id),
constraint fk__groups_users_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk__groups_users_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk__groups_users_group foreign key([group]) references dbo.Groups(id)
on update no action
on delete no action,
constraint fk__groups_users_user foreign key([user]) references dbo.Users(id)
on update no action
on delete no action
)
if object_id(N'dbo._GroupsIps', N'U') is null create table dbo._GroupsIps(
id integer not null identity(1, 1),
entity integer not null,
[procedure] integer not null,
[session] integer not null,
[group] integer not null,
[ip] integer not null,
belongs bit not null,
date_in datetime not null,
date_out datetime,
history_date datetime2 not null constraint df__groups_ips_history_in default sysutcdatetime(),
constraint pk__groups_ips primary key clustered(id),
constraint fk__groups_ips_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk__groups_ips_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk__groups_ips_group foreign key([group]) references dbo.Groups(id)
on update no action
on delete no action,
constraint fk__groups_ips_ip foreign key([ip]) references dbo.Ips(id)
on update no action
on delete no action
)
end
go
execute dbo.groups_tables_create
if object_id(N'dbo.groups_trigger', N'TR') is not null drop trigger dbo.groups_trigger
go
create trigger dbo.groups_trigger on dbo.Groups for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._Groups(mode, entity, [procedure], [session], [name], [description], date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.[name], inserted.[description], inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.[name] != deleted.[name] or
inserted.[description] != deleted.[description] or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._Groups(mode, entity, [procedure], [session], [name], [description], date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.[name], inserted.[description], inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._Groups(mode, entity, [procedure], [session], [name], [description], date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.[name], deleted.[description], deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go
if object_id(N'dbo.groups_users_trigger', N'TR') is not null drop trigger dbo.groups_users_trigger
go
create trigger dbo.groups_users_trigger on dbo.GroupsUsers for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._GroupsUsers(mode, entity, [procedure], [session], [group], [user], belongs, date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.[group], inserted.[user], inserted.belongs, inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.[group] != deleted.[group] or
inserted.[user] != deleted.[user] or
inserted.belongs != deleted.belongs or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._GroupsUsers(mode, entity, [procedure], [session], [group], [user], belongs, date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.[group], inserted.[user], inserted.belongs, inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._GroupsUsers(mode, entity, [procedure], [session], [group], [user], belongs, date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.[group], deleted.[user], deleted.belongs, deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go
if object_id(N'dbo.groups_ips_trigger', N'TR') is not null drop trigger dbo.groups_ips_trigger
go
create trigger dbo.groups_ips_trigger on dbo.GroupsIps for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._GroupsIps(mode, entity, [procedure], [session], [group], [ip], belongs, date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.[group], inserted.[ip], inserted.belongs, inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.[group] != deleted.[group] or
inserted.[ip] != deleted.[ip] or
inserted.belongs != deleted.belongs or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._GroupsIps(mode, entity, [procedure], [session], [group], [ip], belongs, date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.[group], inserted.[ip], inserted.belongs, inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._GroupsIps(mode, entity, [procedure], [session], [group], [ip], belongs, date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.[group], deleted.[ip], deleted.belongs, deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go

View File

@ -0,0 +1,353 @@
use AnP
if object_id(N'dbo.settings_tables_remove', N'P') is not null drop procedure dbo.settings_tables_remove
go
create procedure dbo.settings_tables_remove as begin set nocount on
if object_id(N'dbo._SettingsGroups', N'U') is not null drop table dbo._SettingsGroups
if object_id(N'dbo._Settings', N'U') is not null drop table dbo._Settings
if object_id(N'dbo._SettingsTypes', N'U') is not null drop table dbo._SettingsTypes
if object_id(N'dbo.SettingsGroups', N'U') is not null drop table dbo.SettingsGroups
if object_id(N'dbo.Settings', N'U') is not null drop table dbo.Settings
if object_id(N'dbo.SettingsTypes', N'U') is not null drop table dbo.SettingsTypes
end
go
if object_id(N'dbo.settings_tables_create', N'P') is not null drop procedure dbo.settings_tables_create
go
create procedure dbo.settings_tables_create as begin set nocount on
if object_id(N'dbo.SettingsTypes', N'U') is null create table dbo.SettingsTypes(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[name] varchar(32) not null,
[description] varchar(512) not null,
date_in datetime not null constraint df_settings_types_date_in default getdate(),
date_out datetime,
history_in datetime2 generated always as row start hidden not null constraint df_settings_types_history_in default sysutcdatetime(),
history_out datetime2 generated always as row end hidden not null constraint df_settings_types_history_out default convert(datetime2, '9999-12-31 23:59:59.9999999'),
constraint pk_settings_types primary key clustered(id),
constraint fk_settings_types_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_settings_types_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint uq_settings_types_name unique([name]) with(fillfactor = 90),
constraint ck_settings_types_name check([name] != '' and [name] not like '%[^a-zA-Z0-9_]%' and [name] not like '[^a-zA-Z_]%')
)
if object_id(N'dbo.Settings', N'U') is null create table dbo.Settings(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[type] integer not null,
[name] varchar(64) not null,
[value] varchar(max),
[default] varchar(max),
[description] varchar(512) not null,
date_in datetime not null constraint df_settings_date_in default getdate(),
date_out datetime,
history_in datetime2 generated always as row start hidden not null constraint df_settings_history_in default sysutcdatetime(),
history_out datetime2 generated always as row end hidden not null constraint df_settings_history_out default convert(datetime2, '9999-12-31 23:59:59.9999999'),
constraint pk_settings primary key clustered(id),
constraint fk_settings_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_settings_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk_settings_type foreign key([type]) references dbo.SettingsTypes(id)
on update no action
on delete no action,
constraint uq_settings_name unique([name]) with(fillfactor = 90),
constraint ck_settings_name check([name] != '' and [name] not like '%[^a-zA-Z0-9_]%' and [name] not like '[^a-zA-Z_]%')
)
if object_id(N'dbo.SettingsGroups', N'U') is null create table dbo.SettingsGroups(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[settings] integer not null,
[group] integer not null,
belongs bit not null constraint df_settings_groups_belongs default 1,
date_in datetime not null constraint df_settings_groups_date_in default getdate(),
date_out datetime,
history_in datetime2 generated always as row start hidden not null constraint df_settings_groups_history_in default sysutcdatetime(),
history_out datetime2 generated always as row end hidden not null constraint df_settings_groups_history_out default convert(datetime2, '9999-12-31 23:59:59.9999999'),
constraint pk_settings_groups primary key clustered(id),
constraint fk_settings_groups_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_settings_groups_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk_settings_groups_settings foreign key([settings]) references dbo.Settings(id)
on update no action
on delete no action,
constraint fk_settings_groups_group foreign key([group]) references dbo.Users(id)
on update no action
on delete no action,
constraint uq_settings_groups unique([settings], [group]) with(fillfactor = 90)
)
if object_id(N'dbo._SettingsTypes', N'U') is null create table dbo._SettingsTypes(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[name] varchar(32) not null,
[description] varchar(512) not null,
date_in datetime not null constraint df__settings_types_date_in default getdate(),
date_out datetime,
history_date datetime2 not null constraint df__settings_types_history_date default sysutcdatetime(),
constraint pk__settings_types primary key clustered(id),
constraint fk__settings_types_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk__settings_types_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action
)
if object_id(N'dbo._Settings', N'U') is null create table dbo._Settings(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[type] integer not null,
[name] varchar(64) not null,
[value] varchar(max),
[default] varchar(max),
[description] varchar(512) not null,
date_in datetime not null constraint df_settings_date_in default getdate(),
date_out datetime,
history_date datetime2 generated always as row start hidden not null constraint df__settings_history_date default sysutcdatetime(),
constraint pk__settings primary key clustered(id),
constraint fk__settings_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk__settings_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk__settings_type foreign key([type]) references dbo.SettingsTypes(id)
on update no action
on delete no action,
constraint uq__settings_name unique([name]) with(fillfactor = 90),
constraint ck__settings_name check([name] != '' and [name] not like '%[^a-zA-Z0-9_]%' and [name] not like '[^a-zA-Z_]%')
)
if object_id(N'dbo.SettingsGroups', N'U') is null create table dbo._SettingsGroups(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[settings] integer not null,
[group] integer not null,
belongs bit not null,
date_in datetime not null,
date_out datetime,
history_date datetime2 not null constraint df__settings_groups_history_date default sysutcdatetime(),
constraint pk__settings_groups primary key clustered(id),
constraint fk__settings_groups_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk__settings_groups_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk__settings_groups_settings foreign key([settings]) references dbo.Settings(id)
on update no action
on delete no action,
constraint fk__settings_groups_group foreign key([group]) references dbo.Users(id)
on update no action
on delete no action,
constraint uq__settings_groups unique([settings], [group]) with(fillfactor = 90)
)
end
go
execute dbo.settings_tables_create
if object_id(N'dbo.settings_types_trigger', N'TR') is not null drop trigger dbo.settings_types_trigger
go
create trigger dbo.settings_types_trigger on dbo.SettingsTypes for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._SettingsTypes(mode, entity, [procedure], [session], [name], [description], date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.[name], inserted.[description], inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.[name] != deleted.[name] or
inserted.[description] != deleted.[description] or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._SettingsTypes(mode, entity, [procedure], [session], [name], [description], date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.[name], inserted.[description], inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._SettingsTypes(mode, entity, [procedure], [session], [name], [description], date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.[name], deleted.[description], deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go
if object_id(N'dbo.settings_trigger', N'TR') is not null drop trigger dbo.settings_trigger
go
create trigger dbo.settings_trigger on dbo.Settings for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._Settings(mode, entity, [procedure], [session], [type], [name], [value], [default], [description], date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.[type], inserted.[name], inserted.[value], inserted.[default], inserted.[description], inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.[type] != deleted.[type] or
inserted.[name] != deleted.[name] or
inserted.[value] != deleted.[value] or
inserted.[default] != deleted.[default] or
inserted.[description] != deleted.[description] or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._Settings(mode, entity, [procedure], [session], [type], [name], [value], [default], [description], date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.[type], inserted.[name], inserted.[value], inserted.[default], inserted.[description], inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._Settings(mode, entity, [procedure], [session], [type], [name], [value], [default], [description], date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.[type], deleted.[name], deleted.[value], deleted.[default], deleted.[description], deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go
if object_id(N'dbo.settings_groups_trigger', N'TR') is not null drop trigger dbo.settings_groups_trigger
go
create trigger dbo.settings_groups_trigger on dbo.SettingsGroups for insert, update, delete as begin set nocount on
declare @insert integer, @update integer, @delete integer, @unknown integer
execute dbo.history_mode_get @insert output, @update output, @delete output, @unknown output
-- update.
insert into dbo._SettingsGroups(mode, entity, [procedure], [session], [settings], [group], [value], date_in, date_out)
select @update, inserted.id, inserted.[procedure], inserted.[session], inserted.[settings], inserted.[group], inserted.[value], inserted.date_in, inserted.date_out
from inserted inserted
join deleted deleted on inserted.id = deleted.id
where
inserted.[procedure] != deleted.[procedure] or
inserted.[session] != deleted.[session] or
inserted.[settings] != deleted.[settings] or
inserted.[group] != deleted.[group] or
inserted.[value] != deleted.[value] or
inserted.date_in != deleted.date_in or
isnull(inserted.date_out, '0001-01-01') != isnull(deleted.date_out, '0001-01-01')
-- Insert.
insert into dbo._SettingsGroups(mode, entity, [procedure], [session], [session], [settings], [group], [value], date_in, date_out)
select @insert, inserted.id, inserted.[procedure], inserted.[session], inserted.[settings], inserted.[group], inserted.[value], inserted.date_in, inserted.date_out
from inserted inserted
left join deleted deleted on inserted.id = deleted.id
where deleted.id is null
-- deleted.
insert into dbo._SettingsGroups(mode, entity, [procedure], [session], [session], [settings], [group], [value], date_in, date_out)
select @delete, deleted.id, deleted.[procedure], deleted.[session], deleted.[settings], deleted.[group], deleted.[value], deleted.date_in, deleted.date_out
from deleted deleted
left join inserted inserted on deleted.id = inserted.id
where inserted.id is null
end
go
if object_id(N'dbo.settings_get', N'FN') is not null drop function dbo.settings_get
go
create function dbo.settings_get(
@name varchar(64),
@group varchar(64) = null,
@default varchar(max) = null
) returns varchar(max) as begin
if @group is not null begin
declare @group_id integer = cast(@group as integer)
declare @value varchar(max) = (
select top 1 isnull(isnull(isnull(settings_groups.[value], settings.[value]), settings.[default]), @default)
from dbo.SettingsGroups settings_groups
join dbo.Groups groups on groups.id = settings_groups.[group]
join dbo.Settings settings on settings.id = settings_groups.[settings]
where
settings_groups.date_out is null and
groups.date_out is null and
settings.date_out is null and
settings.[name] = @name and
(groups.id = @group_id or groups.[name] = @group)
)
if @value is not null
return @value
end
return isnull((select top 1 isnull([value], [default]) from dbo.Settings where
date_out is null and
[name] = @name
), @default)
end
go
if object_id(N'dbo.settings_get_int', N'FN') is not null drop function dbo.settings_get_int
go
create function dbo.settings_get_int(
@name varchar(64),
@group varchar(64) = null,
@default integer = null
) returns integer as begin
declare @value varchar(max) = dbo.settings_get(@name, @group, null)
if @value is null
return @default
return cast(@value as integer)
end
go
if object_id(N'dbo.settings_get_bool', N'FN') is not null drop function dbo.settings_get_bool
go
create function dbo.settings_get_bool(
@name varchar(64),
@group varchar(64) = null,
@default bit = null
) returns bit as begin
declare @value varchar(max) = dbo.settings_get(@name, @group, null)
if @value is null
return @default
return cast(@value as bit)
end
go

View File

@ -0,0 +1,113 @@
use AnP
if object_id(N'dbo.permissions_tables_remove', N'P') is not null drop procedure dbo.permissions_tables_remove
go
create procedure dbo.permissions_tables_remove as begin set nocount on
if object_id(N'dbo.PermissionsGroups', N'U') is not null execute sp_executesql N'alter table dbo.PermissionsGroups set (system_versioning = off)'
if object_id(N'dbo.Permissions', N'U') is not null execute sp_executesql N'alter table dbo.Permissions set (system_versioning = off)'
if object_id(N'dbo._PermissionsGroups', N'U') is not null drop table dbo._PermissionsGroups
if object_id(N'dbo._Permissions', N'U') is not null drop table dbo._Permissions
if object_id(N'dbo.PermissionsGroups', N'U') is not null drop table dbo.PermissionsGroups
if object_id(N'dbo.Permissions', N'U') is not null drop table dbo.Permissions
end
go
if object_id(N'dbo.permissions_tables_create', N'P') is not null drop procedure dbo.permissions_tables_create
go
create procedure dbo.permissions_tables_create as begin set nocount on
if object_id(N'dbo._Permissions', N'U') is null create table dbo._Permissions(
id integer not null identity(1, 1),
entity integer not null,
[procedure] integer not null,
[session] integer not null,
[name] varchar(64) not null,
[description] varchar(512) not null,
date_in datetime not null,
date_out datetime,
history_in datetime2 not null,
history_out datetime2 not null,
constraint pk__permissions primary key clustered(id),
index ix__permissions_history nonclustered(entity, history_out, history_in)
)
if object_id(N'dbo._PermissionsGroups', N'U') is null create table dbo._PermissionsGroups(
id integer not null identity(1, 1),
entity integer not null,
[procedure] integer not null,
[session] integer not null,
permission integer not null,
[group] integer not null,
belongs bit not null,
date_in datetime not null,
date_out datetime,
history_in datetime2 not null,
history_out datetime2 not null,
constraint pk_permissions_groups primary key clustered(id),
index ix__permissions_groups_history nonclustered(entity, history_out, history_in)
)
if object_id(N'dbo.Permissions', N'U') is null begin
create table dbo.Permissions(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
[name] varchar(64) not null,
[description] varchar(512) not null,
date_in datetime not null constraint df_permissions_date_in default getdate(),
date_out datetime,
history_in datetime2 generated always as row start hidden not null constraint df_permissions_history_in default sysutcdatetime(),
history_out datetime2 generated always as row end hidden not null constraint df_permissions_history_out default convert(datetime2, '9999-12-31 23:59:59.9999999'),
constraint pk_permissions primary key clustered(id),
constraint fk_permissions_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_permissions_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint uq_permissions_name unique([name]) with(fillfactor = 90),
constraint ck_permissions_name check([name] != '' and [name] not like '%[^a-zA-Z0-9_]%' and [name] not like '[^a-zA-Z_]%'),
period for system_time(history_in, history_out)
)
execute sp_executesql N'alter table dbo.Permissions set (system_versioning = on (history_table = dbo._Permissions, data_consistency_check = on))'
end
if object_id(N'dbo.PermissionsGroups', N'U') is null begin
create table dbo._PermissionsGroups(
id integer not null identity(1, 1),
[procedure] integer not null,
[session] integer not null,
permission integer not null,
[group] integer not null,
belongs bit not null constraint df_permissions_groups_belongs default 1,
date_in datetime not null constraint df_permissions_groups_date_in default getdate(),
date_out datetime,
history_in datetime2 generated always as row start hidden not null constraint df_permissions_groups_history_in default sysutcdatetime(),
history_out datetime2 generated always as row end hidden not null constraint df_permissions_groups_history_out default convert(datetime2, '9999-12-31 23:59:59.9999999'),
constraint pk_permissions_groups primary key clustered(id),
constraint fk_permissions_groups_procedure foreign key([procedure]) references dbo.Procedures(id)
on update no action
on delete no action,
constraint fk_permissions_groups_session foreign key([session]) references dbo.Sessions(id)
on update no action
on delete no action,
constraint fk_permissions_groups_permission foreign key(permission) references dbo.Permissions(id)
on update no action
on delete no action,
constraint fk_permissions_groups_group foreign key([group]) references dbo.Users(id)
on update no action
on delete no action,
constraint uq_permissions_groups unique(permission, [group]) with(fillfactor = 90),
period for system_time(history_in, history_out)
)
execute sp_executesql N'alter table dbo.PermissionsGroups set (system_versioning = on (history_table = dbo._PermissionsGroups, data_consistency_check = on))'
end
end
go
execute dbo.permissions_tables_create

View File

@ -0,0 +1,143 @@
use AnP
if object_id(N'dbo.common_tables_fill', N'P') is not null drop procedure dbo.common_tables_fill
go
create procedure dbo.common_tables_fill as begin set nocount on
declare @database varchar(64) = dbname()
declare @machine integer = dbo.machine_session_get()
declare @procedure integer
declare @machine_user_id integer = (select top 1 id from dbo.Users where nick = @machine_user)
declare @machine_ip_id integer = (select top 1 id from dbo.Ips where ip = @machine_ip)
declare @guest_user_id integer = (select top 1 id from dbo.Users where nick = 'guest')
declare @guest_group_id integer = (select top 1 id from dbo.Groups where [name] = 'guest' and date_out is null)
declare @root_group_id integer = (select top 1 id from dbo.Groups where [name] = 'root' and date_out is null)
declare @guest_permissions_id integer = (select top 1 id from dbo.Permissions where [name] = 'guest' and date_out is null)
declare @administrator_permissions_id integer = (select top 1 id from dbo.Permissions where [name] = 'administrator' and date_out is null)
declare @user_group_id integer = (select top 1 id from dbo.Groups where [name] = 'users' and date_out is null)
execute dbo.procedure_get_id @database, 'common_tables_fill', @procedure output
if @machine is null begin
declare @machine_user varchar(32) = 'machine'
declare @machine_ip varchar(39) = '::1'
set @machine = 1
if @machine_user_id is null begin
declare @group integer
insert into dbo.Users([procedure], [session], nick, [password], accessible) values
(@procedure, @machine, @machine_user, hashbytes('SHA2_512', ''), 0)
set @machine_user_id = scope_identity()
insert into dbo.Groups([procedure], [session], [name], owner) values
(@procedure, @machine, @machine_user, 1)
set @group = scope_identity()
insert into dbo.GroupsUsers([procedure], [session], [group], [user]) values
(@procedure, @machine, @group, @machine_user_id)
end
if @machine_ip_id is null begin
declare @group integer
insert into dbo.Ips ([procedure], [session], ip) values
(@procedure, @machine, @machine_ip)
set @machine_ip_id = scope_identity()
insert into dbo.Groups([procedure], [session], [name], owner) values
(@procedure, @machine, @machine_user, 1)
set @group = scope_identity()
insert into dbo.GroupsIps([procedure], [session], [group], [ip]) values
(@procedure, @machine, @group, @machine_ip_id)
end
set @machine = (select top 1 id from dbo.Sessions where [user] = @machine_user_id and [ip] = @machine_ip_id and date_out is null)
if @machine is null begin
insert into dbo.Sessions([procedure], [user], [ip]) values
(@procedure, @machine_user_id, @machine_ip_id)
set @machine = scope_identity()
end
if (select top 1 0 from dbo.Users where id = @user_id and [session] = @session) is null begin
update dbo.Users set [session] = @machine where id = @machine_user_id
delete from dbo._Users where [session] != @machine
end
if (select top 1 0 from dbo.Ips where id = @ip_id and [session] = @session) is null begin
update dbo.Ips set [session] = @machine where id = @machine_ip_id
delete from dbo._Ips where [session] != @machine
end
execute dbo.users_tables_upgrade
execute dbo.ips_tables_upgrade
end
if object_id(N'tempdb..#Settings') is not null drop table #Settings
create table #Settings(
[type] varchar(32) not null,
[name] varchar(64) not null,
[value] varchar(max) not null
)
insert into #Settings([type], [name], [value]) values
('data', 'data_hash_algorithm', 'SHA2_512')
if @guest_user_id is null begin
insert into dbo.Users([procedure], [session], nick, [password], accessible) values
(@procedure, @machine, 'guest', hashbytes('SHA2_512', ''), 0)
set @guest_user_id = scope_identity()
end
if @guest_group_id is null begin
insert into dbo.Groups([procedure], [session], [name], owner) values
(@procedure, @machine, 'guest', 1)
set @guest_group_id = scope_identity()
end
if @guest_permissions_id is null begin
insert into dbo.Permissions([procedure], [session], [name], [description]) values
(@procedure, @machine, 'guest', 'Guest permissions')
set @guest_permissions_id = scope_identity()
end
if (select top 1 0 from dbo.GroupsUsers where [group] = @guest_group_id and [user] = @guest_user_id) is null
insert into dbo.GroupsUsers([procedure], [session], [group], [user]) values
(@procedure, @machine, @guest_group_id, @guest_user_id)
if (select top 1 0 from dbo.PermissionsGroups where permission = @guest_permissions_id and [group] = @guest_group_id) is null
insert into dbo.PermissionsGroups([procedure], [session], permission, [group]) values
(@procedure, @machine, @guest_permissions_id, @guest_group_id)
if @root_group_id is null begin
insert into dbo.Groups([procedure], [session], [name], owner) values
(@procedure, @machine, 'root', 1)
set @root_group_id = scope_identity()
end
if @administrator_permissions_id is null begin
insert into dbo.Permissions([procedure], [session], [name], [description]) values
(@procedure, @machine, 'administrator', 'Administrator permissions')
set @administrator_permissions_id = scope_identity()
end
if (select top 1 0 from dbo.PermissionsGroups where permission = @administrator_permissions_id and [group] = @root_group_id) is null
insert into dbo.PermissionsGroups([procedure], [session], permission, [group]) values
(@procedure, @machine, @administrator_permissions_id, @root_group_id)
if (select top 1 0 from dbo.GroupsUsers where [group] = @root_group_id and [user] = @machine_user_id) is null
insert into dbo.GroupsUsers([procedure], [session], [group], [user]) values
(@procedure, @machine, @root_group_id, @machine_user_id)
if @user_group_id is null begin
insert into dbo.Groups([procedure], [session], [name], owner) values
(@procedure, @machine, 'users', 1)
set @user_group_id = scope_identity()
end
if (select top 1 0 from dbo.PermissionsGroups where permission = @guest_permissions_id and [group] = @user_group_id) is null
insert into dbo.PermissionsGroups([procedure], [session], permission, [group]) values
(@procedure, @machine, @guest_permissions_id, @user_group_id)
drop table #Settings
end
go

View File

@ -0,0 +1,58 @@
use AnP
if object_id(N'dbo.where_set', N'FN') is not null drop function dbo.where_set
go
create function dbo.where_set(
@new_where varchar(max),
@old_where varchar(max)
) returns varchar(max) begin
return (case when isnull(@new_where, '') = '' then isnull(@old_where, '') else (case when isnull(@old_where, '') = '' then @new_where else '(' + @new_where + ') and (' + @old_where + ')' end) end)
end
go
if object_id(N'dbo.tables_list', N'P') is not null drop procedure dbo.tables_list
go
create procedure tables_list(
@view varchar(max),
@page integer,
@items_per_page integer,
@where varchar(max),
@order_by varchar(max),
@has_errors bit,
@pages integer output,
@items integer output,
@results integer output
) as begin
declare @item_from integer
declare @query nvarchar(max)
declare @where_string varchar(max)
set nocount on
if @has_errors = 1
set @where = dbo.where_set('0 = 1', @where)
set @where_string = (case when isnull(@where, '') = '' then '' else ' where ' + @where end)
set @query = N'select top 1 @subitems = count(1) from ' + @view + @where_string
execute sp_executesql @query, N'@subitems integer output', @subitems = @items output
set @pages = ceiling(@items / cast(@items_per_page as float))
if @page < 1
set @page = 1
else if @pages > 0 and @page > @pages
set @page = @pages
set @query = (
N'select * from ' + @view + @where_string +
' order by ' + (case when isnull(@order_by, '') = '' then 'id asc' else @order_by end) +
' offset ' + convert(varchar(14), (@page - 1) * @items_per_page) + ' rows fetch next ' + convert(varchar(14), @items_per_page) + ' rows only'
)
execute sp_executesql @query
set @results = @@rowcount
end
go

View File

@ -0,0 +1,22 @@
@echo off
set "transact_sql_host=127.0.0.1"
set "transact_sql_port=1433"
set "transact_sql_user=sa"
set "transact_sql_password="
if exist Secrets.cmd (
call Secrets.cmd
)
where sqlcmd > NUL
if %errorlevel% neq 0 (
echo "Please, install 'sqlcmd' for use the Scripts via CMD."
) else (
for /D %%d in (%cd%\..\SQLServer\AnP.*) do (
for %%f in (%%d\*.sql) do (
echo %%f
sqlcmd -S %transact_sql_host%,%transact_sql_port% -U %transact_sql_user% -P %transact_sql_password% -i %%f
)
)
)

View File

@ -0,0 +1,21 @@
#!/bin/bash
directory=`dirname $(readlink -f "$0")`
if command -v sqlcmd &> /dev/null; then
transact_sql_host="127.0.0.1"
transact_sql_port="1433"
transact_sql_user="sa"
transact_sql_password=""
[[ -f Secrets.sh ]] && source Secrets.sh
for i in $(find $directory/../SQLServer -type f|grep .sql|sort|cat); do
echo $i
sqlcmd -S $transact_sql_host,$transact_sql_port -U $transact_sql_user -P $transact_sql_password -i $i -C
done
else
echo "Please, install 'sqlcmd'."
fi