Skip to content

Commit

Permalink
## 5.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
vbilopav committed Feb 5, 2024
1 parent 8b2c491 commit f8412e4
Show file tree
Hide file tree
Showing 41 changed files with 1,734 additions and 296 deletions.
3 changes: 1 addition & 2 deletions PgRoutiner/Builder/CodeBuilders/CodeBuilders.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Norm;
using PgRoutiner.Builder.CodeBuilders.Models;
using PgRoutiner.Builder.CodeBuilders.Models;

namespace PgRoutiner.Builder.CodeBuilders;

Expand Down
5 changes: 3 additions & 2 deletions PgRoutiner/Builder/CodeBuilders/CodeRoutinesBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Norm;
using System.Data;
using PgRoutiner.DataAccess.Models;

namespace PgRoutiner.Builder.CodeBuilders;
Expand Down Expand Up @@ -26,7 +26,8 @@ protected override IEnumerable<CodeResult> GetCodes()
{
foreach (var ns in settings.CustomDirs)
{
if (this.connection.WithParameters(name, ns.Key).Read<bool>("select $1 similar to $2").Single())
//if (this.connection.WithParameters(name, ns.Key).Read<bool>("select $1 similar to $2").Single())
if (this.connection.Read<bool>([(name, DbType.AnsiString, null), (ns.Key, DbType.AnsiString, null)],"select $1 similar to $2", r => r.Val<bool>(0)).Single())
{
extraNamespace = ns.Value.PathToNamespace().Replace("..", ".");
RoutinesCustomDirs.Add(name, ns.Value);
Expand Down
6 changes: 0 additions & 6 deletions PgRoutiner/Builder/Crud.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
using System;
using System.Data;
using System.Linq;
using System.Reflection.Metadata;
using System.Security.Claims;
using System.Xml.Linq;
using Norm;
using PgRoutiner.Builder.CodeBuilders;
using PgRoutiner.DataAccess.Models;

namespace PgRoutiner.Builder;
Expand Down
7 changes: 4 additions & 3 deletions PgRoutiner/Builder/Dump/DumpBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System.Xml.Linq;
using Norm;
using System.Data;
using System.Xml.Linq;
using PgRoutiner.DataAccess.Models;

namespace PgRoutiner.Builder.Dump;
Expand Down Expand Up @@ -173,7 +173,8 @@ static string ParseSchema(string dir, string schema)
{
foreach (var ns in Current.Value.CustomDirs)
{
if (builder.Connection.WithParameters(objectName, ns.Key).Read<bool>("select $1 similar to $2").Single())
//if (builder.Connection.WithParameters(objectName, ns.Key).Read<bool>("select $1 similar to $2").Single())
if (builder.Connection.Read<bool>([(objectName, DbType.AnsiString, null), (ns.Key, DbType.AnsiString, null)], "select $1 similar to $2", r => r.Val<bool>(0)).Single())
{
extraDir = ns.Value;
DbObjectsCustomDirs.Add(objectName, ns.Value);
Expand Down
7 changes: 2 additions & 5 deletions PgRoutiner/Builder/Dump/PgDumpBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
using Norm;
using PgRoutiner.Builder.DiffBuilder;
using PgRoutiner.DataAccess.Models;
using PgRoutiner.DataAccess.Models;
using PgRoutiner.DumpTransformers;
using static System.Net.Mime.MediaTypeNames;
using static PgRoutiner.Builder.Dump.DumpBuilder;

namespace PgRoutiner.Builder.Dump;
Expand Down Expand Up @@ -693,7 +690,7 @@ private List<string> GetDumpItemLines(string args, PgItem item, out List<PgItem>
var result = GetDumpItemLines(args, item, lineAction: line =>
{
var entry = line.FirstWordAfter("CREATE TYPE");
if (entry != null)
if (entry != null && !line.Contains('\''))
{
var type = new PgItem { Type = PgType.Type };
var parts = entry.Split('.');
Expand Down
1 change: 0 additions & 1 deletion PgRoutiner/Builder/Executor.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Microsoft.Extensions.FileSystemGlobbing.Internal;
using Norm;

namespace PgRoutiner.Builder;

Expand Down
18 changes: 10 additions & 8 deletions PgRoutiner/Builder/Md/MarkdownDocument.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
using System.Data;
using System.Runtime;
using System.Security.AccessControl;
using System.Xml.Linq;
using Norm;
using PgRoutiner.DataAccess.Models;
using static PgRoutiner.Builder.Dump.DumpBuilder;
using PgRoutiner.DataAccess;

namespace PgRoutiner.Builder.Md;

Expand Down Expand Up @@ -279,7 +276,8 @@ private void BuildRoutines(StringBuilder content, StringBuilder header, List<str
{
foreach (var ns in settings.CustomDirs)
{
if (this.connection.WithParameters(result.Name, ns.Key).Read<bool>("select $1 similar to $2").Single())
//if (this.connection.WithParameters(result.Name, ns.Key).Read<bool>("select $1 similar to $2").Single())
if (this.connection.Read<bool>([(result.Name, DbType.AnsiString, null), (ns.Key, DbType.AnsiString, null)], "select $1 similar to $2", r => r.Val<bool>(0)).Single())
{
customDir = ns.Value;
break;
Expand Down Expand Up @@ -494,8 +492,11 @@ void WriteStats(string schema, string table)
{
additionalTableComment = null;
additionalColumnComments = connection
.WithParameters((schema, DbType.AnsiString), (result.Table, DbType.AnsiString))
.Read<string, string, string>(additionalCommentsSql)
//.WithParameters((schema, DbType.AnsiString), (result.Table, DbType.AnsiString))
.Read<(string, string, string)>(
[(schema, DbType.AnsiString, null), (result.Table, DbType.AnsiString, null)],
additionalCommentsSql,
r => (r.Val<string>(0), r.Val<string>(1), r.Val<string>(2)))
.Select(tuple =>
{
additionalTableComment ??= tuple.Item1;
Expand Down Expand Up @@ -791,7 +792,8 @@ string GetDir()
{
foreach (var ns in settings.CustomDirs)
{
if (this.connection.WithParameters(name, ns.Key).Read<bool>("select $1 similar to $2").Single())
//if (this.connection.WithParameters(name, ns.Key).Read<bool>("select $1 similar to $2").Single())
if (this.connection.Read<bool>([(name, DbType.AnsiString, null), (ns.Key, DbType.AnsiString, null)], "select $1 similar to $2", r => r.Val<bool>(0)).Single())
{
extraDir = ns.Value;
break;
Expand Down
9 changes: 7 additions & 2 deletions PgRoutiner/Console.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System;
using System.Diagnostics.Metrics;
using System.Reflection;
using System.Runtime.CompilerServices;
using Microsoft.Extensions.Configuration;

namespace PgRoutiner;
Expand Down Expand Up @@ -99,15 +101,18 @@ public static Current BindConsole(string[] args)
if (hashes.Contains(arg.Alias))
{
var prop = settings.GetType().GetProperty(arg.Original);
if (prop.GetType() == typeof(bool))
if (prop.PropertyType == typeof(bool))
{
settings.GetType().GetProperty(arg.Original).SetValue(settings, true);
prop.SetValue(settings, true);
}
}
}
return settings;
}

//[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_count")]
//private static extern ref int GetCountField(Current settings);

public static string[] ParseArgs(string[] rawArgs)
{
string[] args = new string[rawArgs.Length];
Expand Down
88 changes: 60 additions & 28 deletions PgRoutiner/DataAccess/FilterTypes.cs
Original file line number Diff line number Diff line change
@@ -1,44 +1,76 @@
using System.Data;
using Norm;
using PgRoutiner.DataAccess.Models;

namespace PgRoutiner.DataAccess;


public static partial class DataAccessConnectionExtensions
{

public static IEnumerable<PgItem> FilterTypes(this NpgsqlConnection connection, List<PgItem> types, Current settings, string skipSimilar = null)
{
if (!types.Any())
{
return Enumerable.Empty<PgItem>();
}
return connection
.WithParameters(
(settings.SchemaSimilarTo, DbType.AnsiString),
(settings.SchemaNotSimilarTo, DbType.AnsiString),
(skipSimilar, DbType.AnsiString))
.Read<(string Schema, string Name)>(@$"
select
schema, name
from
(
{string.Join(" union all ", types.Select(t => $"select '{t.Schema}' as schema, '{t.Name}' as name"))}
) sub
where
( $1 is null or (sub.schema similar to $1) )
and ( $2 is null or sub.schema not similar to $2 )
and ( {GetSchemaExpression("sub.schema")} )
and ( $3 is null or (sub.name not similar to $3) )

return connection.Read<(string Schema, string Name)>(
[
(settings.SchemaSimilarTo, DbType.AnsiString, null),
(settings.SchemaNotSimilarTo, DbType.AnsiString, null),
(skipSimilar, DbType.AnsiString, null)
],
@$"
select
schema, name
from
(
{string.Join(" union all ", types.Select(t => $"select '{t.Schema}' as schema, '{t.Name}' as name"))}
) sub
where
( $1 is null or (sub.schema similar to $1) )
and ( $2 is null or sub.schema not similar to $2 )
and ( {GetSchemaExpression("sub.schema")} )
and ( $3 is null or (sub.name not similar to $3) )
")
.Select(t => new PgItem
{
Schema = t.Schema,
Name = t.Name,
TypeName = "TYPE",
Type = PgType.Type
});
", r => (r.Val<string>(0), r.Val<string>(1))
).Select(t => new PgItem
{
Schema = t.Schema,
Name = t.Name,
TypeName = "TYPE",
Type = PgType.Type
});

//return connection
// .WithParameters(
// (settings.SchemaSimilarTo, DbType.AnsiString),
// (settings.SchemaNotSimilarTo, DbType.AnsiString),
// (skipSimilar, DbType.AnsiString))
// .Read<(string Schema, string Name)>(@$"

// select
// schema, name
// from
// (
// {string.Join(" union all ", types.Select(t => $"select '{t.Schema}' as schema, '{t.Name}' as name"))}
// ) sub

// where
// ( $1 is null or (sub.schema similar to $1) )
// and ( $2 is null or sub.schema not similar to $2 )
// and ( {GetSchemaExpression("sub.schema")} )
// and ( $3 is null or (sub.name not similar to $3) )

// ")
// .Select(t => new PgItem
// {
// Schema = t.Schema,
// Name = t.Name,
// TypeName = "TYPE",
// Type = PgType.Type
// });
}
}
58 changes: 39 additions & 19 deletions PgRoutiner/DataAccess/GetAllEnums.cs
Original file line number Diff line number Diff line change
@@ -1,28 +1,48 @@
using Norm;

namespace PgRoutiner.DataAccess;
namespace PgRoutiner.DataAccess;

public static partial class DataAccessConnectionExtensions
{
public static IEnumerable<(string schema, string name, string[] values, string comment)> GetAllEnums(this NpgsqlConnection connection)
{
return connection.Read<(string schema, string name, string[] values, string comment)>(@$"

select
ns.nspname,
t.typname as name,
array_agg(e.enumlabel order by e.enumsortorder) as values,
pgdesc.description as comment
from
pg_type t
inner join pg_enum e on t.oid = e.enumtypid
inner join pg_namespace ns on t.typnamespace = ns.oid
left outer join pg_catalog.pg_description pgdesc on t.oid = pgdesc.objoid
group by
ns.nspname,
t.typname,
pgdesc.description
return connection.Read<(string schema, string name, string[] values, string comment)>(
[
],
@$"
select
ns.nspname,
t.typname as name,
array_agg(e.enumlabel order by e.enumsortorder) as values,
pgdesc.description as comment
from
pg_type t
inner join pg_enum e on t.oid = e.enumtypid
inner join pg_namespace ns on t.typnamespace = ns.oid
left outer join pg_catalog.pg_description pgdesc on t.oid = pgdesc.objoid
group by
ns.nspname,
t.typname,
pgdesc.description
",
r => (r.Val<string>(0), r.Val<string>(1), r.Val<string[]>(2), r.Val<string>(3)));

//return connection.Read<(string schema, string name, string[] values, string comment)>(@$"

// select
// ns.nspname,
// t.typname as name,
// array_agg(e.enumlabel order by e.enumsortorder) as values,
// pgdesc.description as comment
// from
// pg_type t
// inner join pg_enum e on t.oid = e.enumtypid
// inner join pg_namespace ns on t.typnamespace = ns.oid
// left outer join pg_catalog.pg_description pgdesc on t.oid = pgdesc.objoid
// group by
// ns.nspname,
// t.typname,
// pgdesc.description

");
// ");
}
}
Loading

0 comments on commit f8412e4

Please sign in to comment.