Skip to content

Instantly share code, notes, and snippets.

@rifatx
rifatx / ls-asm-ref.ps1
Created March 4, 2022 13:48
PowerShell script to list assemblies that has a reference to another assembly with given pattern
$basePath = "\\some\source\directory"
$sourceFilePattern1 = "FilePattern1.*.dll"
$sourceFilePattern2 = "FilePattern1.*.dll"
$referenceName = "ReferencePattern"
Get-ChildItem -Path $basePath -Directory |
ForEach-Object {
$path = [System.IO.Path]::Combine($basePath, $_.Name, "*")
Get-ChildItem -Path $path -Include $sourceFilePattern1, $sourceFilePattern2 |
@rifatx
rifatx / ls-ps-memory.ps1
Created March 4, 2022 13:35
List the top 20 memory consuming processes
Get-Process | Group-Object -Property ProcessName | %{ New-Object psobject -Property @{ ProcessName=$_.Name; PrivateMem=($_.Group | Measure-Object PM -Sum).Sum } } | Sort-Object -Descending -Property PrivateMem | Select-Object -First 20
@rifatx
rifatx / GetColumns.cs
Last active October 20, 2021 11:00
ANTLR PlSqlParser GetColumns
private IEnumerable<string> GetColumns(PlSqlParser.Select_statementContext ssc)
{
var sl = ssc
.select_only_statement()
.subquery()
.subquery_basic_elements()
.query_block()
.selected_list();
var slel = sl.select_list_elements();
@rifatx
rifatx / VisitOpen_for_statement.cs
Created October 20, 2021 10:47
ANTLR PlSqlParser VisitOpen_for_statement overload
public override object VisitOpen_for_statement(PlSqlParser.Open_for_statementContext context)
{
if (context.select_statement() != null)
{
Columns.AddRange(GetColumns(context.select_statement()));
}
else
{
if (context.expression()?.GetText() is var queryVar && !string.IsNullOrEmpty(queryVar) &&
_assignments.ContainsKey(queryVar))
@rifatx
rifatx / VisitAssignment_statement.cs
Last active October 20, 2021 10:41
ANTLR PlSqlParser VisitAssignment_statement override
private static readonly Regex _reFrom = new Regex(@"[\n\r\s]+FROM[\n\r\s]+");
public override object VisitAssignment_statement(PlSqlParser.Assignment_statementContext context)
{
if (context.general_element().GetText() is var varName && !_assignments.ContainsKey(varName))
{
var selectQuery = context.expression().GetText().Trim('\'').Trim();
if (selectQuery.StartsWith("SELECT", StringComparison.InvariantCultureIgnoreCase) ||
selectQuery.StartsWith("WITH", StringComparison.InvariantCultureIgnoreCase))
@rifatx
rifatx / VisitParameter.cs
Created October 20, 2021 10:26
ANTLR PlSqlParser VisitParameter override
public override object VisitParameter(PlSqlParser.ParameterContext context)
{
var p = new Parameter
{
Name = context.parameter_name().GetText(),
Direction =
$"{context.GetChild<TerminalNodeImpl>(0)?.GetText() ?? "IN"}{context.GetChild<TerminalNodeImpl>(1)?.GetText()}",
Type = context.type_spec().GetText()
};
@rifatx
rifatx / PlSqlParserUtils.cs
Last active October 20, 2021 10:34
PlSqlParser utils
internal static class Utils
{
public static PlSqlParser CreatePlSqlParser(string spContent)
{
var s = CharStreams.fromString(spContent);
var upper = new CaseChangingCharStream(s, true);
var lexer = new PlSqlLexer(upper);
var tokens = new CommonTokenStream(lexer);
@rifatx
rifatx / get-references.cs
Last active October 15, 2021 08:01
Get references of an .NET assembly
private IEnumerable<PortableExecutableReference> GetReferences(string basePath, string assemblyName)
{
List<string> refNames = new();
List<PortableExecutableReference> references = new();
Queue<AssemblyName> pending = new();
var depth = 0;
var mainAsmName = new FileInfo(assemblyName).Name;
mainAsmName = mainAsmName.Substring(0,
mainAsmName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase));

Keybase proof

I hereby claim:

  • I am rifatx on github.
  • I am rifatx (https://keybase.io/rifatx) on keybase.
  • I have a public key ASBfHhbUewoJnnBO32Gpb8LFdo1CzxdwUE3doxXfT4MaEQo

To claim this, I am signing this object:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEApHSlBYGanB/nObsWYIZXF7kcT9Sa2oATwdnNqkb+K/8P3MRLY67g1Ki1yhATpqkPhGrwie5wa60+5T2WpVAyeQ4GzxHVZ9Vjk64Wmc/2yabq4LZRnw+9uZvH2Wx5UlMkOJM2trKYZof6pdz/n044BVihZnFQfWnTYg8vKlKKtFsL0sGKz+DWBgr49fldj4qUB6Nmn5M7+4RqYAAd3af+6ljOSCv4NG2r1ZbMRcBW89569/msPcfQYcBzVXXeC5Z+7o5Svk/10pzUaT6P09Kyz8j6T8iy/T+ugsYZ4Se3l2SRtnAFsd2AJMu6kHp5vaqNOZbnJLuAvbQVp+NL/KI88GZbGNZnua1C/L2zLwarpdZw27NgOJRc4U2sNVPI9qWlXNAPPkpVmpbQvX7gem0BmQdoTgYU6nXexTzGDlSX5yCc13i+xeIJKOf0cCLRse3JLD1fxefqlr2HqlH3cx1ISl0T4Pcj+8QuWAVmAASRaR6+ij31nArIAnPmvAGFDvrfa4Tp6AYQNxmjrqyMBrO0r6NpwbHwKzEsYBoAKjuQTBeE5E+mAPpJWOF+tVZlLPuWZyI1IfPIluVgOnSJ/F1iC4MhAFVZ+bUiQl2p2cUEL2Qzajzm9CfAABIDHSj/piqkv2+8xVbkDn0qtM21q1nMbJnxu0gFqUyVZtE1Vz+VXy0=