Exemple #1
0
        public static Ret Update(TTable entity, params string[] fields)
        {
            try
            {
                using (var scope = new SequelScope())
                    using (var tx = scope.CreateTransactionScope())
                    {
                        if (fields.Length == 0)
                        {
                            fields = TableInfo.FieldNames.Except(TableInfo.PkName).ToArray();
                        }

                        var parameters = entity._GetMap(fields);
                        var assertions = string.Join(", ", parameters.Keys.Select(x => $"{x} = @{x}"));

                        var id = entity._Get(TableInfo.PkName);

                        var done =
                            @"update @{TableName}
                 set @{assertions}
               where @{PkName} matches @id
              ;
              select @@rowcount"
                            .AsSql()
                            .Set("TableName", TableInfo.TableName)
                            .Set("PkName", TableInfo.PkName)
                            .Set("assertions", assertions)
                            .Set("id", id)
                            .Set(parameters)
                            .SelectOne <bool>();

                        tx.Complete();
                        return(done);
                    }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #2
0
        public static Ret Insert(TTable entity)
        {
            try
            {
                using (var scope = new SequelScope())
                    using (var tx = scope.CreateTransactionScope())
                    {
                        var updatableFields = TableInfo.PkAutoIncrement
            ? TableInfo.FieldNames.Except(TableInfo.PkName).ToArray()
            : TableInfo.FieldNames.ToArray();

                        var parameters = entity._GetMap(updatableFields);
                        var fields     = string.Join(", ", parameters.Keys);
                        var values     = parameters.Values;

                        var done =
                            @"insert into @{p_table} (@{p_fields}) values (@{p_values})
              ;
              select @@rowcount"
                            .AsSql()
                            .Set("p_table", TableInfo.TableName)
                            .Set("p_pk", TableInfo.PkName)
                            .Set("p_fields", fields)
                            .Set("p_values", values)
                            .Set(parameters)
                            .SelectOne <bool>();

                        tx.Complete();
                        return(done);
                    }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #3
0
        public static Ret InsertOrUpdate(TTable entity)
        {
            try
            {
                using (var scope = new SequelScope())
                    using (var tx = scope.CreateTransactionScope())
                    {
                        var updatableFields = TableInfo.PkAutoIncrement
            ? TableInfo.FieldNames.Except(TableInfo.PkName).ToArray()
            : TableInfo.FieldNames.ToArray();

                        var parameters = entity._GetMap(updatableFields);
                        var assertions = string.Join(", ", parameters.Keys.Select(x => $"{x} = @{x}"));
                        var fields     = string.Join(", ", parameters.Keys);
                        var values     = parameters.Values;
                        var id         = entity._Get(TableInfo.PkName);

                        var affectedId =
                            @"declare @x_affected_id int = null
              ;
              update @{p_table}
                 set @{p_assertions}
               where @{p_pk} matches @p_id
              ;
              if @@rowcount > 0
              begin
                set @x_affected_id = @p_id
              end
              ;
              insert into @{p_table} (@{p_fields})
              select @{p_values}
               where not exists (select 1 from @{p_table} where @{p_pk} matches @p_id)
              ;
              if @@rowcount > 0
              begin
                set @x_affected_id = scope_identity()
              end
              ;
              select @x_affected_id"
                            .AsSql()
                            .Set("p_table", TableInfo.TableName)
                            .Set("p_pk", TableInfo.PkName)
                            .Set("p_assertions", assertions)
                            .Set("p_fields", fields)
                            .Set("p_values", values)
                            .Set("p_id", id)
                            .Set(parameters)
                            .SelectOne();

                        tx.Complete();

                        var done = affectedId != null;
                        if (done)
                        {
                            entity._Set(TableInfo.PkName, affectedId);
                        }

                        return(done);
                    }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #4
0
        static Db()
        {
            using (var scope = new SequelScope(connectionString))
            {
                var version =
                    @"select DFvalor from TBsis_config where DFchave = 'versao'"
                    .AsSql()
                    .TrySelectOne <int>();

                if (version == 1)
                {
                    return;
                }

                using (var tx = scope.CreateTransactionScope())
                {
                    //
                    // DDL
                    //

                    @"create table TBsis_config (
              DFchave nvarchar(256) not null
                constraint pk_TBsis_config primary key clustered,
              DFvalor nvarchar(4000) null
            )
            ;
            insert into TBsis_config (DFchave, DFvalor) values ('versao', '1')
            ;
            create table TBgrupo_empresa (
              DFid_grupo_empresa int not null identity(1,1)
                constraint pk_TBgrupo_empresa_DFid_grupo_empresa primary key clustered,
              DFnome nvarchar(256) not null
            )
            ;
            create table TBempresa (
              DFid_empresa int not null
                constraint pk_TBempresa primary key clustered,
              DFrazao_social nvarchar(256) not null,
              DFnome_fantasia nvarchar(256) not null,
              DFcnpj nvarchar(18) not null,
              DFativo bit not null
                constraint df_TBempresa_DFativo default (1),
              DFid_grupo_empresa int null
                constraint fk_TBempresa_TBgrupo_empresa
                    foreign key references TBgrupo_empresa(DFid_grupo_empresa)
                  on delete set null
            )
            ;
            create index ix_TBempresa_DFid_grupo_empresa on TBempresa (DFid_grupo_empresa)
            ;
            create table TBpapel_usuario (
              DFid_papel_usuario int not null identity(1,1)
                constraint pk_TBpapel_usuario primary key clustered,
              DFnome nvarchar(256) not null
            )
            ;
            create table TBusuario (
              DFid_usuario int not null identity(1,1)
                constraint pk_TBusuario primary key clustered,
              DFlogin nvarchar(100) not null
                constraint uk_TBusuario_DFlogin unique,
              DFnome nvarchar(100) not null,
              DFativo bit not null
                constraint df_TBusuario_DFativo default (1),
              DFsenha nvarchar(12) not null,
              DFid_empresa_padrao int null
                constraint fk_TBusuario_TBempresa
                    foreign key references TBempresa(DFid_empresa)
                  on delete set null,
              DFid_papel_usuario int null
                constraint fk_TBusuario_TBpapel_usuario
                    foreign key references TBpapel_usuario(DFid_papel_usuario)
                  on delete set null
            )
            ;
            create index ix_TBusuario_DFid_empresa_padrao on TBusuario (DFid_empresa_padrao)
            ;
            create index ix_TBusuario_DFid_papel_usuario  on TBusuario (DFid_papel_usuario)
            ;
            create table TBpostagem (
              DFid_postagem int not null identity(1,1)
                constraint pk_TBpostagem primary key clustered,
              DFid_autor int not null
                constraint fk_TBpostagem_TBusuario
                    foreign key references TBusuario(DFid_usuario)
                on delete cascade,
              DFtitulo nvarchar(100) not null,
              DFtexto nvarchar(max) not null,
              DFdata_publicacao datetime not null
                constraint df_TBpostagem_DFdata_publicacao default (getdate()),
              DFid_postagem_referente int null
                constraint fk_TBpostagem_TBpostagem
                    foreign key references TBpostagem(DFid_postagem),
              DFtipo as (case when coalesce(DFid_postagem_referente, 0) = 0 then 'P' else 'C' end)
            )
            ;
            create index ix_TBpostagem_DFid_autor on TBpostagem(DFid_autor)
            ;
            create index ix_TBpostagem_DFdata_publicacao on TBpostagem(DFdata_publicacao desc)
            ;
            create index ix_TBpostagem_DFid_postagem_referente on TBpostagem(DFid_postagem_referente)
            ;
            create index ix_TBpostagem_DFtipo on TBpostagem(DFtipo)
            ;
            create table TBclassificacao (
              DFid_classificacao int not null identity(1,1)
                constraint pk_TBclassificacao primary key clustered,
              DFid_autor int not null
                constraint fk_TBclassificacao_TBusuario
                    foreign key references TBusuario (DFid_usuario),
              DFid_postagem_referente int not null
                constraint fk_TBclassificacao_TBpostagem
                    foreign key references TBpostagem (DFid_postagem)
                  on delete cascade,
              DFclassificacao int not null
                constraint ck_TBclassificacao_DFclassificacao
                      check (DFclassificacao = -1 or DFclassificacao = 1)
            )"
                    .AsSql()
                    .Execute();

                    //
                    // DEMONSTRACAO
                    //

                    @"insert into TBgrupo_empresa (DFnome) values ('GRUPO SEM FRONTEIRAS')
            declare @id_grupo_empresa int = scope_identity()
            
            insert into TBempresa (DFid_empresa, DFrazao_social, DFnome_fantasia, DFcnpj, DFativo, DFid_grupo_empresa)
            values (1, 'SEM FRONTEIRAS VAREJISTA', 'SUPERMERCADO SEM FRONTEIRAS', '01.234.567/0001-95', 1, @id_grupo_empresa)
                 , (2, 'SEM FRONTEIRAS ATACADISTA', 'CENTRAL SEM FRONTEIRAS', '01.234.567/0002-76', 1, @id_grupo_empresa)
            
            insert into TBpapel_usuario (DFnome) values ('ADMIN')
            declare @id_papel_admin int = scope_identity()
            
            insert into TBpapel_usuario (DFnome) values ('USUARIO')
            declare @id_papel_usuario int = scope_identity()
            
            insert into TBusuario (DFlogin, DFnome, DFativo, DFsenha, DFid_empresa_padrao, DFid_papel_usuario)
            values ('admin', 'ADMINISTRADOR', 1, 'qwer0987', 1, @id_papel_admin)
                 , ('fulano', 'FULANO', 1, '123', 1, @id_papel_usuario)
                 , ('beltrano', 'BELTRANO', 1, '123', 1, @id_papel_usuario)
                 , ('cicrano', 'CICRANO', 1, '123', 1, @id_papel_usuario)
                 , ('alano', 'ALANO', 2, '123', 1, @id_papel_usuario)
                 , ('mengano', 'MENGANO', 2, '123', 1, @id_papel_usuario)
                 , ('zutano', 'ZUTANO', 2, '123', 1, @id_papel_usuario)
                 , ('citano', 'CITANO', 2, '123', 1, @id_papel_usuario)
                 , ('perengano', 'PERENGANO', 2, '123', 1, @id_papel_usuario)"
                    .AsSql()
                    .Execute();

                    tx.Complete();
                }
            }
        }