#wip: SQL Server base.
This commit is contained in:
parent
7a71827a9b
commit
0ce7c2c34b
34
MD/doc/es/db.md
Normal file
34
MD/doc/es/db.md
Normal 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
|
||||
|
||||
```
|
||||
118
SQLServer/AnP.01.base.server.sql
Normal file
118
SQLServer/AnP.01.base.server.sql
Normal 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
|
||||
120
SQLServer/AnP.02.users.server.sql
Normal file
120
SQLServer/AnP.02.users.server.sql
Normal 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
|
||||
125
SQLServer/AnP.03.ips.server.sql
Normal file
125
SQLServer/AnP.03.ips.server.sql
Normal 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
|
||||
190
SQLServer/AnP.04.sessions.server.sql
Normal file
190
SQLServer/AnP.04.sessions.server.sql
Normal 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
|
||||
190
SQLServer/AnP.05.logs.server.sql
Normal file
190
SQLServer/AnP.05.logs.server.sql
Normal 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
|
||||
281
SQLServer/AnP.06.groups.server.sql
Normal file
281
SQLServer/AnP.06.groups.server.sql
Normal 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
|
||||
353
SQLServer/AnP.07.settings.server.sql
Normal file
353
SQLServer/AnP.07.settings.server.sql
Normal 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
|
||||
113
SQLServer/AnP.08.permissions.server.sql
Normal file
113
SQLServer/AnP.08.permissions.server.sql
Normal 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
|
||||
143
SQLServer/AnP.09.fill.server.sql
Normal file
143
SQLServer/AnP.09.fill.server.sql
Normal 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
|
||||
58
SQLServer/AnP.10.common.server.sql
Normal file
58
SQLServer/AnP.10.common.server.sql
Normal 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
|
||||
22
Tools/sqlserver.install.bat
Normal file
22
Tools/sqlserver.install.bat
Normal 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
|
||||
)
|
||||
)
|
||||
)
|
||||
21
Tools/sqlserver.install.sh
Normal file
21
Tools/sqlserver.install.sh
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user