From f032d15aa8f37fac89e4ebdefe68b278f115a2e9 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Wed, 5 Feb 2025 23:03:43 -0500 Subject: [PATCH 01/20] Updated Docs --- README.md | 1 + git_cheatsheet.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/README.md b/README.md index 43d6488..d4a3664 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@
+ # SqlQueryClass Provides functionality for executing SQL queries and managing SQL datasets diff --git a/git_cheatsheet.md b/git_cheatsheet.md index 1a226a9..557e2ca 100644 --- a/git_cheatsheet.md +++ b/git_cheatsheet.md @@ -2,6 +2,53 @@ Photography Co-worker Kevin Hecht (kevin.a.hecht@pwc.com) +# To Publish Module to PowerShell Gallery + +Publish-Module -Path -NuGetApiKey -Repository PSGallery + +Publish-Module -Path "C:\Git\SqlQueryClass\dist\SqlQueryClass" -NuGetApiKey "" -Repository PSGallery + +Find-Module -Name SqlQueryClass | Install-Module -Scope CurrentUser -AcceptLicense + +Find-Module -Name SqlQueryClass | FL + +Name : SqlQueryClass +Version : 0.1.0 +Type : Module +Description : Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result object. +Author : Brooks Vaughn +CompanyName : BrooksV +Copyright : (c) Brooks Vaughn. All rights reserved. +PublishedDate : 2/6/2025 3:43:39 AM +InstalledDate : +UpdatedDate : +LicenseUri : https://github.com/BrooksV/SqlQueryClass/blob/main/LICENSE +ProjectUri : https://github.com/BrooksV/SqlQueryClass +IconUri : +Tags : {PowerShell, Database, SQL, SQLServer…} +Includes : {[RoleCapability, System.Object[]], [DscResource, System.Object[]], [Cmdlet, System.Object[]], [Workflow, System.Object[]]…} +PowerShellGetFormatVersion : +ReleaseNotes : +Dependencies : {} +RepositorySourceLocation : https://www.powershellgallery.com/api/v2 +Repository : PSGallery +PackageManagementProvider : NuGet +AdditionalMetadata : @{summary=Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result object.; + ItemType=Module; IsPrerelease=false; PackageManagementProvider=NuGet; NormalizedVersion=0.1.0; SourceName=PSGallery; tags=PowerShell Database SQL SQLServer SQLQuery DataAdapter DataSet DataTable + PSModule; description=Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result + object.; Authors=Brooks Vaughn; versionDownloadCount=0; GUID=8375edbe-fb0f-4cb6-acb0-9964b45725c0; lastUpdated=2/6/2025 3:43:39 AM -05:00; requireLicenseAcceptance=False; downloadCount=0; + isLatestVersion=True; CompanyName=Unknown; Functions=New-SqlQueryDataSet; FileList=SqlQueryClass.nuspec|about_SqlQueryClass.help.txt|SqlQueryClass.psd1|SqlQueryClass.psm1; + PowerShellHostVersion=5.1; created=2/6/2025 3:43:39 AM -05:00; isAbsoluteLatestVersion=True; copyright=(c) Brooks Vaughn. All rights reserved.; packageSize=15464; developmentDependency=False; + updated=2025-02-06T03:43:39Z; published=2/6/2025 3:43:39 AM -05:00} + + + +# Code Signing + +Get-ChildItem -Path Cert:\CurrentUser -Recurse | FL +Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert +Get-ChildItem -Path Cert:\LocalMachine -Recurse | FL + # git config commands - ps.readinglist.md -- Quick Reference Reading list of helpful PowerShell sites, articles, and documents @@ -310,3 +357,16 @@ git push origin master --force - **Purpose**: To overwrite the remote `master` branch with your local changes, even if it results in non-fast-forward updates. - **Example**: Use with caution as it can overwrite changes in the remote repository that others may be relying on. + +# 2025-02-05 22:59:55 + +git pull origin main + +git checkout -b features/readme-updates +git status + +git commit -m "" + +git commit -a -m "Updated SQL query class and added error handling" + +git push \ No newline at end of file From b1426aa9d324331e03af3c35b06c472570320b19 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Thu, 6 Feb 2025 01:11:33 -0500 Subject: [PATCH 02/20] Fixed formatting Issues --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d4a3664..d63c29e 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,6 @@ SQLServer Property string SQLServer {get;set;} TableIndex Property int TableIndex {get;set;} TableNames Property hashtable TableNames {get;set;} Tables Property System.Collections.Generic.List`1[[SqlQueryTable, PowerShell Class Assembly, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e Tables {get;set;} - ``` ## Summary @@ -250,7 +249,7 @@ Query : SELECT * FROM INFORMATION_SCHEMA.TABLES SQLCommand : System.Data.SqlClient.SqlCommand SqlDataAdapter : ResultType : DataTable -Result : {Document, Category, Entity, DocName…} +Result : {Document, Category, Entity, DocName...} isDirty : False QueryFile : Parent : SqlQueryDataSet @@ -281,7 +280,8 @@ The the following ModuleTools CmdLets used in the build and maintenance process. - To skip a test, add `-skip` in describe block of the Pester *.test.ps1 file to skip. ### Folder and Files - + +```powershell .\SQLQUERYCLASS │ .gitignore │ GitHub_Action_Docs.md @@ -315,6 +315,7 @@ The the following ModuleTools CmdLets used in the build and maintenance process. Module.Tests.ps1 OutputFiles.Tests.ps1 ScriptAnalyzer.Tests.ps1 +``` All files and folders in the `src` folder, will be published Module. From 1a2b6b88b778f749ae9c361ccaa4ddad53c89f83 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Thu, 6 Feb 2025 01:27:05 -0500 Subject: [PATCH 03/20] Fixed formatting Issues --- git_cheatsheet.md | 107 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 80 insertions(+), 27 deletions(-) diff --git a/git_cheatsheet.md b/git_cheatsheet.md index 557e2ca..2035ac7 100644 --- a/git_cheatsheet.md +++ b/git_cheatsheet.md @@ -1,9 +1,12 @@ +# CheetSheet + & "C:\Program Files (x86)\Info Keep\info keep.exe" -Photography Co-worker Kevin Hecht (kevin.a.hecht@pwc.com) +Photography Co-worker [Kevin Hecht](mailto://kevin.a.hecht@pwc.com) -# To Publish Module to PowerShell Gallery +## To Publish Module to PowerShell Gallery +```powershell Publish-Module -Path -NuGetApiKey -Repository PSGallery Publish-Module -Path "C:\Git\SqlQueryClass\dist\SqlQueryClass" -NuGetApiKey "" -Repository PSGallery @@ -40,16 +43,15 @@ AdditionalMetadata : @{summary=Module that create an instance of a Power isLatestVersion=True; CompanyName=Unknown; Functions=New-SqlQueryDataSet; FileList=SqlQueryClass.nuspec|about_SqlQueryClass.help.txt|SqlQueryClass.psd1|SqlQueryClass.psm1; PowerShellHostVersion=5.1; created=2/6/2025 3:43:39 AM -05:00; isAbsoluteLatestVersion=True; copyright=(c) Brooks Vaughn. All rights reserved.; packageSize=15464; developmentDependency=False; updated=2025-02-06T03:43:39Z; published=2/6/2025 3:43:39 AM -05:00} +``` - - -# Code Signing +## Code Signing Get-ChildItem -Path Cert:\CurrentUser -Recurse | FL Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert Get-ChildItem -Path Cert:\LocalMachine -Recurse | FL -# git config commands +## git config commands - ps.readinglist.md -- Quick Reference Reading list of helpful PowerShell sites, articles, and documents @@ -57,7 +59,7 @@ Get-ChildItem -Path Cert:\LocalMachine -Recurse | FL git config --system core.longpaths true -### git remote urls +#### git remote urls git remote -v @@ -65,10 +67,13 @@ git remote -v ### To Set your username +```powershell git config --global user.name "FIRST_NAME LAST_NAME" +``` ### To Set your email address +```powershell git config --global user.email "MY_NAME@example.com" git config --global user.name "Brooks Vaughn" @@ -76,6 +81,7 @@ git config --global user.email "18422308+BrooksV@users.noreply.github.com" git config --worktree user.name "Brooks Vaughn" git config --global user.email "18422308+BrooksV@users.noreply.github.com" +``` ### Check configuration for your user @@ -85,23 +91,31 @@ $ cat $HOME/.gitconfig ### Get system value +```powershell git config --system --get https.proxy git config --system --get http.proxy +``` ### Get global value +```powershell git config --global --get https.proxy git config --global --get http.proxy +``` ### Unset system value -$ git config --system --unset https.proxy -$ git config --system --unset http.proxy +```powershell +git config --system --unset https.proxy +git config --system --unset http.proxy +``` ### Unset global value -$ git config --global --unset https.proxy -$ git config --global --unset http.proxy +```powershell +git config --global --unset https.proxy +git config --global --unset http.proxy +``` ## Proxy Config using Environment Variables @@ -109,30 +123,39 @@ Your proxy could also be set as an environment variable. Check if your environme ### Linux +```bash export http_proxy=http://proxy:8080 export https_proxy=https://proxy:8443 +``` ### Windows +```powershell set http_proxy http://proxy:8080 set https_proxy https://proxy:8443 +``` ## SSL Config +```powershell git config --global http.sslVerify git config --global http.sslVerify true +``` ### Repro Clone SSL Errors +```powershell SSL_VERIFY=false git config --global http.sslVerify false +``` My agents are running as Network Service too but that wasn't really a problem to use user level config. Here is what I did: 1.Save all the necessary certificates in folder %systemroot%\ServiceProfiles\NetworkService\.gitcerts\. 2.Create a file at %systemroot%\ServiceProfiles\NetworkService\.gitconfig with the following content: [http "https://tfs.com/"](http "https://tfs.com/") - sslCAInfo = ~/.gitcerts/certificate.pem + +$sslCAInfo = ~/.gitcerts/certificate.pem [adding-a-corporate-or-self-signed-certificate-authority-to-git-exes-store](https://blogs.msdn.microsoft.com/phkelley/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exes-store/) @@ -141,7 +164,7 @@ git config --global http.sslBackend schannel [how-to-make-git-work-with-self-signed-ssl-certificates-on-tfs2018](https://www.benday.com/2017/12/15/how-to-make-git-work-with-self-signed-ssl-certificates-on-tfs2018/) [fix-git-self-signed-certificate-in-certificate-chain-on-windows](https://mattferderer.com/fix-git-self-signed-certificate-in-certificate-chain-on-windows) -# Git Repo and Branch Commands +## Git Repo and Branch Commands ### Reset Local Master @@ -158,22 +181,24 @@ git checkout main git reset --hard origin/main git pull origin main -If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. +If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. +```powershell Example: git switch -c Or undo this operation with: - git switch - + git switch -? +``` ## Status and Info Commands +```powershell git status git log git branch --all git branch features/ - git fetch origin git fetch origin master git checkout master @@ -184,76 +209,88 @@ git status git log git push - git pull git branch -a +``` ## To Create Branch from Master +```powershell git fetch origin master git checkout master git pull origin master git checkout -b features/??? git push --set-upstream origin features/??? git checkout features/??? +``` ### Create local branch +```powershell git checkout -b features/ git status git add foo.txt git commit -m "" -git commit -a -m "" # ? +git commit -a -m "" ## ? git push +``` ### Create Branch on origin (UpStream) to Repository +```powershell git push --set-upstream origin features/ +``` ### To sync local master +```powershell git checkout master git pull git checkout features/readme-updates git merge master ???? +``` -# Notes +## Notes Origin is the plcae where the branch was cloned from +```powershell git remote add git add -p git log --online npm config set strict-ssl false +``` +## Git Merging commands -# Git Merging commands - +```powershell git merge branch master git status git log git push - git config --get --local core.filemode false git config --local --list +``` ## Commits +```powershell git add yaml\???.yml git commit -m "???" -git commit -a -m "" # ? +git commit -a -m "" ## ? git push git merge --abort git branch -a --sort=-committerdate --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))' (git reflog > reflog.md) | Invoke-Item git reflog | Select-String +``` -### Explanation of what each of those Git commands do +## Explanation of what each of those Git commands do ### `git add yaml???.yml` @@ -307,12 +344,14 @@ These commands cover a range of Git operations, from staging and committing chan ## Git Command docs +```powershell git remote add upstream git fetch upstream git rebase upstream/master git push origin master --force +``` -### Explanation of what each of those Git commands does: +## Explanation of what each of those Git commands does ### `git remote add upstream` @@ -358,8 +397,9 @@ git push origin master --force - **Purpose**: To overwrite the remote `master` branch with your local changes, even if it results in non-fast-forward updates. - **Example**: Use with caution as it can overwrite changes in the remote repository that others may be relying on. -# 2025-02-05 22:59:55 +## 2025-02-05 22:59:55 +```powershell git pull origin main git checkout -b features/readme-updates @@ -369,4 +409,17 @@ git commit -m "" git commit -a -m "Updated SQL query class and added error handling" -git push \ No newline at end of file +git push +``` + +```powershell +``` + +```powershell +``` + +```powershell +``` + +```powershell +``` From 7c81a466ae4d7f7da52b0c9253f1a80f7373f7b6 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Fri, 7 Feb 2025 01:23:06 -0500 Subject: [PATCH 04/20] Removed ExecuteAsSqlReader, added ExecuteAsDataRows --- README.md | 11 +- project.json | 2 +- src/private/SqlQueryClass.ps1 | 289 ++++++++-------------------------- 3 files changed, 78 insertions(+), 224 deletions(-) diff --git a/README.md b/README.md index d63c29e..6ae7264 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

SqlQueryClass

-

Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result object.

+

Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, DataRows, or NonQuery result object.


@@ -79,7 +79,7 @@ Execute Method System.Object Execute(), System.Object Exe ExecuteAsDataAdapter Method System.Object ExecuteAsDataAdapter(string SqlQuery) ExecuteAsDataSet Method System.Object ExecuteAsDataSet(string SqlQuery) ExecuteAsDataTable Method System.Object ExecuteAsDataTable(string SqlQuery) -ExecuteAsSqlReader Method System.Object ExecuteAsSqlReader(string SqlQuery) +ExecuteAsDataRows Method System.Object ExecuteAsDataRows(string SqlQuery) ExecuteNonQuery Method System.Object ExecuteNonQuery(string SqlQuery) ExecuteQuery Method System.Object ExecuteQuery(string SqlQuery), System.Object ExecuteQuery(string TableName, string SqlQuery) GetCreateBasicDLL Method System.Object GetCreateBasicDLL(string TableName) @@ -123,7 +123,6 @@ class SqlQueryDataSet { [int]$CommandTimeout = 600 [string]$ConnectionString [object]$SQLConnection - hidden [object]$SQLReader [int]$TableIndex = 0 [System.Collections.Generic.List[SqlQueryTable]]$Tables [System.Collections.Hashtable]$TableNames = @{} @@ -163,7 +162,11 @@ class SqlQueryTable { } ``` -The ResultsType property defines how the query will be executed and the DataType for the result. ResultType values are: DataTable; DataAdapter; DataSet; SqlReader; and NonQuery. +The ResultsType property defines how the query will be executed and the DataType for the result. ResultType values are: DataTable; DataAdapter; DataSet; DataRows; and NonQuery. + +ResultType of DataTable and DataRows use the [System.Data.SqlClient.SqlDataReader] approach to load() a DataTable object and return [SqlQueryTable]$table.Result as [System.Data.DataTable] or [Array][System.Data.DataRow] + +ResultType of DataAdapter and DataSet returns [SqlQueryTable]$table.Result as [System.Data.DataSet] and retains the SqlDataAdapter used in [SqlQueryTable]$table.SqlDataAdapter ### New-SqlQueryDataSet Examples diff --git a/project.json b/project.json index d496839..ca8fa4d 100644 --- a/project.json +++ b/project.json @@ -1,7 +1,7 @@ { "ProjectName": "SqlQueryClass", "Description": "Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result object.", - "Version": "0.1.0", + "Version": "0.1.1", "Manifest": { "Author": "Brooks Vaughn", "PowerShellHostVersion": "5.1", diff --git a/src/private/SqlQueryClass.ps1 b/src/private/SqlQueryClass.ps1 index c6be761..467ccf3 100644 --- a/src/private/SqlQueryClass.ps1 +++ b/src/private/SqlQueryClass.ps1 @@ -5,7 +5,7 @@ SqlQueryClass.ps1 -- Dot Source file of SQL Query Class definitions for classes [SqlQueryDataSet] and [SqlQueryTable] .DESCRIPTION - This script defines two PowerShell classes [SqlQueryDataSet] and [SqlQueryTable] which are used to execute SQL Queries and return the results in a DataTable, DataAdapter, DataSet, SqlReader or NonQuery. + This script defines two PowerShell classes [SqlQueryDataSet] and [SqlQueryTable] which are used to execute SQL Queries and return the results in a DataTable, DataAdapter, DataSet, DataRows ([Array]DataRow) or NonQuery. The parent class, [SqlQueryDataSet], is designed to manage SQL Server connections, execute queries, and methods to manage data. The child class, [SqlQueryTable], is designed to manage a table SQL query's configuration and query results. @@ -44,7 +44,7 @@ A Query can be added to the [SqlQueryDataSet] object in the following ways: $TestQuery.ExecuteAsDataTable($Query) $TestQuery.ExecuteAsDataAdapter($Query) $TestQuery.ExecuteAsDataSet($Query) - $TestQuery.ExecuteAsSqlReader($Query) + $TestQuery.ExecuteAsDataRows($Query) $TestQuery.AddQuery($Query) $TestQuery.LoadQueryFromFile($PathToSQLFile) @@ -95,7 +95,7 @@ Helper Methods $TestQuery.BuildOleDbConnectionString() -- Builds a connection string for OleDb $TestQuery.BuildConnectionString() -- [Hidden] Builds a connection string for SqlClient used as a fallback when $TestQuery.ConnectionString is missing or fails $TestQuery.Clear() -- Closes the connection and clears all the properties and collections of the [SqlQueryDataSet] object -$TestQuery.CloseConnection() -- Closes the SQL Connection and clears the SQLReader +$TestQuery.CloseConnection() -- Closes the SQL Connection $TestQuery.GetCreateBasicDLL($TableName) -- Returns a DataTable with the basic structure of a table with the following columns: Id, CreatedOn, CreatedBy, UpdatedOn, UpdatedBy $TestQuery $TestQuery @@ -113,7 +113,7 @@ Execute Method System.Object Execute(), System.Object Exe ExecuteAsDataAdapter Method System.Object ExecuteAsDataAdapter(string SqlQuery) ExecuteAsDataSet Method System.Object ExecuteAsDataSet(string SqlQuery) ExecuteAsDataTable Method System.Object ExecuteAsDataTable(string SqlQuery) -ExecuteAsSqlReader Method System.Object ExecuteAsSqlReader(string SqlQuery) +ExecuteAsDataRows Method System.Object ExecuteAsDataRows(string SqlQuery) ExecuteNonQuery Method System.Object ExecuteNonQuery(string SqlQuery) ExecuteQuery Method System.Object ExecuteQuery(string SqlQuery), System.Object ExecuteQuery(string TableName, string SqlQuery) GetCreateBasicDLL Method System.Object GetCreateBasicDLL(string TableName) @@ -219,7 +219,6 @@ $ConnectionString = "Data Source={0};AttachDbFilename={1};Integrated Security=Tr # Create a new instance of SqlQueryDataSet $TestQuery = New-SqlQueryDataSet -SQLServer $SqlServer -Database $DatabaseName -ConnectionString $ConnectionString -DisplayResults $true - # There are at least 12 different overloaded Execute methods used execute queries and return results as different object types. # Example usage of the class @@ -232,6 +231,13 @@ $TestQuery.Tables[0].Result $TestQuery.Tables[0].Query = "SELECT * FROM INFORMATION_SCHEMA.TABLES" $TestQuery.Execute($TestQuery.Tables[0]) +$TestQuery = New-SqlQueryDataSet -SQLServer $SqlServer -Database $DatabaseName -ConnectionString $ConnectionString -DisplayResults $true -TableName 'Category' -Query 'SELECT * FROM [dbo].Category;' +$TestQuery = New-SqlQueryDataSet -SQLServer $SqlServer -Database $DatabaseName -ConnectionString $ConnectionString -DisplayResults $false +$TestQuery.ExecuteQuery('Category', 'SELECT * FROM [dbo].Category;') +$TestQuery.Tables[0].Result[0] +$TestQuery.DisplayResults = $false +$TestQuery.Execute($TestQuery.Tables[0]) + .NOTES C:\Git\SqlQueryEditor> $TestQuery = [SqlQueryDataSet]::new() PS C:\Git\SqlQueryEditor> $TestQuery | GM @@ -249,7 +255,7 @@ Execute Method System.Object Execute(), System.Object Exe ExecuteAsDataAdapter Method System.Object ExecuteAsDataAdapter(string SqlQuery) ExecuteAsDataSet Method System.Object ExecuteAsDataSet(string SqlQuery) ExecuteAsDataTable Method System.Object ExecuteAsDataTable(string SqlQuery) -ExecuteAsSqlReader Method System.Object ExecuteAsSqlReader(string SqlQuery) +ExecuteAsDataRows Method System.Object ExecuteAsDataRows(string SqlQuery) ExecuteNonQuery Method System.Object ExecuteNonQuery(string SqlQuery) ExecuteQuery Method System.Object ExecuteQuery(string SqlQuery), System.Object ExecuteQuery(string TableName, string SqlQuery) GetCreateBasicDLL Method System.Object GetCreateBasicDLL(string TableName) @@ -309,7 +315,7 @@ TableName Property string TableName {get;set;} #> -enum ResultType { DataTable; DataAdapter; DataSet; SqlReader; NonQuery; } +enum ResultType { DataTable; DataRows; DataAdapter; DataSet; NonQuery; } class SqlQueryTable { [int]$TableIndex = 0 @@ -333,23 +339,14 @@ class SqlQueryTable { class SqlQueryDataSet { [string]$SQLServer [string]$Database - # [string]$Query - # [string]$QueryFile - # [string]$Path [int]$ConnectionTimeout = 5 [int]$CommandTimeout = 600 # Connection string keywords: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspx [string]$ConnectionString [object]$SQLConnection - # [object]$SQLCommand - # [object]$SqlDataAdapter - hidden [object]$SQLReader - # [object]$Result - # [ResultType]$Resulttype = [ResultType]::DataSet [int]$TableIndex = 0 [System.Collections.Generic.List[SqlQueryTable]]$Tables [System.Collections.Hashtable]$TableNames = @{} - # [System.Data.DataTable]$Views [bool]$DisplayResults = $True [bool]$KeepAlive = $False @@ -517,11 +514,6 @@ class SqlQueryDataSet { # Method [void] CloseConnection() { - If ($This.SQLReader -and -not $This.SQLReader.IsClosed) { - $This.SQLReader.Close() - $This.SQLReader.Dispose() - $This.SQLReader = $null - } If ($This.SQLConnection) { $This.SQLConnection.Close() $This.SQLConnection.Dispose() @@ -529,26 +521,27 @@ class SqlQueryDataSet { } } + # Method + [System.Data.SqlClient.SqlCommand] GetSqlCommand([string]$query) { + $This.OpenConnection() + $SQLCommand = $This.SQLConnection.CreateCommand() + $SQLCommand.CommandText = $query + $SQLCommand.CommandTimeout = $This.CommandTimeout + $SQLCommand.Connection = $This.SQLConnection + Return $SQLCommand + } + [void] Clear() { $This.CloseConnection() $This.SQLServer = $null $This.Database = $null - # $This.Query = $null - # $This.QueryFile = $null - # $This.Path = $null $This.ConnectionTimeout = 5 $This.CommandTimeout = 600 $This.ConnectionString = $null $This.SQLConnection = $null - # $This.SQLCommand = $null - # $This.SqlDataAdapter = $null - $This.SQLReader = $null - # $This.ResultType = [ResultType]::DataTable $This.TableIndex = 0 - # $This.Result = $null $This.Tables.Clear() $This.TableNames.Clear() - # $This.Views = $null $This.DisplayResults = $True $This.KeepAlive = $False } @@ -560,76 +553,69 @@ class SqlQueryDataSet { } # Method [Object] Execute([SqlQueryTable]$table) { - $This.OpenConnection() + $SQLReader = $null + $table.SQLCommand = GetSqlCommand($table.Query) Try { - $table.SQLCommand = $This.SQLConnection.CreateCommand() - $table.SQLCommand.CommandText = $table.Query - $table.SQLCommand.CommandTimeout = $This.CommandTimeout - $table.SQLCommand.Connection = $This.SQLConnection - If ($table.ResultType -eq [ResultType]::DataTable) { - $This.SQLReader = $table.SQLCommand.ExecuteReader() - If ($This.SQLReader) { + If ($table.ResultType -in @([ResultType]::DataTable, [ResultType]::DataRows)) { + $SQLReader = $table.SQLCommand.ExecuteReader() + If ($SQLReader) { $table.Result = [System.Data.DataTable]::new() - $table.Result.Load($This.SQLReader) + $table.Result.Load($SQLReader) If ($This.DisplayResults) { - Return $table.Result.Tables[0] + If ($table.ResultType -eq [ResultType]::DataTable) { + Return ,$table.Result + } Else { + Return $table.Result + } } } } ElseIf ($table.ResultType -eq [ResultType]::DataAdapter) { - $table.SqlDataAdapter = [System.Data.SqlClient.SqlDataAdapter]::new($table.SQLCommand) - $SqlCommandBuilder = [System.Data.SqlClient.SqlCommandBuilder]::new($table.SqlDataAdapter) - $SqlCommandBuilder.DataAdapter = $table.SqlDataAdapter - $table.Result = [System.Data.DataSet]::new() + $table.SqlDataAdapter = [System.Data.SqlClient.SqlDataAdapter]::new($table.SQLCommand) [void]$table.SqlDataAdapter.Fill($table.Result) - $SqlCommandBuilder.DataAdapter = $table.SqlDataAdapter - $SqlCommandBuilder.QuotePrefix = "[" - $SqlCommandBuilder.QuoteSuffix = "]" - Try { $table.SqlDataAdapter.DeleteCommand = $SqlCommandBuilder.GetDeleteCommand() - } Catch { - Write-Warning "Failed to get DeleteCommand: $_" - } + # $SqlCommandBuilder = [System.Data.SqlClient.SqlCommandBuilder]::new($table.SqlDataAdapter) + # $SqlCommandBuilder.DataAdapter = $table.SqlDataAdapter + # $SqlCommandBuilder.QuotePrefix = "[" + # $SqlCommandBuilder.QuoteSuffix = "]" + # Try { $table.SqlDataAdapter.DeleteCommand = $SqlCommandBuilder.GetDeleteCommand() + # } Catch { + # Write-Warning "Failed to get DeleteCommand: $_" + # } + # Try { $table.SqlDataAdapter.UpdateCommand = $SqlCommandBuilder.GetUpdateCommand() + # } Catch { + # Write-Warning "Failed to get UpdateCommand: $_" + # } + # Try { $table.SqlDataAdapter.InsertCommand = $SqlCommandBuilder.GetInsertCommand() + # } Catch { + # Write-Warning "Failed to get InsertCommand: $_" + # } - Try { $table.SqlDataAdapter.UpdateCommand = $SqlCommandBuilder.GetUpdateCommand() - } Catch { - #Write-Warning "Failed to get UpdateCommand: $_" - } - - Try { $table.SqlDataAdapter.InsertCommand = $SqlCommandBuilder.GetInsertCommand() - } Catch { - Write-Warning "Failed to get InsertCommand: $_" - } If ($This.DisplayResults) { Return $table.Result.Tables[0] } } ElseIf ($table.ResultType -eq [ResultType]::DataSet) { - $table.SqlDataAdapter = [System.Data.SqlClient.SqlDataAdapter]::new($table.SQLCommand) $table.Result = [System.Data.DataSet]::new() + $table.SqlDataAdapter = [System.Data.SqlClient.SqlDataAdapter]::new($table.SQLCommand) [void]$table.SqlDataAdapter.Fill($table.Result) If ($This.DisplayResults) { Return $table.Result.Tables[0] } - } ElseIf ($table.ResultType -eq [ResultType]::SqlReader) { - $This.SQLReader = $table.SQLCommand.ExecuteReader() - If ($This.SQLReader) { - $this.KeepAlive = $true - $table.Result = $This.SQLReader - If ($This.DisplayResults) { - Return $table.Result - } - } } ElseIf ($table.ResultType -eq [ResultType]::NonQuery) { $table.Result = $table.SQLCommand.ExecuteNonQuery() Return $table.Result } } Catch { $This.SQLConnection.Close() - return $(Write-host ($_ | Out-String) -ForegroundColor Red) + Return $(Write-host ($_ | Out-String) -ForegroundColor Red) } Finally { If (-not $this.KeepAlive) { $This.CloseConnection() } + If ($SQLReader -and -not $SQLReader.IsClosed) { + $SQLReader.Close() + $SQLReader.Dispose() + } } Return $null } @@ -720,12 +706,12 @@ class SqlQueryDataSet { } # Method - [Object] ExecuteAsSqlReader([String]$SqlQuery) { + [Object] ExecuteAsDataRows([String]$SqlQuery) { If ($SqlQuery) { $This.TableIndex = $This.AddQuery($SqlQuery) } $table = $This.Tables[$This.TableIndex] - $table.ResultType = [ResultType]::SqlReader + $table.ResultType = [ResultType]::DataRows Return ($This.Execute($table)) } @@ -754,6 +740,17 @@ class SqlQueryDataSet { # ForEach ($row in $dataView) {Write-Host ($row | FT -AutoSize | Out-String).Trim()} # Write-Host ($dataView | FT -AutoSize | Out-String).Trim() + $commandBuilder = [System.Data.SqlClient.SqlCommandBuilder]::new($table.SqlDataAdapter) + $table.SqlDataAdapter.UpdateCommand = $commandBuilder.GetUpdateCommand() + $table.SqlDataAdapter.InsertCommand = $commandBuilder.GetInsertCommand() + $table.SqlDataAdapter.DeleteCommand = $commandBuilder.GetDeleteCommand() + + If ($table.ResultType -in @([ResultType]::DataAdapter,[ResultType]::DataSet)) { + $table.SqlDataAdapter.Update($table.Result.Tables[0]) + } ElseIf ($table.ResultType -eq [ResultType]::DataTable) { + $table.SqlDataAdapter.Update($table.Result) + } + If (-not [String]::IsNullOrEmpty($table.SqlDataAdapter.DeleteCommand)) { $table.SqlDataAdapter.DeleteCommand.Connection = $This.SQLConnection } @@ -921,149 +918,3 @@ class SqlQueryDataSet { } } - -<# -$query = "SELECT * FROM [dbo].[Category] ORDER BY Category" -$query -match '^.*FROM[ \n\r]+(?\w+)[. \n\r]+(\w+)[ \n\r]+(?\w+)$' -$Matches - -$query -match '^.*?(FROM|INTO|JOIN)\s`?(?[^` ]*).*$' -$Matches - -$query -match "\bJOIN\s+(?[a-zA-Z\._\d\[\]]+)\b|\bFROM\s+(?[a-zA-Z\._\d\[\]]+)\b|\bUPDATE\s+(?[a-zA-Z\._\d]+)\b|\bINSERT\s+(?:\bINTO\b)?\s+(?[a-zA-Z\._\d]+)\b|\bTRUNCATE\s+TABLE\s+(?[a-zA-Z\._\d]+)\b|\bDELETE\s+(?:\bFROM\b)?\s+(?[a-zA-Z\._\d]+)\b" -$Matches - -# $query -match '[\s\t]*FROM[\s\t\r\n]([A-Za-z0-9_.]+)[\s\t\r\n]*([A-Za-z0-9_.\[\]]*)[\s\t\r\n]*' - -$query = "SELECT * FROM [dbo].[Category] ORDER BY Category" -$query -match '[\s\t]*FROM[\s\t\r\n](?[A-Za-z0-9_.\[\]]+).*$' -$Matches - - -$query = "SELECT * -FROM [dbo].[Category] -ORDER BY Category" - -$query -match "\bJOIN\s+(?[a-zA-Z\._\d\[\]]+)\b|\bFROM\s+(?[a-zA-Z\._\d\[\]]+)\b|\bUPDATE\s+(?[a-zA-Z\._\d]+)\b|\bINSERT\s+(?:\bINTO\b)?\s+(?[a-zA-Z\._\d]+)\b|\bTRUNCATE\s+TABLE\s+(?[a-zA-Z\._\d]+)\b|\bDELETE\s+(?:\bFROM\b)?\s+(?[a-zA-Z\._\d]+)\b" -$Matches - - -$query -match '^.*?(FROM|INTO|JOIN)\s`?(?[^` ]*).*$' -$Matches - -[ \n\r]+ - -$query = "SELECT * -FROM [dbo].[Category] -ORDER BY Category" - -$query -match '(?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_. \[\] ]+).*$' -$Matches - -$query = "SELECT * -FROM [dbo].[Category] -ORDER BY Category" -$query -match '([\s\t]*FROM[\s\t\r\n](?[A-Za-z0-9_.\[\]]+).*$)|((?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_. \[\] ]+).*$)' -$Matches - -$query = "SELECT * FROM [dbo].[Category] ORDER BY Category" -$query -match '([\s\t]*FROM[\s\t\r\n](?[A-Za-z0-9_.\[\]]+).*$)|((?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_. \[\] ]+).*$)' -$Matches - -$query = "SELECT * FROM dbo.Category ORDER BY Category" -$query -match '([\s\t]*FROM[\s\t\r\n](?[A-Za-z0-9_.\[\]]+).*$)|((?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_. \[\] ]+).*$)' -$Matches - -$query = "SELECT * FROM Category ORDER BY Category" -$query -match '([\s\t]*FROM[\s\t\r\n](?[A-Za-z0-9_.\[\]]+).*$)|((?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_. \[\] ]+).*$)' -$Matches - -$schemaTable = $Matches.schemaTable -$schemaTable -match '(?: \[(?[^ \[\] ]+)\] \.)?(?: \[?(?[^ \[\] \.]+)\] ?)$' -$schemaTable -match '(?i)\bFROM\s+((? \[?[A-Za-z0-9_]+\] ?)\.)?(? \[?[A-Za-z0-9_]+\] ?)' - -$schemaTable = '[dbo].[Category]' -# $schemaTable -match '[\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$' -$schemaTable -match '([\[]?(?[A-Za-z0-9_]+)[\.\[\] ]?$)|([\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$)' -$Matches - -$schemaTable = 'dbo.[Category]' -# $schemaTable -match '[\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$' -$schemaTable -match '([\[]?(?[A-Za-z0-9_]+)[\.\[\] ]?$)|([\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$)' -$Matches - -$schemaTable = 'dbo.Category' -# $schemaTable -match '[\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$' -$schemaTable -match '([\[]?(?[A-Za-z0-9_]+)[\.\[\] ]?$)|([\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$)' -$Matches - -$schemaTable = '[Category]' -$schemaTable -match '([\[]?(?[A-Za-z0-9_]+)[\.\[\] ]?$)|([\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$)' -$Matches - -$schemaTable = 'Category' -$schemaTable -match '([\[]?(?[A-Za-z0-9_]+)[\.\[\] ]?$)|([\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$)' -$Matches - -$pattern = '([\[]?(?[A-Za-z0-9_]+)[\.\[\] ]?$)|([\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$)' -$schemaTable = '[dbo].[Category]' -$schemaTable -match $pattern -$Matches -$schemaTable = 'dbo.[Category]' -$schemaTable -match $pattern -$Matches -$schemaTable = '[dbo].Category' -$schemaTable -match $pattern -$Matches -$schemaTable = 'dbo.Category' -$schemaTable -match $pattern -$Matches -$schemaTable = '[Category]' -$schemaTable -match $pattern -$Matches -$schemaTable = 'Category' -$schemaTable -match $pattern -$Matches - -$pattern = '([\[]?(?[A-Za-z0-9_]+)[\.\[\] ]?$)|([\[]?(?[A-Za-z0-9_]+)[\.\[\]]*(?[A-Za-z0-9_]+)[\.\[\] ]?$)' -$schemaTableFormats = @('[dbo].[Category]', 'dbo.[Category]', '[dbo].Category', 'dbo.Category', '[Category]', 'Category') -foreach ($schemaTable in $schemaTableFormats) { - if ($schemaTable -match $pattern) { - Write-Output "Match found for: $schemaTable" - Write-Output "Schema: $($Matches['schema'])" - Write-Output "Table Name: $($Matches['tableName'])" - } else { - Write-Output "No match found for: $schemaTable" - } -} - -#> -<# # > -$SqlQueries = @( -"SELECT TABLE_NAME `"Name`" FROM [F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF].INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT LIKE '[_]%' ORDER BY TABLE_TYPE, TABLE_NAME;" -'SELECT * FROM [F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF].[dbo].[Document] ORDER BY Id DESC;', -'SELECT * FROM [F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF].[dbo].Document ORDER BY Id DESC;', -'SELECT * FROM [F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF].dbo.Document ORDER BY Id DESC;', -'SELECT * FROM [F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF].dbo.[Document] ORDER BY Id DESC;', -'SELECT * FROM F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF.[dbo].[Document] ORDER BY Id DESC;', -'SELECT * FROM F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF.dbo.[Document] ORDER BY Id DESC;', -'SELECT * FROM F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF.dbo.Document ORDER BY Id DESC;', -'SELECT * FROM [dbo].[Document] ORDER BY Id DESC;', -'SELECT * FROM [dbo].Document ORDER BY Id DESC;', -'SELECT * FROM dbo.Document ORDER BY Id DESC;', -'SELECT * FROM dbo.[Document] ORDER BY Id DESC;' -) -foreach ($SqlQuery in $SqlQueries) { - If ($SqlQuery -like '*\*' -and $SqlQuery -like '*.MDF*') { - # $pattern = '([\s\t]*FROM[\s\t\r\n](?[A-Za-z0-9_\[\]]+)[.]{1}(?[A-Za-z0-9_.\[\]]+).*$)|((?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_\[\]]+)[.]{1}(?[A-Za-z0-9_. \[\] ]+).*$)' - $pattern = '([\s\t]*FROM[\s\t\r\n](?[\[]?[A-Za-z0-9_\:\\]+[\.MDF]{4}[\]]?)[.]{1}(?[A-Za-z0-9_.\[\]]+).*$)' - # ((?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_\[\]]+)[.]{1}(?[A-Za-z0-9_. \[\] ]+).*$)' - } Else { - $pattern = '([\s\t]*FROM[\s\t\r\n](?[A-Za-z0-9_.\[\]]+).*$)|((?s)[\s\t]*FROM[\s\t\r\n]+(?[A-Za-z0-9_. \[\] ]+).*$)' - } - Write-Host $SqlQuery -ForegroundColor Green - if ($SqlQuery -match $pattern) { - $Matches - } -} -#> From db1637423d1a027c797c2471724a709fbe68ae20 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Fri, 7 Feb 2025 01:41:59 -0500 Subject: [PATCH 05/20] Missing $This.GetSqlCommand --- src/private/SqlQueryClass.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/private/SqlQueryClass.ps1 b/src/private/SqlQueryClass.ps1 index 467ccf3..0ccdce5 100644 --- a/src/private/SqlQueryClass.ps1 +++ b/src/private/SqlQueryClass.ps1 @@ -554,7 +554,7 @@ class SqlQueryDataSet { # Method [Object] Execute([SqlQueryTable]$table) { $SQLReader = $null - $table.SQLCommand = GetSqlCommand($table.Query) + $table.SQLCommand = $This.GetSqlCommand($table.Query) Try { If ($table.ResultType -in @([ResultType]::DataTable, [ResultType]::DataRows)) { $SQLReader = $table.SQLCommand.ExecuteReader() From 6c3f508ce1d5b94cd9c00a397c76291cb1d1f357 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Fri, 7 Feb 2025 02:28:30 -0500 Subject: [PATCH 06/20] Added [void]$instance.AddQuery() --- src/public/New-SqlQueryDataSet.ps1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/public/New-SqlQueryDataSet.ps1 b/src/public/New-SqlQueryDataSet.ps1 index d69f603..9643fcc 100644 --- a/src/public/New-SqlQueryDataSet.ps1 +++ b/src/public/New-SqlQueryDataSet.ps1 @@ -52,9 +52,9 @@ function New-SqlQueryDataSet { } else { $instance = [SqlQueryDataSet]::new($SQLServer, $Database) if ([string]::IsNullOrEmpty($TableName)) { - $instance.AddQuery($Query) + [void]$instance.AddQuery($Query) } else { - $instance.AddQuery($Query, $TableName) + [void]$instance.AddQuery($Query, $TableName) } $instance } @@ -64,9 +64,9 @@ function New-SqlQueryDataSet { if (-not [string]::IsNullOrEmpty($Database)) { $instance.Database = $Database } if ($Query) { if ([string]::IsNullOrEmpty($TableName)) { - $instance.AddQuery($Query) + [void]$instance.AddQuery($Query) } else { - $instance.AddQuery($Query, $TableName) + [void]$instance.AddQuery($Query, $TableName) } } $instance From 728786440d97a00f2cafcd57a1ae09d0bad5bfb3 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Fri, 7 Feb 2025 11:03:20 -0500 Subject: [PATCH 07/20] Added ParameterSetName --- src/private/SqlQueryClass.ps1 | 2 +- src/public/New-SqlQueryDataSet.ps1 | 48 +++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/private/SqlQueryClass.ps1 b/src/private/SqlQueryClass.ps1 index 0ccdce5..c6947ed 100644 --- a/src/private/SqlQueryClass.ps1 +++ b/src/private/SqlQueryClass.ps1 @@ -323,7 +323,7 @@ class SqlQueryTable { [string]$Query = [string]::Empty [object]$SQLCommand = $null [object]$SqlDataAdapter = $null - [ResultType]$ResultType = [ResultType]::NonQuery + [ResultType]$ResultType = [ResultType]::DataTable [object]$Result = $null [bool]$isDirty = $false [string]$QueryFile = [string]::Empty diff --git a/src/public/New-SqlQueryDataSet.ps1 b/src/public/New-SqlQueryDataSet.ps1 index 9643fcc..0321540 100644 --- a/src/public/New-SqlQueryDataSet.ps1 +++ b/src/public/New-SqlQueryDataSet.ps1 @@ -1,25 +1,31 @@ <# .SYNOPSIS - Creates and returns an Object instance of the [SqlQueryDataSet] class configured with or without the specified parameters. + New-SqlQueryDataSet -- Creates and returns an Object instance of the [SqlQueryDataSet] class configured with or without the specified parameters. .DESCRIPTION - This function initializes a new instance of the [SqlQueryDataSet] class based on the provided SQL Server, - Database, ConnectionString, Query, and TableName. + This function initializes a new instance of the [SqlQueryDataSet] class and the resulting object is configured is based which parameters were specified. + + All parameters are optional as the can be configured later using the [SqlQueryDataSet]$object returned when calling $object = New-SqlQueryDataSet + When using $SQLServer and $Database, both must be specified together. The [SqlQueryDataSet] class will auto generate a SQL ConnectionString. + Specifying $ConnectionString overrides auto generation even when $SQLServer and $Database are also specified. + Based on which parameters are passed, this CmdLet will use one of the overloaded class constructors and configure instance settings with the other parameters: - [SqlQueryDataSet]::new() - [SqlQueryDataSet]::new(string SQLServer, string Database) - [SqlQueryDataSet]::new(string SQLServer, string Database, string Query) + .PARAMETER SQLServer - The name of the SQL Server. + The name or address of the SQL Server to connect to. This parameter is optional, but when used, must be specified with $Database. .PARAMETER Database - The name of the Database. + The name of the database to connect to on the specified SQL Server. This parameter is also optional, but when used, must be specified with $SQLServer. .PARAMETER ConnectionString - The connection string for the SQL Server. + The full connection string to use for connecting to the SQL Server. This parameter is optional and provides an alternative to specifying $SQLServer and $Database separately. .PARAMETER Query - The SQL query to be executed. + The SQL query to execute against the database. This parameter is optional, only configures the query settings, and does not trigger execution. Best when used with $TableName. .PARAMETER TableName - The name of the table to store the query results. + Unique identifier that names the configuration of this Query. This parameter is optional and a $TableName will be parsed from only simple queries which is why its best to specify with $Query. .PARAMETER DisplayResults - Boolean flag to display the results. Default is true which effects query executions by outputting the Results property contents to standard out. + Boolean flag indicating whether to display the query results. The default value is $true. + The [SqlQueryDataSet] class uses this flag to output content to standard out when executing content generating methods such as Execute(). .EXAMPLE $result = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" -Query "SELECT * FROM myTable" .EXAMPLE @@ -31,19 +37,33 @@ #> function New-SqlQueryDataSet { - # Suppress PSScriptAnalyzer rule about ShouldProcess - [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")] - - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'ServerDatabase')] param ( + [Parameter(ParameterSetName = 'ServerDatabase', Mandatory = $false)] + [Parameter(ParameterSetName = 'ServerDatabaseWithConnectionString', Mandatory = $false)] [string]$SQLServer, + + [Parameter(ParameterSetName = 'ServerDatabase', Mandatory = $false)] + [Parameter(ParameterSetName = 'ServerDatabaseWithConnectionString', Mandatory = $false)] [string]$Database, + + [Parameter(ParameterSetName = 'ConnectionString', Mandatory = $false)] + [Parameter(ParameterSetName = 'ServerDatabaseWithConnectionString', Mandatory = $false)] [string]$ConnectionString, + + [Parameter(Mandatory = $false)] [string]$Query, + + [Parameter(Mandatory = $false)] [string]$TableName, + + [Parameter(Mandatory = $false)] [bool]$DisplayResults = $true ) - + + # Suppress PSScriptAnalyzer rule about ShouldProcess + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")] + $SqlQueryInstance = if ([string]::IsNullOrEmpty($SQLServer) -and [string]::IsNullOrEmpty($ConnectionString) -and [string]::IsNullOrEmpty($Database)) { [SqlQueryDataSet]::new() } elseif (-not [string]::IsNullOrEmpty($SQLServer) -and -not [string]::IsNullOrEmpty($Database)) { From 22dac775d22e48ccfbe6a98707a46606537e5472 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:54:57 -0500 Subject: [PATCH 08/20] Added Test Database and Pester test --- src/public/New-SqlQueryDataSet.ps1 | 80 ++++++------ tests/New-SqlQueryDataSets.tests.ps1 | 178 +++++++++++++++++++++++++++ tests/TestDatabase1.parameters.psd1 | 7 ++ 3 files changed, 228 insertions(+), 37 deletions(-) create mode 100644 tests/New-SqlQueryDataSets.tests.ps1 create mode 100644 tests/TestDatabase1.parameters.psd1 diff --git a/src/public/New-SqlQueryDataSet.ps1 b/src/public/New-SqlQueryDataSet.ps1 index 0321540..00eda08 100644 --- a/src/public/New-SqlQueryDataSet.ps1 +++ b/src/public/New-SqlQueryDataSet.ps1 @@ -13,6 +13,10 @@ - [SqlQueryDataSet]::new(string SQLServer, string Database) - [SqlQueryDataSet]::new(string SQLServer, string Database, string Query) + Explanation of Parameter Sets: + - **`ServerDatabase`**: This parameter set allows the user to specify the SQL Server and Database separately without needing a full connection string. + - **`ServerDatabaseWithConnectionString`**: This parameter set allows the user to provide both the SQL Server and Database separately, or use a connection string. + - **`ConnectionString`**: This parameter set allows the user to provide a connection string directly. .PARAMETER SQLServer The name or address of the SQL Server to connect to. This parameter is optional, but when used, must be specified with $Database. .PARAMETER Database @@ -26,10 +30,14 @@ .PARAMETER DisplayResults Boolean flag indicating whether to display the query results. The default value is $true. The [SqlQueryDataSet] class uses this flag to output content to standard out when executing content generating methods such as Execute(). +.FUNCTIONALITY + Creates and initializes an Instance of [SqlQueryDataSet] class +.OUTPUTS + Object of [SqlQueryDataSet] class .EXAMPLE $result = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" -Query "SELECT * FROM myTable" .EXAMPLE - $result = New-SqlQueryDataSet -ConnectionString "Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" -Query "SELECT * FROM myTable" -DisplayResults $false + $result = New-SqlQueryDataSet -ConnectionString "Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" -Query "SELECT * FROM myTable" -TableName myTable -DisplayResults $false .NOTES Author: Brooks Vaughn Date: 2025-02-01 @@ -38,20 +46,22 @@ function New-SqlQueryDataSet { [CmdletBinding(DefaultParameterSetName = 'ServerDatabase')] + # Suppress PSScriptAnalyzer rule about ShouldProcess + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")] + param ( - [Parameter(ParameterSetName = 'ServerDatabase', Mandatory = $false)] - [Parameter(ParameterSetName = 'ServerDatabaseWithConnectionString', Mandatory = $false)] + [Parameter(Mandatory = $false)] [string]$SQLServer, - [Parameter(ParameterSetName = 'ServerDatabase', Mandatory = $false)] - [Parameter(ParameterSetName = 'ServerDatabaseWithConnectionString', Mandatory = $false)] + [Parameter(Mandatory = $false)] + [ValidateScript({ if ($SQLServer -and -not $_) { throw "Database must be provided if SQLServer is specified." } else { $true } })] [string]$Database, - [Parameter(ParameterSetName = 'ConnectionString', Mandatory = $false)] - [Parameter(ParameterSetName = 'ServerDatabaseWithConnectionString', Mandatory = $false)] + [Parameter(Mandatory = $false)] [string]$ConnectionString, [Parameter(Mandatory = $false)] + [ValidateScript({ if ($TableName -and -not $_) { throw "Query must be provided if TableName is specified." } else { $true } })] [string]$Query, [Parameter(Mandatory = $false)] @@ -61,39 +71,35 @@ function New-SqlQueryDataSet { [bool]$DisplayResults = $true ) - # Suppress PSScriptAnalyzer rule about ShouldProcess - [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")] + # Function logic here + if ($SQLServer -and -not $Database) { + Write-Warning "Database must be provided if SQLServer is specified." + } - $SqlQueryInstance = if ([string]::IsNullOrEmpty($SQLServer) -and [string]::IsNullOrEmpty($ConnectionString) -and [string]::IsNullOrEmpty($Database)) { - [SqlQueryDataSet]::new() - } elseif (-not [string]::IsNullOrEmpty($SQLServer) -and -not [string]::IsNullOrEmpty($Database)) { - if ([string]::IsNullOrEmpty($Query)) { - [SqlQueryDataSet]::new($SQLServer, $Database) - } else { - $instance = [SqlQueryDataSet]::new($SQLServer, $Database) - if ([string]::IsNullOrEmpty($TableName)) { - [void]$instance.AddQuery($Query) - } else { - [void]$instance.AddQuery($Query, $TableName) - } - $instance - } + if ($Database -and -not $SQLServer) { + Write-Warning "SQLServer must be provided if Database is specified." + } + + if ($TableName -and -not $Query) { + Write-Warning "Query must be provided if TableName is specified." + } + + $instance = $null + if (-not [string]::IsNullOrEmpty($SQLServer) -and -not [string]::IsNullOrEmpty($Database)) { + $instance = [SqlQueryDataSet]::new($SQLServer, $Database) } else { $instance = [SqlQueryDataSet]::new() - if (-not [string]::IsNullOrEmpty($SQLServer)) { $instance.SQLServer = $SQLServer } - if (-not [string]::IsNullOrEmpty($Database)) { $instance.Database = $Database } - if ($Query) { - if ([string]::IsNullOrEmpty($TableName)) { - [void]$instance.AddQuery($Query) - } else { - [void]$instance.AddQuery($Query, $TableName) - } + } + if (-not [string]::IsNullOrEmpty($Query)) { + if (-not [string]::IsNullOrEmpty($TableName)) { + [void]$instance.AddQuery($Query, $TableName) + } else { + [void]$instance.AddQuery($Query) } - $instance } - - if ($ConnectionString) { $SqlQueryInstance.ConnectionString = $ConnectionString } - $SqlQueryInstance.DisplayResults = $DisplayResults - - return $SqlQueryInstance + if (-not [string]::IsNullOrEmpty($ConnectionString)) { $instance.ConnectionString = $ConnectionString } + if (-not [string]::IsNullOrEmpty($SQLServer)) { $instance.SQLServer = $SQLServer } + if (-not [string]::IsNullOrEmpty($Database)) { $instance.Database = $Database } + $instance.DisplayResults = $DisplayResults + return $instance } diff --git a/tests/New-SqlQueryDataSets.tests.ps1 b/tests/New-SqlQueryDataSets.tests.ps1 new file mode 100644 index 0000000..9e9e27b --- /dev/null +++ b/tests/New-SqlQueryDataSets.tests.ps1 @@ -0,0 +1,178 @@ +Describe 'New-SqlQueryDataSet' { + BeforeAll { + $data = Get-MTProjectInfo + # Import-Module -Name "$($data.ProjectName)" -Verbose -Force + Import-Module "$($data.ManifestFilePSD1)" -Verbose -Force + $fsoParamFile = [System.IO.FileInfo]("$($data.ProjectRoot)/test1.parameters.psd1") + $params = @{} + If ($fsoParamFile.Exists) { + $params = Import-PowerShellDataFile -Path $fsoParamFile.FullName + Write-Host ("Loaded Parameters from: $($fsoParamFile.FullName)") + } + Write-Host ("Parameters: $($params | Out-String)") + } + + Context 'When using No Parameters' { + It 'Should create an instance with No Parameters' { + $result = New-SqlQueryDataSet + $result | Should -Not -BeNullOrEmpty + $result.Database | Should -BeNullOrEmpty + $result.SQLServer | Should -BeNullOrEmpty + $result.ConnectionString | Should -BeNullOrEmpty + $result.Tables | Should -BeNullOrEmpty + $result.TableNames | Should -BeNullOrEmpty + $result.TableNames.Count | Should -Be 0 + } + } + + Context 'When using SQLServer' { + It 'Should create an instance with SQLServer' { + $result = New-SqlQueryDataSet -SQLServer $params.SqlServer + $result | Should -Not -BeNullOrEmpty + $result.SQLServer | Should -Be $params.SqlServer + $result.Database | Should -BeNullOrEmpty + } + } + + Context 'When using Database' { + It 'Should create an instance with Database' { + $result = New-SqlQueryDataSet -Database $params.Database + $result | Should -Not -BeNullOrEmpty + $result.Database | Should -Be $params.Database + $result.SQLServer | Should -BeNullOrEmpty + } + } + + Context 'When using SQLServer and Database' { + It 'Should create an instance with SQLServer and Database' { + $result = New-SqlQueryDataSet -SQLServer $params.SqlServer -Database $params.Database + $result | Should -Not -BeNullOrEmpty + $result.SQLServer | Should -Be $params.SqlServer + $result.Database | Should -Be $params.Database + } + } + + Context 'When using ConnectionString' { + It 'Should create an instance with ConnectionString' { + $result = New-SqlQueryDataSet -ConnectionString $params.ConnectionString + $result | Should -Not -BeNullOrEmpty + $result.ConnectionString | Should -Be $params.ConnectionString + } + } + + Context 'When using ConnectionString SQLServer and Database' { + It 'Should create an instance with ConnectionString, SQLServer, and Database' { + $result = New-SqlQueryDataSet -SQLServer $params.SqlServer -Database $params.Database -ConnectionString $params.ConnectionString + $result | Should -Not -BeNullOrEmpty + $result.ConnectionString | Should -Be $params.ConnectionString + $result.SQLServer | Should -Be $params.SqlServer + $result.Database | Should -Be $params.Database + } + } + + Context 'When using SQLServer, Database, and Query' { + It 'Should create an instance with SQLServer, Database, and Query' { + $result = New-SqlQueryDataSet -SQLServer $params.SqlServer -Database $params.Database -Query "SELECT * FROM myTable" + $result | Should -Not -BeNullOrEmpty + $result.SQLServer | Should -Be $params.SqlServer + $result.Database | Should -Be $params.Database + $result.TableIndex | Should -Be 0 + $result.Tables | Should -Not -BeNullOrEmpty + $result.TableNames.Count | Should -Be 1 + $result.Tables[$result.TableIndex].TableIndex | Should -Be $result.TableIndex + $result.Tables[$result.TableIndex].TableName | Should -Be "myTable" + $result.Tables[$result.TableIndex].Query | Should -Be "SELECT * FROM myTable" + } + } + + Context 'When using ConnectionString and Query' { + It 'Should create an instance with ConnectionString and Query' { + $result = New-SqlQueryDataSet -ConnectionString $params.ConnectionString -Query $params.Query + $result | Should -Not -BeNullOrEmpty + $result.ConnectionString | Should -Be $params.ConnectionString + $result.TableIndex | Should -Be 0 + $result.Tables | Should -Not -BeNullOrEmpty + $result.TableNames.Count | Should -Be 1 + $result.Tables[$result.TableIndex].TableIndex | Should -Be $result.TableIndex + $result.Tables[$result.TableIndex].TableName | Should -Be "TABLES" + $result.Tables[$result.TableIndex].Query | Should -Be $params.Query + $result.Tables[$result.TableIndex].ResultType | Should -Be 'DataTable' + } + } + + Context 'When using ConnectionString, Query, and TableName' { + It 'Should create an instance with ConnectionString and Query' { + $result = New-SqlQueryDataSet -ConnectionString $params.ConnectionString -Query $params.Query -TableName $params.TableName + $result | Should -Not -BeNullOrEmpty + $result.ConnectionString | Should -Be $params.ConnectionString + $result.TableIndex | Should -Be 0 + $result.Tables | Should -Not -BeNullOrEmpty + $result.TableNames.Count | Should -Be 1 + $result.Tables[$result.TableIndex].TableIndex | Should -Be $result.TableIndex + $result.Tables[$result.TableIndex].TableName | Should -Be $params.TableName + $result.Tables[$result.TableIndex].Query | Should -Be $params.Query + $result.Tables[$result.TableIndex].ResultType | Should -Be 'DataTable' + } + } + + Context 'When using Query and TableName' { + It 'Should create an instance with Query and TableName' { + $result = New-SqlQueryDataSet -Query $params.Query -TableName $params.TableName + $result | Should -Not -BeNullOrEmpty + $result.Database | Should -BeNullOrEmpty + $result.SQLServer | Should -BeNullOrEmpty + $result.ConnectionString | Should -BeNullOrEmpty + $result.TableIndex | Should -Be 0 + $result.Tables | Should -Not -BeNullOrEmpty + $result.TableNames.Count | Should -Be 1 + $result.Tables[$result.TableIndex].TableIndex | Should -Be $result.TableIndex + $result.Tables[$result.TableIndex].TableName | Should -Be $params.TableName + $result.Tables[$result.TableIndex].Query | Should -Be $params.Query + $result.Tables[$result.TableIndex].ResultType | Should -Be 'DataTable' + } + } + + Context 'When using Query' { + It 'Should create an instance with Query' { + $result = New-SqlQueryDataSet -Query $params.Query + $result | Should -Not -BeNullOrEmpty + $result.Database | Should -BeNullOrEmpty + $result.SQLServer | Should -BeNullOrEmpty + $result.ConnectionString | Should -BeNullOrEmpty + $result.TableIndex | Should -Be 0 + $result.Tables | Should -Not -BeNullOrEmpty + $result.TableNames.Count | Should -Be 1 + $result.Tables[$result.TableIndex].TableIndex | Should -Be $result.TableIndex + $result.Tables[$result.TableIndex].TableName | Should -Be 'TABLES' + $result.Tables[$result.TableIndex].Query | Should -Be $params.Query + $result.Tables[$result.TableIndex].ResultType | Should -Be 'DataTable' + } + } + + Context 'When using TableName' { + It 'Should create an instance with no configuration as TableName is ignored without Query' { + $result = New-SqlQueryDataSet -TableName $params.TableName + $result | Should -Not -BeNullOrEmpty + $result.Database | Should -BeNullOrEmpty + $result.SQLServer | Should -BeNullOrEmpty + $result.ConnectionString | Should -BeNullOrEmpty + $result.Tables | Should -BeNullOrEmpty + $result.TableNames | Should -BeNullOrEmpty + $result.TableNames.Count | Should -Be 0 + } + } + + Context 'When using DisplayResults' { + It 'Should create an instance with DisplayResults set to false' { + $result = New-SqlQueryDataSet -DisplayResults $false + $result | Should -Not -BeNullOrEmpty + $result.Database | Should -BeNullOrEmpty + $result.SQLServer | Should -BeNullOrEmpty + $result.ConnectionString | Should -BeNullOrEmpty + $result.Tables | Should -BeNullOrEmpty + $result.TableNames | Should -BeNullOrEmpty + $result.TableNames.Count | Should -Be 0 + $result.DisplayResults | Should -Be $false + } + } +} diff --git a/tests/TestDatabase1.parameters.psd1 b/tests/TestDatabase1.parameters.psd1 new file mode 100644 index 0000000..7513dd9 --- /dev/null +++ b/tests/TestDatabase1.parameters.psd1 @@ -0,0 +1,7 @@ +@{ + "ConnectionString" = "Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=DATABASE1.MDF;Integrated Security=True"; + "TableName" = "DBTable"; + "SqlServer" = "(localdb)\MSSQLLocalDB"; + "Database" = "DATABASE1.MDF"; + "Query" = "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = `'BASE TABLE`' ORDER BY TABLE_SCHEMA, TABLE_NAME;" +} From 10c2fb4a670500af5a0253b61b04be1f614ead4f Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Fri, 7 Feb 2025 22:11:46 -0500 Subject: [PATCH 09/20] Added Database Maintenance Functions --- src/public/Dismount-Database.ps1 | 20 +++++++++++ src/public/Get-DatabaseTables.ps1 | 14 ++++++++ src/public/Get-Databases.ps1 | 16 +++++++++ src/public/Invoke-DatabaseNonQuery.ps1 | 32 +++++++++++++++++ src/public/Invoke-DatabaseQuery.ps1 | 49 ++++++++++++++++++++++++++ src/public/Mount-Database.ps1 | 20 +++++++++++ tests/New-SqlQueryDataSets.tests.ps1 | 43 ++++++++++++++++++++-- tests/TestDatabase1.parameters.psd1 | 4 +-- 8 files changed, 194 insertions(+), 4 deletions(-) create mode 100644 src/public/Dismount-Database.ps1 create mode 100644 src/public/Get-DatabaseTables.ps1 create mode 100644 src/public/Get-Databases.ps1 create mode 100644 src/public/Invoke-DatabaseNonQuery.ps1 create mode 100644 src/public/Invoke-DatabaseQuery.ps1 create mode 100644 src/public/Mount-Database.ps1 diff --git a/src/public/Dismount-Database.ps1 b/src/public/Dismount-Database.ps1 new file mode 100644 index 0000000..a2d58c6 --- /dev/null +++ b/src/public/Dismount-Database.ps1 @@ -0,0 +1,20 @@ +Function Dismount-Database { + Param ( + $connectionString = "Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True", + $Database = 'TestDatabase1', + [Switch]$Quiet + ) + Write-Warning "`nDetaching Database: ($Database)" + $NonQuery = "EXEC sp_detach_db '$Database'" + $Splat = @{connectionString = $connectionString; NonQuery = $NonQuery} + # Remove any null value parameters to use called function's default value + $Splat.Keys.Where({-not $Splat[$_]}).ForEach({$Splat.Remove($_)}) + Invoke-DatabaseNonQuery @Splat -Quiet:$Quiet +} +<# Usage Example: # > +$Error.Clear() +# Dismount-Database +# Dismount-Database -Database:$null +Dismount-Database -Database 'TestDataBase1' +Get-Databases +#> diff --git a/src/public/Get-DatabaseTables.ps1 b/src/public/Get-DatabaseTables.ps1 new file mode 100644 index 0000000..d3a1275 --- /dev/null +++ b/src/public/Get-DatabaseTables.ps1 @@ -0,0 +1,14 @@ +Function Get-DatabaseTables { + Param ( + $connectionString, + $query = "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME;", + [Switch]$Quiet + ) + $Splat = @{ connectionString = $connectionString; query = $query } + # Remove any null value parameters to use called function's default value + $Splat.Keys.Where({-not $Splat[$_]}).ForEach({$Splat.Remove($_)}) + Invoke-DatabaseQuery @Splat -Quiet:$Quiet +} +<# Usage Examples: # > +Get-DatabaseTables +#> diff --git a/src/public/Get-Databases.ps1 b/src/public/Get-Databases.ps1 new file mode 100644 index 0000000..f099a9d --- /dev/null +++ b/src/public/Get-Databases.ps1 @@ -0,0 +1,16 @@ +Function Get-Databases { + Param ( + $connectionString = "Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True", + $query = "SELECT name FROM sys.databases;", + [Switch]$Quiet + ) + $Splat = @{connectionString = $connectionString; query = $query} + # Remove any null value parameters to use called function's default value + $Splat.Keys.Where({-not $Splat[$_]}).ForEach({$Splat.Remove($_)}) + Invoke-DatabaseQuery @Splat -Quiet:$Quiet +} +<# Usage Examples # > +Get-Databases +Get-Databases -Quiet +Get-Databases -connectionString:$null +#> \ No newline at end of file diff --git a/src/public/Invoke-DatabaseNonQuery.ps1 b/src/public/Invoke-DatabaseNonQuery.ps1 new file mode 100644 index 0000000..198602a --- /dev/null +++ b/src/public/Invoke-DatabaseNonQuery.ps1 @@ -0,0 +1,32 @@ +Function Invoke-DatabaseNonQuery { + Param ( + $connectionString = "Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Git\SqlQueryClass\tests\TestDatabase1.mdf;Integrated Security=True", + $NonQuery, + [Switch]$Quiet + ) + If ([String]::IsNullOrWhiteSpace($NonQuery)) { + Throw "Parameter -NonQuery cannot be null or empty" + } + If (-Not $Quiet) { + Write-Host "`nUsing ConnectionString: ($connectionString)" + Write-Host ("Executing Database NonQuery: $($NonQuery | Out-String)").Trim() + } + Try { + # Create and open the connection + $connection = New-Object System.Data.SqlClient.SqlConnection($connectionString) + $connection.Open() + # Create a command to attach the database + $attachCommand = $connection.CreateCommand() + $attachCommand.CommandText = $NonQuery + $attachCommand.ExecuteNonQuery() + } Catch { + Write-host ($_ | Out-String) -ForegroundColor Red + } Finally { + # Close connection + $connection.Close() + } +} +<# Usage Example: # > +$Error.Clear() +Invoke-DatabaseNonQuery -NonQuery "EXEC sp_detach_db 'NORTHWIND'" +#> diff --git a/src/public/Invoke-DatabaseQuery.ps1 b/src/public/Invoke-DatabaseQuery.ps1 new file mode 100644 index 0000000..4c9dbbc --- /dev/null +++ b/src/public/Invoke-DatabaseQuery.ps1 @@ -0,0 +1,49 @@ +Function Invoke-DatabaseQuery { + Param ( + $connectionString = "Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Git\SqlQueryClass\tests\TestDatabase1.mdf;Integrated Security=True", + $query, + [Switch]$Quiet + ) + If ([String]::IsNullOrWhiteSpace($Query)) { + Throw "Parameter -Query cannot be null or empty" + } + If (-Not $Quiet) { + Write-Host "`nUsing ConnectionString: ($connectionString)" + Write-Host ("Executing SQL Query: $($Query | Out-String)").Trim() + } + $SQLReader = $null + $Result = $null + Try { + # Create and open the connection + $connection = New-Object System.Data.SqlClient.SqlConnection($connectionString) + $connection.Open() + + # Create the command + $command = $connection.CreateCommand() + $command.CommandText = $query + $command.CommandTimeout = 600 + + # Execute the command and read the results + $SQLReader = $command.ExecuteReader() + If ($SQLReader) { + $Result = [System.Data.DataTable]::new() + $Result.Load($SQLReader) + } + # Write-Host ($Result.Rows | Out-String) + Return ,$Result + } Catch { + Write-host ($_ | Out-String) -ForegroundColor Red + } Finally { + # Close the reader and the connection + If ($SQLReader) { + $SQLReader.Close() + } + $connection.Close() + } +} +<# Usage Example: # > +Invoke-DatabaseQuery -connectionString 'Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Git\SqlQueryClass\tests\TestDatabase1.mdf;Integrated Security=True' -query 'SELECT database_id, name, compatibility_level FROM sys.databases;' +Invoke-DatabaseQuery -query "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME;" +Invoke-DatabaseQuery -query "SELECT * FROM SqlQuery;" +Invoke-DatabaseQuery -query "SELECT * FROM SqlQueryParms;" +#> diff --git a/src/public/Mount-Database.ps1 b/src/public/Mount-Database.ps1 new file mode 100644 index 0000000..9c2b4f8 --- /dev/null +++ b/src/public/Mount-Database.ps1 @@ -0,0 +1,20 @@ +Function Mount-Database { + Param ( + $connectionString = "Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True", + $Database = 'TestDatabase1', + $DatabaseFilePath = 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf', + [Switch]$Quiet + ) + Write-Warning "`nAttaching Database: ($Database) with Database File ($DatabaseFilePath)" + $Query = "CREATE DATABASE $Database ON (FILENAME = '$DatabaseFilePath') FOR ATTACH" + $Splat = @{ connectionString = $connectionString; query = $query } + # Remove any null value parameters to use called function's default value + $Splat.Keys.Where({-not $Splat[$_]}).ForEach({$Splat.Remove($_)}) + Invoke-DatabaseQuery @Splat -Quiet:$Quiet +} +<# Usage Example: # > +$Error.Clear() +Mount-Database +Get-Databases +# Mount-Database -Database 'TestDataBase1' -DatabaseFilePath 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf' +#> diff --git a/tests/New-SqlQueryDataSets.tests.ps1 b/tests/New-SqlQueryDataSets.tests.ps1 index 9e9e27b..73ff4ee 100644 --- a/tests/New-SqlQueryDataSets.tests.ps1 +++ b/tests/New-SqlQueryDataSets.tests.ps1 @@ -3,11 +3,14 @@ Describe 'New-SqlQueryDataSet' { $data = Get-MTProjectInfo # Import-Module -Name "$($data.ProjectName)" -Verbose -Force Import-Module "$($data.ManifestFilePSD1)" -Verbose -Force - $fsoParamFile = [System.IO.FileInfo]("$($data.ProjectRoot)/test1.parameters.psd1") + $fsoParamFile = [System.IO.FileInfo]("$($data.ProjectRoot)/tests/TestDatabase1.parameters.psd1") $params = @{} If ($fsoParamFile.Exists) { + Write-Host ("Loading Parameters from: $($fsoParamFile.FullName)") $params = Import-PowerShellDataFile -Path $fsoParamFile.FullName - Write-Host ("Loaded Parameters from: $($fsoParamFile.FullName)") + $DatabasePath = "$($data.ProjectRoot)/tests/$($params.Database)" + $params.ConnectionString = $params.ConnectionString -replace "$($params.Database)",$DatabasePath + $params.Database = $DatabasePath } Write-Host ("Parameters: $($params | Out-String)") } @@ -176,3 +179,39 @@ Describe 'New-SqlQueryDataSet' { } } } + + +# Create a new SQL Server connection +$connectionString = "Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True" +$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString) +$connection.Open() + +# Create a command to detach the database +$detachCommand = $connection.CreateCommand() +$detachCommand.CommandText = "EXEC sp_detach_db 'DATABASE1'" +$detachCommand.ExecuteNonQuery() +$connection.Close() + +# Define the source and destination paths +$sourcePath = "F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF" +$destinationPath = "C:\Git\SqlQueryClass\tests\TestDatabase1.mdf" + +# Move and rename the file +Move-Item -Path $sourcePath -Destination $destinationPath + +# Create a new SQL Server connection +$connection.Open() + +# Create a command to attach the database +$attachCommand = $connection.CreateCommand() +$attachCommand.CommandText = @" +CREATE DATABASE TestDatabase1 +ON (FILENAME = 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf') +FOR ATTACH +"@ +$attachCommand.ExecuteNonQuery() +$connection.Close() + +$ConnectionString = 'Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Git\SqlQueryClass\tests\TestDatabase1.mdf;Integrated Security=True' + + diff --git a/tests/TestDatabase1.parameters.psd1 b/tests/TestDatabase1.parameters.psd1 index 7513dd9..0582095 100644 --- a/tests/TestDatabase1.parameters.psd1 +++ b/tests/TestDatabase1.parameters.psd1 @@ -1,7 +1,7 @@ @{ - "ConnectionString" = "Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=DATABASE1.MDF;Integrated Security=True"; + "ConnectionString" = "Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=TestDatabase1.mdf;Integrated Security=True"; "TableName" = "DBTable"; "SqlServer" = "(localdb)\MSSQLLocalDB"; - "Database" = "DATABASE1.MDF"; + "Database" = "TestDatabase1.mdf"; "Query" = "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = `'BASE TABLE`' ORDER BY TABLE_SCHEMA, TABLE_NAME;" } From eb727536ce6607622af43fcdf5e984a8c517cd95 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Fri, 7 Feb 2025 22:27:29 -0500 Subject: [PATCH 10/20] Refactored Function Names --- src/public/Dismount-Database.ps1 | 2 +- .../{Get-Databases.ps1 => Get-Database.ps1} | 8 ++--- ...tabaseTables.ps1 => Get-DatabaseTable.ps1} | 4 +-- src/public/Mount-Database.ps1 | 2 +- tests/New-SqlQueryDataSets.tests.ps1 | 36 ------------------- 5 files changed, 8 insertions(+), 44 deletions(-) rename src/public/{Get-Databases.ps1 => Get-Database.ps1} (82%) rename src/public/{Get-DatabaseTables.ps1 => Get-DatabaseTable.ps1} (91%) diff --git a/src/public/Dismount-Database.ps1 b/src/public/Dismount-Database.ps1 index a2d58c6..539ad4f 100644 --- a/src/public/Dismount-Database.ps1 +++ b/src/public/Dismount-Database.ps1 @@ -16,5 +16,5 @@ $Error.Clear() # Dismount-Database # Dismount-Database -Database:$null Dismount-Database -Database 'TestDataBase1' -Get-Databases +Get-Database #> diff --git a/src/public/Get-Databases.ps1 b/src/public/Get-Database.ps1 similarity index 82% rename from src/public/Get-Databases.ps1 rename to src/public/Get-Database.ps1 index f099a9d..6c1bf3c 100644 --- a/src/public/Get-Databases.ps1 +++ b/src/public/Get-Database.ps1 @@ -1,4 +1,4 @@ -Function Get-Databases { +Function Get-Database { Param ( $connectionString = "Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True", $query = "SELECT name FROM sys.databases;", @@ -10,7 +10,7 @@ Function Get-Databases { Invoke-DatabaseQuery @Splat -Quiet:$Quiet } <# Usage Examples # > -Get-Databases -Get-Databases -Quiet -Get-Databases -connectionString:$null +Get-Database +Get-Database -Quiet +Get-Database -connectionString:$null #> \ No newline at end of file diff --git a/src/public/Get-DatabaseTables.ps1 b/src/public/Get-DatabaseTable.ps1 similarity index 91% rename from src/public/Get-DatabaseTables.ps1 rename to src/public/Get-DatabaseTable.ps1 index d3a1275..bd2f433 100644 --- a/src/public/Get-DatabaseTables.ps1 +++ b/src/public/Get-DatabaseTable.ps1 @@ -1,4 +1,4 @@ -Function Get-DatabaseTables { +Function Get-DatabaseTable { Param ( $connectionString, $query = "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME;", @@ -10,5 +10,5 @@ Function Get-DatabaseTables { Invoke-DatabaseQuery @Splat -Quiet:$Quiet } <# Usage Examples: # > -Get-DatabaseTables +Get-DatabaseTable #> diff --git a/src/public/Mount-Database.ps1 b/src/public/Mount-Database.ps1 index 9c2b4f8..ab7f595 100644 --- a/src/public/Mount-Database.ps1 +++ b/src/public/Mount-Database.ps1 @@ -15,6 +15,6 @@ Function Mount-Database { <# Usage Example: # > $Error.Clear() Mount-Database -Get-Databases +Get-Database # Mount-Database -Database 'TestDataBase1' -DatabaseFilePath 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf' #> diff --git a/tests/New-SqlQueryDataSets.tests.ps1 b/tests/New-SqlQueryDataSets.tests.ps1 index 73ff4ee..05104fb 100644 --- a/tests/New-SqlQueryDataSets.tests.ps1 +++ b/tests/New-SqlQueryDataSets.tests.ps1 @@ -179,39 +179,3 @@ Describe 'New-SqlQueryDataSet' { } } } - - -# Create a new SQL Server connection -$connectionString = "Data Source=(localdb)\MSSQLLocalDB;Integrated Security=True" -$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString) -$connection.Open() - -# Create a command to detach the database -$detachCommand = $connection.CreateCommand() -$detachCommand.CommandText = "EXEC sp_detach_db 'DATABASE1'" -$detachCommand.ExecuteNonQuery() -$connection.Close() - -# Define the source and destination paths -$sourcePath = "F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF" -$destinationPath = "C:\Git\SqlQueryClass\tests\TestDatabase1.mdf" - -# Move and rename the file -Move-Item -Path $sourcePath -Destination $destinationPath - -# Create a new SQL Server connection -$connection.Open() - -# Create a command to attach the database -$attachCommand = $connection.CreateCommand() -$attachCommand.CommandText = @" -CREATE DATABASE TestDatabase1 -ON (FILENAME = 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf') -FOR ATTACH -"@ -$attachCommand.ExecuteNonQuery() -$connection.Close() - -$ConnectionString = 'Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Git\SqlQueryClass\tests\TestDatabase1.mdf;Integrated Security=True' - - From ad77e957d4178fe9b67d70c7de0f774fb01fd8bd Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sat, 8 Feb 2025 01:05:28 -0500 Subject: [PATCH 11/20] Readme Updates --- README.md | 177 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 112 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index 6ae7264..b9baa67 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Import-Module -Name ".\dist\SqlQueryClass\SqlQueryClass.psd1" -Force -verbose - Tested with PowerShell 5.1 and 7.5x - No known dependencies for usage +- VS Code and clone [Brooks Vaughn's SqlQueryClass](https://github.com/BrooksV/SqlQueryClass) Repository - Module build process uses [Manjunath Beli's](https://github.com/belibug) [ModuleTools](https://github.com/belibug) module. ## ToDo @@ -57,59 +58,78 @@ New-SqlQueryDataSet helper function is used to creates an instance of the [SqlQu It is best to read the details in the details `.\src\private\SqlQueryClass.ps1` and in `.\src\public\New-SqlQueryDataSet.ps1` files. +## How Build `SqlQueryClass` Module + +### Setup + +- Uses SQL Express but should work with other SQL Databases with proper connection strings and credentials +- Requires VS Code +- For Contributors, Fork the [SqlQueryClass](https://github.com/BrooksV/SqlQueryClass) repository +- Clone the repository or fork to local pc. I like using c:\git as my local repository folder. Subfolder `SqlQueryClass` will be created with the GiHib repository contents +- Install [Manjunath Beli's ModuleTools](https://github.com/belibug/ModuleTools) module as the module build process uses ModuleTools +- - Find-Module -Name ModuleTools | Install-Module -Scope CurrentUser -Verbose +- Note that a sample SQL Express database file (.\tests\TestDatabase1.mdf) is included for pester tests. The database configuration is set in .\tests\TestDatabase1.parameters.psd1 + +#### Source Files used in the Module + +- Public functions that are exported, are separate files in the .\src\public folder. +- Private functions that are local to the Module, are separate files in the .\src\private folder. +- - Class Definitions and Enums are not accessible outside of the Module and cannot be accessed directly like Public Functions are. This is a PowerShell limitation. +- - - Classes [SqlQueryDataSet] and [SqlQueryDataSetParms] and enum ResultType used in the Module are defined in file .\src\private\SqlQueryClass.ps1 file. The classes have properties and methods used to maintain a Database connections and result sets making it useful WPF Data binding. +- Resources are files and folders in the .\src\resources folder that needs to be included with the Manifest and Module + +#### `SqlQueryClass` Module Build Process + +- Create a branch for your changes +- Update the build version using Update-MTModuleVersion (Find-Module -Name ModuleTools) +- Commit your changes to the branch +- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) +- Build the Module output using Invoke-MTBuild -Verbose (Find-Module -Name ModuleTools) +- - Outputs to the .\dist\SqlQueryClass folder +- - Combines the file contents of the files in Public and Private folder into .\dist\SqlQueryClass\SqlQueryClass.psd1 and exports the Public Functions +- - Generates the .\dist\SqlQueryClass\SqlQueryClass.psd1 Manifest file from the settings in .\project.json +- - Resources (.\src\resources) folder content is copied to .\dist\SqlQueryClass folder +- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) +- Make corrections, repeat the build process +- For Contributors +- - Create an Issue if one does not exist that addresses the proposed changes +- - Upstream your branch +- - Create a Pull request + +#### Publishing `SqlQueryClass` Module to GitHub + + + +- .\dist\SqlQueryClass\SqlQueryClass.psd1 +- Resources are files and folders in the .\src\resources folder that gets copied to the .\dist\SqlQueryClass folder + + +SqlQueryClass.ps1 + + ### New-SqlQueryDataSet Helper Function to Create Class Instance The main cmdlet provided by this module is New-SqlQueryDataSet, which returns an object instance of [SqlQueryDataSet] class. Note that all the parameters are optional. ```powershell $testQuery = New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] +``` -$testquery | GM +#### Other Helper Functions in the SqlQueryClass Module - TypeName: SqlQueryDataSet - -Name MemberType Definition ----- ---------- ---------- -AddQuery Method int AddQuery(string Query), int AddQuery(string Query, string TableName) -BuildOleDbConnectionString Method string BuildOleDbConnectionString() -Clear Method void Clear() -CloseConnection Method void CloseConnection() -Equals Method bool Equals(System.Object obj) -Execute Method System.Object Execute(), System.Object Execute(SqlQueryTable table), System.Object Execute(int TableIndex), System.Object Execute(string SqlQuery), System.Object Execute(ResultType ResultType) -ExecuteAsDataAdapter Method System.Object ExecuteAsDataAdapter(string SqlQuery) -ExecuteAsDataSet Method System.Object ExecuteAsDataSet(string SqlQuery) -ExecuteAsDataTable Method System.Object ExecuteAsDataTable(string SqlQuery) -ExecuteAsDataRows Method System.Object ExecuteAsDataRows(string SqlQuery) -ExecuteNonQuery Method System.Object ExecuteNonQuery(string SqlQuery) -ExecuteQuery Method System.Object ExecuteQuery(string SqlQuery), System.Object ExecuteQuery(string TableName, string SqlQuery) -GetCreateBasicDLL Method System.Object GetCreateBasicDLL(string TableName) -GetCreateDDL Method System.Object GetCreateDDL(string TableName) -GetDBTableIndexes Method System.Object GetDBTableIndexes(string TableName) -GetDBTableIndexesV17 Method System.Object GetDBTableIndexesV17(string TableName) -GetDBTableSchema Method System.Object GetDBTableSchema(string TableName) -GetHashCode Method int GetHashCode() -GetTableFromQuery Method System.Object GetTableFromQuery(string Query) -GetTableFromTableName Method System.Object GetTableFromTableName(string TableName) -GetType Method type GetType() -LoadQueryFromFile Method void LoadQueryFromFile(string Path) -OpenConnection Method void OpenConnection() -ParseSQLQuery Method System.Object ParseSQLQuery(string Query) -SaveChanges Method System.Object SaveChanges() -ToString Method string ToString() -CommandTimeout Property int CommandTimeout {get;set;} -ConnectionString Property string ConnectionString {get;set;} -ConnectionTimeout Property int ConnectionTimeout {get;set;} -Database Property string Database {get;set;} -DisplayResults Property bool DisplayResults {get;set;} -KeepAlive Property bool KeepAlive {get;set;} -SQLConnection Property System.Object SQLConnection {get;set;} -SQLServer Property string SQLServer {get;set;} -TableIndex Property int TableIndex {get;set;} -TableNames Property hashtable TableNames {get;set;} -Tables Property System.Collections.Generic.List`1[[SqlQueryTable, PowerShell Class Assembly, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e Tables {get;set;} +```powershell +Get-Command -Module SqlQueryClass -Syntax + +Dismount-Database [[-connectionString] ] [[-Database] ] [-Quiet] +Get-Database [[-connectionString] ] [[-query] ] [-Quiet] +Get-DatabaseTable [[-connectionString] ] [[-query] ] [-Quiet] +Invoke-DatabaseNonQuery [[-connectionString] ] [[-NonQuery] ] [-Quiet] +Invoke-DatabaseQuery [[-connectionString] ] [[-query] ] [-Quiet] +Mount-Database [[-connectionString] ] [[-Database] ] [[-DatabaseFilePath] ] [-Quiet] +New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] ``` -## Summary +## Summary of Classes An instance of Class [SqlQueryDataSet] is used to maintain the DataBase configuration and connection details. @@ -168,23 +188,33 @@ ResultType of DataTable and DataRows use the [System.Data.SqlClient.SqlDataReade ResultType of DataAdapter and DataSet returns [SqlQueryTable]$table.Result as [System.Data.DataSet] and retains the SqlDataAdapter used in [SqlQueryTable]$table.SqlDataAdapter -### New-SqlQueryDataSet Examples +### [SqlQueryDataSet] and [SqlQueryDataSetParms] Class Methods and Properties + +There are more then 27+ methods and are best listed by running the following with Database connection and Query settings: ```powershell -# Create an instance of the [SqlQueryDataSet] class -$testQuery = New-SqlQueryDataSet +$testQuery = New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] +$testquery | GM +$testquery.Tables | GM +``` -# Create an instance of the [SqlQueryDataSet] class with Database configuration, ConnectionString is autogenerated -$testQuery = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" +### New-SqlQueryDataSet Examples -# Create an instance of the [SqlQueryDataSet] class with Database configuration and defining the SQL Query -$testQuery = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" -Query "SELECT * FROM myTable" +See .\tests\New-SqlQueryDataSets.tests.ps1 file for a fully set of usage examples used in the Pester Tests + +Parameters are all optional but most of the properties will still need to be configured through the Class instance before an execute query is called. -# Using a connection string, defining a query, and setting DisplayResults to False -$result = New-SqlQueryDataSet -ConnectionString "Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" -Query "SELECT * FROM myTable" -DisplayResults $false +The most common usage examples are: +```powershell # Using a connection string, defining a query, and setting TableName $result = New-SqlQueryDataSet -ConnectionString "Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" -Query "SELECT * FROM INFORMATION_SCHEMA.COLUMNS" -TableName TableSchema + +# Create an instance of the [SqlQueryDataSet] class with Database configuration and defining the SQL Query +$testQuery = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" -Query "SELECT * FROM myTable" -TableName TableSchema + +# Create an instance of the [SqlQueryDataSet] class with Database configuration, ConnectionString is autogenerated +$testQuery = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" ``` ### SQL Express Example @@ -192,7 +222,7 @@ $result = New-SqlQueryDataSet -ConnectionString "Server=myServer;Database=myDB;U ```powershell # Configure Database settings for connection $SqlServer = '(localdb)\MSSQLLocalDB' -$DatabaseName = 'F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF' +$DatabaseName = 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf' $ConnectionString = "Data Source={0};AttachDbFilename={1};Integrated Security=True" -f $SqlServer, $DatabaseName # Create a new instance of SqlQueryDataSet @@ -298,17 +328,24 @@ The the following ModuleTools CmdLets used in the build and maintenance process. ├───archive │ ├───dist +│ │ TestResults.xml +│ │ │ └───SqlQueryClass -│ about_SqlQueryClass.help.txt -│ SqlQueryClass.psd1 -│ SqlQueryClass.psm1 -│ +│ │ SqlQueryClass.psd1 +│ │ SqlQueryClass.psm1 +│ │ about_SqlQueryClass.help.txt +│ ├───src │ ├───private │ │ SqlQueryClass.ps1 │ │ │ ├───public -│ │ about_SqlQueryClass.help.txt +│ │ Dismount-Database.ps1 +│ │ Get-Database.ps1 +│ │ Get-DatabaseTable.ps1 +│ │ Invoke-DatabaseNonQuery.ps1 +│ │ Invoke-DatabaseQuery.ps1 +│ │ Mount-Database.ps1 │ │ New-SqlQueryDataSet.ps1 │ │ │ └───resources @@ -316,8 +353,12 @@ The the following ModuleTools CmdLets used in the build and maintenance process. │ └───tests Module.Tests.ps1 + New-SqlQueryDataSets.tests.ps1 OutputFiles.Tests.ps1 ScriptAnalyzer.Tests.ps1 + TestDatabase1.mdf + TestDatabase1.parameters.psd1 + TestDatabase1_log.ldf ``` All files and folders in the `src` folder, will be published Module. @@ -349,7 +390,7 @@ Generated module is stored in `dist\SqlQueryClass` folder, you can easily import - All functions in the `public` folder are exported during the module build. - All functions in the `private` folder are accessible internally within the module but are not exposed outside the module. - - All files and folder contained in the `resources` folder will be `dist\SqlQueryClass` folder. + - All files and folder contained in the `resources` folder will be published to the `dist\SqlQueryClass` folder. ### Tests Folder @@ -357,10 +398,13 @@ If you want to run any `pester` tests, keep them in `tests` folder and named *.t Run `Invoke-MTTest` to execute the tests. -## How the `SqlQueryClass` Module Works - -SqlQueryClass.ps1 - +- .\tests\New-SqlQueryDataSets.tests.ps1 -- Full set of usage example Tests. Good Resource for usage examples +- .\tests\Module.Tests.ps1 -- General Module Control to verify the module imports correctly +- .\tests\OutputFiles.Tests.ps1 -- Module and Manifest testing to verify output files are readable +- .\tests\ScriptAnalyzer.Tests.ps1 -- Code Quality Checks to verify PowerShell syntax and best practices +- .\tests\TestDatabase1.parameters.psd1 -- PowerShell Data File of configuration settings used in New-SqlQueryDataSets.tests.ps1 +- .\tests\TestDatabase1.mdf -- Sample SQL Express Database File with samples data used in New-SqlQueryDataSets.tests.ps1 +- .\tests\TestDatabase1_log.ldf -- Created when using TestDatabase1.mdf ## Contributing @@ -375,8 +419,11 @@ This project is licensed under the MIT License. See the LICENSE file for details [WorkFlowStatus]: https://img.shields.io/github/actions/workflow/status/BrooksV/SqlQueryClass/Tests.yml ## SEE ALSO - New-SqlQueryDataSet - Get-Help + +```powershell + Get-Help -Name New-SqlQueryDataSet +```powershell ## KEYWORDS + SQL, Database, Query, SqlQueryDataSet From b317b5783d29cd6789d907e4a24c0e869a4e9532 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sat, 8 Feb 2025 01:49:20 -0500 Subject: [PATCH 12/20] Readme updates with build details --- README.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b9baa67..643af09 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,8 @@ It is best to read the details in the details `.\src\private\SqlQueryClass.ps1` #### `SqlQueryClass` Module Build Process -- Create a branch for your changes +- Create a local branch for your changes +- - Use descriptive name that reflects the type of changes for branch for example features/database-table-access - Update the build version using Update-MTModuleVersion (Find-Module -Name ModuleTools) - Commit your changes to the branch - Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) @@ -98,14 +99,65 @@ It is best to read the details in the details `.\src\private\SqlQueryClass.ps1` #### Publishing `SqlQueryClass` Module to GitHub +Stage and Commit Your Changes +```powershell +git add . +git commit -m "Implemented database and table access functions" +``` + +Update remote repository with branch changes + +```powershell +# List status of remote repository +git branch -r +# Create Branch on remote repository if needed +# git push --set-upstream origin features/database-table-access +# Push branch changes to remote branch in repository +git push origin features/database-table-access +``` + +Create a Pull Request on remote repository + +- Go to [SqlQueryClass GitHub repository](https://github.com/BrooksV/SqlQueryClass) +- Click on "Compare & pull request" for your branch +- Provide a meaningful title and description for the PR +- Select the base branch (main) to merge into +- Click "Create pull request" + +Code Review and Feedback + +- Engage with Repository Owner or collaborators to review the PR +- Address any feedback or requested changes by making additional commits to your branch and pushing them to the remote branch +- Ensure the PR passes any automated tests or checks + +Merge the Pull Request -- .\dist\SqlQueryClass\SqlQueryClass.psd1 -- Resources are files and folders in the .\src\resources folder that gets copied to the .\dist\SqlQueryClass folder +- Once the PR is approved and all checks pass, you can merge it into the main branch +- You can either use the "Merge pull request" button on GitHub or merge it locally and push the changes +Cleanup -SqlQueryClass.ps1 +- After merging, you can delete the feature branch from the remote repository to keep it clean +```powershell +git push origin --delete features/database-table-access +``` + +- Optionally, delete the local branch + +```powershell +git branch -d features/database-table-access +``` +These steps will ensure your changes are integrated into the main branch and your repository remains organized. + +#### Publishing `SqlQueryClass` Module to PowerShell Gallery + +```powershell +$data = Get-MTProjectInfo +$ApiKey = "your-api-key-here" +Publish-Module -Path $data.OutputModuleDir -NuGetApiKey $ApiKey -Repository PowerShellGallery +``` ### New-SqlQueryDataSet Helper Function to Create Class Instance From 1def2e7b621848a52cac9cd4556c628de0c60fe3 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sat, 8 Feb 2025 01:52:15 -0500 Subject: [PATCH 13/20] Readme updates with build details --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 643af09..b13d628 100644 --- a/README.md +++ b/README.md @@ -156,7 +156,7 @@ These steps will ensure your changes are integrated into the main branch and you ```powershell $data = Get-MTProjectInfo $ApiKey = "your-api-key-here" -Publish-Module -Path $data.OutputModuleDir -NuGetApiKey $ApiKey -Repository PowerShellGallery +Publish-Module -Path $data.OutputModuleDir -NuGetApiKey $ApiKey -Repository PSGallery ``` ### New-SqlQueryDataSet Helper Function to Create Class Instance From 88caeb3cd4dc66269fb9bfca88c751810ac86a90 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sat, 8 Feb 2025 14:11:04 -0500 Subject: [PATCH 14/20] Added new branch to docs --- git_cheatsheet.md | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/git_cheatsheet.md b/git_cheatsheet.md index 2035ac7..8b7138c 100644 --- a/git_cheatsheet.md +++ b/git_cheatsheet.md @@ -400,18 +400,61 @@ git push origin master --force ## 2025-02-05 22:59:55 ```powershell +git fetch origin main +git checkout main +git reset --hard origin/main git pull origin main git checkout -b features/readme-updates +git checkout features/readme-updates git status +# Rename Branch +git branch -m features/database-table-access + +# Delete old branch from remote repository +git push origin --delete features/readme-updates + +# Push the renamed branch and set upstream: +git push --set-upstream origin features/database-table-access +git push origin features/database-table-access + +# Stage and Commit Your Changes: +git add . +git commit -m "Implemented database and table access functions" + +# Push Your Changes to the Remote Branch: +git push origin features/database-table-access + git commit -m "" git commit -a -m "Updated SQL query class and added error handling" - git push ``` +## 2025-02-08 14:08:55 + +```powershell +git fetch origin main +git checkout main +git reset --hard origin/main +git pull origin main + +git checkout -b features/reverse-parameters-for-AddQuery +git checkout features/reverse-parameters-for-AddQuery +git status + +# Rename Branch +git branch -m features/database-table-access + +# Delete old branch from remote repository +git push origin --delete features/readme-updates + +# Push the renamed branch and set upstream: +git push --set-upstream origin features/database-table-access +git push origin features/database-table-access +``` + ```powershell ``` From edfea6dab50237596a178bc31c7c73ea5e134f0d Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sat, 8 Feb 2025 14:21:09 -0500 Subject: [PATCH 15/20] Refactored AddQuery(tablename, query) from AddQuery(query, tablename) --- git_cheatsheet.md | 10 ++++------ src/private/SqlQueryClass.ps1 | 12 ++++++------ src/public/New-SqlQueryDataSet.ps1 | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/git_cheatsheet.md b/git_cheatsheet.md index 8b7138c..fef3c2c 100644 --- a/git_cheatsheet.md +++ b/git_cheatsheet.md @@ -444,15 +444,13 @@ git checkout -b features/reverse-parameters-for-AddQuery git checkout features/reverse-parameters-for-AddQuery git status -# Rename Branch -git branch -m features/database-table-access - # Delete old branch from remote repository -git push origin --delete features/readme-updates +# git push origin --delete features/reverse-parameters-for-AddQuery # Push the renamed branch and set upstream: -git push --set-upstream origin features/database-table-access -git push origin features/database-table-access +git push --set-upstream origin features/reverse-parameters-for-AddQuery +git push origin features/reverse-parameters-for-AddQuery + ``` ```powershell diff --git a/src/private/SqlQueryClass.ps1 b/src/private/SqlQueryClass.ps1 index c6947ed..1e580ca 100644 --- a/src/private/SqlQueryClass.ps1 +++ b/src/private/SqlQueryClass.ps1 @@ -74,7 +74,7 @@ $TestQuery.Database = $DatabaseName $TestQuery.ConnectionString = $ConnectionString $TestQuery.DisplayResults = $true -$TestQuery.AddQuery("SELECT @@VERSION FROM INFORMATION_SCHEMA.TABLES", 'Version') +$TestQuery.AddQuery('Version', "SELECT @@VERSION FROM INFORMATION_SCHEMA.TABLES") $TestQuery.Tables[0].Query = "SELECT TABLE_NAME, @@VERSION FROM INFORMATION_SCHEMA.TABLES" $TestQuery.Execute() @@ -104,7 +104,7 @@ $TestQuery $TestQuery -AddQuery Method int AddQuery(string Query), int AddQuery(string Query, string TableName) +AddQuery Method int AddQuery(string Query), int AddQuery(string TableName, string Query) BuildOleDbConnectionString Method string BuildOleDbConnectionString() Clear Method void Clear() CloseConnection Method void CloseConnection() @@ -246,7 +246,7 @@ PS C:\Git\SqlQueryEditor> $TestQuery | GM Name MemberType Definition ---- ---------- ---------- -AddQuery Method int AddQuery(string Query), int AddQuery(string Query, string TableName) +AddQuery Method int AddQuery(string Query), int AddQuery(string TableName, string Query) BuildOleDbConnectionString Method string BuildOleDbConnectionString() Clear Method void Clear() CloseConnection Method void CloseConnection() @@ -368,9 +368,9 @@ class SqlQueryDataSet { # Methods to Add New Table for Query and Results [int] AddQuery([String]$Query) { - Return $This.AddQuery($Query, [String]::Empty) + Return $This.AddQuery([String]::Empty, $Query) } - [int] AddQuery([String]$Query, [String]$TableName) { + [int] AddQuery([String]$TableName, [String]$Query) { If (-not $this.Tables) { $this.Tables = [System.Collections.Generic.List[SqlQueryTable]]::new() } @@ -667,7 +667,7 @@ class SqlQueryDataSet { [Object] ExecuteQuery([String]$TableName, [String]$SqlQuery) { If ($SqlQuery) { - $This.TableIndex = $This.AddQuery($SqlQuery, $TableName) + $This.TableIndex = $This.AddQuery($TableName, $SqlQuery) } $table = $This.Tables[$This.TableIndex] $table.ResultType = [ResultType]::DataTable diff --git a/src/public/New-SqlQueryDataSet.ps1 b/src/public/New-SqlQueryDataSet.ps1 index 00eda08..90da3cb 100644 --- a/src/public/New-SqlQueryDataSet.ps1 +++ b/src/public/New-SqlQueryDataSet.ps1 @@ -92,7 +92,7 @@ function New-SqlQueryDataSet { } if (-not [string]::IsNullOrEmpty($Query)) { if (-not [string]::IsNullOrEmpty($TableName)) { - [void]$instance.AddQuery($Query, $TableName) + [void]$instance.AddQuery($TableName, $Query) } else { [void]$instance.AddQuery($Query) } From 78c0c8306692c62cba5a7c904993853695b72625 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sat, 8 Feb 2025 22:09:39 -0500 Subject: [PATCH 16/20] Added Readme Content Generator to document Module --- Build-Readme.ps1 | 291 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 Build-Readme.ps1 diff --git a/Build-Readme.ps1 b/Build-Readme.ps1 new file mode 100644 index 0000000..7055a75 --- /dev/null +++ b/Build-Readme.ps1 @@ -0,0 +1,291 @@ +<# +. "C:\Git\SqlQueryClass\Build-Readme.ps1" -- Generates a README.md file but saves it as .\archive\ModuleDoc.md to prevent overwriting + +#> + + +<# #> +# $TestQuery.ExecuteQuery('DBTables', $Query) +# enum ResultType { DataTable; DataRows; DataAdapter; DataSet; NonQuery; } + +$projectData = Get-MTProjectInfo + +Remove-Module -Name SqlQueryClass -Force -Verbose +# Import-Module -Name SqlQueryClass -Force -Verbose +Import-Module C:\Git\SqlQueryClass\dist\SqlQueryClass\SqlQueryClass.psd1 -Verbose -Force + +# Configure Database settings for connection +$SqlServer = '(localdb)\MSSQLLocalDB' +$DatabaseName = 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf' +$ConnectionString = "Data Source={0};AttachDbFilename={1};Integrated Security=True" -f $SqlServer, $DatabaseName +$Query = "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME;" + +$TestQuery = New-SqlQueryDataSet -SQLServer $SqlServer -Database $DatabaseName -ConnectionString $ConnectionString -DisplayResults $false +[void]$TestQuery.AddQuery('DBTables', $Query) + +Function Get-ClassMemberData { + [CmdletBinding()] + [OutputType([PSCustomObject])] + Param ( + [Parameter( + Mandatory = $true, + Position = 0, + ValueFromPipeline = $true + )] + [PSObject]$InputObject, + [String[]]$excludeMembers + ) + Begin { + If ($InputObject -is [System.Array]) { + Throw "-InputObject cannot be an Array or Collection" + } + If (-not $excludeMembers) { + $excludeMembers = @' +GetType +ToString +Equals +GetHashCode +'@ -split [System.Environment]::NewLine + } + $retResult = [PSCustomObject]@{ + Properties = [System.Collections.Generic.List[PSCustomObject]]::new() + Methods = [System.Collections.Generic.List[PSCustomObject]]::new() + } + } + + Process { + $members = $InputObject.PSObject.Members.GetEnumerator() | Select-Object -Property MemberType, Name, OverloadDefinitions, TypeNameOfValue + ForEach ($member in $members) { + If ($member.Name -in $excludeMembers -or $member.Name.StartsWith('get_') -or $member.Name.StartsWith('set_')) { + Continue + } + If ($member.MemberType -eq 'Method') { + # Expand Each Overload + ForEach ($overLoad in $member.OverloadDefinitions) { + [void]$retResult.Methods.Add([PSCustomObject]@{ + Name = $member.Name + Syntax = $overLoad + }) + } + } ElseIf ($member.MemberType -in @('Property','NoteProperty')) { + [void]$retResult.Properties.Add([PSCustomObject]@{ + Name = $member.Name + Type = ($member.TypeNameOfValue -replace ', PowerShell Class Assembly, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null','') + }) + } Else { + Write-Warning "InputObject Has member of unexpected MemberType ($($member.MemberType)): $($member | Out-String)" + } + } + } + + End { + $retResult + } +} + + +# Initialize the Class Method and Property Data to document +$ClassData = $TestQuery | Get-ClassMemberData +If ([String]::IsNullOrEmpty($ClassData)) { + Throw "Get-ClassMemberData() Failed to retreive Class Members for `$TestQuery" +} +$ChildClassData = $TestQuery.Tables[0] | Get-ClassMemberData +If ([String]::IsNullOrEmpty($ChildClassData)) { + Throw "Get-ClassMemberData() Failed to retreive Class Members for `$TestQuery.Tables[0]" +} + +$psCodeStart = '```powershell' +$psCodeEnd = '```' +$eol = [System.Environment]::NewLine + +# ConvertTo-Markdown creates MarkDown Table from PS Object +. "C:\CMD\PowerShell\MarkDown\ConvertTo-Markdown.ps1" +#> + +# Reset the Class Report as MarkDown file +$fsoClassDoc = [System.IO.FileInfo]("C:\Git\SqlQueryClass\archive\ModuleDoc.md") +If ($fsoClassDoc.Exists) { $fsoClassDoc.Delete() } + +# Create String Bulder for Assembling the MarkDown output +$sb = [System.Text.StringBuilder]::new() + +# Configure Project and User specific settings used to keep the README.md file generator as generic as possible +$projectUri = $projectData.Manifest.ProjectUri +$githubAccount = $projectUri.Split('/') +$ownerId = $githubAccount[-2] +$ProjectName = $githubAccount[-1] # $projectData.ProjectName +$githubAccount = $githubAccount[0..($githubAccount.Count -2)] -join '/' + +# [void]$sb.AppendLine("# ``$ProjectName`` Module" + $eol) +# [void]$sb.AppendLine($projectData.Description + $eol) + +# Module Details +[void]$sb.AppendLine(@" +
+ +

$ProjectName

+

$($projectData.Description)

+ +
+ + +
+

+"@ + $eol) + +[void]$sb.AppendLine("# ``$($projectData.ProjectName)`` Module Details" + $eol) +[void]$sb.Append(((Get-Module -Name "$($projectData.ProjectName)") | Select-Object -Property Name, Version, @{L='PS Compatiblity'; E={$_.PowerShellHostVersion}}, @{L='Project Uri (GitHub)';E={('[{0}]({0})' -f $_.PrivateData.PSData.ProjectUri)}} | ConvertTo-Markdown | Out-String)) + +# Module Documentation Links / Uri +$docLinks = ((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData).GetEnumerator().Where({$_.Name -like '*Uri'}) | + Select-Object -Property @{L='DocLink'; E={$_.Name}}, @{L='Uri'; E={$_.Value}} +# How to add additional Links +# $docLinks += [PSCustomObject]@{ +# DocLink='Test' +# Uri='https://www.brooksvaughn.net' +# } +<# Table of Links # > +((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData).GetEnumerator().Where({$_.Name -like '*Uri'}) | + Select-Object -Property @{L='Link'; E={$_.Name}}, @{L='Uri'; E={$_.Value}} | + ConvertTo-Markdown | Out-File -FilePath $fsoClassDoc.FullName -Encoding utf8 -Width 999 -Append +#> +[void]$sb.AppendLine("## Module Links to License and GitHub Project" + $eol) +[void]$sb.AppendLine(($docLinks.ForEach({"`n- [{0}]({1})" -f $_.DocLink, $_.Uri}).Trim() | Out-String)) + +# Module Tags +# (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData.Tags| Select-Object -Property @{L='Tags'; E={$_}} | ConvertTo-Markdown +[void]$sb.AppendLine("## Module Tags" + $eol) +[void]$sb.AppendLine("[$((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData.Tags -join '], [')]" + $eol) + +# Module Exported Functions +# (Get-Module -Name "$($projectData.ProjectName)") | FL +# (Get-Module -Name "$($projectData.ProjectName)").ExportedFunctions.GetEnumerator().Key | Select-Object -Property Key +# (Get-Module -Name "$($projectData.ProjectName)").ExportedFunctions.Keys +# (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value)}) | Select-Object -Property Name, Value +# (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData | FT -AutoSize -Force -Wrap +[void]$sb.AppendLine("## ``$($projectData.ProjectName)`` Module Exported Functions" + $eol) +[void]$sb.AppendLine($psCodeStart) +[void]$sb.AppendLine("Get-Command -Module `"$($projectData.ProjectName)`" -Syntax") +[void]$sb.AppendLine($psCodeEnd + $eol) +[void]$sb.AppendLine((((Get-Command -Module "$($projectData.ProjectName)" -Syntax) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_) -and $_ -notlike '*CommonParameters*'}).ForEach({'- {0}' -f $_}) | Out-String)) + +<# +Common Help Metadata Fields Descriptions + +SYNOPSIS: A brief summary of what the cmdlet does. +DESCRIPTION: A detailed description of the cmdlet’s functionality. +PARAMETER: Descriptions for each parameter, detailing its purpose. +EXAMPLE: Examples showing how to use the cmdlet. +INPUTS: Types of objects that can be piped to the cmdlet (if any). +OUTPUTS: Types of objects that the cmdlet emits. +NOTES: Any additional notes, such as author information. +LINK: Links to related documentation or resources. +#> +$Lines = ForEach($foo in (Get-Command -Module "$($projectData.ProjectName)").Name) { + If ($foo -ne 'New-SqlQueryDataSet') { + # Continue + } + $header = [string]::Empty + # Get-Command -Name $foo -Syntax + "### $foo" + $eol + $psCodeStart + ForEach ($line in ((Get-Help -Name $foo | Out-String) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_)})) { + Switch -Regex ($line) { + '^\s{4}None$' {$header = [string]::Empty; break} + # Common Help Metadata Fields + '^NAME$' {$header = $line; break} + '^SYNTAX$' {$header = $line; break} + '^ALIASES$' {$header = $line; break} + '^REMARKS$' {$header = $line; break} + '^DESCRIPTION$' {$header = $line; break} + '^RELATED LINKS$' {$header = $line; break} + '^REMARKS$' {$header = $line; break} + '^SYNOPSIS$' {$header = $line; break} + '^PARAMETERS$' {$header = $line; break} + '^INPUTS$' {$header = $line; break} + '^OUTPUTS$' {$header = $line; break} + '^EXAMPLES$' {$header = $line; break} + '^NOTES$' {$header = $line; break} + '^RELATED LINKS$' {$header = $line; break} + # Module / Manifest Help Metadata Fields + '^TOPIC$' {$header = $line; break} + '^SHORT DESCRIPTION$' {$header = $line; break} + '^LONG DESCRIPTION$' {$header = $line; break} + '^AUTHOR$' {$header = $line; break} + '^COMPANYNAME$' {$header = $line; break} + '^COPYRIGHT$' {$header = $line; break} + '^TAGS$' {$header = $line; break} + '^FUNCTIONSTOEXPORT$' {$header = $line; break} + '^CMDLETSTOEXPORT$' {$header = $line; break} + '^REQUIREDMODULES$' {$header = $line; break} + '^REQUIREDASSEMBLIES$' {$header = $line; break} + '^VERSION$' {$header = $line; break} + '^HELPURI$' {$header = $line; break} + '^MODULEVERSION$' {$header = $line; break} + '^GUID$' {$header = $line; break} + '^VARIABLESTOEXPORT$' {$header = $line; break} + '^ALIASESTOEXPORT$' {$header = $line; break} + '^PROJECTURI$' {$header = $line; break} + '^LICENSEURI$' {$header = $line; break} + '^RELEASENOTES$' {$header = $line; break} + Default { + If (-not [string]::IsNullOrWhiteSpace($header)) { + $header + $header = [string]::Empty + } + $line + } + } + } + $psCodeEnd +} +[void]$sb.AppendLine(($Lines | Out-String).TrimEnd() + $eol) + +# Class Details +[void]$sb.AppendLine("## [$($TestQuery.GetType().Name)] Parent Class Details" + $eol) +[void]$sb.AppendLine("Instances of [$($TestQuery.GetType().Name)] Parent Class are created using the New-SqlQueryDataSet() helper CmdLet. The object returned id of type [$($TestQuery.GetType().Name)]. The properties and methods are used to manage and configure database information and connections, manages creation of the Child Class, executes queries, and saves the results. Instances of Child Classes are collected in the Tables property of the Parent Class. Tables is a collecton of [$($TestQuery.Tables[0].GetType().Name)] objects. One is created for every unique query that was added or executed." + $eol) +[void]$sb.AppendLine("Each instanace of the [$($TestQuery.Tables[0].GetType().Name)] Class, holds the Query configuration and execution results." + $eol) +[void]$sb.AppendLine("For technical information, See" + $eol) +[void]$sb.AppendLine("- Get-Help New-SqlQueryDataSet -Full") +[void]$sb.AppendLine("- $($ProjectRoot)\tests\New-SqlQueryDataSets.tests.ps1 has full usage examples used to validate usage" + $eol) + +# Parent Class Properties +[void]$sb.AppendLine("### Class [$($TestQuery.GetType().Name)] Properties" + $eol) +If ([string]::IsNullOrEmpty($ClassData.Properties)) { + [void]$sb.AppendLine("Class Has No Properties") +} Else { + [void]$sb.AppendLine(($ClassData.properties | Select-Object -Property Name, @{L='Type'; E={"[$($_.Type)]"}} | ConvertTo-Markdown | Out-String)) +} +# Parent Class Methods +[void]$sb.AppendLine("### Class [$($TestQuery.GetType().Name)] Methods" + $eol) +If ([string]::IsNullOrEmpty($ClassData.Methods)) { + [void]$sb.AppendLine("Class Has No Methods") +} Else { + [void]$sb.AppendLine(($ClassData.Methods | Select-Object -Property Name, Syntax | ConvertTo-Markdown | Out-String)) +} + +# Child Class Properties +[void]$sb.AppendLine("### Child Class [$($TestQuery.Tables[0].GetType().Name)] Properties" + $eol) +If ([string]::IsNullOrEmpty($ChildClassData.Properties)) { + [void]$sb.AppendLine("Class Has No Properties") +} Else { + [void]$sb.AppendLine(($ChildClassData.properties | Select-Object -Property Name, @{L='Type'; E={"[$($_.Type)]"}} | ConvertTo-Markdown | Out-String)) +} +# Child Class Methods +[void]$sb.AppendLine("### Child Class [$($TestQuery.Tables[0].GetType().Name)] Modules" + $eol) +If ([string]::IsNullOrEmpty($ChildClassData.Methods)) { + [void]$sb.AppendLine("Class Has No Methods") + } Else { + [void]$sb.AppendLine(($ChildClassData.Methods | Select-Object -Property Name, Syntax | ConvertTo-Markdown | Out-String)) + } + +# $sb.ToString() +$sb.ToString() | Out-File -FilePath $fsoClassDoc.FullName -Encoding utf8 -Width 999 -Append +Break +[void]$sb.AppendLine("" + $eol) +[void]$sb.AppendLine("" + $eol) +[void]$sb.AppendLine("" + $eol) +[void]$sb.AppendLine("" + $eol) +[void]$sb.AppendLine("" + $eol) +[void]$sb.AppendLine("" + $eol) From 24dff8b9016525dab468da3cdc48869f22cc640b Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sat, 8 Feb 2025 23:14:12 -0500 Subject: [PATCH 17/20] Format Cleanup --- Build-Readme.ps1 | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/Build-Readme.ps1 b/Build-Readme.ps1 index 7055a75..ce2960d 100644 --- a/Build-Readme.ps1 +++ b/Build-Readme.ps1 @@ -4,7 +4,7 @@ #> -<# #> +<# # > # $TestQuery.ExecuteQuery('DBTables', $Query) # enum ResultType { DataTable; DataRows; DataAdapter; DataSet; NonQuery; } @@ -102,6 +102,10 @@ $eol = [System.Environment]::NewLine . "C:\CMD\PowerShell\MarkDown\ConvertTo-Markdown.ps1" #> +#======================================================== +# Readme MarkDown Generation Starts Here !!! +#======================================================== + # Reset the Class Report as MarkDown file $fsoClassDoc = [System.IO.FileInfo]("C:\Git\SqlQueryClass\archive\ModuleDoc.md") If ($fsoClassDoc.Exists) { $fsoClassDoc.Delete() } @@ -115,27 +119,22 @@ $githubAccount = $projectUri.Split('/') $ownerId = $githubAccount[-2] $ProjectName = $githubAccount[-1] # $projectData.ProjectName $githubAccount = $githubAccount[0..($githubAccount.Count -2)] -join '/' +$ProjectRoot = $projectData.ProjectRoot -# [void]$sb.AppendLine("# ``$ProjectName`` Module" + $eol) -# [void]$sb.AppendLine($projectData.Description + $eol) +[void]$sb.AppendLine("# ``$ProjectName``" + $eol) +[void]$sb.AppendLine($projectData.Description + $eol) -# Module Details +## Module Details [void]$sb.AppendLine(@" -
- -

$ProjectName

-

$($projectData.Description)

- -
- - -
-

+[![maintainer](https://img.shields.io/badge/maintainer-$ownerId-orange)]($githubAccount) +[![contributors](https://img.shields.io/github/contributors/BrooksV/$ProjectName.svg)]($projectUri/graphs/contributors/) +[![last-commit](https://img.shields.io/github/last-commit/BrooksV/$ProjectName.svg)]($projectUri/commits/) +[![issues](https://img.shields.io/github/issues/BrooksV/$ProjectName.svg)]($projectUri/issues/) +[![issues-closed](https://img.shields.io/github/issues-closed/BrooksV/$ProjectName.svg)]($projectUri/issues?q=is%3Aissue+is%3Aclosed) "@ + $eol) [void]$sb.AppendLine("# ``$($projectData.ProjectName)`` Module Details" + $eol) -[void]$sb.Append(((Get-Module -Name "$($projectData.ProjectName)") | Select-Object -Property Name, Version, @{L='PS Compatiblity'; E={$_.PowerShellHostVersion}}, @{L='Project Uri (GitHub)';E={('[{0}]({0})' -f $_.PrivateData.PSData.ProjectUri)}} | ConvertTo-Markdown | Out-String)) +[void]$sb.Append(((Get-Module -Name "$($projectData.ProjectName)") | Select-Object -Property Name, Version, @{L='PS Compatiblity'; E={$_.PowerShellHostVersion}}, @{L='Project Uri (GitHub)';E={('[{0}]({0})' -f $_.PrivateData.PSData.ProjectUri)}} | ConvertTo-Markdown | Out-String) +$eol) # Module Documentation Links / Uri $docLinks = ((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData).GetEnumerator().Where({$_.Name -like '*Uri'}) | @@ -150,6 +149,7 @@ $docLinks = ((Get-Module -Name "$($projectData.ProjectName)").PSObject.Propertie Select-Object -Property @{L='Link'; E={$_.Name}}, @{L='Uri'; E={$_.Value}} | ConvertTo-Markdown | Out-File -FilePath $fsoClassDoc.FullName -Encoding utf8 -Width 999 -Append #> + [void]$sb.AppendLine("## Module Links to License and GitHub Project" + $eol) [void]$sb.AppendLine(($docLinks.ForEach({"`n- [{0}]({1})" -f $_.DocLink, $_.Uri}).Trim() | Out-String)) @@ -166,9 +166,10 @@ $docLinks = ((Get-Module -Name "$($projectData.ProjectName)").PSObject.Propertie # (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData | FT -AutoSize -Force -Wrap [void]$sb.AppendLine("## ``$($projectData.ProjectName)`` Module Exported Functions" + $eol) [void]$sb.AppendLine($psCodeStart) -[void]$sb.AppendLine("Get-Command -Module `"$($projectData.ProjectName)`" -Syntax") +[void]$sb.AppendLine("Get-Command -Module `"$($projectData.ProjectName)`" -Syntax"+ $eol) +# [void]$sb.AppendLine((((Get-Command -Module "$($projectData.ProjectName)" -Syntax) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_)}).ForEach({'- {0}' -f $_}) | Out-String).Replace('[]','')) +[void]$sb.AppendLine((((Get-Command -Module "$($projectData.ProjectName)" -Syntax) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_)}).ForEach({'- {0}' -f $_}) | Out-String).TrimEnd()) [void]$sb.AppendLine($psCodeEnd + $eol) -[void]$sb.AppendLine((((Get-Command -Module "$($projectData.ProjectName)" -Syntax) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_) -and $_ -notlike '*CommonParameters*'}).ForEach({'- {0}' -f $_}) | Out-String)) <# Common Help Metadata Fields Descriptions @@ -238,17 +239,17 @@ $Lines = ForEach($foo in (Get-Command -Module "$($projectData.ProjectName)").Nam } } } - $psCodeEnd + $psCodeEnd + $eol } [void]$sb.AppendLine(($Lines | Out-String).TrimEnd() + $eol) # Class Details [void]$sb.AppendLine("## [$($TestQuery.GetType().Name)] Parent Class Details" + $eol) [void]$sb.AppendLine("Instances of [$($TestQuery.GetType().Name)] Parent Class are created using the New-SqlQueryDataSet() helper CmdLet. The object returned id of type [$($TestQuery.GetType().Name)]. The properties and methods are used to manage and configure database information and connections, manages creation of the Child Class, executes queries, and saves the results. Instances of Child Classes are collected in the Tables property of the Parent Class. Tables is a collecton of [$($TestQuery.Tables[0].GetType().Name)] objects. One is created for every unique query that was added or executed." + $eol) -[void]$sb.AppendLine("Each instanace of the [$($TestQuery.Tables[0].GetType().Name)] Class, holds the Query configuration and execution results." + $eol) +[void]$sb.AppendLine("Each instance of the [$($TestQuery.Tables[0].GetType().Name)] Class, holds the Query configuration and execution results." + $eol) [void]$sb.AppendLine("For technical information, See" + $eol) [void]$sb.AppendLine("- Get-Help New-SqlQueryDataSet -Full") -[void]$sb.AppendLine("- $($ProjectRoot)\tests\New-SqlQueryDataSets.tests.ps1 has full usage examples used to validate usage" + $eol) +[void]$sb.AppendLine("- New-SqlQueryDataSets.tests.ps1 in the Tests ($ProjectRoot\tests\) folder has full usage examples used to validate usage" + $eol) # Parent Class Properties [void]$sb.AppendLine("### Class [$($TestQuery.GetType().Name)] Properties" + $eol) From 76777f0bc9ba8a42661fa7639bfdce49964febda Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sun, 9 Feb 2025 18:35:09 -0500 Subject: [PATCH 18/20] Restructured Readme and created contributor, api, wpf guides --- .gitignore | 4 +- Build-Readme.ps1 | 198 +++++++++++-- CODE_OF_CONDUCT.md | 79 ++++++ README.md | 542 +++++++++--------------------------- api.guide.md | 239 ++++++++++++++++ contributor.guide.md | 127 +++++++++ project.json | 4 +- tests/TestDatabase1.mdf | Bin 0 -> 3342336 bytes tests/TestDatabase1_log.ldf | Bin 0 -> 786432 bytes wpf.guide.md | 209 ++++++++++++++ 10 files changed, 976 insertions(+), 426 deletions(-) create mode 100644 CODE_OF_CONDUCT.md create mode 100644 api.guide.md create mode 100644 contributor.guide.md create mode 100644 tests/TestDatabase1.mdf create mode 100644 tests/TestDatabase1_log.ldf create mode 100644 wpf.guide.md diff --git a/.gitignore b/.gitignore index 1f08fe8..1075ba7 100644 --- a/.gitignore +++ b/.gitignore @@ -55,8 +55,8 @@ Modules/ *.old # SQL Server files -*.mdf -*.ldf +# *.mdf # Allowed for including tests sample database +# *.ldf # Allowed for including tests sample database *.ndf # VS Code files for those working on multiple tools diff --git a/Build-Readme.ps1 b/Build-Readme.ps1 index ce2960d..1f6bee1 100644 --- a/Build-Readme.ps1 +++ b/Build-Readme.ps1 @@ -4,7 +4,7 @@ #> -<# # > +<# #> # $TestQuery.ExecuteQuery('DBTables', $Query) # enum ResultType { DataTable; DataRows; DataAdapter; DataSet; NonQuery; } @@ -87,11 +87,11 @@ GetHashCode # Initialize the Class Method and Property Data to document $ClassData = $TestQuery | Get-ClassMemberData If ([String]::IsNullOrEmpty($ClassData)) { - Throw "Get-ClassMemberData() Failed to retreive Class Members for `$TestQuery" + Throw "Get-ClassMemberData() Failed to retrieve Class Members for `$TestQuery" } $ChildClassData = $TestQuery.Tables[0] | Get-ClassMemberData If ([String]::IsNullOrEmpty($ChildClassData)) { - Throw "Get-ClassMemberData() Failed to retreive Class Members for `$TestQuery.Tables[0]" + Throw "Get-ClassMemberData() Failed to retrieve Class Members for `$TestQuery.Tables[0]" } $psCodeStart = '```powershell' @@ -110,7 +110,7 @@ $eol = [System.Environment]::NewLine $fsoClassDoc = [System.IO.FileInfo]("C:\Git\SqlQueryClass\archive\ModuleDoc.md") If ($fsoClassDoc.Exists) { $fsoClassDoc.Delete() } -# Create String Bulder for Assembling the MarkDown output +# Create String Builder for Assembling the MarkDown output $sb = [System.Text.StringBuilder]::new() # Configure Project and User specific settings used to keep the README.md file generator as generic as possible @@ -124,17 +124,13 @@ $ProjectRoot = $projectData.ProjectRoot [void]$sb.AppendLine("# ``$ProjectName``" + $eol) [void]$sb.AppendLine($projectData.Description + $eol) -## Module Details -[void]$sb.AppendLine(@" -[![maintainer](https://img.shields.io/badge/maintainer-$ownerId-orange)]($githubAccount) -[![contributors](https://img.shields.io/github/contributors/BrooksV/$ProjectName.svg)]($projectUri/graphs/contributors/) -[![last-commit](https://img.shields.io/github/last-commit/BrooksV/$ProjectName.svg)]($projectUri/commits/) -[![issues](https://img.shields.io/github/issues/BrooksV/$ProjectName.svg)]($projectUri/issues/) -[![issues-closed](https://img.shields.io/github/issues-closed/BrooksV/$ProjectName.svg)]($projectUri/issues?q=is%3Aissue+is%3Aclosed) -"@ + $eol) +# Badges +# To use a different label +# [BadgeIOCount]: https://img.shields.io/powershellgallery/dt/SqlQueryClass?label=SqlQueryClass%40PowerShell%20Gallery +# ![Coverage](https://img.shields.io/codecov/c/github/$ownerId/$ProjectName) -[void]$sb.AppendLine("# ``$($projectData.ProjectName)`` Module Details" + $eol) -[void]$sb.Append(((Get-Module -Name "$($projectData.ProjectName)") | Select-Object -Property Name, Version, @{L='PS Compatiblity'; E={$_.PowerShellHostVersion}}, @{L='Project Uri (GitHub)';E={('[{0}]({0})' -f $_.PrivateData.PSData.ProjectUri)}} | ConvertTo-Markdown | Out-String) +$eol) +[void]$sb.AppendLine("## ``$($projectData.ProjectName)`` Module and Status Details" + $eol) +[void]$sb.Append(((Get-Module -Name "$($projectData.ProjectName)") | Select-Object -Property Name, Version, @{L='PS Compatibility'; E={$_.PowerShellHostVersion}}, @{L='Project Uri (GitHub)';E={('[{0}]({0})' -f $_.PrivateData.PSData.ProjectUri)}} | ConvertTo-Markdown | Out-String) +$eol) # Module Documentation Links / Uri $docLinks = ((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData).GetEnumerator().Where({$_.Name -like '*Uri'}) | @@ -150,14 +146,180 @@ $docLinks = ((Get-Module -Name "$($projectData.ProjectName)").PSObject.Propertie ConvertTo-Markdown | Out-File -FilePath $fsoClassDoc.FullName -Encoding utf8 -Width 999 -Append #> -[void]$sb.AppendLine("## Module Links to License and GitHub Project" + $eol) +[void]$sb.AppendLine(@" +[PSGalleryLink]: https://www.powershellgallery.com/packages/$ProjectName/ +[BadgeIOCount]: https://img.shields.io/powershellgallery/dt/$ProjectName.svg?label=downoads%20$ProjectName%40PSGallery +[WorkFlowStatus]: https://img.shields.io/github/actions/workflow/status/$ownerId/$ProjectName/tests.yml?label=tests.yml%20build + +[![maintainer](https://img.shields.io/badge/maintainer-$ownerId-orange)]($githubAccount) +[![License](https://img.shields.io/github/license/$ownerId/$ProjectName)]($projectUri/blob/main/LICENSE) +[![contributors](https://img.shields.io/github/contributors/$ownerId/$ProjectName.svg)]($projectUri/graphs/contributors/) +[![last-commit](https://img.shields.io/github/last-commit/$ownerId/$ProjectName.svg)]($projectUri/commits/) +[![issues](https://img.shields.io/github/issues/$ownerId/$ProjectName.svg)]($projectUri/issues/) +[![issues-closed](https://img.shields.io/github/issues-closed/$ownerId/$ProjectName.svg)]($projectUri/issues?q=is%3Aissue+is%3Aclosed) + +[![GitHub stars](https://img.shields.io/github/stars/$ownerId/$ProjectName.svg)]($projectUri/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/$ownerId/$ProjectName.svg)]($projectUri/network/members) +[![GitHub pull requests](https://img.shields.io/github/issues-pr/$ownerId/$ProjectName.svg)]($projectUri/pulls) + +### Build and Release Statistics + +[![$ProjectName@PowerShell Gallery][BadgeIOCount]][PSGalleryLink] +![WorkFlow Status][WorkFlowStatus] +![Build Status](https://img.shields.io/github/actions/workflow/status/$ownerId/$ProjectName/ci.yml?label=ci.yml%20build) +![Version](https://img.shields.io/github/v/release/$ownerId/$ProjectName.svg?label=version) + +![GitHub All Releases](https://img.shields.io/github/downloads/$ownerId/$ProjectName/total.svg?label=release%20dl%20all%40GitHub) +![GitHub release (latest by date)](https://img.shields.io/github/downloads/$ownerId/$ProjectName/latest/total.svg?label=release%20dl%20by%20date%40GitHub) +![Downloads](https://img.shields.io/github/downloads/$ownerId/$ProjectName/total.svg?label=total%20release%20dl%40GitHub) +"@ + $eol) + +[void]$sb.AppendLine("### Module Links to License and GitHub Project" + $eol) [void]$sb.AppendLine(($docLinks.ForEach({"`n- [{0}]({1})" -f $_.DocLink, $_.Uri}).Trim() | Out-String)) # Module Tags # (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData.Tags| Select-Object -Property @{L='Tags'; E={$_}} | ConvertTo-Markdown -[void]$sb.AppendLine("## Module Tags" + $eol) +[void]$sb.AppendLine("### Module Tags" + $eol) [void]$sb.AppendLine("[$((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData.Tags -join '], [')]" + $eol) +# Module Installation +[void]$sb.AppendLine("## Installation" + $eol) +[void]$sb.AppendLine(@" +$psCodeStart +Install-Module -Name $($ProjectName) -Repository PSGallery -Scope CurrentUser +$psCodeEnd + +To load a local build of the module, use `Import-Module` as follows: + +$psCodeStart +Import-Module -Name "$($projectData.ManifestFilePSD1)" -Force -verbose +$psCodeEnd + +### Requirements + +- Tested with PowerShell 5.1 and 7.5x +- No known dependencies for usage +- VS Code and clone [Brooks Vaughn's $ProjectName]($projectUri) Repository +- Module build process uses [Manjunath Beli's](https://github.com/belibug) [ModuleTools](https://github.com/belibug) module. + +### ToDo + +- [ ] Seek peer review and comments +- [ ] Integrate feedback +- [ ] Improve Documentation +- [ ] Complete Build-Readme.ps1 script that generates the README.md file + +## How Build ``$ProjectName`` Module + +### Setup + +- Uses SQL Express but should work with other SQL Databases with proper connection strings and credentials +- Requires VS Code +- For Contributors, Fork the [$ProjectName]($projectUri) repository +- Clone the repository or fork to local pc. I like using c:\git as my local repository folder. Subfolder `$ProjectName` will be created with the GiHib repository contents +- Install [Manjunath Beli's ModuleTools](https://github.com/belibug/ModuleTools) module as the module build process uses ModuleTools +- - Find-Module -Name ModuleTools | Install-Module -Scope CurrentUser -Verbose +- Note that a sample SQL Express database file (.\tests\TestDatabase1.mdf) is included for pester tests. The database configuration is set in .\tests\TestDatabase1.parameters.psd1 + +#### Source Files used in the Module + +- Public functions that are exported, are separate files in the .\src\public folder. +- Private functions that are local to the Module, are separate files in the .\src\private folder. +- - Class Definitions and Enums are not accessible outside of the Module and cannot be accessed directly like Public Functions are. This is a PowerShell limitation. +- - - Classes [SqlQueryDataSet] and [SqlQueryDataSetParms] and enum ResultType used in the Module are defined in file .\src\private\$ProjectName.ps1 file. The classes have properties and methods used to maintain a Database connections and result sets making it useful WPF Data binding. +- Resources are files and folders in the .\src\resources folder that needs to be included with the Manifest and Module + +#### ``$ProjectName`` Module Build Process + +- Create a local branch for your changes +- - Use descriptive name that reflects the type of changes for branch for example features/database-table-access +- Update the build version using Update-MTModuleVersion (Find-Module -Name ModuleTools) +- Commit your changes to the branch +- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) +- Build the Module output using Invoke-MTBuild -Verbose (Find-Module -Name ModuleTools) +- - Outputs to the .\dist\$ProjectName folder +- - Combines the file contents of the files in Public and Private folder into .\dist\$ProjectName\$ProjectName.psd1 and exports the Public Functions +- - Generates the .\dist\$ProjectName\$ProjectName.psd1 Manifest file from the settings in .\project.json +- - Resources (.\src\resources) folder content is copied to .\dist\$ProjectName folder +- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) +- Make corrections, repeat the build process +- For Contributors +- - Create an Issue if one does not exist that addresses the proposed changes +- - Upstream your branch +- - Create a Pull request + +#### Publishing ``$ProjectName`` Module to GitHub + +Stage and Commit Your Changes + +$psCodeStart +git add . +git commit -m "Implemented database and table access functions" +$psCodeEnd + +Update remote repository with branch changes + +$psCodeStart +# List status of remote repository +git branch -r +# Create Branch on remote repository if needed +# git push --set-upstream origin features/database-table-access +# Push branch changes to remote branch in repository +git push origin features/database-table-access +$psCodeEnd + +Create a Pull Request on remote repository + +- Go to [$ProjectName GitHub repository]($projectUri) +- Click on "Compare & pull request" for your branch +- Provide a meaningful title and description for the PR +- Select the base branch (main) to merge into +- Click "Create pull request" + +Code Review and Feedback + +- Engage with Repository Owner or collaborators to review the PR +- Address any feedback or requested changes by making additional commits to your branch and pushing them to the remote branch +- Ensure the PR passes any automated tests or checks + +Merge the Pull Request + +- Once the PR is approved and all checks pass, you can merge it into the main branch +- You can either use the "Merge pull request" button on GitHub or merge it locally and push the changes + +Cleanup + +- After merging, you can delete the feature branch from the remote repository to keep it clean + +$psCodeStart +git push origin --delete features/database-table-access +$psCodeEnd + +- Optionally, delete the local branch + +$psCodeStart +git branch -d features/database-table-access +$psCodeEnd + +These steps will ensure your changes are integrated into the main branch and your repository remains organized. + +#### Publishing ``$ProjectName`` Module to PowerShell Gallery + +$psCodeStart +`$data = Get-MTProjectInfo +`$ApiKey = "your-api-key-here" +Publish-Module -Path `$data.OutputModuleDir -NuGetApiKey `$ApiKey -Repository PSGallery +$psCodeEnd + +### New-SqlQueryDataSet Helper Function to Create Class Instance + +The main cmdlet provided by this module is New-SqlQueryDataSet, which returns an object instance of [SqlQueryDataSet] class. Note that all the parameters are optional. + +$psCodeStart +`$testQuery = New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] +$psCodeEnd +"@ + $eol) + # Module Exported Functions # (Get-Module -Name "$($projectData.ProjectName)") | FL # (Get-Module -Name "$($projectData.ProjectName)").ExportedFunctions.GetEnumerator().Key | Select-Object -Property Key @@ -244,8 +406,8 @@ $Lines = ForEach($foo in (Get-Command -Module "$($projectData.ProjectName)").Nam [void]$sb.AppendLine(($Lines | Out-String).TrimEnd() + $eol) # Class Details -[void]$sb.AppendLine("## [$($TestQuery.GetType().Name)] Parent Class Details" + $eol) -[void]$sb.AppendLine("Instances of [$($TestQuery.GetType().Name)] Parent Class are created using the New-SqlQueryDataSet() helper CmdLet. The object returned id of type [$($TestQuery.GetType().Name)]. The properties and methods are used to manage and configure database information and connections, manages creation of the Child Class, executes queries, and saves the results. Instances of Child Classes are collected in the Tables property of the Parent Class. Tables is a collecton of [$($TestQuery.Tables[0].GetType().Name)] objects. One is created for every unique query that was added or executed." + $eol) +[void]$sb.AppendLine("### [$($TestQuery.GetType().Name)] Parent Class Details" + $eol) +[void]$sb.AppendLine("Instances of [$($TestQuery.GetType().Name)] Parent Class are created using the New-SqlQueryDataSet() helper CmdLet. The object returned id of type [$($TestQuery.GetType().Name)]. The properties and methods are used to manage and configure database information and connections, manages creation of the Child Class, executes queries, and saves the results. Instances of Child Classes are collected in the Tables property of the Parent Class. Tables is a collection of [$($TestQuery.Tables[0].GetType().Name)] objects. One is created for every unique query that was added or executed." + $eol) [void]$sb.AppendLine("Each instance of the [$($TestQuery.Tables[0].GetType().Name)] Class, holds the Query configuration and execution results." + $eol) [void]$sb.AppendLine("For technical information, See" + $eol) [void]$sb.AppendLine("- Get-Help New-SqlQueryDataSet -Full") diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..7e11181 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,79 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [BrooksV](https://github.com/BrooksV). All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of actions. + +**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). + +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). + +For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq). Translations are available at [https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations). + +[homepage]: https://www.contributor-covenant.org diff --git a/README.md b/README.md index b13d628..c2bfcee 100644 --- a/README.md +++ b/README.md @@ -1,481 +1,215 @@ -
-

SqlQueryClass

-

Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, DataRows, or NonQuery result object.

- -
- - -
-

- # SqlQueryClass -Provides functionality for executing SQL queries and managing SQL datasets - -## Description - -The SqlQueryClass module provides a set of functions and cmdlets for working with SQL Server databases. It includes functionality for connecting to a SQL Server, executing SQL queries, and managing the results in datasets. - -[![SqlQueryClass@PowerShell Gallery][BadgeIOCount]][PSGalleryLink] -![WorkFlow Status][WorkFlowStatus] - -## Module Install - -SqlQueryClass is in early development phase. Please read through [ChangeLog](/CHANGELOG.md) for all updates. - -Stable releases can be installed from the PowerShell Gallery: - -```PowerShell -Install-Module -Name SqlQueryClass -Verbose -``` - -To load a local build of the module, use `Import-Module` as follows: - -```PowerShell -Import-Module -Name ".\dist\SqlQueryClass\SqlQueryClass.psd1" -Force -verbose -``` +The SqlQueryClass module provides a set of functions and cmdlets for working with SQL databases. It includes functionality for connecting, executing SQL queries, and managing output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result objects. -## Requirements +## `SqlQueryClass` Module and Status Details -- Tested with PowerShell 5.1 and 7.5x -- No known dependencies for usage -- VS Code and clone [Brooks Vaughn's SqlQueryClass](https://github.com/BrooksV/SqlQueryClass) Repository -- Module build process uses [Manjunath Beli's](https://github.com/belibug) [ModuleTools](https://github.com/belibug) module. - -## ToDo - -- [ ] Seek peer review and comments -- [ ] Integrate feedback -- [ ] Improve Documentation - -## LONG DESCRIPTION - -This module is designed to simplify database operations and improve productivity by offering a set of easy-to-use cmdlets. - -Classes [SqlQueryDataSet] and [SqlQueryTable] are defined in the `.\src\private\SqlQueryClass.ps1` file. - -New-SqlQueryDataSet helper function is used to creates an instance of the [SqlQueryDataSet] class. This is necessary as classes within modules are local to the module and are not directly accessible outside of the module. - -It is best to read the details in the details `.\src\private\SqlQueryClass.ps1` and in `.\src\public\New-SqlQueryDataSet.ps1` files. - -## How Build `SqlQueryClass` Module - -### Setup - -- Uses SQL Express but should work with other SQL Databases with proper connection strings and credentials -- Requires VS Code -- For Contributors, Fork the [SqlQueryClass](https://github.com/BrooksV/SqlQueryClass) repository -- Clone the repository or fork to local pc. I like using c:\git as my local repository folder. Subfolder `SqlQueryClass` will be created with the GiHib repository contents -- Install [Manjunath Beli's ModuleTools](https://github.com/belibug/ModuleTools) module as the module build process uses ModuleTools -- - Find-Module -Name ModuleTools | Install-Module -Scope CurrentUser -Verbose -- Note that a sample SQL Express database file (.\tests\TestDatabase1.mdf) is included for pester tests. The database configuration is set in .\tests\TestDatabase1.parameters.psd1 - -#### Source Files used in the Module - -- Public functions that are exported, are separate files in the .\src\public folder. -- Private functions that are local to the Module, are separate files in the .\src\private folder. -- - Class Definitions and Enums are not accessible outside of the Module and cannot be accessed directly like Public Functions are. This is a PowerShell limitation. -- - - Classes [SqlQueryDataSet] and [SqlQueryDataSetParms] and enum ResultType used in the Module are defined in file .\src\private\SqlQueryClass.ps1 file. The classes have properties and methods used to maintain a Database connections and result sets making it useful WPF Data binding. -- Resources are files and folders in the .\src\resources folder that needs to be included with the Manifest and Module - -#### `SqlQueryClass` Module Build Process - -- Create a local branch for your changes -- - Use descriptive name that reflects the type of changes for branch for example features/database-table-access -- Update the build version using Update-MTModuleVersion (Find-Module -Name ModuleTools) -- Commit your changes to the branch -- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) -- Build the Module output using Invoke-MTBuild -Verbose (Find-Module -Name ModuleTools) -- - Outputs to the .\dist\SqlQueryClass folder -- - Combines the file contents of the files in Public and Private folder into .\dist\SqlQueryClass\SqlQueryClass.psd1 and exports the Public Functions -- - Generates the .\dist\SqlQueryClass\SqlQueryClass.psd1 Manifest file from the settings in .\project.json -- - Resources (.\src\resources) folder content is copied to .\dist\SqlQueryClass folder -- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) -- Make corrections, repeat the build process -- For Contributors -- - Create an Issue if one does not exist that addresses the proposed changes -- - Upstream your branch -- - Create a Pull request - -#### Publishing `SqlQueryClass` Module to GitHub - -Stage and Commit Your Changes - -```powershell -git add . -git commit -m "Implemented database and table access functions" -``` - -Update remote repository with branch changes - -```powershell -# List status of remote repository -git branch -r -# Create Branch on remote repository if needed -# git push --set-upstream origin features/database-table-access -# Push branch changes to remote branch in repository -git push origin features/database-table-access -``` +Name | Version | PS Compatibility | Project Uri (GitHub) +------------- | ------- | ---------------- | ------------------------------------------------------------------------------------ +SqlQueryClass | 0.1.1 | 5.1 | [https://github.com/BrooksV/SqlQueryClass](https://github.com/BrooksV/SqlQueryClass) -Create a Pull Request on remote repository +[PSGalleryLink]: https://www.powershellgallery.com/packages/SqlQueryClass/ +[BadgeIOCount]: https://img.shields.io/powershellgallery/dt/SqlQueryClass.svg?label=downoads%20SqlQueryClass%40PSGallery +[WorkFlowStatus]: https://img.shields.io/github/actions/workflow/status/BrooksV/SqlQueryClass/tests.yml?label=tests.yml%20build -- Go to [SqlQueryClass GitHub repository](https://github.com/BrooksV/SqlQueryClass) -- Click on "Compare & pull request" for your branch -- Provide a meaningful title and description for the PR -- Select the base branch (main) to merge into -- Click "Create pull request" +[![maintainer](https://img.shields.io/badge/maintainer-BrooksV-orange)](https://github.com/BrooksV) +[![License](https://img.shields.io/github/license/BrooksV/SqlQueryClass)](https://github.com/BrooksV/SqlQueryClass/blob/main/LICENSE) +[![contributors](https://img.shields.io/github/contributors/BrooksV/SqlQueryClass.svg)](https://github.com/BrooksV/SqlQueryClass/graphs/contributors/) +[![last-commit](https://img.shields.io/github/last-commit/BroksV/SqlQueryClass.svg)](https://github.com/BrooksV/SqlQueryClass/commits/) +[![issues](https://img.shields.io/github/issues/BrooksV/SqlQueryClass.svg)](https://github.com/BrooksV/SqlQueryClass/issues/) +[![issues-closed](https://img.shields.io/github/issues-closed/BrooksV/SqlQueryClass.svg)](https://github.com/BrooksV/SqlQueryClass/issues?q=is%3Aissue+is%3Aclosed) +[![GitHub stars](https://img.shields.io/github/stars/BrooksV/SqlQueryClass.svg)](https://github.com/BrooksV/SqlQueryClass/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/BrooksV/SqlQueryClass.svg)](https://github.com/BrooksV/SqlQueryClass/network/members) +[![GitHub pull requests](https://img.shields.io/github/issues-pr/BrooksV/SqlQueryClass.svg)](https://github.com/BrooksV/SqlQueryClass/pulls) -Code Review and Feedback +### Build and Release Statistics -- Engage with Repository Owner or collaborators to review the PR -- Address any feedback or requested changes by making additional commits to your branch and pushing them to the remote branch -- Ensure the PR passes any automated tests or checks +[![SqlQueryClass@PowerShell Gallery][BadgeIOCount]][PSGalleryLink] +![WorkFlow Status][WorkFlowStatus] +![Build Status](https://img.shields.io/github/actions/workflow/status/BrooksV/SqlQueryClass/ci.yml?label=ci.yml%20build) -Merge the Pull Request +![Version](https://img.shields.io/github/v/release/BrooksV/SqlQueryClass.svg?label=version) +![GitHub All Releases](https://img.shields.io/github/downloads/BrooksV/SqlQueryClass/total.svg?label=release%20dl%20all%40GitHub) +![GitHub release (latest by date)](https://img.shields.io/github/downloads/BrooksV/SqlQueryClass/latest/total.svg?label=release%20dl%20by%20date%40GitHub) +![Downloads](https://img.shields.io/github/downloads/BrooksV/SqlQueryClass/total.svg?label=total%20release%20dl%40GitHub) -- Once the PR is approved and all checks pass, you can merge it into the main branch -- You can either use the "Merge pull request" button on GitHub or merge it locally and push the changes +### Related Links -Cleanup +- [LicenseUri](https://github.com/BrooksV/SqlQueryClass/blob/main/LICENSE) +- [ProjectUri](https://github.com/BrooksV/SqlQueryClass) -- After merging, you can delete the feature branch from the remote repository to keep it clean +### Module Tags / Keywords -```powershell -git push origin --delete features/database-table-access -``` +[PowerShell], [Database], [SQL], [SQLServer], [SQLQuery], [DataAdapter], [DataSet], [DataTable] -- Optionally, delete the local branch +## Installation ```powershell -git branch -d features/database-table-access +Install-Module -Name SqlQueryClass -Repository PSGallery -Scope CurrentUser ``` -These steps will ensure your changes are integrated into the main branch and your repository remains organized. -#### Publishing `SqlQueryClass` Module to PowerShell Gallery +To load a local build of the module, use Import-Module as follows: ```powershell -$data = Get-MTProjectInfo -$ApiKey = "your-api-key-here" -Publish-Module -Path $data.OutputModuleDir -NuGetApiKey $ApiKey -Repository PSGallery +Import-Module -Name "C:\Git\SqlQueryClass\dist\SqlQueryClass\SqlQueryClass.psd1" -Force -verbose ``` -### New-SqlQueryDataSet Helper Function to Create Class Instance +### Requirements -The main cmdlet provided by this module is New-SqlQueryDataSet, which returns an object instance of [SqlQueryDataSet] class. Note that all the parameters are optional. +- Tested with PowerShell 5.1 and 7.5x +- No known dependencies for usage +- VS Code and clone [Brooks Vaughn's SqlQueryClass](https://github.com/BrooksV/SqlQueryClass) Repository +- Module build process uses [Manjunath Beli's](https://github.com/belibug) [ModuleTools](https://github.com/belibug) module. +- Test scripts requires the Pester module and SQL Express +- Includes sample SQL Express database file used in test scripts -```powershell -$testQuery = New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] -``` +### Features -#### Other Helper Functions in the SqlQueryClass Module +- Includes helper functions (not used by the Classes as they have there own methods for database access and management) +- - Class Constructor +- - SQL Query and NonQuery execute functions +- - Attach and Detach Database functions +- - List Database and Table functions +- - Create SQL Connection function +- Uses PowerShell Classes to: +- - Manage database connections and configuration persistence +- - Execute SQL queries +- - Manage multiple SQL Query configurations and execution results as persist data +- - Supports multiple query types, output data types +- - Includes database schema, table, and DDL methods +- - Support for multiple SQL servers using multiple instances of the parent class -```powershell -Get-Command -Module SqlQueryClass -Syntax - -Dismount-Database [[-connectionString] ] [[-Database] ] [-Quiet] -Get-Database [[-connectionString] ] [[-query] ] [-Quiet] -Get-DatabaseTable [[-connectionString] ] [[-query] ] [-Quiet] -Invoke-DatabaseNonQuery [[-connectionString] ] [[-NonQuery] ] [-Quiet] -Invoke-DatabaseQuery [[-connectionString] ] [[-query] ] [-Quiet] -Mount-Database [[-connectionString] ] [[-Database] ] [[-DatabaseFilePath] ] [-Quiet] -New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] -``` +## Usage -## Summary of Classes +The SqlQueryClass Module was developed to support data binding of WPF (Windows Presentation Framework) elements to DataTables and uses SQL Adapter features for CRUD operations. Having a single class object is very convenient since it allows for maintaining connectivity, queries, and results. -An instance of Class [SqlQueryDataSet] is used to maintain the DataBase configuration and connection details. +It can be useful in any PS script that needs to read and write to SQL databases. For quick and simple, the Module's helper functions are also a consideration. When needing to use the Classes, use the `New-SqlQueryDataSet` function which calls the Parent Class [SqlQueryDataSet]::New() constructor and return an instance of the class. -All the properties and methods defined in the [SqlQueryDataSet] class are referenced through the object returned by calling helper function New-SqlQueryDataSet. +### New-SqlQueryDataSet Helper Function Used to Create Parent [SqlQueryDataSet] Class Instance ```powershell -class SqlQueryDataSet { - [string]$SQLServer - [string]$Database - [int]$ConnectionTimeout = 5 - [int]$CommandTimeout = 600 - [string]$ConnectionString - [object]$SQLConnection - [int]$TableIndex = 0 - [System.Collections.Generic.List[SqlQueryTable]]$Tables - [System.Collections.Hashtable]$TableNames = @{} - [bool]$DisplayResults = $True - [bool]$KeepAlive = $False -... +$result = New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] ``` - -There are many methods and ways to add a SQL Query. When a query is prepared, an instance of [SqlQueryTable] is created and added to the [System.Collections.Generic.List[SqlQueryTable]]$Tables property of the returned object. -An instance of [SqlQueryTable] maintains the query configuration and the results of it's execution. Each unique query will have it's own instance of [SqlQueryTable]. +These and other properties can be configured after the instance is created and before the desired execution method is called. -If a Query is added without a TableName being set, [SqlQueryDataSet]::GetTableFromQuery([String]$Query) will attempt to extract the TableName from the Query. This works best with simple Select From statements so it's always best to use a unique identifier as the TableName. It is not part of the SQL Query or it's executions. It is only used to locate the desired query and can be called anything that helps to uniquely identify the row in the Tables property. +#### New-SqlQueryDataSet Help Links -To help in locating the desired Query and Result, [HashTable]$TableNames property TableName Key returns the Index value. There is also the [int]$TableIndex property that defaults Tables[TableIndex] when executing a query. +- For usage examples, the [New-SqlQueryDataSets.tests.ps1](.\tests\New-SqlQueryDataSets.tests.ps1) contains a full suite of usage examples used in the Pester tests. +- For examples, type: "Get-Help New-SqlQueryDataSet -Examples" +- For detailed information, type: "Get-Help New-SqlQueryDataSet -Detailed" +- For technical information, type: "Get-Help New-SqlQueryDataSet -Full" +- See [API Guide and Class Documentation](api.guide.md) for detailed information about the module functions and classes. -Class method [SqlQueryDataSet]::GetTableFromTableName([String]$TableName) will return Result as [SqlQueryTable] +### Example 1: Create Class and Initializes with Database and Query Settings ```powershell -class SqlQueryTable { - [int]$TableIndex = 0 - [string]$TableName = [string]::Empty - [string]$Query = [string]::Empty - [object]$SQLCommand = $null - [object]$SqlDataAdapter = $null - [ResultType]$ResultType = [ResultType]::NonQuery - [object]$Result = $null - [bool]$isDirty = $false - [string]$QueryFile = [string]::Empty - [SqlQueryDataSet]$Parent = $null - - # Constructor -empty object - SqlQueryTable () - { - Return - } -} +$result = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" -Query "SELECT * FROM myTable" ``` -The ResultsType property defines how the query will be executed and the DataType for the result. ResultType values are: DataTable; DataAdapter; DataSet; DataRows; and NonQuery. - -ResultType of DataTable and DataRows use the [System.Data.SqlClient.SqlDataReader] approach to load() a DataTable object and return [SqlQueryTable]$table.Result as [System.Data.DataTable] or [Array][System.Data.DataRow] - -ResultType of DataAdapter and DataSet returns [SqlQueryTable]$table.Result as [System.Data.DataSet] and retains the SqlDataAdapter used in [SqlQueryTable]$table.SqlDataAdapter - -### [SqlQueryDataSet] and [SqlQueryDataSetParms] Class Methods and Properties - -There are more then 27+ methods and are best listed by running the following with Database connection and Query settings: +### Example 2: Create Class and Initializes with Connection String and Query Settings ```powershell -$testQuery = New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] -$testquery | GM -$testquery.Tables | GM +$result = New-SqlQueryDataSet -ConnectionString "Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" -Query "SELECT * FROM myTable" -DisplayResults $false ``` -### New-SqlQueryDataSet Examples - -See .\tests\New-SqlQueryDataSets.tests.ps1 file for a fully set of usage examples used in the Pester Tests +## How to Contribute -Parameters are all optional but most of the properties will still need to be configured through the Class instance before an execute query is called. +1. Fork the repository. +2. Create a local branch for your changes. +3. Make your changes and commit them. +4. Push your changes to your fork. +5. Create a pull request. -The most common usage examples are: +For detailed information on "How to Contribute", set up the development environment, and more, please refer to the [Developer and Contributor Guide](contributor.guide.md). -```powershell -# Using a connection string, defining a query, and setting TableName -$result = New-SqlQueryDataSet -ConnectionString "Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" -Query "SELECT * FROM INFORMATION_SCHEMA.COLUMNS" -TableName TableSchema +This includes details on: -# Create an instance of the [SqlQueryDataSet] class with Database configuration and defining the SQL Query -$testQuery = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" -Query "SELECT * FROM myTable" -TableName TableSchema - -# Create an instance of the [SqlQueryDataSet] class with Database configuration, ConnectionString is autogenerated -$testQuery = New-SqlQueryDataSet -SQLServer "myServer" -Database "myDB" -``` +- [Setup](contributor.guide.md#setup) +- [Source Files used in the Module](contributor.guide.md#source-files-used-in-the-module) +- [Module Build Process](contributor.guide.md#module-build-process) +- [Publishing `SqlQueryClass` Module to GitHub](contributor.guide.md#publishing-sqlqueryclass-module-to-github) +- [Code Review and Feedback](contributor.guide.md#code-review-and-feedback) +- [Merge the Pull Request](contributor.guide.md#merge-the-pull-request) +- [Cleanup](contributor.guide.md#cleanup) +- [Publishing `SqlQueryClass` Module to PowerShell Gallery](contributor.guide.md#publishing-sqlqueryclass-module-to-powershell-gallery) -### SQL Express Example +### ToDo -```powershell -# Configure Database settings for connection -$SqlServer = '(localdb)\MSSQLLocalDB' -$DatabaseName = 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf' -$ConnectionString = "Data Source={0};AttachDbFilename={1};Integrated Security=True" -f $SqlServer, $DatabaseName - -# Create a new instance of SqlQueryDataSet -$TestQuery = New-SqlQueryDataSet -SQLServer $SqlServer -Database $DatabaseName -ConnectionString $ConnectionString -DisplayResults $true - -# Add and Execute Query to return TableNames and DataBase Version -$TestQuery.ExecuteQuery('DBTables', "SELECT TABLE_NAME, @@VERSION FROM INFORMATION_SCHEMA.TABLES") - -# Displaying the Results of the Query -$TestQuery.Tables[$TestQuery.TableIndex].Result -or -$TestQuery.Tables[$TestQuery.TableNames['DBTables']].Result -or -$index = $TestQuery.TableIndex -$TestQuery.Tables[$index].Result -or -$table = $TestQuery.GetTableFromTableName('DBTables') -$table.Result - -# Changing an existing Table Query and then executing it. -$TestQuery.Tables[$TestQuery.TableIndex].Query = "SELECT * FROM INFORMATION_SCHEMA.TABLES" -$TestQuery.Execute($TestQuery.Tables[$TestQuery.TableIndex]) -$TestQuery.tables[$TestQuery.TableIndex].Result -or -$table = $TestQuery.GetTableFromTableName('DBTables') -$table.Query = "SELECT * FROM INFORMATION_SCHEMA.TABLES" -$table.Parent.Execute() -$table.Result -``` - -### Troubleshooting - -If you encounter issues while using the `SqlQueryClass` Module, ensure that the SQL Server and Database parameters are correctly specified. Verify that the connection string is valid and that the SQL Server is accessible. Check for any errors in the SQL query and make sure that the table name, if specified, exists in the database. +- [ ] Seek peer review and comments +- [ ] Integrate feedback +- [ ] Improve Documentation +- [ ] Develop a Build-Readme.ps1 script to support README.md updates to code changes -Examine the object returned from `New-SqlQueryDataSet` +## Module Exported Functions ```powershell -$TestQuery - -SQLServer : (localdb)\MSSQLLocalDB -Database : F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF -ConnectionTimeout : 5 -CommandTimeout : 600 -ConnectionString : Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF;Integrated Security=True -SQLConnection : -TableIndex : 0 -Tables : {DBTables} -TableNames : {[DBTables, 0]} -DisplayResults : True -KeepAlive : False - -$TestQuery.Tables - -TableIndex : 0 -TableName : DBTables -Query : SELECT * FROM INFORMATION_SCHEMA.TABLES -SQLCommand : System.Data.SqlClient.SqlCommand -SqlDataAdapter : -ResultType : DataTable -Result : {Document, Category, Entity, DocName...} -isDirty : False -QueryFile : -Parent : SqlQueryDataSet - -$TestQuery.Tables.Result - -TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE -------------- ------------ ---------- ---------- -F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF dbo Document BASE TABLE -F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF dbo Category BASE TABLE -F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF dbo Entity BASE TABLE -F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF dbo DocName BASE TABLE -F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF dbo SqlQuery BASE TABLE -F:\DATA\BILLS\PSSCRIPTS\SCANMYBILLS\DATABASE1.MDF dbo SqlQueryParms BASE TABLE -``` - -## Folder Structure and Build Management - -The folder structure of the SqlQueryClass module is based on best practices for PowerShell module development and was initially created using [Manjunath Beli's](https://github.com/belibug) [ModuleTools](https://github.com/belibug) module. Check out his [Blog article](https://blog.belibug.com/post/ps-modulebuild) that explains the core concepts of ModuleTools. - -The the following ModuleTools CmdLets used in the build and maintenance process. They need to be executed from project root: +Get-Command -Module "SqlQueryClass" -Syntax -- Get-MTProjectInfo -- returns hashatble of project configuration which can be used in pester tests or for general troubleshooting -- Update-MTModuleVersion -- Increments SqlQueryClass module version by modifying the values in `project.json` or you can manually edit the json file. -- Invoke-MTBuild -- Run `Invoke-MTBuild -Verbose` to build the module. The output will be saved in the `dist` folder, ready for distribution. -- Invoke-MTTest -- Executes pester configuration (*.text.ps1) files in the `tests` folder - -- To skip a test, add `-skip` in describe block of the Pester *.test.ps1 file to skip. - -### Folder and Files - -```powershell -.\SQLQUERYCLASS -│ .gitignore -│ GitHub_Action_Docs.md -│ LICENSE -│ project.json -│ README.md -│ -├───.vscode -│ settings.json -│ -├───archive -│ -├───dist -│ │ TestResults.xml -│ │ -│ └───SqlQueryClass -│ │ SqlQueryClass.psd1 -│ │ SqlQueryClass.psm1 -│ │ about_SqlQueryClass.help.txt -│ -├───src -│ ├───private -│ │ SqlQueryClass.ps1 -│ │ -│ ├───public -│ │ Dismount-Database.ps1 -│ │ Get-Database.ps1 -│ │ Get-DatabaseTable.ps1 -│ │ Invoke-DatabaseNonQuery.ps1 -│ │ Invoke-DatabaseQuery.ps1 -│ │ Mount-Database.ps1 -│ │ New-SqlQueryDataSet.ps1 -│ │ -│ └───resources -│ about_SqlQueryClass.help.txt -│ -└───tests - Module.Tests.ps1 - New-SqlQueryDataSets.tests.ps1 - OutputFiles.Tests.ps1 - ScriptAnalyzer.Tests.ps1 - TestDatabase1.mdf - TestDatabase1.parameters.psd1 - TestDatabase1_log.ldf +- Dismount-Database [[-connectionString] ] [[-Database] ] [-Quiet] +- Get-Database [[-connectionString] ] [[-query] ] [-Quiet] +- Get-DatabaseTable [[-connectionString] ] [[-query] ] [-Quiet] +- Invoke-DatabaseNonQuery [[-connectionString] ] [[-NonQuery] ] [-Quiet] +- Invoke-DatabaseQuery [[-connectionString] ] [[-query] ] [-Quiet] +- Mount-Database [[-connectionString] ] [[-Database] ] [[-DatabaseFilePath] ] [-Quiet] +- New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] ``` -All files and folders in the `src` folder, will be published Module. - -All other folder and files in the `.\SqlQueryClass` folder will resides in the [GitHub SqlQueryClass Repository](https://github.com/BrooksV/SqlQueryClass) except those excluded by inclusion in the `.\SqlQueryClass\.gitignore` file. - -### Project JSON File +### API Guide Overview -The `project.json` file contains all the important details about your module, is used during the module build process, and helps to generate the SqlQueryClass.psd1 manifest. +For detailed API documentation, please refer to the [API Guide](api.guide.md). -### Root Level and Other Files +This includes details on: -- .gitignore -- List of file, folder, and wildcard specifications to ignore when publishing to GitHub repository -- GitHub_Action_Docs.md -- How to add GitHub Action WorkFlows to automate CI/CD (Continuous Integration/Continuous Deployment) -- LICENSE -- MIT License notice and copyright -- project.json -- ModuleTools project configuration file used to build the `SqlQueryClass` module -- README.md -- Documentation (this) file for the `SqlQueryClass` module -- .vscode\settings.json -- VS Code settings used during `SqlQueryClass` module development +- [Functions](api.guide.md#functions) + - [Dismount-Database](api.guide.md#dismount-database) + - [Get-Database](api.guide.md#get-database) + - [Get-DatabaseTable](api.guide.md#get-database-table) + - [Invoke-DatabaseNonQuery](api.guide.md#invoke-database-non-query) + - [Invoke-DatabaseQuery](api.guide.md#invoke-database-query) + - [Mount-Database](api.guide.md#mount-database) + - [New-SqlQueryDataSet](api.guide.md#new-sql-query-data-set) +- [Classes](api.guide.md#classes) + - [SqlQueryDataSet Parent Class Details](api.guide.md#sql-query-data-set-parent-class-details) + - [Class SqlQueryDataSet Properties](api.guide.md#class-sql-query-data-set-properties) + - [Class SqlQueryDataSet Methods](api.guide.md#class-sql-query-data-set-methods) + - [Child Class SqlQueryTable Properties](api.guide.md#child-class-sql-query-table-properties) + - [Child Class SqlQueryTable Methods](api.guide.md#child-class-sql-query-table-methods) -### archive Folder +### Class Overview -`.\SqlQueryClass\archive` is not used in this project. Its a temporary place / BitBucket to hold code snippets and files during development and is not part of the build. +The module includes two classes, the parent class [SqlQueryDataSet] which includes the Tables collections property of child class [SqlQueryTable] objects. -### Dist (build output) Folder +An instances of [SqlQueryDataSet] manages database information and connections. It's properties and methods manages child [SqlQueryTable] classes, executes queries, and saves the results. -Generated module is stored in `dist\SqlQueryClass` folder, you can easily import it or publish it to PowerShell Gallery or repository. +Each instance of the [SqlQueryTable] Class holds the Query configuration and execution results. Each unique query that is added or executed is a separate item in the parent's Tables property. -### Src Folder +An instance Parent Class [SqlQueryDataSet] are created using the New-SqlQueryDataSet() helper CmdLet. - - All functions in the `public` folder are exported during the module build. - - All functions in the `private` folder are accessible internally within the module but are not exposed outside the module. - - All files and folder contained in the `resources` folder will be published to the `dist\SqlQueryClass` folder. +See [API Guide and Class Documentation](api.guide.md) for detailed class and module information. -### Tests Folder +For additional technical information, see: -If you want to run any `pester` tests, keep them in `tests` folder and named *.test.ps1. +- "Get-Help New-SqlQueryDataSet -Full" +- [New-SqlQueryDataSets.tests.ps1](.\tests\New-SqlQueryDataSets.tests.ps1) in the [.\tests](.\tests) folder has full usage examples used to validate usage +- [Developer and Contributor Guide](contributor.guide.md) -Run `Invoke-MTTest` to execute the tests. +## Join the Conversation -- .\tests\New-SqlQueryDataSets.tests.ps1 -- Full set of usage example Tests. Good Resource for usage examples -- .\tests\Module.Tests.ps1 -- General Module Control to verify the module imports correctly -- .\tests\OutputFiles.Tests.ps1 -- Module and Manifest testing to verify output files are readable -- .\tests\ScriptAnalyzer.Tests.ps1 -- Code Quality Checks to verify PowerShell syntax and best practices -- .\tests\TestDatabase1.parameters.psd1 -- PowerShell Data File of configuration settings used in New-SqlQueryDataSets.tests.ps1 -- .\tests\TestDatabase1.mdf -- Sample SQL Express Database File with samples data used in New-SqlQueryDataSets.tests.ps1 -- .\tests\TestDatabase1_log.ldf -- Created when using TestDatabase1.mdf - -## Contributing - -Contributions are welcome! Please fork the repository and submit a pull request with your changes. Ensure that your code adheres to the existing style and includes appropriate tests. +We encourage you to participate in our [Discussions](https://github.com/BrooksV/SqlQueryClass/discussions) section! Whether you have questions, ideas, or just want to chat with other users, Discussions is the place to be. Your feedback and contributions are valuable to us! ## License -This project is licensed under the MIT License. See the LICENSE file for details. +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. -[BadgeIOCount]: https://img.shields.io/powershellgallery/dt/SqlQueryClass?label=SqlQueryClass%40PowerShell%20Gallery -[PSGalleryLink]: https://www.powershellgallery.com/packages/SqlQueryClass/ -[WorkFlowStatus]: https://img.shields.io/github/actions/workflow/status/BrooksV/SqlQueryClass/Tests.yml +## Acknowledgements -## SEE ALSO +- [Manjunath Beli](https://github.com/belibug) for the [ModuleTools](https://github.com/belibug/ModuleTools) module used in the build process. +- [Brooks Vaughn](https://github.com/BrooksV) for maintaining the SqlQueryClass module. -```powershell - Get-Help -Name New-SqlQueryDataSet -```powershell +## Contact -## KEYWORDS +For support, inquiries, or feedback, contact Brooks Vaughn at [BrooksV](https://github.com/BrooksV) through one of the following methods: - SQL, Database, Query, SqlQueryDataSet +- **GitHub Issues**: [Open an issue](https://github.com/BrooksV/SqlQueryClass/issues) +- **GitHub Discussions**: [Start a discussion](https://github.com/BrooksV/SqlQueryClass/discussions) diff --git a/api.guide.md b/api.guide.md new file mode 100644 index 0000000..52b0751 --- /dev/null +++ b/api.guide.md @@ -0,0 +1,239 @@ +# API Guide and Class Documentation + +## Table of Contents + +- [Functions](#functions) + - [Dismount-Database](#dismount-database) + - [Get-Database](#get-database) + - [Get-DatabaseTable](#get-database-table) + - [Invoke-DatabaseNonQuery](#invoke-database-non-query) + - [Invoke-DatabaseQuery](#invoke-database-query) + - [Mount-Database](#mount-database) + - [New-SqlQueryDataSet](#new-sql-query-data-set) +- [Classes](#classes) + - [SqlQueryDataSet Parent Class Details](#sql-query-data-set-parent-class-details) + - [Class SqlQueryDataSet Properties](#class-sql-query-data-set-properties) + - [Class SqlQueryDataSet Methods](#class-sql-query-data-set-methods) + - [Child Class SqlQueryTable Properties](#child-class-sql-query-table-properties) + - [Child Class SqlQueryTable Methods](#child-class-sql-query-table-methods) + +## Functions + +```powershell +Get-Command -Module "SqlQueryClass" -Syntax + +- Dismount-Database [[-connectionString] ] [[-Database] ] [-Quiet] +- Get-Database [[-connectionString] ] [[-query] ] [-Quiet] +- Get-DatabaseTable [[-connectionString] ] [[-query] ] [-Quiet] +- Invoke-DatabaseNonQuery [[-connectionString] ] [[-NonQuery] ] [-Quiet] +- Invoke-DatabaseQuery [[-connectionString] ] [[-query] ] [-Quiet] +- Mount-Database [[-connectionString] ] [[-Database] ] [[-DatabaseFilePath] ] [-Quiet] +- New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] +``` + +New-SqlQueryDataSet is the Constructor method for creating an instance of Parent Class [SqlQueryDataSet] and is the main cmdlet. + +To see the examples, type: "Get-Help New-SqlQueryDataSet -Examples" +For more information, type: "Get-Help New-SqlQueryDataSet -Detailed" +For technical information, type: "Get-Help New-SqlQueryDataSet -Full" + +### Dismount-Database + +```powershell +NAME + Dismount-Database +SYNTAX + Dismount-Database [[-connectionString] ] [[-Database] ] [-Quiet] +DESCRIPTION + Detaches a database from the SQL Server. +PARAMETERS + -connectionString: The connection string to the SQL Server. + -Database: The name of the database to detach. + -Quiet: Suppresses output. +``` + +### Get-Database + +```powershell +NAME + Get-Database +SYNTAX + Get-Database [[-connectionString] ] [[-query] ] [-Quiet] +DESCRIPTION + Executes a query against the SQL Server and returns the results. +PARAMETERS + -connectionString: The connection string to the SQL Server. + -query: The SQL query to execute. + -Quiet: Suppresses output. +``` + +### Get-DatabaseTable + +```powershell +NAME + Get-DatabaseTable +SYNTAX + Get-DatabaseTable [[-connectionString] ] [[-query] ] [-Quiet] +DESCRIPTION + Executes a query against the SQL Server and returns the results as a table. +PARAMETERS + -connectionString: The connection string to the SQL Server. + -query: The SQL query to execute. + -Quiet: Suppresses output. +``` + +### Invoke-DatabaseNonQuery + +```powershell +NAME + Invoke-DatabaseNonQuery +SYNTAX + Invoke-DatabaseNonQuery [[-connectionString] ] [[-NonQuery] ] [-Quiet] +DESCRIPTION + Executes a non-query SQL command against the SQL Server. +PARAMETERS + -connectionString: The connection string to the SQL Server. + -NonQuery: The non-query SQL command to execute. + -Quiet: Suppresses output. +``` + +### Invoke-DatabaseQuery + +```powershell +NAME + Invoke-DatabaseQuery +SYNTAX + Invoke-DatabaseQuery [[-connectionString] ] [[-query] ] [-Quiet] +DESCRIPTION + Executes a query against the SQL Server and returns the results. +PARAMETERS + -connectionString: The connection string to the SQL Server. + -query: The SQL query to execute. + -Quiet: Suppresses output. +``` + +### Mount-Database + +```powershell +NAME + Mount-Database +SYNTAX + Mount-Database [[-connectionString] ] [[-Database] ] [[-DatabaseFilePath] ] [-Quiet] +DESCRIPTION + Attaches a database to the SQL Server. +PARAMETERS + -connectionString: The connection string to the SQL Server. + -Database: The name of the database to attach. + -DatabaseFilePath: The file path of the database to attach. + -Quiet: Suppresses output. +``` + +### New-SqlQueryDataSet + +```powershell +NAME + New-SqlQueryDataSet +SYNOPSIS + New-SqlQueryDataSet -- Creates and returns an Object instance of the [SqlQueryDataSet] class configured with or without the specified parameters. +SYNTAX + New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] +DESCRIPTION + This function initializes a new instance of the [SqlQueryDataSet] class and the resulting object is configured is based which parameters were specified. + All parameters are optional as the can be configured later using the [SqlQueryDataSet]$object returned when calling $object = New-SqlQueryDataSet + When using $SQLServer and $Database, both must be specified together. The [SqlQueryDataSet] class will auto generate a SQL ConnectionString. + Specifying $ConnectionString overrides auto generation even when $SQLServer and $Database are also specified. + Based on which parameters are passed, this CmdLet will use one of the overloaded class constructors and configure instance settings with the other parameters: + - [SqlQueryDataSet]::new() + - [SqlQueryDataSet]::new(string SQLServer, string Database) + - [SqlQueryDataSet]::new(string SQLServer, string Database, string Query) + Explanation of Parameter Sets: + - **`ServerDatabase`**: This parameter set allows the user to specify the SQL Server and Database separately without needing a full connection string. + - **`ServerDatabaseWithConnectionString`**: This parameter set allows the user to provide both the SQL Server and Database separately, or use a connection string. + - **`ConnectionString`**: This parameter set allows the user to provide a connection string directly. +REMARKS + To see the examples, type: "Get-Help New-SqlQueryDataSet -Examples" + For more information, type: "Get-Help New-SqlQueryDataSet -Detailed" + For technical information, type: "Get-Help New-SqlQueryDataSet -Full" +``` + +## Classes + +### [SqlQueryDataSet] Parent Class Details + +Instances of [SqlQueryDataSet] Parent Class are created using the New-SqlQueryDataSet() helper CmdLet. The object returned is of type [SqlQueryDataSet]. The properties and methods are used to manage and configure database information and connections, manage creation of the Child Class, execute queries, and save the results. Instances of Child Classes are collected in the Tables property of the Parent Class. Tables is a collection of [SqlQueryTable] objects. One is created for every unique query that was added or executed. + +Each instance of the [SqlQueryTable] Class holds the Query configuration and execution results. + +For technical information, see: + +- Get-Help New-SqlQueryDataSet -Full +- New-SqlQueryDataSets.tests.ps1 in the Tests (C:\Git\SqlQueryClass\tests\) folder has full usage examples used to validate usage + +### Class [SqlQueryDataSet] Properties + +Name | Type +----------------- | ---------------------------------------------------------------------- +SQLServer | [System.String] +Database | [System.String] +ConnectionTimeout | [System.Int32] +CommandTimeout | [System.Int32] +ConnectionString | [System.String] +SQLConnection | [System.Object] +TableIndex | [System.Int32] +Tables | [System.Collections.Generic.List`1[[SqlQueryTable, PowerShell Class Assembly, Version=1.0.0.2, Culture=neutral, PublicKeyToken=null]]] +TableNames | [System.Collections.Hashtable] +DisplayResults | [System.Boolean] +KeepAlive | [System.Boolean] + +### Class [SqlQueryDataSet] Methods + +Name | Syntax +-------------------------- | ------------------------------------------------------------- +AddQuery | int AddQuery(string Query) +AddQuery | int AddQuery(string TableName, string Query) +GetTableFromQuery | System.Object GetTableFromQuery(string Query) +GetTableFromTableName | System.Object GetTableFromTableName(string TableName) +BuildOleDbConnectionString | string BuildOleDbConnectionString() +LoadQueryFromFile | void LoadQueryFromFile(string Path) +OpenConnection | void OpenConnection() +CloseConnection | void CloseConnection() +GetSqlCommand | System.Data.SqlClient.SqlCommand GetSqlCommand(string query) +Clear | void Clear() +Execute | System.Object Execute() +Execute | System.Object Execute(SqlQueryTable table) +Execute | System.Object Execute(int TableIndex) +Execute | System.Object Execute(string SqlQuery) +Execute | System.Object Execute(ResultType ResultType) +ExecuteNonQuery | System.Object ExecuteNonQuery(string SqlQuery) +ExecuteQuery | System.Object ExecuteQuery(string SqlQuery) +ExecuteQuery | System.Object ExecuteQuery(string TableName, string SqlQuery) +ExecuteAsDataTable | System.Object ExecuteAsDataTable(string SqlQuery) +ExecuteAsDataAdapter | System.Object ExecuteAsDataAdapter(string SqlQuery) +ExecuteAsDataSet | System.Object ExecuteAsDataSet(string SqlQuery) +ExecuteAsDataRows | System.Object ExecuteAsDataRows(string SqlQuery) +SaveChanges | System.Object SaveChanges() +GetDBTableSchema | System.Object GetDBTableSchema(string TableName) +GetDBTableIndexesV17 | System.Object GetDBTableIndexesV17(string TableName) +GetDBTableIndexes | System.Object GetDBTableIndexes(string TableName) +GetCreateBasicDLL | System.Object GetCreateBasicDLL(string TableName) +GetCreateDDL | System.Object GetCreateDDL(string TableName) +ParseSQLQuery | System.Object ParseSQLQuery(string Query) + +### Child Class [SqlQueryTable] Properties + +Name | Type +-------------- | ----------------- +TableIndex | [System.Int32] +TableName | [System.String] +Query | [System.String] +SQLCommand | [System.Object] +SqlDataAdapter | [System.Object] +ResultType | [ResultType] +Result | [System.Object] +isDirty | [System.Boolean] +QueryFile | [System.String] +Parent | [SqlQueryDataSet] + +### Child Class [SqlQueryTable] Methods + +Class Has No Methods diff --git a/contributor.guide.md b/contributor.guide.md new file mode 100644 index 0000000..33a1a95 --- /dev/null +++ b/contributor.guide.md @@ -0,0 +1,127 @@ +# Developer and Contributor Guide + +## Table of Contents + +- [Setup](#setup) +- [Source Files used in the Module](#source-files-used-in-the-module) +- [Module Build Process](#module-build-process) +- [Publishing `SqlQueryClass` Module to GitHub](#publishing-sqlqueryclass-module-to-github) +- [Code Review and Feedback](#code-review-and-feedback) +- [Merge the Pull Request](#merge-the-pull-request) +- [Cleanup](#cleanup) +- [Publishing `SqlQueryClass` Module to PowerShell Gallery](#publishing-sqlqueryclass-module-to-powershell-gallery) + +## Setup + +- Uses SQL Express but should work with other SQL Databases with proper connection strings and credentials +- Requires VS Code +- For Contributors, Fork the [SqlQueryClass](https://github.com/BrooksV/SqlQueryClass) repository +- Clone the repository or fork to local pc. I like using c:\git as my local repository folder. Subfolder $ProjectName will be created with the GitHub repository contents +- Install [Manjunath Beli's ModuleTools](https://github.com/belibug/ModuleTools) module as the module build process uses ModuleTools + + ```powershell + Find-Module -Name ModuleTools | Install-Module -Scope CurrentUser -Verbose + ``` + +- Note that a sample SQL Express database file (.\tests\TestDatabase1.mdf) is included for pester tests. The database configuration is set in .\tests\TestDatabase1.parameters.psd1 + +## Source Files used in the Module + +- Public functions that are exported, are separate files in the .\src\public folder. +- Private functions that are local to the Module, are separate files in the .\src\private folder. +- - Class Definitions and Enums are not accessible outside of the Module and cannot be accessed directly like Public Functions are. This is a PowerShell limitation. +- - - Classes [SqlQueryDataSet] and [SqlQueryDataSetParms] and enum ResultType used in the Module are defined in file .\src\private\SqlQueryClass.ps1 file. The classes have properties and methods used to maintain a Database connections and result sets making it useful WPF Data binding. +- Resources are files and folders in the .\src\resources folder that needs to be included with the Manifest and Module + +## Module Build Process + +1. Create a local branch for your changes. + +- - Use descriptive name that reflects the type of changes for branch for example features/database-table-access + + ```powershell + git checkout -b features/database-table-access + ``` + +1. Update the build version using Update-MTModuleVersion (Find-Module -Name ModuleTools). +1. Commit your changes to the branch. +1. Run the Pester Tests using Invoke-MTTest (Find-Module -Name ModuleTools). +1. Build the Module output using Invoke-MTBuild -Verbose (Find-Module -Name ModuleTools). + + ```powershell + Invoke-MTBuild -Verbose + ``` + +- - Outputs to the .\dist\SqlQueryClass folder +- - Combines the file contents of the files in Public and Private folder into .\dist\SqlQueryClass\SqlQueryClass.psd1 and exports the Public Functions +- - Generates the .\dist\SqlQueryClass\SqlQueryClass.psd1 Manifest file from the settings in .\project.json +- - Resources (.\src\resources) folder content is copied to .\dist\SqlQueryClass folder +- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) + +1. Make corrections, repeat the build process. +1. For Contributors: + - Create an Issue if one does not exist that addresses the proposed changes. + - Upstream your branch. + - Create a Pull request. + +## Publishing `SqlQueryClass` Module to GitHub + +1. Stage and Commit Your Changes + + ```powershell + git add . + git commit -m "Implemented database and table access functions" + ``` + +1. Update remote repository with branch changes + + ```powershell + # List status of remote repository + git branch -r + # Create Branch on remote repository if needed + # git push --set-upstream origin features/database-table-access + # Push branch changes to remote branch in repository + git push origin features/database-table-access + ``` + +1. Create a Pull Request on remote repository + - Go to [SqlQueryClass GitHub repository](https://github.com/BrooksV/SqlQueryClass) + - Click on "Compare & pull request" for your branch + - Provide a meaningful title and description for the PR + - Select the base branch (main) to merge into + - Click "Create pull request" + +## Code Review and Feedback + +- Engage with Repository Owner or collaborators to review the PR +- Address any feedback or requested changes by making additional commits to your branch and pushing them to the remote branch +- Ensure the PR passes any automated tests or checks + +## Merge the Pull Request + +- Once the PR is approved and all checks pass, you can merge it into the main branch +- You can either use the "Merge pull request" button on GitHub or merge it locally and push the changes + +## Cleanup + +- After merging, you can delete the feature branch from the remote repository to keep it clean + +```powershell +git push origin --delete features/database-table-access +``` + +- Optionally, delete the local branch + +```powershell +git branch -d features/database-table-access +``` + +These steps will ensure your changes are integrated into the main branch and your repository remains organized. + +## Publishing `SqlQueryClass` Module to PowerShell Gallery + +```powershell +$data = Get-MTProjectInfo +$ApiKey = "your-api-key-here" +Publish-Module -Path $data.OutputModuleDir -NuGetApiKey $ApiKey -Repository PSGallery +``` diff --git a/project.json b/project.json index ca8fa4d..4380059 100644 --- a/project.json +++ b/project.json @@ -1,7 +1,7 @@ { "ProjectName": "SqlQueryClass", - "Description": "Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result object.", - "Version": "0.1.1", + "Description": "The SqlQueryClass module provides a set of functions and cmdlets for working with SQL databases. It includes functionality for connecting, executing SQL queries, and managing output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result objects.", + "Version": "0.1.2", "Manifest": { "Author": "Brooks Vaughn", "PowerShellHostVersion": "5.1", diff --git a/tests/TestDatabase1.mdf b/tests/TestDatabase1.mdf new file mode 100644 index 0000000000000000000000000000000000000000..0c16924d9a13ec21d03d332479e62e9ab4d393e2 GIT binary patch literal 3342336 zcmeEv2Y_8wwe~)D`ea&qAt93jAwU|C5Flahq!I{8APE5y$fQAlkc1REr`>aBh6EVYy_0>`KHpwz?X}mgr`$6^ zqjS|cmkNPfLC8tFJW-8|AeI|X|9$o@b7NVV$+3=AxN(*{+HIkK7r2YurS3|1jr*Xx z-QDXxN&i0MKJUKl9(7N;=iMLO-&{q|I~W{{3HA*p)4#dF(!{@Y0sfs8Tol|9+#h^C z_}}1X!T9n$K0Tx5zVAFbtR{G{e-ZkgLeaXH0}ZdK&OB%43;9{9KNz`HzYj9Nc<+2KQ8 zo^!#W=RLXfLkAD^lg7VQZ}OG#9`GLU9`GLU9`GLU9`GLU9`GLU9`GLU9`GLU9`GLU z9`GLU9`GLU9`GLU9{3OPzzyX=H>z&YV{Uo=pL2g7jHlsi2jRBC z(D%HO?e>C*K0(phgq&cwm2^d%%0Zd%%0Zd%%0Z zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Z zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Z zd%%0Zd!Xw*5Hyhu?R@{glCtsr{|hM|OYw4w7EU1H=YJ($KjoR{@<|$p2K^XWng6a7Z_xBAeF@;D|M}rX1hpFmI@2k7%H7Lj73#CK;u5@^ zLQvoqxz%nH{af!2bYtk>8T@ZF9rtyk-8#3yok-|DZY=#9N2#OT;cm8@Pwy$LcB|Z} zZW-ZHQja(9xTVb0?nW7F-C1q{#r4E!Oee28`ZIVtgUcSLO!M7Iq-nidLyT#G*EbzI zr@{n=xs7D%24Y`JW|_`w|90~~@VNxmxtm)~RoX!lx+)B#cOuAr`>G;}n2TrarmfeVD6}bVXFC#W%I&4EMiN7$V;bo^E7bJY zv4584U3qJq1pY^cpVF^7})Vf=HzS`4RMsi0x(@o)4hw)KSeg5>hGkY21 z7;3F$)InCc32whk_L(P-f2p^z49Kz!*kQw?idPq&~Kcj#0z^`t)aNb}_cWMV0u#re_WqXxYOkdukEO zH-H>?W)F#&FzPWzP|*#crdP%{zcSRA4q{KQb@Rw^8>z!! z)SXW3vob|%f7@{VFcTe5EYK}OwY1QQf4Q}ud}G}k(@1uqZ#EVCv9kagEI(SBziwkv%Ni>N=-WX21NGW4Dep(J|Cv z*0O_6E5iF_saremaZN5!+vmc=4}e zBerB;jo3cX{f+0x8QT`Bb9`Cd7+Wwm(!zQw^^6tNi&2wxv>I(9Yz3uGr6qQwJBrbO)IOMGlPu3|{M_yM z%#%*{vfqg>Ha~y#utW34Fp_MMEew2%wR3&w!XNKawzSn4_s?LQ!+i+-9;3rNe|Y1U ze>%m)b|d@H(b7!IH@$J&RAZ8goXC}lymt1s^S(39SVmCW%X+*f#dhG`2fZ}i*mh$p zu}_fI$87rZBmHQ>Q>P4KzeNSTxc-=inU*=2YJ*Kzv_qt=-|>f7Hg<@z^)tU&5#wjA z9Y4$1Foew9QUY&&>Tf?g)C7hQJErtivBv&rFmdc*#;{jRV=?Qkw>IuS+gSG}kFO;M zoJMpNQEYtC=T4%D>m*7?gXF~tyV6P?xy9u6tf8_gwCt%*oOjHTmOYZ>G12NhUzj;V`xx*b0_bVJMe4|L;4Alp1=%P|A^x*1N z^x!5*QqSWh^4|dw32X}{(dR{20=S-f7*3l95^1*w+d%%0Zd%%0Zd%%0Z zd%%0Zd*Hq9fidM{$}h`JE?XVUs;RD-*YINPpSrysoL1i)G?WjlIHv0BwSOs}+&HfO zV_JljP z>eJ=_uj$;1s~akMOz1JIdZP>Q*cMOW6Ct3>H0Q4Bzo8OWSpmh%DB`X((iT2E?nn1o zx-{)k*-+L{RyyC&m0W9n^O9@NIsDG=xrZNe^c3(wx5Uk)J3R}C&ZnoJvnej5YtSR< z(cM%!YbA6(?5QK){3F5)HNc7Qvr?Uz5l^PF8<@A$-)sZSpC#@Ae-TC*c^DJ5|u3T?jo z%&Qlj@c5QFclEjC$*s>VKCivJNQ0#CXqa8EwC<*L00 zES-DLFIsOMc=vPv)t-6xBQriI+GF;4-UIJp58!neJmA7pCm*~Aya&7oya&7oya&7o zya&7oya&7oya&7oya&7oya&7oya&7oya&7oya&7oya)ajJ<#R?y#AcC2bj_K|M9a( zeE%QW$i;)vJVpGB+ro^-r?0ehX^I~(bS{_``1zovJCdA;ANcyWgyJ>WgyJ>Wgy zJ>WgyJ>WgyJ>WgyJ>WgyJ>WgyJ>WgyJ>WgyJ>WgyJ>WgyJ>WgyJ>WgyJ@6mw0sj7f zj(&d~e*eF(dSfL&=l^N%B{ldqJf6klH{AGL=;ahGJm2TH_&994p%TIz@d*HYnvz~C zpcumV`8UHTDT47eHHPsq_y~q9!}wi#1mlPD4C90E5saU-GmKxhMlil5N&;>+cufLE<(T`_1U%H> zwF!8b!Rr$6aD&$;;N1*9EdlRt@P-6D!eD$ZFlwDW4BnK0M;g320q<$>=?Qo*gU?97 zcmaqje`W$6W$;-Ec(lQfCEzgzKc0Zc8vKO8m>hzA4X&cufoq9RMg;pAymtZ~Z}6xD zJi*}633z{l$0Xp129Hg^2N*mq0Uv1aJ_#6;AiHYc1dK0ZGrV5{#`mxp9-n{@Hh4k; zZZUZO1e`Z`Vghb8_<#f)PIw0tHzo)4Z1J|El_Tp4T%jtgc4V}gD`5WL|2$9>7&;SnggQjC<(uTiNk6I6Drwuim*3xMpH}t0nj^0Cdi~p38f{d%%0Zd%%0Zd%%0Z zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd%%0Zd*I*I1KafZfAstR z==ndM!sGk@_&qz)cn<(SOUJLuEqwEu|HF^tI|y&(`M;>b&x1Sr7Jz^H-+}vmw)cSd zfcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+ zz`wl*`1}6>eSkj~IDC~laHAYPS{=CK9KInw!VMmb57*;ad@qVWp!g=mFw9=~oiJS@ zF_v^5eeaX>$#J|Y@X||kz~=_4Nhv;l9DRC#PVj<3A#k(Y>28@@<4$rbiEbjg&aHKk zBD{()5g+a@ceRjW`=}PNAd2Ra*eZ7>saWbxa2rV3iSATF))Eq_!y68rRF_t=)NLf| z&L)+SIyh|07CKbxyAtpozNQcbv2K2mO-tQ!Qn!h0T;|rtR5p_6J@?SzP4zy!mLD7` zG|w$&1#3xsgFA~VjmmDMf2jB>I$utnTuC{w_KBB1O<#70abx9u3p9rS$#*Zr+E!At zi4<*en<*73fGM3)FrBKjf!h+tO$jSdbi!v91Qhvn1zYQ~-jLNrdh7)yf+YBe_-qsmTRK6oK+@y)OoxM{toG94I8BUbE z8#A1g^p4GNqW&G3;Y9U2I>Sj3Z^H~Hir&^4PE@`PGn^=TM`k!t{Wi>SqUdd#;Y8ir zHp7X!w{?aSmG8(5w|U96=g17#sTJ*T+O@2wZN)}f|FI*MeZg8nu?G-knC&{HY;Ho? zayOS0ib~mBi#p7Eol=*yZ6jH^j(1$LyAoxX+B&6dDp_(8@1LS2T2yp;`Z|pFcxSMW zu+pE%JI=T@n647LB|6XCN*+d=g>_^Nwp?(0u_{bU&p%IxYH~j=jnE26N5OWbRx#|x zH_%3B87W<=7fjd}V{ZpcwvJM1Oje!RI<8`+*nMKdi!F{^d*M1KdkYzL986!GDx~;I z;-SLD=Sny3l!BS;&r_+AxQL`BhJU23a6D`m+V z+EUAvswhH-?UXHPMJvdvxFU4h$+$$Xc70(TU$ExZ| zG?3)F**qlI^0;D3*aMrg>^Y80k6(l0^4l)q&|T5Tth>r)@EuYv^YA;QTm~9e-b8zs za?50D-{{7{^LL+l-dpJZ)5&McsA+J079s(Vb$asdXe|(Rou0mv zwx!nsQP$~+d?wEltEi79XWr(=*PQ=FHWMmXicG_GN;~|)DX+*e%UJaUNljN8Z=0vV{uP~t}sa3 zFC-WNP8x{1s`r8 zihIXPV+BNA1*UZBX63?|xOIEkY1#d$NGUcxd+kMsS~nDSbBB~0(>OzrN}t4SiapCo zY9scAr_$K5y{Zgh8Da5tQJeyuohoPrIRIk_1NE&Hf$O_O5wJe1E{kJDV9r7(+srk? zz53*;F4p6UuTvckTjf&LcfKp)im+275X(zvio=X&*Ebjkm~7EfQAgL ztz3VILvcmfsT$5L>ICQ%n|Z`U)>9wtoH|SfxHgkvmhNAe`mtj~_qE41VlV!Bai{EE z+D?ms6E)>As8xL;=#FHZE4NOfs<;BQ>-gw3TD z59q97?2)2zi90>AgvfP9d;Z2>-0qa^81gn(zLf$7cD8_y>QLHEgF0J8`*lbcKw3K! zzOw7$UEdgV)1ZR~JvZ=*fnx?fy~`Q94BX|b1KI|>+5h4Gt^L2-Z)v~ses}hr*!Q_U zSM{0N=MTN_?LE8qKYD$x*KxgG>3KuXX+2-<@lcOtJ$m%`@9u@}&o|!IIKQ#B@mmdr zhN<0K8h%`VPW{;WU)SALx3I3V?(^OLuj%-1-MW3L_SD+pwU5^nYDU%ks``TJ-K)P< zbzD`ysvlNf-gIu|$jTpATv;)t;`#CqmmgN1E5D;`TG_92=j0~jUJdqcx+RzyyzcII zZT$Uzy4|F^{^c()i}!%{fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+fcJp+ zfcJp+fcJp+z`v~r+T8jI{{27R`^@2hfS0HcKI!l#guTcJD zcREn$^T4ouB~|)JuL1RQCgBm~^sKuHKV+Q2<2 z;et3w4FPcj$014ooFs&E9|I*JAR2->B_ZGh10^Bg{su}yzyl4Wvcl5kTM&duLO3N& zb|Ud68kd?Q4lgAFkdoq@rgF%YfE zASMCxQk#L}V<1|SIeAjm($QXJ7@Lw1JJDVYNF%oF;Ha3~WO_mEdN^ zK)me@*hxYPLYnQALNK0=Xc7))|oI&L9clTx2>W5eLbiM<7=xKrnDYl889D)5bY@bP%r$lh}}9 zapYQ!WCb@TYe78rAub6i2x%6Vgn&FDfKw6?$eaMJAnpU;l!S01&76`DkQXd)N+JT8 z6QJotnw>0(h?AWRuuSXD(^eyZ z=UxP|PDw-{>jY?}Bh5M`A)GxR4U;4hfh-Qt#F1ukNeE|eNJCr_5y;{IO}vkBNyX$=-!G#LtO=n4h^boLdBv&hv^u(s_Oi#Qe+L7sfzd#V}wmih-j!P2j~vAnANx5lA{OiGgEG{L&c6OE3z$ ztOz8XmluJg^NJWaj?*N5WenWMz^jTt(s^|eNIKsi1NSxYYhvJj23}hPlFknlfu!@g z7&zXrqqzbOV{pTnKu<|2@Eey9i}owvlm12|3oyfp?M zXy9!{AnCll2qc{!j)4c6_#Fn);F@IM)*_H}-dO~a&bthx5jUCBWamc=B%PR(x$but zfu!@EB9L@`GzMa#X7PJtVBWy{48#x4DsdP}NCi+{=CObyGzy`aBgIrp8HflanYvLX zB7!mH(wgch6A{6f%F|5sl!=I7OhuY-^@oU1k_j1>X|zaF6EPto7*mm-uronKFs5o4 zE_YY3A&`$uQOhJktaidg?TLMRA`~%|Q#N8e#0(crXhCVkh%IKgFu_DNGvXo5VFL?O z6=fpELlILo4;CVhai*9iVS5Z9S$>N3anY3Jry`~f z{3M#P{8VHU#+;2i^HmX3eB2q6OM5&%?u@BAmui;yxHG2Os27Og@o`s@DL(FuDc0#k z6Gn)Q5@RZ=U3}abQ;|*aaaWQFR|tslP^1Z042bbi#Dpsd#CRxT!o>q(JQOj}q>i0f zA`~%U^dZJWku%{^acjiJQ;*E!l7;IG#CRwwj#eLR1QVf%36~s*@leEsivYxUC^8%u z1&HxbqzM-Zi1AQVJ6tp%#zU$&-tKlZ^>jEz!%p;nSii zx`?S0Q%~S7>C^GQ)B4Qpv!u^Heg4$Dy3ez{7xkFZV^oiRJ<59gq5CJg-_m`3_xE*Q z+`X#%D@}(sjc;mh>elpH<1ZS&-FR2yXB)3>JhO2{QU$nh`bssQyj$SE~P~`u^&@s{2$2)h|}vR(WaVhRWkA@2owfa^K2bD{CrS>;GI) zS@-jb>#KiQ^+d&IDz?%u>QAp&R&j2_RkgD#_OBRPQD5h{rwJevo@K_wn3KxeIfr=8n!y%{|ui;il2K z{<$yIl;?h5H@5Dj;K#v#2M-6g2J7lRRCh^mTJZI{CBZ56ed}ii7xdWFv`;W7_-VK5 z;7{&Z_qglX@Z0*sYaekB)Sq1aM#HZg26wxIcK4fI8*Rg=XN0TU2;RH}F3(+IYh$18 zn9;CGUPcj9plxC(>3V(Ov@e0S7n=C)+cCsKU0#SNth_KOR_8uL~8$hKt(ngb8EG|uzK-ogF z%dT{TNogak6-8ddx<}GNR643M*Smrz{k|m43sSsnEQlm6Bwlu;qTKC8Cylfw6qSwc zL()Rx(p+q;>`cqCgp#z7Z0RAcH}yNJ8`m$<-m<$5gs3zd%`MMmSG#fSwLOb{F7tdK zBrYA*d$6mcvK!s&#nM=f$#NkgE&ZH}x>iM4^J`mL4<~ihAl;;v#7w+0vD68ClaKYi1fJ(n3U9 zMoF|!t#BKfX=x0&*2#MBBho_R(&&8>>fLnqIZB`q_xZkbPL>OaOEV`Q>f8j9mW_5w zdV)v`iAz5hig$AdaoHmTiI=^<&wIJK zG*vXx1Gu6VJ3yp`h;(s#-%D4g*O%25OCKoGLbPn|YnWvv)VMKPZ@$+PulGU3L6!^2 zwmh0!_zEK~JxQd6#LIp~OUAv9&9n^mvYRz=Y20L^vV~-q-9#Vx!X??7;#Cm$*hpGP zwsbAO-q4rcreI&h%g&3m5RsOCjxC^sYVK=|`cx;;Q(K9H$`%rrHd)lWnNE7qyv*0H z@v^6iv=FtNTP%{UaQ$h1ZKR%F)LW*Bw2*A+-tH4LVK>tgwq~e|mpxsig~X);aB`?} zgLz)dD0?O`P`!o3rB##&?bqnomr5@3`5_`LBwMO-Mbe8z zT1d8ZnOj8nFfhi7q>mM8Au7!ybU9^6C}-)OB+aWqyxxn6gS;jrF1^x(X~%UEmp!D| zYfD60NL+e-C|yz7^5aBWNL*U1go-M+g3H!xgSh3i#=vqRDxKgoKE6E>(7XHAs~$i%4QENtfNk&%p-J&Z{oQb=~$@wFsXHpHmjLPR=Ub}hfbIDqP3RJLqB10mUESGf-ihJnpoP{QXBqq2pF zbY;qGB8^cJ+iA)>Lp0RsdYi9ebE>6t=~ocd>3LPX(3W}IZM(;Ck!>@ ztZsaF0Z?pi!E{N|Le%mCc%qPVbt+vnuMH(Gk`@v#8#A4S29jT>8>b zK^e6*m6%mF7C4d?qV+C75Z59Sq@VYte%_aXnB|zVNLol-T17d#WKYG$oTP=QGz&^O zqQhE@_vdl1lP~Kz%Jo{XADwTyJa|NLom|?By|eTst??%+igqSiP}n zAZa0S>6I~Q^ql_GPjN3R;WaG#BrPN^9j*TID8DC_T{NFB6=@-HX_R82WN&FB4k}y7 zTb5oX(n8|W;e<>KB}WNdOJxfY=@|vWVxiLY%F)xdTsOTEjrqJgvC-SDLbU8cOq7!C ztVCG;NLq+U%e>YQs>tz+g(vbO2Y|7%vHX#=knFO{_{w4zYHgH}kRB@1LPT0-ha;I& z4(2sEizW= zmS94ovW2MSCZtqGXpgKBiV2ORg~Tn7<~4d5fKIS)DY6{X0!a%|>4Fxjq}(-AYA{{< z^R_MC-WXgYEhJvHiZa2zWUnlrw^0U33(2l`IlpYU7wt1;g^0B`TuVPS5+c%sP&iTu zA8YB@MA8ys(r9Rs7V?%Y$3q%=6oIQHM(m-_Kl`@a6uDZ zLwoP|H82(tsyF^7R9JSZuT{7ksl9vfJrD4pz4gvNB~3c4cdD=D_;)gM==!;e$3aYb z7^Gbw1eKt5>q5r#VAtQcTP67^=^eRxryteztnB$%k1Kl2?$OZWsqWWxU(mfz_h*`J zXYtwHUe$((k!kmsNLHolvz$)eDs$uUuO>w(^yVN9YZOi51T@ zt!#Xw{7dEMm*?r*|KBLPr0kHg+Oluw-k+P7>yg{N@#)~k;OJmL@KgQ%Kir9cZ5aYw z0XMuh7(R!q(C1FqG!YJexp4|NiJfQDBE*TMVt61 zOVB2IpzC6O<;b}$j0#?$G(PlO{DizUeh{+WYG-Xrf0GA|BqzA5=}Noim7X2heVTX(9* zi=_2<`5B&lK^LV-?}Mf39xsyC<4rQ{Thu1q<3-YXd?`u1y#=1)dO{wtlq5c+vR;uIEUS1W$39*5gew-4pgAnRJg2 zTZwzTNv6vjBc)}Oi8mV&OG)A-PJa6l`gNw3GVz8PVkt?yf{Og&dSW;tnq+)@76`}q zlp&ig6FnL+l+>AwAnpnOBuV7Q%alH4Bm17WFtSC`M)oI5^r5VgEs{2}O)}kYsdhyp zTO@5{o3-hlfbp3g*&>OyLB!gRknRZ>pJAWT_7q7Q+0UxvgEEX+OM#AfT|YgtMG{BE zQj$Y7zqnOwWS5d0L6XwMQBROEZDhZw)~0?z!2`-ry(~{QvRM5RdB~(8p9il)W z>X=?vq)h95a^~DiH1Q@R$<%c3lRkylOA&iZWfH3c!TeIUyn-58E3E_p6#^rF=!g?^ zC{WDukVvLIlx|O0miCZHrahFFBpZu7B$DPKV&Kr3@hOt9Mtmib%Y}qT%zcud_K=NF zW4*@`ERq z$-24{$&Om3j%L1etB7Prt$AJB|qJs7~e9+DM3Ljk#vE`-V`N2Eom!~@D{HQ znDf&sl4!RTsgxvIDZL_zr0q3La*HL17AQ`lnBHrOBw5dUO(Go9lG6wUPkeler0q31 zlMZRg*@UI{nj&d?%~FyJC?mbs6iM4_n&gABvE{rpKp9rpIU6 z+OZ^=9-kta9-rwx1Yf7e=Wc|_swyihpBAkSXtDIlE0P`cA=EKF$BSfpeF#=yRHx^7 zk%Tpf7M`b#h3)%*VV@xR(F`V%6_kr;;dyF?xFq%olAo4L_aPazrbotRdXASe(|sr{ ziFGCFLyqrj_F=_#6=|iU$I2YaNMA*Yr0s7_@MYNEXJb^MKKP`!?L_`Z|$@P>W`Dsa%ETxNVTJr2LKP`zLoXU?*vn4MM^V5=O zFGLIJGT%=blAo5uHLZL+KxBuT3Z*xP`Dw`kl!IsiS8x^zl(>(gjlS+hW3)_g0H>G?M9AxQS3n4WLt+-9(Ii34Gx zkno7RAL$wF7|spoh-e`$Ss)NKk^HDtL^AE$v}BfVMKbN%dvwi%4F!tuP};X532P87 z#3g}YMUwoqwQ1kR`z<7~ex`jZWv17%v?N+3y_Sh&dM!&!Vm^r0GI`P_lJFg(g}85l z4W}si>3XL3L%3rY?|plaWO_d&Wv2H-_pFc4`1JS2$+zkKkVvMlSJI74mebXKqOPm%8lt6juku8#G55=v8B+5&BNF>u9N=s5J7I{b{(;kZZ z7G+{bllG8EraiQrIO74cN#r4Vp58C}-|+6yztuhQ@1MP*fAsXQcGucp)jUwMzGgzr z->bh?eOdLK>R#19uG&h!{olLly4qJNKUaBv<+RG$%BL!BtXM*Sm*6+$50!5!Kd{`D zf3xhWvLnm-l|7rgJ9lz!Z0@z-OTmS~Awfg%H2poQHu@L?)lFPVrcZa*&@rHoC}4IN zTm98Rm}AgZmr=yZGlZgruTT8=2uqiuP5fbd@dD|Q1egQf5(jQ8r!V58K# zE{bH*B1MuQDN-ahUdd^+mi!?LKmx2t5)cm@wr2tV4Yz>*&S4M^ARBWwpdv;4n<7bwqN^CZo{v}aQRc>I z60!40(In<0A4!7F$d&>h_u}IPe6-6S3?zghLSp?WPY72{637qu@2uMKXhu4Ab}RFd zMUoIjICd^XRXdaf*dj?lJmAln*>O1|9b0smDUyUJI*~y+uI{8Fc#%H#CRdA6Zoq#H z){e(_QqfRTBndhrt*7(xQ+zywj|1t5V3)l^E>YPkwxf-tVj~z3fzj=aV4isu(TrdLsldSIwM6V#f~R) zx?@G?kn~kH>5#G@2W}|~%dxGKiiVmZNzfT-J(G`*@bN4@cHAM+eb^#N&>1Phrq_=1 zINfp8U#A}p}nYLWn>skn~Q*YdFj85C^Nw{z-8w9A`L$DR~%`Y|6FAqhGoMIVYCZ{c*uimVTYyF)0FYJQki$c6&D zU4#Z9dIwjoC!@_MI~#74as#)P(gAOk1HSRm?tG+GTh206HA$er9dkD1*&<2oxFU2> zZZ%2loFcXeigM7igH?k(4_Zm=xT1sD1oE#Wc3jbsrbrSyu4thtlEjWH+Mh((*^&@N z`?2;tsKNn%{IT8TNIPUNmLU;Ih@wjwl;h=`miCNV)Xt;Pf0QYbgebzXb0MjSs|H0o z(~ls}{YVn9W5>qYB9?29&34@(EL_HhwY>^~(T#;;isMTx-#O8Iz80LvAf;?L!iJh~E z2Q3us%%Ful4_Zm=xJ45oik>Zrom0dVom0dN?cH3`s?75fts1MR;UuSLvj| zU#_RxAaXXY(%H+B&=Uqbb4V)UR_pM(zfgmJ``7%g;Sbf%_qnHfYmX(>AE|q++vr{H zYUo-0MAZdV=k)wm{lu!5DnD9zT;?JDjyd+hrG(9a#3qTz#)QdX4LSU+%2F z3;Qh1oj&MS1N-E@6EyU=I5;S{yLNHyqy5M9Z))gKyP#k9x+4dEv+)&oziV^9ujRic zCUY3M0Z$naqVNCP3OAh4CW`l$Az#9@Yd%qH>C*K0(pjmTz+Fj*J})A*CbGBi@m zdOC4%HttdH0q+6t0q+6t0q+6t0q+6t0q+6t0q+6t0q+6t0q+6t0q+6t0q+6t0q+6t z0q+6t0q+6t0q+6tf&UZ_@b~}m1fO4KLan3c|M)#rrF(6#y-x-|y+cjpcY? z-$8gQ&;KtYU9kc>(2Q*V{J#@U@+{s1-UHqP-UHqP-UHqP-UHqP-UHqP-UHqP-UHqP z-UHqP-UHqP-UHqP-UHqP-UHqP-UHqP-UI*E9^mKy{QdvHjpN_hcXwA%jq#z`Nkl(e z`H}v8`P{i?qWH9F^j#48o50uIyqKVN!&v%m>ZC)7#UAU^w+VCfS45tx-V(e|CGq*x zdux8+Ubxjc!;C)j!$mDWx_r>2QN!Li=-{^3@XgLH36rT*M11}LU)i9yAzJAV6inr$ zE99Lk&=&t@IUeDg}FA<4tAgqu+WMrF5Fo#Y#6QyA^}DDqW-WBBi$|{iM>zl>S`l zYf9@Y#6QE89;Eb0r6(yZD7{JPLrVW!=}(pZNolQq#B+$!iAv`xJwfStO0QS?F{NKq z`Xi+;E3MM@+*Rp#rL&bbaj!%lL=Z|<6_`JB&oFvH2ye|hClSsL;XJ_zg%XO$0cR+|%S#zBzGadDV~Wdw z`)9+uWW$59VSJq=L-&w0Oy}g2m1$V~azZwYzX*__`{ZnRO*V`;hr3mI)&Pc;j%R|zzD4CTFug-?g&4$m5!_icLR9JbL zVyMu3t_UWy&{CESR}{enxO`PMToZ>;aRgBQI(B+8J^J1!PY(?gH-UT7#M{m$INajo zL=C>}Eu`Ru8STUuv7G-6J?FQu=wNPbqy~=|7eB*7n?6=~Si1Dm_i=Fqx4rw|E9EuZf!;?%`07`bgk0&DZNeUrYUy%H14HbazCXn9+f?Gg(^i4_2aCtM{RE|-SMJ~FVZ2qu6Q`7|s_ z5_5V~%fT1@aC2Cs_=A+^%X-~+7QsAuA4UL12ZB!C2j;c}CkeuTCFL%?KE+-P!6?!n zdtlFl4|xA`lM(OS+B^vn_`4Y}E)kQH_qV5r4TU`XMiEq_61x<`qI#a3r zT41xDU#0XTN@ezX#Ojrt)S~f`BlfV-x8+5cI#e8vxQR33&WGIaWvC?LhMTSD;LZjv zLJ%t5cKk)FEn!u|jX}h*4I6`bWm|$ziVXLyk3IQ4_wYl`J)oFTIW6F}Lzf2p?gJ4O zld8ZOdrlRj%rSD-6-RTgmAy?{;4!5I&A49aeM-Ni^eLskQu?~mI+br$x}Q>Pkr9?C zU9a?Fr8g`6xY8!}+Pqegq6=m2RIu87S7_-TVp0F=9bysRfDnuLu;5D>g|Li0B8=J! zfflWgji(X{u$W35OaApkL)`l#I{Z`>`20F zJcQ#38wG?)*H&W0MI3pIxbjYqxI)Y2mtEH7Bd(4rhZs&)wUPHfdj5jaK;=8y(#tB)EinUe=Yg}L&JArLjJ_-}u?j@p^zk$| zj4HHXc1S1@`1=Vs4-nixrDF#7FS6m6)36x$N;drGG)(7I8jE>FA%ya&7oya&7o zcG3flfA0I;UQ4=9t!Z;XKr2lyaCm+d&~*xKp9QX#pZ|ZcetwUBeC}K`QQQxSKmVU_ z!YA=`rrp4M_MyarO&0=PJ!40{ps*!)O&372;83jN^M*OMnifgyb8!CD!OmfGgY=wv z&b_8-)=9jaL4Ms9#cdQ*D}IWbK`KNjB$uJ#z7G z-#Fya7V89I=eFx1?L_aR%guNvy1!&6a_&c$-`?eyn|SDs2tVnSb3W=sE>Ccm2D?r% zBhG@M6n?MtRicIPR*PU*c$?XvTGdj5Y(|E9D__3WnfK&5k)u2kB@UZR1QYajE6>fa9oh1!-Y9IZo_hPQ9yTIgMbFpwK8Tdt8Ui@s**!Qdxdu%qB`dZ z?$VHMt8>+wiz}$uSuhJK6@XSyLHYptuo>PMq zO6<6{<%O%z(o6|zduxqwE7V&UY!?1~Y8IZ^PHTSbfd|YuRr2l=+e`new5IK+ZREDQ zkB)5`P`_~K-q$LQPCg)Qs|&|Jab`9)z7B_w{UBy27TQ@TL zoo~-R_^QzdcKOa2a}(mfN_SX;nTWzBrCa%oUgcN%U8TQP`gf&0Q9%lOD#fdW2uCYj zr}Pq~w<~=_>61!-sr0W(o79dGN)J}LP$@4R>!XDRWrp1{pU0`gbsQZ-czYfoVC|N& z{81ruiT=X`x=q`GjS>VBOC6OgV;&4>tegfOr zwGF}6(DM`Ha#4M8(od<8Y)K`5|{?H?Dm`IGQ`B#o@?qOrjxoAx~!%3N16~7{Zb6L*no=p@FmF@V315 zUA(xIp#bPTz-=K%u7LK(u_@&ExJPsb3B`ry(y9Ce?zI2#wCbL4GQG&~lotz8dd7-N&pFgfFgrg#V z^Fn=P2tO8b4{6L*g>alKQ{2Y{Gg%fj6xqDPh-3m2Mj@M<1k3>pChI0hb`H zKbA`nlQYT;)J8(P?g;-_)Vm;gdjENvT14rt4d!06Vvr_wQySemfc0iK{7Q{r&JM3I z&?^y2Z#p9me?=+2dRvd_=Cq5pcl?U7IpZnMP^y~0=6qY*H?1t)-tW7M+ypQne$JG8Qi-Otq7zx!(bUcJ8m>VD;Y*Yqp>@3Fqe2a|#U!Rzh^?jL;~ zq2nWNQNtm1XV zWy1A~Ca0rhy*o#AZ$#WHlerD|H=^J9NjFDVk4IvDmx8(1inH#GA&D?t2z6dqA9Y_x z9Z;}qsXhqw^olTUw}EtOiYr}n#!3nfxCJ5mb!u=#Q{46p9hd}dxzOIxEj0-q^~GMn zgnJx4CzD`QPrLj&6D~l6v!p8UFi(Pnn71j}MIkksob`^4YR@@JvwKT)?*czM(H@i+ zkwObz+z4NDz+GTCVh@eNB-oMj(GT)~E`_7Ycxtt#bFW!3SQ8_ZMzq;?NG(C3LO)Dz$@IjCR=K+riwiL)5yt36If)y%NN09o9L-tkDGiutmZx zOW1tTJ=o?Fo1uuqVW5qn&5(5hH1HMeH1K=jO%Y5ai0}bAHC>_VW+>k(X#%@2*!VFM z=4j$3rFST`0Xa&~qboT8di68Nt#r%Xy6nrpA?`%C*{yOL-6q*0VN9djU?Y^Cgpnt@ zBB5}@bOBO91&-DgC`m>P`RAK&@}>-(2D=}L!_u&D56_18O2eXLR5m;&8y=Sp@0$&e z&xZHUh7ZVw56XroXTvSoaBDU^H5;Cu4bRMmXJx~OWy6PO!*jFYBeLQ7X;@l*K@prs zUpYDrOUoad4KK-tkI#nNvf<^~@XBoXglu?qHhgk6ye1o7n+>nehBsuxo3i24v*9zd z;j^>hbF<;|)37x0mTdU6H#295joI+#Z1{|9_^fRBoNV~KYJGCSihK|V0M3q8Xjz6f50?>K=(1} zNN}Px{e>($=bb!QYgrlC*do}*HM|nC>A+veii6(f<2!jFiyO76H`voRYVAIR4L_q& zOB0{Wtc9)|N>B zLFN5k>|N7saLxLvnPpQehE%*+zMuYc%=mqavj|}eCzQ^@4fqlk9#}dH6J!ageCaGqTWKj`M+K&r&ccsTQc_lB z{2(QjMF=aLT{;VseF-T%_)BG3SxZW19bY=DtvHJiws2YLEcC;iOLR6f13fC0MF=ZI zk1COc9#tZ1pVC?AQ6;3%qe^6<+my)4m(H46ItzWHgu+8hXQ6MDkU|G2k%bOWB5QGR zRz4p!WeF)XWm&Q*3E}p_yipAuqkAwdD_ki8pv z3?t4N#VMWymi3)D2~o4(b%L#oMY){0j3(AkO%X%j6y6_Vvh9*!?zO@fXhQd~4$~Au zo{!ila4pncvY)#LFx&6aO{Wmct5~50zf%kEdRU>_re~&}?!MB_`@UWMt}onxO%5We z5nU$QD-?x1!Ce~6y=KJgn#e0%q;##)_bI(i>8F)Gq4XC@_2-A^vlO`RO7p`BIF*>A zGwuONn4ly~=a9&!U{#Wag}bZ>CZMCQ{)hbzmLX`rn?-+wr9lv$OFHUzUETMvgGNL( zEnzxR=^1ZfnE%sNojl{Bo+$)tntE2i9zi=XR2F);mJIKv)bLbO+bLsuS z!)a|@K<9G_S?cDysqPTEb^)5%3d5*vH`A*uYsmL2vRMXEuQ`ii_<#+svLNoEQF^l6 z55lV~r8-bj5u^CEXnl zDruq5SM7?^-Sjl5*o#sD9WJOCi;VGfT6Per;fb^-C3GOV>^I_ZAFzE6>@M2pz>cD0 z4ju4h$M%fvBXroDl+A$^Dk^1bh7LSIh&Y-{aI|j+9-X$Y1J4oK=YYp}=S4L8$IVHO zJT}Yt%pI0p1ZxI&)X$-@ysHHJuB4p2&=nD}CNy~fXRyxLQ;S2I!xoI{ErSFAt zD|Sdr-G-2MDEGD&pXl!fP<59W8ZHyDjzJ8k16$LY~Y< zq`+xOcF{3C!{V_T!VDpL*+Y+n!gJIjHYVwehG6^ z-F8{l|BSx(_g>g*-(IVFPwoA)Ufp{Q>HTJ}FZTLSuQPh_j}vo&!~G#V|HtpY1Df`5 zGqttH`Gaw{93!il;^`Ezl394^wE5>)x)kMUR~~5zi{6(xx^heKtO{XLeN68MZd1(Y z9-kO;@EaF?Wzsp{S}=+3_2LSpOM+ed;aWo`)qE?>sZ+%mOsW>U#5``Jc*)PuREUsA z<55_obgk0&DYg4ApVspyl>S2L>q;AQqQ~AJn5^dul%AsWLZu&4`moY(DScMyt4izi z;%%7H1C<`3bhXkgN^ey9pwe$B{fW|7l-d^un$-{Z8*~WxC_BO`rT7>bg1ukxfSy09 zR8|?6XC_*N08>maK6vVp0i$P!aHIq`_(C{Z*zkxv1I9Cy5YFf6j6$IWo3Icr_^v*D?6II?6~9F8oR9*3hQ zo|z3F5{F%$&L|XG@Sr`ko9<|FD74@iYX~=oFrKf5aHIs!-9tDsa84X9m%L9Qh`Yw6tD83!?2Z5Z?adlGuKdAHprH?9oM(ImRD|P-Kq}1L|J50})D?Ll;wMy?*`W2=BtMo;sWoRG@`1`8} z_*<$7hbUdD^mL_HE4^Fk7nOcr>2H2#$_l&04qm_;huUx)Irka|!{ zVjbF+XOv(xZlolHai=1J^&V591-Ej@ zu=0s@$c6BcaaZL-cwrnagm71{TKQJ8i$bAgIUU0$9vi}m#SE~-#J6*sLhi)3bE8`7 zw{vX?<4Y^t&vKE(PG#ytmZ3TGhb<_RxeS-W+nO|4zKs%@=JsY=|YqgK{VO}FW&l>uRe zJgWI_hj+bAvA|fN+0UHN>b9rr3`ZVg9lv>s_lte>Ye$9|7601R&b#gHs64p9Vsr;Q z9P9arvuje;09N{7O^i@#&n{$l7uwA`G3x8)?r<1K4-uO)rgt=X#6e@89zN0Ac%}sd zy;OsK?14R7y84YM_yi6?M5F#IH0bMOCkGvjc|BdEbgk0&DZNeUrEl^0FoP|I^W zoB>!O=ED$n1WUvvL=q;T&_a`b1j}9?F#H^HM=)N1$$;y!;Rb=NkA-)Et>Sg1Q;*WA=N!e1!g7jTy2T*#_}9OvJj@GwYT?VY1R)giOuF!3?lluW zrGET^()F5gsnQQC{fyFYD}7Gs8%n#Y{2ogASLu{@l%Aie^kSvADwQej=_#Tn{4u-E zd?B2p{IK_37s81SKQ@GkGveOfYPu8SpgDvS<6vvvxY66fBDaTdVt7Q{HF0hia(8Cb zMBGL9g=P4)e_z-}Ksd&txjt((z!-}-c#Pq%FWSp)sP(Zr#tPa-Mk$K|{^oJl25sKt z7<1d+vt#UBb=Sp8o0Xy|5atM>7bGP}=ihINoF&IZ;a;m|@{eLgohZ?7BN%N?jP6i{CG$d9`>KqCXrfNsm)sue z#xff!iHgJWz!&>p*5`ATZQ<|#3uHQ;|I2p(0)GB~ckj)+qNW(w z%@nVuXtyIM=_*G)hgSmH4eSFfyikImw;IyF|97=Na4*~%&4o56!ma-I|Khs#j^_&%Q*~=+asHl+N0>bQXG4iL%gb zN@V3rXJG?aLJEDOL>AsnDUpS~Q6dW+phOlrK#8oy#aYA@H*h{Pq*0FP?vv^HON`V=Yyrv+F zcYat#Y-^%BzkKbM;7V{);8jLqYoy$`K5!KM$Z)^1Hen;u94d!06 zVwHscQ942C5lZb(gfOFIf9l}=N-RO#7DZ&3QM(kGSv zpHlP%!%}o5!6@*ijUZ(UTO24A?M@s*!w2^xpeYIApy*bmS=k})3je7n`rQcTi zywV)*15y~IbfVJvO4lmATjbe+;Gl-{GX_;XLe9XK(x7=WW~InDINd>DaN2Ks&4bP;zgHWfo2OCS_&} zJ)Xa_*HWH&v$IGQwPmJ49?RKTJeISwcr0gU;UPwevbvSd;u#=YVMDQ$HD!NBth`9=Rh(sIjVjJ^Dus!t zM7_{O(^+{b3lmW)%gUNqItv#NC8W@?OJwnLqGWqnS^3gZQ!FdoKk_IbH2aw`R$JQw zWpm)sT*R?8<0%J5jNOLM){*3(t<`Whj=o^}dDV+?_2_o_0q=E`Mljm=LUYTb+w$xv z$?2LS^-qTglfx&|uE$idrjQrfbw_Iev*1qIc)0tO{-^&E$$ruG5>Nd!9AwYt1}WW7 z>0wHjD?Ll;wMy?*`W2=BtMo;sWx9VIpmdzlLzFI6db-l9mD+yzi+cWjrN31w7kl*f zlD6k)rPGxzQMys-6-wnP5M~Ypx+bI}uY2gk5e(}yU=$w0m^%?tFT~rdRA@;&#n0!N znYht4Gn8Ph3gJje;(1gA_sQnQC1pYhol}vCx9THHuxAOmBY0pOj(noeqtt_WVxmxJ z8A``cNyI%Y8{RDryF8syD74_VSEwYiWY0Lv+<8LsxDys~M@3?Ni(qh4D747^ir9}E z#EWAoGvW?A1XjWjjx50{7{Za=*rjK{SQwLVo{&5i#So6{#v9Wi9O=e78Ny<-qv~Ml zPr!6eFxJNm81)L_NOwLCN0zk4;i&SM)k7r__p~@1aZiuK%$70s8yx$)gcvLp`qBtB`f;&h_1M`IB7suhqCrjdRq~y3b9C72$ za;O^yN^Fb6tc0>$et8j0K%wQj?h7L&5qJ5qlko|~^n^G0{Bij8k-*H&N`CV~ePsye z^Mp~Lhoz0Vst}HJe{j(Y)k&DS6TeFU_cn?yufH@%Tk`zfXP%c-!raIFzHJM^w&4jM z`C@)VDB4odmdcpJs1|M78G8T`Wig2K@^-NL&Q%y-l@ zqda`n1LfBSeOw<33kZ*kOr>x%@xM&?;hm~yTg4s~zbb#Y{LJ#%<^9TkT6TBY`m(WQNS7Yp}pJa`9B$#3*0_L@%$glk^TPvGgUMDVF>|CGexXme5FMc zVgH*hoF=K#NA3(mDIZD@XhFvA`MKU(g4gs;6&CuBJt@2AXB9JwF8%0h|Az^;OT#@> zIwGopen58R-S&FSoRXGAmmRTRh=;%N)iOPh6Jy7U8(dOrPnFFU#Z<)|Dm4$L1_iHjuZwe-B;2H+2sk9H@!J*$E zE1jlvvC<7nFIT!%>1UOGSLv^n{#|L$I`PMzN?Vm4t#qBzOO)QO^bw^`D*dI>zbb8# z8_RBl(u0*QRJum#MM`f``bnjaDgC+9*Ob=tJt^mgD?Lc*kxEZeT2OkE(ub7(x6+>~ z{gcvKdGEmuQ94oST%{){Jx}TNNM^!G~3^)h@HrTZwIrL;}y8A{);^d6;OQu;qiUr-w8W}u(aF-m7BJx=K+rB^Dw zOX=s8KBe?|rTBj{MI*{X0w+ztzgmZw%Syw&&^E@8v!f zCQoz87fu}dct~2g|09g~%fP=ULr1$B@e!Cxyx4$s<>1Jsl(c#@_~p$r8a1e||hn79;JyblfvB zMwZtt43ovkgY#aBBR?=@!mmR{_=~o5?TF)hZ3&U3l$T$8b{u)t%!P5}>V@BlBmbs( zQSZ%f4DP_ym;g0Fj)$J^P2h3g^URK_s6~y zCQIS3eDA^ML(-Dv51x8COqMF{d+GJOZRtmF^kCNf&whT|??YrUQrYyaIPwz@Z4Q&g z!LEZRz8Eqh$rJ8pkAj@+~U+CRh?`C9Q0!elYBao{^~h0L^OF2DmtXT@rC(kWM?R_J@8ZbwH=MRB#`fy(O^YKx_3y{x$hV#GnZL#u zd3()eapa3e-xo)|W63|`$j7Yf_g0MU2YcQaCQAfQKl|-4S*qcb3r^=_n`rH*z6;{W zP1_%iBfnk#UL5)MCwlA-*_NUAjCWrTlf{#hFY55O80jO1t_+iF++pU6XYB}+#rDK^ zuKRn)h)D0x*&0VaCijSUVx;dGH8+kt^GCmoBfoRnv^^ms;>py9+y5hme9P!J!enu9 zS^g>ShNOl3(r=fA$zuERH!lBYNLt8?3NPLpL+<_Oynltr)7%JN_piBeG_!=Z*XsN837qWI zyY%1?oHJ7Vu>qlnpsEGG`eyCTuMWWfE~&}=o&R@w<@Zu9Yl_CID%ERGm-hS1|6Xfu z(R#OdlVZf&;?2g-ii5X!@6LFOmwM@1?k2-qy@%^|FXO|62)b{B%pNvsaNrg%uKClc z*~9p=+;j>eA3H>E@$#WBp+OKn_adP0NMg3Zy%+x$wflvF*4hAh0=xMPvLyuCfMJ?8 z@bUbRvAYEu0UH4u0UH4u0ULq;X#|FJsrR1$%X9zssuDAM0{{5V((4^}RvzJ=E0=x+ zRtS_caKZcE++dC~VRv!(8F0<&0?&8({Qt*Aa}!g!(gN_&>}kK3=l_jaE=d{ut1JI- zD&L-Ex?$K-_f2Gx_;~-GhwPZ>o;*tDgOtmLiWlyJFm<>VhV&u2IQ+GKeq5=a^B%47 z0=-E8uEq~({ItfeY5cy%9dvz|Uwx(Y`9&H}(fF$xFW30LHGWd#mo?t2aXVf2JvBa6 z&gmji1n%cUTF$+$R+4_Y!(&e6q&pX*@~exf+{ag{{%&8#R7W#bB^uwW@go}l zPUBq~n_rDN`f8w$#=|upqw%#G|38iI*7&Cy|3>4#XsmR*>ZRsZI8GY2ONSAnI2G1kccx0B{Bd1e114MSTYfiaTkm-ph?UQlQ z6i4QBW>0!W3TJ?HEgu(qWIsy|5gyr>4(&;kJ(wnFgfCWk(!7)>L^j;!oe3d_ZY)gm z$Q%JYBOIJWI`qb{A1YovdeS>mt}wC;y)m5fj2sy+-6NiSRFItZjC>|Yrh}3`7bGiB zx_6N5NAQ>+nFa`vH->%bO>=Gi_oNT!35&JL1S zfJ{i&o{PURwm%;v`-QKIC!ZfA`?g00$>|i%0FhUk=^PAwarzH2!)Ds4`KQrNFnNGP>kVCIa*Lg-luS@$`hF+KU_bUs% zF6|q+q~E)FFe?ff5IM6)0Dj%_)gT1g~}t_t3VSf zzxmj!KogTx%56PpKK3fm#Kc|&qEW0!wSE<7mdD;zo4(Y+BHmqIe?2FB)s|^_ecRN3 zo%+JUZ}Y~{VTJCCw(9dYHBM^(%QUXh_zaCN z*LbGJO&Z^&@xvNFtMN{aWl?qCVDUQqAp=FSBuaZXTUL3}45mlE!z1Se$#Xn%=#jt( zj~sd=;D1tq*VUeF{zQimc_fhUkqg1}r2SiuML}}&Aex{N{!-DCUg44XLqm_823Zn+ z&*zb+dD8qjo=2_%SyE{IsVMEH(Bp<3DUbo_+R)>M=9JR+M!SOP+4jky2M8-5Eh+Q> zAq}#m(31k6Tp6^Tg0!UWK{9U(N$L?#=G_m^L0|glcyj2uf-lV*5iv$W4-kCm(31k6 z+$Y{h=-xl23F+GY_=_xC49EI6g&2A{(udGXC)wVag|b&5Z=$? zgy-j>B%jmA-oP)TCGP-5a#CtU+t0SmZ~Nyq8{7P{^7_iB%eod%XEfnMy>v`TWBDA=X@7+-MCEOm`5zlyoJ@mX*dT4(4Y)1F60v{-thYNZ=obr39 z!tvpS=pynaKBWXK)_AX+sy3)V!jT%EsPPDm$7+17#)~yxq4AG2ep2I?G~T0eK~n4= zp|N@9J6xY%rtx%*&F9>f>+=US{-wq*YP?(H99MWR23=7Q} zafwg#?^URzJDyN-hnG>lPxNzFS)Qa{%toIWkj(ZZePT(jNA%UV$nBG`pGx+a4-+>Q zc4)Ew-fdD6|V9`-@A z0EJ`X*dPNGgBSc+02qf6qJ!o>?Mt>E%=jBF!e~Kin#S`qUZ(MCjhi*zs_{;ZOWe{= z_r?b4UCiB|`lZW|<}Xa7$&==0uGc6_Si_d9;AnVApn?-tW-R=I2H7{69A-j^M_W z9_*9u4^JA(mgH7}#mf5{65j;j+cyTDN>yBAjx%9Q7g;o)P($%i-bSQxNHf$#)kjr* zs{Rd8C!^h;p(Y~=qtylKi`cm7JT()Mn69oEuz*McY6A_w*R)7jEaUe{2M7 z1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1P&6yOrI6$;?Me;ec|`1vlk446m- z%_{=08-DcO2tIj}A!B%ai=n+xJX#KDok5!dov8sk370+vHm(WTF95wewxt-0+$Tb- z5#CM3mIYS@bn_uo;qs^9C&tD$eAhnaf?tLbaNAK12Otk>QEX6|ghi%}HsU&d{k)r+f4>)gX0_>$}*b@7-W+ zI!ZMYmcQ@>uX$38r&N5^K;z%f^{tUbpZV{ z>hrKP8Tl|)4fuCDavcwUr-JU=D1~eV%6=vCpNg_lBFJZ3mA1ewEvCCI87w`Mo8*N`rG4rK zeudkr*nY>kH8U5TkCcNuLm}_khXuJTjm*v@Km$~;~V>MXSZKWWbgIp zC7^dhKj4@!8@aOosh+YU3G1vI=rdt?Dxy3Ve8Z!?GWf}jHKu_pZANh}&c?zF>tSk6aVNcqz&{=OiG@b2{BMr+ClwrH1ZR)bsFpuf#ar9BK!8mu*d@~vt z9_y8Td#YPn_9KoTqUVoezAfq3^kfR!;!I$U2tHr>fyC@ecsnUj#+GB9x zFwXVej|=Ou4BlOVe{8wIn6YiOZ1WAPjQ<=PDxe{wnJKw%n|+4$9I~#<&hdj|;WW3; zjQ3)~ajOh;&KsWO(ecyx!M;%m9ge`P8RL=a$(PyWt+z6ikNtn5TeGNR&66@1 zo*6?>Pnyp>J0o^7f1pk@ov{x04a_e+Wm+ZAjQxhzvM)hj%ZKy86s+kohp<;oP>q_# zvUWuo*%mq0C{1U(=#H3i1Y#>@j}z?Y!?}y zKX1fS)0nr!f<2iU6V*)3W8Og?<2Xa}B!8Kq#v-~CSZ2**{$+?EJ&^Gn@zgxC7MX~s ziXOi3t$8w6vu`wLJ#0m(c~ak|O)x*iQ}bk9B0R~DZAr>3Yd5wwj<(c8yVN`xr-dha z7#n&PwWy~YO_Ny7a7ReC54O7YnkRk3^k~LH>@ZG#zeGGWUFt~Y4Q{!V-LtqwzDm=W zZ&&0s5$%b2PSA8|hrxE^^O$d?)(J`&n^H$+EaZsv@70FKI_jo%O^NpPZ0q?abI26v z$a=R?^Q0YLp;uJ&6rg$H>+}#Wsd?h7&ogVd&YCa22G?-tRhlQhaxHE2XQ2IxuWV1< zKxf^HHpiikfpUb`?OB?~a`<(IdeL+#LojAod1;>1Gshgxb%>{4UvqBij!3nRy5Z&mXTlO%I z>-=u+2#Pr+qQ~`lH@B3&&FMNnSs%-_*hGv;Y!}xto|?}!Ki5|rop`-x)_~=pm$^OL zTj{BGdJS0tUT4_h`ji`@jnQiZ`WPOAu`1C#`smjY;;HH4pQ$5Lho~pbr+=Kg7!8ic zSHP!69JSYcxrQ*S5lCq|*T`L2PLz!GX6&(C-C>IyuI;8FrZVeZ>G{g?i45l~u334t z$(4jsrP}@xo(xA5j(*%Yk2!HXm32=gjw{`Kgm2cU4VqsC{!y?$L3=K*Ms2N6K!7eIagFddkTDE?N8Gso}&4jFSrJgc(6^gR%Pv9s%1ED zu>Qmcwi6kjWlWK=c!Ime=bA@&lCSXC52(#iaGK`JJSFp+tT0e7n#cUibs6K!s|sG_ zS8Bf8XP~c~#e`R-$2sO(;f-;|E7XtX%X-L+k3Qdw+swPGr{BlZW1c>}FXnI=S2?En z^nQqq&^eCz^!^^5#t#Tx-j`&hxO;Yr}tL{TAuydr^72v zXJ7W|C#b76oqgD+pQs8oy?cm0Kox2FksSvtL!fE73P|P+xVt=CglQy8IdLW}rr*Li5?rgwN4yvRe+0n#Ml+ zTTtIz{TaU8dt&}$F(z{kldHq-J^Lc6!D}PdjnHK6E9)VNv(UK~^Veu>148FIEO_s- zkEY8SlJgbk46f1osJ@!V`KGh$&qTLAj4h7!!8!G6Ezj{b)4iDEwTv0-{d=x`)Cro$ zcEdHajOH>MoAR>#RAA=iy}ik3_mkl<*U`mVmu;vsD7-64%^8}`cGD3yC!t5p=y{eG zPp)-1SF?>(Xu8By<|&D($TOxDu+8fXtfKYo#%o*QGq$o`^L0&Lj4#&^T)St|XPm?9 zC9DK`o*nD!bWM-?YUJa6MQOBNoUaXKEhBww8d|uFRJ<-RzOs+eHt)3ZDu}Bl zrS;gyXj^)qTrKg5&jf|K@0sJpjrSB~&CmOdZckA;n$P%E2I6EQY4jzI)S<^$L2|lh z+q6yc*ki~`YP(YRa>Xv|aNOV0yq0YeZAbGYmL~qZN9yw!OU|_{uapN*b=>D*GUm1{ zC)$GMvz$FVJ;uSm7j>PMVOc9N@^Doe08S&FIUU3+&$bl@_EY? z?TsGGd$#lHtIYF(aYx(HJeDEcZt=5W&7<#JJIgZ{-Xr2&E68g;eebUGHdj7!XCI@t zmXSL1pAw9Py$a2fIujm!=Y8v>=CRKB9Eo(6hI&f#q|SsVdT5uL$9CTh8oWPwHKHN+ zSKDNW1NDT*I2`50Na~UI+T|$%+K!fEOv3R({b-)lC0i`!edK%{YeVxGhv3|s)O3kK zaPH;mN3G8voj*H2T{^lnRa#Y=U%I>N)~;*2F74Xbb#&LET?ce&?vmeSUYCY0RbBRW zsq3<*b7|M@U6yyL=~`O0skEkSUFp8k9i_`lmlm%ro>N?3Jfi%ya#gXQe0BMz^74wB z@=4{pinbJuXuqlB+K$UQraMmRSl4kt$EuDCIyH2v>(swfX{UW1cXZ6}IJCI9xL5JI zqTcO$cj(k%U;EeEZ*IS?{qpwn+VASHrNg=o%R0>IP~Tx_hlcjciq=)ksaRIAxne-Y z$cp-+ttGolO4?T!?Jb;Bw5}voR9v*IWJlrJ!li|q3e$!A@+RcX&Rd<=oHsCkXhX=g;Y70zB~yVLB{blco*Qnv-&c6KW+U)^nM z?uOhIxeIa|a<{b|k=xvMYrDJK*0k%LySHs=yOP{JIoorZb5`Uuv|G|{c)O;YX*nZv z`sbA7tZTP7dt3H~>=oJbvKz98XZOx7&TeYED{D*E`mAMHv$IBJ4ah3Z+LhdzT%VlQ zc6oA6azb)=vL;!Y%ueo1Y)Y(6EKSTwtZvi4jcPk7QQl@`n-Pg!#pP``757doX_KGW ztzK)hO-*aFQLR#&+BB&FZAZ1O&-nX)Uf%Hc|2=?tJInn3-+d5>bHZco=Ez-FInD6* zKl%MX&B@KP48~fJ?eG6vgv1hT1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is z1Z)Is1Z)Is1Z)Is1Z)Is1Z)Is1Z)I8WfAax|9_)-=#G~UUFeE004TMj!{9d6z$F=yk;t!0L)PQo;`o~$CsvN zAo0gS$Ksqn8#oR>DLzk)a4}z#)gEtI+sXbjut}H`BUH_5i%9k*Q z!Xv(>%kQ>J?);HPLf!l!o3G|yAD9BH#C$#XIZx1EZ zbDu!3qtWJQ#NIX$BMw`O-?CUAd`XU<(~l0E`X05N%%^(_{Nt{ z6Y8E%fNw+5gE+_YwRZj}P-ZRhlJ6HLR5|9&Vc2?Qkop2<_mQe+7mz_`y7faSff-rj zX3jcY!v`^gx?ag@;^Xq_AZAk6D_LcH=R=59xK9RWuH!=Mtb?1!q$Xw6@lnt7Vb8rW z#Ep-vG(L<~SU8t(e8RlAF+}1atBw|}zN_ErKa4S@wN`)N)*dcPPuDkT`yaJ$2X6Cm zzDW<5{}K0qaL&QnXWjj0FgGGT60rW5#ZErbZt!@WwH5nA6eh;1v4CB@7dt_f{(#+( zU4ZmAFghWvfc!?h=06Uw{kX+W)3J*kbE&og$0q^`6Dc(f$IR>R(5XjaKDmik)GL5d z*guLoj3{BFdPY417!956NJ2gMztM937_b6%=sPbQ{c_%@ZUk%vJ!t)Tz&6O!=RIKf z<$Pbg57=0<*l9#r=`(fj#_|0Co{z#Y^ZEyl>&bV^IYNy9M9T>_V8sd-sjv@1YyEGu zoMnIo$e+Hy3st|IAE*xitPiEqDOp7*^#edNT*D!oL*edfXv39T$SDD?r}H@1MRg2(Q+06rXhd&{x2x{ zbJAi@L%y)*OtSl#W8*zLOpfE99^};dp zdLO)cBq`^c>POlbOBWUY20MF?&2af(o9EWbo+pe|)-n->zN%l|H zDcf&QSE--=G@9UwXsY53Et)Ny%N7G4Qxshx1Yo4F>jMwg(a1WU%N z;nOtk3t;MA>)e+nC&EwYWk zhZF%jo`(ZD8gK_-Y3*WXVB~(nuK|><0zC!(SRB_Q$#vd2>Ks7eIuD$Khr5$YlCzT= zisuzo6^|qf@WVI#8Uje*ix@ z_L&3j_0N1@yGF@p+GY*9O?}}TN*T-@2=WtIsxSWa!`Fmo;#-#u?$?<`hu_^ZvIe`m z7C@&)^???@y3X$rH@Ysn`J|MZqw_I1q4POGouE#{_rAxeG58$8EPM}|UjvuC60PVB z#*k(0Lnd@;)73L_R~?m;wFq@SNXJ<`a$36v3ZPOm@}N&o)U`Dcynh4okvDyN2Iq{!sPEmW<`nwh%>v1V)3f~VOB&kFr|)$S z`Ms8Du*1ChaTdRP=(&LG+&Rv6@F;w!PCTLGv;8JIUe*y5LOrCJHt4&DavXzNhRw;MqHWw1q`e~V+&F83FG zMtufAz5%w&0f_-B+x=puP}e~>8;5fM%{ZpdTX9aBw9E3`asb=unE)WwD{qd&Jb#B{ zzg(B9O94&bHGoICLoHWZ0QINA7JcGJI8C|w72l`s1CURcj&Yvls>HvRP=&8#?%%%+ zcIfl-5b*uIOkD<`&QS1(57pm%0QF1q(QaUC8;(05Nk6((-3pNJHO+*#95wmBQMcGT#62Q`qbDY--#J~RUE_D55W=z?rq(_mo8Bkh6l^%s22js&J zef&MdrXg`WxhP-0&zxN>dDN&m&bos7mWDuK8>mWO@A}XS$JMY$S{x*_SDC&}%I`IA zfS6n~BdePodw6K@B-@x(i@y%E1}jD8Kg4>o`>mkCBl z)ZLJyZ>)df<&cT`TK(I5z!AvNxaiuXt7GWKhB-I*6hH~`U`)4zSdGMZUYg%cbptHb zK2iRm{7yu!UHU`dJaaCf2Ve{AFcyCRZ3PnR|J&`JSNs+?P7exFA*uMNm+Lr&L=W<0 z7kuQ{83lerT){45@kcNz!#KQAcuy|BBOPt`{O0s*$g|8ZL3R`q%KPJX4XOcvQx{m5 zm$x6TTd$!WIz9=|%kPYdH7Ib#Lyy02=u_U`?_|vR507|B(9=Xnwi6 zs;+>2;5C4^3h7YGH5jnJ=n6Fnw&>HJkq^Je%<=Svyl<;-17ua3X|=xzkWy=*PhVe$ zu8GS_MN8FE07x!yqCs4;@6Ebb@z{LFdNcHR{tLhk9MhMbI44c&`=ng9sR`r8j2%CI z;*1$%CtNdminQS2ZRa@5`!A67<0Ib_Uk%qd`$WJ z6|YfjhakByLtWPD{K&St7k23Lo6zw6-KX{eR=1nuOaQM2*Aj=a-Lj+y6MI44c& z?U>wS0BSbi&edvP;=bfw$S}{hA>)^SmYM}w|OMc_6wDZ zE8mHL^{~Udxj6UBC+oYR9p*UI;IaM>wR~LPU5)!03byF;yRc>2<^G~CsxJaSa-kT1 zgazheDTa z;!Qvuj#&l{iloUn`A#mcA(APjczvNDvmS|g=0I*J~C8z3L@xN`=8 z{X)SOeaa1$t3;ImXrGXA{D&^fFbvQO$MiWbRIV|(V*s>K2%zi|$T83SP`UQH*B1?C z82@2oUt(kOP{&iQ6Iaa{l(h|c(5C|Ab0qSWb@r=@*D$iqZtafvLx4nL8T6~*6MZfW z#OI}=i0@UG{J{7?ZX;SY$&E@?{thZ-O96xjV{4aN~zJRS>;2&z7SVH=(V2i%B36!s2arkJt<4!a4f*kYg03pA> z%5}g#@K%Gzcpqx{c_pzg@%`j7*rHDzkq_IEthbL;T#rZBqg?CnfGmCM1bL2IvfeIJ zyjO)&7kKxswe{!-!0>WhAHz=PQ292f4S?<7tpkta?xB|NFMxd5nT)buH}B=ZcWO z{`FHic>j~@c3xZUB)|@RJ_7mp>+P?ouK=R!4wMM+!3XOhUxzg{eXNAuaFj>Z+XK`9 zz}-*Ia`rXPa_8lFAIN&U5Hd^)u+~oHW?pY|{;zUJ7^SWORKX5?tU^B1pwD)4QT|Kn zB|!OOl1CNj2fN-L2zxLU3kOt&O|xfX zlttj3#Lda6$sZ+dP0UJ+N}QB%67Q?+>SyXZYOdOvs8=15b;&--1UF;hrc5sIDLarHZ?gp93cMYe;wCz&y0Ysk;BIx48XWtB_mui|pOCzu*=UfHYD<}jVk0^_rYp)ih4u60pNa* zt-;R$lO`>4>K>ivOo3n((umX6sAVPJQ`|ql;ek683ZQE07q!@ftpPgRUVqsO^PJ`( zi<~1N#}-ubMAPwER7w0)u&}E|j8)Xlu2LRRWeEmt- z7mpv}Fu%}F z`^7a3z3L6wo!jO)>xV9Kj>Y*Xq`Jv#)Z57~sV@QcEc45sjdFsmn#MJ?hz03UF#G(H zZt~leTI9Ba;{Yk-Su<>r!|}=F`?W-W)gKVdw*j%Cja}n2=i9qd>c>Q<6n00$e)a{6 z9JZ?u03|pc3t(ASfzS7%{Cs79&tSgWQ7_DQ^%a@(C7-~!GVdj@yA}5DK6{a~0Qn7X z*W~;T4DR{KvR0vv*rWY?|ET^52!k@7EG-R2x7r-_g2$dp8_7UzT;$O|zUd^4$pgoORgFYD&*n=L1Fo zhW~z^Gwrc??!J#KFa0^b-7dvF{et;6K?ZEqbj`u#I})%L`3^+lC_itwuBR{0ceocJ z%gR1^6nG}zZ1k=wKrr8Ry1WgO51cRkV}CJl_nDICk?2dKf4SJ130Q&pEKH<#TxZ;o_v2HW=I+loIU}B?kGpGyy1SO&WJp7=263FO^L_2nHR_D)yVPBPV7?=CtVh&0Im;X7 zJ9Cil_SR--tc0De!Z-l))SNQoD9b$gRqK+`O$ys*JBIjusW1N}qWrdfx zJLd(jY(9Q+Mvra%0?^CHDPt%CV3 zha5!Ii2pipzLaYXxJTDA__7u@pM{{w_l3@~A0YGPm>DeZ>RS$+FUz|OWtoPw4r46K z8}x&F1TMim%DJ?U&R6EqhZOgF4A$>z$WV90!~^F`Ij#eU35;Zl2Zb8|xh*r+ zsGoPeQ{4$zdYiP1CBVV8kNfcp*J}Kqe*#KIH92)(o8@pxNxRIyAn{uAHNftdZg<~9 zW<1M(x7gvHWE(%f$ce6vqShY-G^5X_(f_|4@>k{?`pZ5V_1A6OQDcE~uD@2m-(WQ9&)ea zRft#JweuaW=-qm&S)=}VWVdrpDB4>D6Vgzmea~TDMruH+M%wF*#$zruYHoR7quzWk}h&i2iV9j@;Tgx7Zo z#c!#pk(du4P=)#2+#kqxOPZxtCRQrOEdt5Nx$5-m#m7Al3P+M?a zN4e{eSn(1U`CcH~{$}(Q^4S;WAQdAm-@e#M!JpN*hhx46n7(4Z(~Lgy1IYG5VtZ~Z z@b_=0GmO_RwC9aT%aQg$emfG#Y6r4W_7gF;Zy>7?#m`lVT zj&}xVpKB$4qhtr{&Hln7XNG3d&a#5b)#U&o-GBdT-M5W?5ElVxuLd?qCuV%aPMzXX zpZo&Vn>R2sLJok;C5TlC;>N+4cG9r7tYD_%H6{7^YK`g*K9A#o*R|~bw2?;QeJtY- z<+o@*xw2sWkQN880H&d@(8g}01}!Azn&W=ckEChe!a5Ase@jtuEa2M9*QmOZUhYo4 z=^o!wW__*IGa~Ny%WJL_uEz$9SmfLgus65UME6?_w8!=lT!S*UalrAB^x3y#{fRZw z9T22{T-R2Y{y_ZzKznZ8;d;l|$YhWAj3|@B*i*7~p7Tu{GXuusPo3nuQPms#>j_@} znQOwQb>E;q?QFn-AIuBw7ELyJH2{|LsBBi!|`Ji=A9xj>G+N-z}-!<_L;X z(er%wPNI~fe|uS1nC~|-uR5f8(DU&~E3zDDH7yY&3F>Z0sZ z6!Y4Fl!i^eeA3UEpSj1p`dKL-=QxhL+9X|Z$Kl|4j{3KI{l@Zj(&giL!22@Hs~6_8 z>qGg;c)Nu!~8}fzuC!A363w#H#E6k@mV;oLt_8CAn|widv}{(xZT}{8)P*U`7v+K_0f5necx?E z6x6VPu6uytu*vCe)k?b`tP=^QHe?D|BNrC_*7`^q%|s0A^Yf$LjOAuP=;fQ zdu@YuVdP0`4N6AKxD(amxZN6L%C9vY^3oadJCNRi{4x63Uy~Si2avWK`3=ZfkgQ4L zJ}Kh+7-%NGi?U@ue-mFmw=#C3I8%8!rU#)O^%y+Qq!*NlJIji&hI_!IIGE7e`%BR6ErM8Kl#4!I`A5hs*$#z+2kxm8iACJv|)IY(}>g?X)E;i zL8b|KD332`a@HX=AXOu6$98)+-c0##P-iM z5L&|^tbPW&hbmo*ktO9Pp?;iySw}(OJvc&%Aa_kK=k%Wb64JGKC{T%8qC32@3eE4Ckt<1ir{L*PM$4?HEeD#6U<$!1zH4x9;Z`&P}`nGJ$n}(TmTjwfAGqoyJdT{EEi^(zryo zgQGP*P2(?U+@SGI8sDMugBowr_$7@?q!*-IXEBDbUm)~Cc85X^hqa7Wh)nr(Eeq?B zRf8nTf$0t7H@yMwZ&H(9JHhGWi8{zEek$q3tX=BJ;qGX)IHm5jGdPRyvl1uT| zBl`~Wl`)^3!Wkf4%QwF~vhR0!kep8843MtnyIY=g$sm^s@{vKZpJk7D@=-x@y=R1P zjCi(vPd*zYs}#-v=~})|6C=%KfJgQ{IVMC-;S7+jJr;jM(oz*QQL;$)36gyW`v%Fr zgZ+Z!<`m8V=~~{5_OkSi@MSlT>>J_i=#l;6oD?Fba0W=%o{YaS(x(K;zHLrdG18n% zW5}F9eR2wCfOKsNe|@qyTeDIUYc^In8U_WiyvNcKy4QIPC=!lxLX5tp0- zC3R_#>>C*!B>P7AzN2Tvm%cnmrh}5|gJeI;aY3?gWMVw|@0c88vfLLX(@?thgLpD6 zct%`LkXgF+miAwWkW-+ivM)I`=}G$zo_c+sERXCP+4)ABT#uZh0YJL8d%L8pCEXQL z%B6yQNxye}vTyqv7rl}18S!oNozoDxnTAsLr{~S_$i9)+@1Fe?kL((8r7!+#{albA z6&GZk%1&u6opM!u%t|&ak>WMV*sQsUJ=zMVC$mm{Ow$Zz@lU#W{HdCJ*bwhsGI2h3 zYr$Qc4jCd2rBi|r-{0su^;tR!;4@(Y@39fSE=b*@@y|5gs_~l|o7dLMv_9{<63lDH zm+N!xC`M?~_%4kf)>sxUZc~Glv@fq+-8b0P1)0(wd4NYw2FbiAB&2K6F@0&3B9UYm z@X5Y(XgyQq840atno~4EBYdFhd6G_%NHXi(Bl}r)4w6|qNugzqPY$nVJn7JSMnXhG z2l+@Ln-1dL1fb)D%w5ozaJ%4Nahu>DqT^mFj?$Nk8#T>fp8nvz`#8xSR$#3& zv90)BaOe;L^jRgahIZ$!FSwVRy(%nA&%*X6{?Us6J6$= zn5v($Zx3S_Q*w->!wAvlFg!<`snghX9HfhN%)g}Zw=~|M@gFq)K;uf*H~^LA!dQ)O z)c7uqn>Bt}<0ShIz}#s_>GQD~->C6j8gJD2Pa1P!LO5FE;TliYc#+2UYP?C~zi3>j z%l$cxYusA%8#2Ta>SFbJB0tH8SJ$Y?c$H?lnu-quPsMJSjp|q&eNi>wFF($Ft^4;_ z(67VCU?+llteOCB0~RH04qFGi-eSOX4R;USU86vAs)c}#u(qID3h1I}fpklOwqi4A zfkG+I2h%FV$(St6N-8!yEQJ}xwLnWBIQbAVW?=>*5lE$6>0qEZArWGIsK7Uv+4(bS zk9Kv9Kui(M!04NoDbfuR%}?;m$7oLunWy)Xybxa>5{R+z)sR4>1v12oLjp8U2(+aC z5=!O}KNu2_;)N`{b07gTGsgyrPM)M&Yes=_2NEzNPOJsi!#s3-VK%3v!!-LXc{&14 zh}EWp-)wdR6g#B7ePv?ew-ZicUYGLc5PSQ|gerxmL-=2P`$~!s z`P1^z%PxM8JXYMLrX;8d2kE2- zd;y9;S{f+_N5YS4^2K2Naxji$Z%Sg)(ntmPErRf)ns{*r9{FJMBrT2927A8 zhnWn_H3z_HB)(rO{HP{>8_Q(ClfT7aG7!!4eP{~buTRlr8_}=Wy2^942}UK2)EOg>@S~a>iGrh1 zG|%^tr|_eieC3JBK(q~2fFb;-W)V0{2BMnX!4Q5_lkJkpz^Uc{IE{1^lJKLNIQMq# z!l4Rk^86Si$^=JEi7j9BH!u5>ANBTlj~~sGzanHZP;Cx?(@6ZGwD6;v{M7=Jf&S(I zIE{2BlJKLN92J=iL^aO_L-$CenBOYkutkK<_4rXu z{xFHjz)EwVQk6XX7h0e2ea&H@`{R(zbbg+#jYFbo#v!A5Fe9~SnsLb2Y&qUW$05>!$^Rx)Xpf)TA1(KNM^NwXY`Xsrwf z?a<08n$dEa2+@Z$Qd~JjGg{7Q|D>g8IYpCYU@|b*8~~@0jzSW?-^)akElXM#4ghPU z!MMk1{5=Lq_`W8`rbCO6XhtJs%1L?}DQ=x0n$ZYVL)t(Z2c40k5fV+7ULt@4z`;aF zG@}uU&JLL)WcsJ%=#OALPb2j~iuO;*GY=dl0}miH`7#~2nw*h@AFY*qaF`4Pdv+Q` zZuBAisAd5;Oa`LmtOY~(QOyIb6NW%Dx=xUCM%M||CUf945_@rUogkXgbwad0x!Xl_ zogkXE(|6Mj^)6kH|)QE%@8L-@(DBFkWjG^5N9t_M4YG!aYML?LXbunq zu5=p5)T2yrRU>(F{AP-3l9on_yAvUr+2AroH9>MU;iJoMnWq`!GikD)L}x+C(~R+% zG}-c^V?0;rer&J78R1}JE1D*@Mst7|Xf?K?X<{4IY%R8;X<{4IBt4B3cb7*rO>Co@ zq*Jp!#>{AJMbpGKstF}mGcLBg67ge8Ny5RzRy0j)Mb95^*~-&MaqU(#O>Co@t;JR} zv!TLdpxPV&r;*wq2_HxLexGQX*h0Vs(-L@+Myf!H#+JWb@*^}BX9S~Z${Dwg7flnP zs3z%Yq zCv!<7aTOIUr)Xv>Clp*wu1lij6it?a$&}NyTaaAM63uT}PSX;Mrm0V(88?DSo~D-> z%?A=J8~y;&NO8SPG`Rw0GMdpmId_uZ(p$4iHJZ^pIU7Y+sgh>_I82!|yJ>#QJPW~L zT8c!7ddq7;@>^;afyQJsquy3&eoIZWN;R6nb_*r9-9}fb+;YKhx6>#FFy69W(nxXr zQ#4JxodGF=(Ih>M6xTmR)3jTYr+d{AXbExcRy4C=m&s`M$FYGl4%#A-AB>P_nsz(g zO%tK0W@`}=O%tK0CY?_s#YIRoO@uOO#`SE`G!e?A z*$Mf^N67T-Oq!+8jIK>2Pt&uFW?ZdAdp3W+>emWRT&U5wwOSEPQ!84bMZ1lAb|spo zR*dG#DmfxOjl}Qx@i^G}MAOuY%fz1tKnPxEbEKh6OHETNE)#!NngiU|OyihW0MS~J zJWZ__1=Bxyo<`zqAFY)!ptX#x(QGZYq8W|t!Q2rQ%}lX{L$0?hXEe5=$+$`EDC_r6 z9;cBwz6;-9)re*^w$ZyE>}Ao|ie@ynr$W*|8V4MQ;$v%CypdkHMcTJH=haoT#Y>)M zE;Eu*Z#fG_=Q7bWbD7bMwjtj6rA)B()#L2YTEb9Qle0OKfw|^D4ehH zmhSHQP}ezK2Y1cy`b?LlT`uWT)#cBfS9hM?c|hk6I&JKmS~ z)8XL`=?x#Zqlq$+C+FW=`;i$qR3STR@uV7li2?hJ|AI)Eoe{O!K z{NLxT$h#tM!x6pn{+_!&_xjwSxrMn~a&FBTopWT)&g}cM8?#TwXS;uy)s%I9R%zBB zlXoYtO4cObO>9Wqm>8aDo7k%EQ1#ya|MGSC_Da6EUgG}#|AwNwIvt0&u^--mv=RqW zZ#V(;`pyt`{Z_%<>#a9LXoP@f%Dpw0V`D!`gp8F@#lVd97* zv&V{*@005v&JQ1i<0apcr#I3=+2rZ9i6Qo<#t`Mz4GTrkb@Tcm)y?6nBU3jVb-CWa zdTo$j*5(wBnb?MaKYoyT#LxFAeK48zQ*gh>v#yOi!hlYbUZem$Q2c0BoS@nrUW`0Wl!tSQ|@FyK_h3`u730l^Fs z#~jcG*B<6_PtR`;MCP{|y{WKq#$aa4su6tn{?Z?l`~k=Kl};T#&m?CPUgJllJ~&$A ze2x7cOoF#tunD)f9Fb>m?hL~DAzEGEd{sUdWb_P{TufMWo`(UMsv`csR9)z|?7Jr1 zZguqm%~XFbxBIPD&!Bgi=XspYt55krees9p8J>^9A{_SKm4p*a;p*Bnh|Zyvrd)Iw z|CsO^7dST&P8XzCyx8;DJ7=Ry8UJg4a^qWLtjj~pEXc`1RMu^sCxz4*;nV7gxfb4B*T4k^YDy)v-X9B-##ogr~~05MuUkp>JOz}R8k-x zR*2T-UgHfN2Bh4-_;QHGQ#Agn#>+MSZ;hYS_+^b{#x!PRYC}T^kW-LE)dp6BuCz;L zABd4g&yFKA&N0$_bQC6okgnx(Badw6+;lB(VS?OZRFRisIHhN5slJ5UQhP*N>eHE9 zs_PH_99Ce3nzkzn72*~AYUz|jyS6-f8p@<&4S zEQMs|%oV`?@78xea<``7vtUDU88sH42Ais`6!*-dRyx*N)E@W{+&dT9@;dGcr15aW zT+_`!)Xq~g-S}OnGD*47WKT12INcrQes*mNiqNXNImTDu)++z54^pN(PbmWGWSkcwAPCC&re{nqV>f=mqWrt z46NY+l{Gp+*Q?u1gRg|OR_uR#0*f84&Htd#@wKL3}FsHgx z9jDHz(%*PP&OmE5^wW>kSsD4RM04WzGdbgo56w1i=WSn1twIvr)LJ8X;uGL}{5@T_81CIzT?tZ*Q}y!AU|GJMiZ#qIJeM4#zJR6JNH+#uf@?pq zVU!FO@OK{EDn%h7B5TYF(dV-6D<3j81 zgIhANrF99eAzO3*qh6GSi)Kbu*Tvwvu{9Szj8%Eqjc|m+ytuK{bvL+%Y|Y)czT35B z-yN(wzQNLWKa9b*wZ41cJ{yh(OWw6*4>nF4{P8${;GP@fe9L}poHkgTzxN~V$6?ok zEl__We)xYcbawu+$!S1aVehT`V6{307xK3O*xnumH0La6H~fPpr|P99XL3kxky-?x z+)DuBo%@=cQINYLBzLpA89@GvfU5LjXTkeT&JxIt56LyFW&q{B3BdQ@A5Y)a z4P#XZNf8FH#1;Fb7+Daoe2IPhm&Q`MlyPj@xjsbwBXlu)hP0oyv+)lLO26;kqw~SD#+|bY6!@UDEN%}3}E2-3!OQDniTScOclyBhEt>I>+LeajyT$Dm5l~vN{>iaOpy4Dqsj;%gQEaHuBZ)J?nn?wt5>t zI}Zbh)kydUl)4c05`d)-HHFUE#zrMd6DiR5zTD*8fphb=%g($7Y5`zHk8hb9i2+Og zlL8^`){kBVr;xu99u3>ef7s-VfbXR3`jOzJx832|T>{LuYvhU30sSDI$C>on1q7Qj z=+hS?#UBTex}J8jl^-UH}!Gb_shk z0nm)Gqy}jWSXD@p|M%7R0de`$0_nv20Fzc>97LbueeNnGj$6x0W~!Nhh6kkG)vO4& zIf$u&(5V8XMl5u8;J6aBDx{Jp*Qh5d-dFDf2DXv@K>d4@_o^enH#@6t{;$Q({eV^H zz|Oe~9sa1q*YB)41A_Vk@Vnt`{X2e$s^wo_?4$rCpI_*#y>p?%OHE(@4~lKFHT|JC zV-5wVQ5-u_Cu0{mRqLVn6boN8@%&poSEL85b#?QQo4VNr*Ugz+HdNyrWi>S>D zo1DIA8*GQP$-dAXOvab};QP+6)UN>59sGU}XN%93V7>(`2b5s0t3e-OhoxQd_u3?5 zPk+rqdFT@Hmvdl$)gSGo<%L=U{AK%Lozo`!URP~b{C!2e0tosWXN&&E!H)qc_`3}K znRC1E?<2`a0QA?Ca~Jv_<4cIkgY;tU@0$SHWM5~K^y7P)It_5B{$34WJ|1jE-@{tC z74+=vc53uo3teBXCQ* z-?c4m`(m5kZ59?kS=6y;bYW%TsDf|h@5t+ycUtZlIn%Ol%i5D1mb^9bPgSoHg>Wrt zhNVlipGm!2$Geq%K;f9hYZ;DvT*DY>?DXYKL!l7?zC3W;`e6bO)Z%A?%z6X3@Umbd zU?X57U?X57U?X57U?X57U?X57U?X57U?X57U?X57U?X57U?X57U?X57U?X57U?X57 zU?X57@F|VJw*Zgu`9C)neAK*^bd-)pLiNT`L**^1FEF{>9%vZSO-KeR9-Z@NbDRm+ z;2W*(hSGdl*+6&wE0UkRePLo7UT?;WB^38KVlu!zXbhxr@O32NV>hFcpk^0vm<(_S6a#4-d>2XhQBCge!en5jTM9W# z1AVaH@S~cg;4&GAdV3cb!jEc}fx~3rbp$vcKaRB$bNh4)rKOFHOs!0hZqiJGG=`<4c$alZ}ple0)%mR%m zs!3WJsQ|kP@wlaCHfT&yP0FT`;G@fLsmWb^m@;YdTOZ`N)a1@aOqn#<@?`fTKSF1N z=Ers#&Ikt+ThTPJHJS$#ThTPJjcT?QThTPJjcSsfMrwmy#CRNxkZ79NMm0%KBelmD z{GzcHO%vOwCX`&wxY(Wxo*!FE5^4ms+HOVD#8xY~yCU(pwRS6-Cbm({)?zD~jGM$x zbgPXC;51TPyA@3nTccoF0?*S(6-d$8UILmQp$Rx67)?{oY%LS4Pti0HifWRcM#@Ky zJZ`CJA{5m$5h_OC=5b5SY|xmD=Ig0SZv;z&&fOEq4{BbDvqLMVXl5!Wb4ep{-_mF~ zMKe=5q2OwA*PCcLMU!P@*?Si_JBliQyzk7NJ9pmiX95{8LIOb(2oQuYi6Mj-knobXd5}Pm0FeZU zif{#1(Zz*DTv1V3B!~)%tLuWYF6*)`ySj>sh>9+{tf)U9sQeTannqSk*KVcQ*e&k6n0Pm>wcCr# zUCZr6{gaq#w-z~9_yVW{BE-0=gAT%R(1fF&E0UrkY%IO2++cJJoKt znY&SxCn4X1ohh(ZLU_L~lIn9J2@z8zssU{iYr!QM#7RgpI(N15s z#Dv@^JHXohiR+qV_;=p7kufoS*&09OXa&8@mn|`U*)A4HO*OfIAIg`lTD(H6` zzcIV=EuMAiSf-FZw-^Qev5c5HmMNxhLztHV#l_wL-}+dmZ+%w?q^6o&%#`d~A2EIF^D$=&rf+@3^sUdwoF|yR^_?VT_34wCzCNF< zp$^XH<)<;aA zTYvn7gnVv^>2v#JRaWhskr(5NZwbWoEkUgh{M97e`_|%#IhiHEANZC)Oy3gx@e^9{ zErFQ62lFuzrTQL>n7#+|C4^DX_h2UqwX8l>LK9gZF@1gd+@d~TpTzX_sdWm1(Mq@c z_4P?it1rOHOh;PaT0-6$1~Gko&L#o#e@*`Hm+b5FR4J=ZLd5hXSUqV+HDElAmHeW)%#rv3$t#9$H)3cw+h% z@5&ZDL%+Vo6Vs0v%}RvhP38!uA2AYBS3f`>X~!0K|AM;*{^|!Yb@hXIQRMfPxpD(A zS*<|o$eMgiyak%~tp__+%IdRQV)}M_7aL`4uqL$gVohTDcI#`USFrt_O-$czeM=Y= zOy6#a>D#R@q1^@3+HI742l6>dW1qfr^zQH6J-SHpN#gRL`|XF`5k24b+32&9=xdU$muv8JYKrf_tKgdnfW>zg@b^)HL7k_i_+A_>mh`mnaoMdO9i3Ob zB6_p%y{WV*wm@JqZIXnmvG3kJiaJkE@om531ekd;!sp5RFu{dv@vWz$dN! zl{ZTo6PT|{npZt7stFwGJX7G{iB9?JTcZnlK5f2nbEn`-kxAFIm!T%}eVqFR{z1v8 zc|2@U&LwSUdej^bJXF&3SU$Cb*DW4N0!S6F#zrGTP~jD){yW=-~Su`1_#1pw9Iv zzW0dskTg%q0RuZM;(MDUz;yqIv|r%yJvhMA-fxI*kktQ(*p1jc%HIZimla6&TROo1 z7fJYg%72{LHQM!f=k1-FJNNH=rsH!RS9iRkqr2mg_M6++x6f(+dE2MjUf;H)t55|6u=PeYf^)>U&Aw)4iYRt@R$++ur-N zo|}4JK2#n0^5BhwrwzWkXLip|y6^73r2DY$hVBQu#s+^laOc291B(X!*#AKP+xlnD z_`&EMqZf=W96h6H&!!)hKUUsWepxvxf1&Z(#^W1@8^70ZTf=J_<~RJNbYJN&x~?o8 zRq8A~9K9!68+;1w

;29c>z6yAqopPEYAA%qD* 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�ERorYb>$S&6iqWz|XmNARg(*#}HxEqC%0c;Yn8CWBcw@N~kxS@m+ zaasu_;^GoY#9=*@h?{yS5$E(!A};BnWJFB~#r-_A5r?x-B5q2dq`fAcF(Lt(mgkKk z!H$(|5(##!#J<%_2YywuMQpHRZMKR8J62-f&7}jsDmkyl=6sPOTAI)Ub5jSZc zJ60l2+&*@!WT&K4wb>;S>{uIdi}SH#CA-B2J65tsB-M1fMS>k`bCF1}VTWij~l!suFkz zTa>sH`;b^vtQHm(lT1T-gbyD_)p-@E`_rQmApPnLATGh7L>z%biMaoU5^?$sCF1HE zO2ol8l!#kzC=qAgP$E8kKBhR^=f!b1l!&`-C=n;!P$I6mesu;Ahum;(IVxzdP$JH^ zAxd0s!+Ap-ZT;O+LUFJ4G0bh5#i`bB5lNTiH9#cdK-HC1)csahD8j#7Q!=5!cAjMjZY^ z8*zgSZNz~uv=Nub&_*2cLK|^!3~j`zF|-j^#(ETEI4UO&jP)=cf%Am8CR!WoOj(tn zU=}4Vij2a!M4S)nVPjEM35se_;)KX3oPou?upTxRRh3kk7k9s~7UEo350y<>TnfWl zh_j%zu_;$2)s)3~FHBin1?!=*DT{+(SW|KRvo<#6s-&8-xZ;H=i{oECR5oRC_Y2t& zM?Py~Q?5#?DT{+#n6kL>g}qmt_pHSBRdLy?2i)c^j(YVl9)T7V7d&fYa~DaNvbe8> zDT@PMJybSjak~ps7Kb`(V^bE1Uqy*yonI}FxXf7_ixP=?&5hBZ3@8K2fHI&AC?k?O^-dJ8=IHqtT`O!}u;~$S~|6KRo$v`S9xlAM0sibn)*upj{3vuTI*JjpZ(S4z2#wrSIU0f zGv(78*4EXRUn~8(^myrer7x8}Rl2rxX=z`6Gx_Bom+#Dv$~Wd;&pnrWBKJ`4E4f>9 z*X8!-&Z937EX>W!jm_<@Ysr1M{%76`-do<+z5ANaY@S|v!~ed2y??pC-9MAQ4KT|e z?+@^e|6=i};v>cTi=QjrP`t9Zt9TB5CE%#yhw1w^OT7*+=l#Nb(|pYAHfznp-u%+S zhM(0xTz?(;_m6F8X}GOK?88X5Fm~`y0+{c&q+}`hAU? z>AMA^8XFs*Yj~pJD-G=bFV8<}{r@-8y$Rg@!1Ed0&u^!#gwv)jI!yM{w+G|@zk!lL zZoLoc|KEGA)KVEx29yD1Kp9X5lmTTx8Bhk40cAiLPzIC%Wk4BF29yD1Kp9X5lmTTx z8Bhk40cGINj{&@>Vg3I-@&vIz$c8$KZ}bNZ{GC78^pO_01>=c4Tmg%;gEs}_x7)wD z_pF8CX_6TdLOlM&_Vz_3QyD=@Z`a#zzb#2XdGaz=0_k0trQDsR+>@p3&Qe~K zrQDmPyf{m_FH3nzmh#dp<-4<#`?HjnWhpPuQeKgz{8*Oq<5|j^vy?YwDL;{=yfI7p z(JbW^Z)J4N%d?c1WhwV(Dc_x?yfjOBNtSY7mh$2(<=!miMOn)3EajdoR1Q&N=n)SvIK zBTxRD{rmlY@?Z9wOOs1WN}EgXE!|rBR_PC=LFH-X73K5GSC{W7f3N(1%5Rk0>SooQ zT(_(4gLQY;{e9iDbzc3b`ghfzUVl;jhwHys|7iVh>ivds4P6aqH(c8A@rL^ve%$b4 zLqp?)#s!V*8?R`*rSTh$Pc;6%v8CUXeoOmp>33DX&-D9tzn}Lzqvhz9(Ji@_Uo}76 z{MXIbHDB1gx_NfTS0@D?m`Q}0BR*Mclf+)e&;m0Z^ zxH`O;Ai>qy9~ljlu1FV(N!4g~@er;HS zt7{bnZC#yoahSL|`TRwaZa9QNaB(9n~bnnX0;V0rHxOJE-3fj85V={EdX6U*ybn`NF$7Se_&(O`! z&@IT&EzHm@%Fr#&&@IW(EzQtj5hlTHhh?Imt*cv}p<9umJ26AIGDCM#hHh1c?&J*J z>I~f}8M;$5bf;zLPS4Ptk)e}UW?|yC!&w=)H5t0IV>VY-nwGqyFjohwAUDzqWo?{p$KT^&{#{ z{j+rs*WFWheO-6m>2*ifwbvEuo-03E{!;md^1kw#a#wkLxm(v7A4rM0E` zr3t0R(o6o<;<93AaZvHK!c&C@3%3`pE^IHXEX*vl7T(A|oqs5Q7k#H-SAKPVPJTq* zpZ_kwxM+-Ghy`^{Q&RWZ%~ zAGe<2|G$;Cc#MNbEOTh*M%qePeecM-Wj}ozybQyAAqJUHoe0XhI z@2;u@KALd}UN?wK;0GF)z^gSbfiG)Z0uR=>1b(Y=3A|O~68NabCGbp*OW=x30fvDfe(CK0?+rj1pe-E z3B26n68N^qCGcpEOWJEBV`?O0Yb4`pB;#u&htx9H$0hI`k4xY&9+$vRJTAf58ALH0O&B{?B4gOcNU;(aBls98aS29BT!N7jmtdq= z39>-&F;c7q!xO>BNQp}@QsNSf6e~f&5PZPx_adq#L>6($43ey-7}j)VjRbz!aT|DF z$0hK&j!WQa9hbnrIxc}%bzA~p>bL|R)Nu*?rsEQLOUEVfk&a8cY9#Y&B*)cAj<1o- zuaPXMku0o{EUJ+#u8}OMku0r|oKPcyhjP58@Jo(M;Ef!Yzy~=lf#-2t0)OMU1YX8* z$;mYm=;JoX|KPX;Ucqq*e1YQcTi=QjrP`t9Zt9TB1^dD86P#jV$6kjepUHDPqfx_K|8w$&H0PvjoTeI<8m?z-Im+M3coPr!lUNZ{5Q?B`Mb}j`4?pBEkiUGzGYiaav(sE`_Lxnk+iWu%O_&H?RG0$?-hzR9 zGQTar>Dxp4!-<>_OJoBjxZOz#zQ?^vYLVGW@by%dq-2nJuacQZ73wzYC|*Q+VU_S^ zMXz{SLRH#eE}*h(q^fMDxGBaB+^c8Kq(3?Pwgz(}Z+4KFf^c&Im17?zup?k;J0-Ql zmIL zRXdLo+#N}x*KH(8fSGs_C`+%J`FMg}M6I-o%7N;H6+!#-Dv8>j!c4%8zgG=Bk9x-z z%f{xQt8oGtZM|yNc~tZb6nPk;3SkTODuKEGAA4^CW<_!R4fkDV=FYw^EFzAGh&XJ+ zz79KxhzN)%I|3pgASiJe(HPtn5fPC;A}Vn~L{vmn;)0081qmU>C{cpM@JE6Kkr4dO zuge!z^b{h$LCKsSHPS`80?`;IrRrmA#$D;Mfd zE}W>1U|n!vL=D}U1)u?UDPTG|G+Y@Sg5^*+j>44yu9H)#3m8j)+C|{}3Rie^6V@42 zC%Ed-b`s713^FX*>pAq9YHMBq zrz&ig8rA$Jt$o4i#-WUbiNqLjZ%1UEPr#F*ijBDo1sP;r_qkF z5O|KOdYiZ%V?nO{2W<#COnV!`B49yRy2Q3)EWmZIAFmx_5w83F*mjHsz;|4EafPY| z(an%L*+~ukqr3-m0T{}<*fTnj|60Dw%&wav^ln$hQ~(y@xM-V(AZ+I0M}qfo0FLV;)^fRm+H;P?2rc9y0kCYXN1fQ082~h zi;|d^oz~3|&x7oJDhr5d)gdLGCw3!ehBH~-$O2F!UAb~16QVwTr)mUMg5*z)Rw#e; zK>=tqD51puEoNUaCGNr8gB%m-OMg*n|u9_A-iNcW48nUw<=rLWj4i}RzV7h>z zD^Nj!qHhthK(uYH3WmF$Kxe!fiB2VVcVdL;gey@Onxf_sg;{ef;200O5_X9x3?pRd zHI}r*fZM4b`dC*YFIE*2Lw?*)ok2y8?-Y4%1ztqDK&Pt3;owzQ`t?>t#5f4rIg5$Y zT3w0hPX)ux-iZkjLyzRjWiN~o73;e2w@x_5GTA6JyCgJF*2Oh3Rv2z_MfX!UT-H?~ zFOJa+u7L?vbOp!Rw5|lQ^P(1Tg~E+kr!X9A>q^)~%6TCSb#o?Fc=RMraX1s#l^M`- z;O5-baas->qw7ki3R8$v51hN}YM_q65$iFBptiaK9MkKnAj3>tEReNGyJsmsQezue zdU>~w$pA8s_HG@sYgy0C*qJakaMi9s3LnoV;7ds95^qZY=he3#Ju@@qh2u zv0h0@o)+rj zRmeW0+`tQveMUF69)En+%G_(z|GfVnFTDN}ee^Zy{w5WgPV}2aG7SUk3jAt)zkN+` zTN_g)(bn1mTFIMb=ftWXUirf;PEM?U=F8%|oC5q*7L>=jG$+C;>EknFot)4#p0)@B zXUNpo$?4R#j8fx5cqM&O=#MWaClH&XaVk zs+`Q3C{Kh}(kEUmV@{`4oOLB$Eo06g$;C%s+Mf8ol0KGCTi9aFZ$Om?WzyGEX#D8X zVX!A_?BsM)PHyKc&W0p8HcvP9WKK7ED)nu(j5%w9Epyfc+h%dg`P6J^!Pr*PZ@jv~ zoX&DSMJx1hA-s}4Cx1B^Q_GmsSx%=XXuI0$XA6>8GpjJCQ(K*<);6BUGv}$awOVn@ zhbrP~tMf$pD(Qnfoqo%lPHn#1iCik_ z6VIM#Z)5X(ssRPlr4fqfeau;tJV%q{*gSO$rt^$v73NHoC&DY~1B*DV!kkX4JcV5@ zbg?Dao&oir zm{aI^1-PHWm%6&1fgg;hIo{$_D4epE={jbwE6fSM#YbPdej==rKDv&@a-y!-Ynd*m zu4UZTQX*Tc$$17T3?F@!3W2an`lOoHc9s)0%wEehC&Iv4hyM7oILA_eySamNoWPtw z0v~=u3Ma!Yb*5{G2@!b2<^yd1{2vJ8<9P zM9A3=={ymRJd@~;`xc86J7;5idyNpR4Nmkc%JMc(U`}9&kG^!C_`i}q;No~IPuz`( z%~NygJb|qKKHc!Tuvy?({RaH*rbe2=+smqydWXF_~ITMu=`Bu^g`(B*oY@))T6{AiBU2bNP z%$Z1ANU5X`q*_*?e-8PK2DE(($3y8O49a^@I5+4)j>id(*HS$1!j*V5zAC;xZL!5! z7T9V&(~wv+uqw8$NXHQk5|^dp8qq-k*eIcCOoGV0^1mX&iK_@;(&9kg53kq{kSNkJ3&sBo<&wEOt}t zlaVAA=2fw!6o(VMfFU-MV|Q$MUx-&Gi6?<$P5D(wFmrKe$PzF>QSuv--q`QWN1tLp zwP=8WhNQsBN;ozEXFTEfHc5eDfs}(&%prT@m;-D;mo!x6bQ+*LUg2~VdDaB-9Z6&Q zOk>hxGD*N5%;^e^@s!TQ#Ppsa?Pxp8Ag z^|QX@HjB>XBj4s&>{nO007>XFmOeP2jq@bS@#Z*Gc$Ka$@iLaPbe!p11;jjY)q?$fjLV1Fd^dA*B zKMoCQiKSF-)GBT{(1uOYoMt&n2_LjisB=g=iCP1Zj!s!La~^&xDNM~8l3uX1P504p zHRMn;_Y&1=%z|DVW1`VONz*5e5dIu*%P~f$;m>?D2O5jk9Z3S}t3II)Ez4vTGRjsz z`INMB<~8+dTLo`aJI8z`Qe6o>c=Rkn6>a_~qEN$Oao~dxKBjgo(Nw>f-z+uS;%I*5 zdz{KFds$2>-8)5<#%yz%QZ3+f=^z~~81&-fa6|*M?J0|smc0natWkT$x|nTHTjgUo zLb(pvM)?vPyTZj2iWgSlC-a4G#opm^^d+Tue>RYE{+hy}= zY8~dSzIB+d=GI~UQ(1>oxwj6dcV`_=>)tw?zS`D7$70ptCAqV6kLHfdo0qpDudH}k z(Sb->*1+VOY2s86dOBxI_HlnnU{bwpb()s=>y59orMP>&RdvE8U#0EOUhLoG|I&ZE zu{7K^@MTKf^ve7#IbS93PZ|>5;_I3*qM%j5!t8MN-ohza&quarwvEh5DNX5|v^lgl zJ*V(cLFfDvc_UJ$1)8LePkS%5N7|~?6~W<=gW;mccB5a`v6Q!xpEvdtbuL<3cqr@X ztj;+@avJ9>j=Y-LBV|X@rlgMx8z(gkKN}hn+8i7n80x>-x6C)%Xq%UlceH3%*4X^b zd7HA{NjsT#S7=J8Np8Q~CH0Qi8CmjPy+(Bxl-!s(GP8YVPDWZmFn4jvZ2yhv%hN~t zR;6|Jy_0^xDD|~1+*UBOuw(Xy-2M4)75R%srr%!hbiw|d-MQan+?UCJhA}n6`U|IS zk1UJ~kJOLsO?ftDMoM|giR5>Zd*!6%?8sh{y@2-f=OurUv?6I@Qq!cv;SJ%N!#%>2 za+~Ew!k>l~hen2uxm3zJGcU>`x;$;sc#znhv5l^aWu>^ z@C-v=*M8m-V~Q%TGMYi9LO`W08Pzo(_4XH1+mF5)r}W^Mj@fko?-J^zrqVZhCGIhs z8AH_g2K|wa??aqOf!2N;_1ZTWeQ9iD=5?zxuZgFTS8vK`y6R6b;>KaxQlk0JTqd1% zE*P()cSDJAol74zw`YRTrr~W<9moU+Hq(KaVj4bsAdMiwt^=EcgiV>?lrXCbWP$@* z>Odwquv`Z+!GUdbAQK$eUI)VbI`@t`kO@x7H0cTA7tFV*m|b;BCOEL04rGD@D|Dc8 zUnx80$ErjPh|sxnAZ2uhEwCrz0f@SvChWa+AV&C_y^juTXbZ$pU$K|k0{iJeCRoq@ zI*Qd5EBO#cuq_p0n*48 zh~c|RSr!vWDKD@Ej@Bt#*#gJtz@RMnc zflP29DuN0;j|g3Mc(n>-f>Xk)RUi`_2(MOwOmHAPSp`z@O_^PFAQPOjLI;uqnqntp~Hi zRWv&>a$tv;K#J-V6G$@A0BUynm)Sep0=Z66c3oluNoKd0KoZi`7RW{<_U<~+FwXQY z4*?GW4*?GW4*?GW4*?GW4*?GW4*?GW4*?GW4*?GW4*?GW4*?GW4*?H>cnBOw(tm$U zdMD|Hq$NqWB~44ZEU8D*1xY1Ip`=6MKZm!3UkWb^|0X;$d_}lVxMjG0I3;`}^mS-k z=#|il(A}Xqp)sKWp*Eq0q4dzP;J3k#gRj#W{r3mw1t$at1v>;A1+#-E0^bF81l|m+ z4m=dNIWRdeB+w<$B#=)F>;K{3<^P@kdH*B+`TlGC!~GThX8vM-(Eo$)3*Y;`wZ6xE zclfULjr6tf)$=9$el*q_EqvRJ(dy}j;a86@=!pQ9VB*SBPmE{OpW&NM{~;ESR)3^V z4t@0X?pbH-)^wuZ@QP=Ghu(e$k1ejIkIx9J2dYZu3=Zf@KfKl9TKc6F>QRx}2ZU!i z6o98dtOlM;Q2?HqaR45|Pynw6!?Q3v`l0~!G?fU$c#H$^z>Hb&Fo#m8Cp9VsC<;)I z>=XoeUPA$w{qN{o3|iUAk7X!;bAeDiyrF=PTKA>@z=&rw6!6fn@98NWJ&94zXDFc4 z&CTf%3=~_fQh1MB&h#!10S^HW0S^HW0S^HW0S^HW0S^HW0S^HW0S^HW0S^HW0S^HW z0S^HW0S^HW0S^HW0S^HW0S|#1AW+A*#c1jq=o{th7P)KpV9O4|8DfGyOhH9720{l_nJ=hTV|ZEPJA=y z={Rkf#N+y)9DRuZwVl!Ar9I4*KH6-F!)7c-JWY4S*o7Ezrd2dMJ$`q`-i;0zm`&U7 zXVWn`vuyc8#}{9uFDRT$Izl37>te;bsnZPf88}t}u<5cBRtzK?h2T|}+RUr}!SM=I z@(Lw@wZIWZmI$0q;z~ppB?71G*dfGfh+Aka18Jak0drBz+(FojfFl{^MqvPLUD=?g z%ar8@}nBLLOr%AVIAP7QPmj0$8%n839MtsEFDmZT#4vO#=}X9I86|zr7#w1AH9OE zM*h$2K+Y8omiI9u9LN=87sCEJb)=VFZMcvt_6l{f8qR^7O(kb9WDVd-)fNF)f(2Lv z97)vzsH6J>(AK4^ki8Z#GhE136#@d>8?pKgm2~)vEA=hpnGq(7@_u*qo|#>n4UL9X zd6^l=xbn3M#T?z-Goz%-ekl+h*wZC&w9#>}p3eFs}h&#b80uFBqxSmTu( zwcVAyxvQ8>V$ko-Q0~e)pu=?4V8m;4SOk_Yx)Kq;&B0i*MqL&&`iZ#}4w&)NX~nou z2@q&qY`kvdK-W>L$7dR%!mm19wuMH-P}Om{Z)B9X%}$0Ohuhm51ZHDtmu1 z8wP6nY|UsB!hv0hifuqxmo&FPq6Um1Q(`8@clXJ7pK(e zd3TyyQNyU=98NC)9AfmKR*;WNzEp|tP6kCbLu_JQJ9BRmi+TyS(x<&z+QF$^&4qeX zA$b}%-qg+#9=j{A zsUR$@n++`#uS%B->k{C4C{UmNJ zz#Au!`7o^Kn!iwn)Crd5Esn?Sj*`dE8vm00*Jt=yr%WkC0C%g~i z#p%={TZMoRMl~Arf83`97_aJ9k8_9jxnjMTSaC8x1{Sb`e%}P%m|?dHJkpiG3+0G? zbStsK&O#AXYwl{mQ$a30ovIg3$=3yB5kNCaAGEM=9qZx&d0(m*=;*BD_M-*CL0t)| zAVj^TSuiPP#8Owz6KGL`m)m+$}S>6E6eOC zx#}+UJE#*|0&j-m35zvD@2YZy-@2M^I-iFzyK8^7rYy_|zl`cA5TKe!{HlvRAo^)k zR}}*vbX8YlD|_`O*#j~&Gk0V>nlU1yr1-<4`-=J(MT$NwyuGknVX*L{f&~Tr3nB#{ z<}b+apC8HpByVBfWqHLJU!^~hJ~q8x`j=@BrVUQZPurRLaO%+1;?yr9k48pEBK6*^ zJG1Wjb-%20cby(}LUrCNxv8YQfYu z(K`UnP1+ZJGCV$fUid&LC-3vz1-TWu{@gcn=H;}@Ihp;t>;>7!vz`f!51kd-6MQT< zI(SxaU*LtnoAgeA3$k`+-kbT1f2_Zr|4ZNFz7f7+-)`ekV>CbipYJnx5B&M6_W0;2 zKW=*+&fk*4Tk?6||NG=7s2lqF>R_kuHJ#`ee%@6@!q3&97~bOk9y~L%H?OqR+1%P&ShXKnM z@KP>qe`bfOlP1xZdPjizWkV1t7Z;$f8caCfsE2~EAi${l|5G8+h1>@(3DGz(d(dR3 z0+~RfaOS1;0K2|TqTjt{=>b4p=}|!if-l-_!n&Y+ViBj%eX8nN52Em8l7;#)KvaEl65K@Rfrh-*o;NQOrKyP7|*)cPCeCl9`7`~ znuJZ1c?JtfrNpP@^tcV~s_m|z*2?}SO$$=o@{SUL0wij&u`PO%*!O-~df==eSI-uEiy(9Zc)kO8EipJy$W?dP zO&kpD+#IrJU_qNJ&*&=x^sC^Un&2Iyu13<@)wLiLrW-NyyUShalBj9UCm~U_7E

w4LP}^{!mDaQhFz*_JWek}X6Zxrhr(!C#B5aWXDj^K(N)*qfAZji( zJ$U|v8^6)QU|v_kE>XRmT`xQ~g3mZb!r-n%@?@6ZUy662>Kpb>fiS!)fftc3&f-q0X-OFR@Z=aqA?WOc7Dpm%&tM}K;3(EzRFQCs#mvf#ZlwkzKy=`c6s&6 zYgw5YU6&T?pJu5BpXd6_?z+6)sL{lD1a;dk0Ht>2-JR5P9KDE%bFYS*=m(-2a~6Q= zX+0Dc%zX+`{iUZtvuIR?u{##C<90q8C>DaLp(|g*Vp@o>Kh_s z3ovhyoC><=wTD+I<>2J5VC$`h!SH$bops-d#kdBqLcoI%U5QzQ>m~%x*D=;d?XxzN zu@HdisyMM=vH;gj32q~!5Lk^jPBm(%2`t2QZ?9LR#uH-RX*!izV{1f3^-OE^18I;2&>L#v7LH&x2WzYXD$jTMnZBBEyT$Tr?A9uM#_@#beQSV;msdLX%)F1T`J z??HmXi@w;X-h%`mk6q$8yuQ2YJxK6Tb;sRH`-23-xIWM_aK!)X6kp1QAZ11>sLZcZE8Ijt5@~&J3O#{66s8z@)%=frI{6{5?`;_|Nt4^F8C6 z{~sc7CS7mg`9D@*bXSk~iO?Iy0tVJ6 z-Bo{vZx;R9pZ~X{|MhkEqg#h+I?-<DLWc(9tAH=xZj$~hj3 z*-TD8dAYo4G$&+A3^uSD1~!l?o<(u!4NSvlq&Z#nVs>Y5~*fu$aY*&uF zd0~i>R$rylr|*_yjT$ddju(sLB@)NN`3&WPiWghO+izs$7EqCrk->^n6DksjP0#`W}>e)P`0fo*bT~HTPc^NAc z3uvw5^$MzT)Ir0*+I`WQk;Dpl9PPvCmDf?JAWx-gsPML*r7yaerLRvZ#!bVLP@vB>pRC8JOift^UdMrD*b)oRQaLmr8CQ}0u)-1B1ti|o z0D0KsCzGbvX#BB_(JUv9$ijJSK;6U~x|k(F9iC2qlnd89Gq#9wQI=q ztH97!uj-p|XiLPmO?@1(Y)?}oM=aMXvkh{@a<7+&7s#PJQYHs4?7@RARUStyw=QOX z?}$a+i0V%@7OK2_+*Kl8wt#6>hvbGzvgvV-SZ>*DH6tot9*HF4Wp6S)#vz&gDUoEZ zk%^FOqjXLb+qKGA_B(To(3nQ1>{UZmKc!DV6z?-Jh4<+fmXtSFImD0Sa>b8hz2nF6 zn8%E3DEZk&K8%T3s~eKuXw5N_MjJ50C};Vm@0P}-Xs*+k-VmFH+HCe?v;LHj93HRB z7{b)j7Q?mG%-a^j9u_Z#OJwR|<6#?`o@I+c-nKdh6!ctz?I>-7=^aI6H(QHidRz&G zqiv>f2Yb1xVO@&RQp?$%@#ENLw)UJi6xv4doWj(lzHB*^cAEXjEM;AZ#Q}ga296)c zK8z*XswHWlUMGOJ67Z2HQXaF0do)W^M1<9OshNE zuKrcV4p6bCUJhQ4HFGZ^1ScEwU~!Hy+snFyyWVLmai+yF28nmbi=@K|FUm8TnCYA+ zxJb$zowCeKsgI3`K5RtNm+15?Io|OalG5zin<~li&(4svSmUqsZDpqAeg+nCo+nY> zo>JRpOt$$i$C$|5X4@QNqVBK>$C}o*wKij-^NQ*PI4)jp9Fr(FK9;~%7i>KX$0gz% zp|n9gQ)m^*c?0DfZb~d7zfmn7hsV?KawW-Z;Zb+=hWv7lGo{t1+F|Xsmsp$3YbhSP za3#j3yY^nC3rjUIM*kMQ310ZkmIrqQ>^s~g-fX!XHXIpUq9SV5FefkPa8q9g7w@$- z5iO-U$J>I@v+@Sza!zAng&8^|BZVqA$D4RzULC!)SR^FUp(0vyo7ZxTDH&}ApEg*| zF*b>44}ca9a*<$y3_*bqXEk~&djxuiW^JTxLSEA?t{^MjZ>L^1WyAhn5p4@2+jXFh3QER z$%A1_>s&fXVU86XrDuM#e?{q|cX5^XQKc|7ZJ;p5J}+Q>ts(KIg`gwu){Lim$oGcI z`$kLP`TZQt&#@+d1JYm|l@iAn;sjvfHfx(hf95t3ikew*oQVzMfS#(u9G6C#srCm_ zZ=jEqiDS)?HSXS^-N0#XHg4P90zQWw+_Ut(GnRo9wp0#{$z~Xf+0!Ulyy?vJ5_rNS zN{PFZI#==pPGwrb)~<6*B7B-D?9Cc)^IeXyNrc^zZ#l=97D=EHr!w=!{UEt($T2Cp zpFUOeqV$^Y+)@gLYTsg+fwUjJ``i1w4m}4kTV`7CmpwlQD za=eL!qr}6X`Djk!*)qqP7DAh=`zYM$rn|75!ql*-I`U-#m5p0=+!aMDj+Rf-niwQ# z5m};HGukSzwC};US{Sawd`i1WH`|g%RG-jq00Z1v!iH11!=_`~W%Cka!?9Ii!ztWh!)Z^2 z4X3I;Hq3V_Y&exGYz*T}@A44%e-(kF8DC_)m9a9TAm>Q>hV*6WH>Yo`v%F+}@yPV9 z>80r{a`N&|6ug>Nn!PM-e%hq8foZMM*5+-`%Sta{xEh(#0?n;@OQkIgFl2@=Xd0^oKnU%>S>vSzCEzZfC zUuR-Tzv9LDbMl84%`4iJJ3hHja?|9j+s)C}(?igQAQ&hl_U=O(|Fsx|z=H?-zPDvwrT_ z+;Gu-g)KsPq3yxvgZBj|1^We?1|z}Effa!@1$Pw;33SihpVKT534H2b?_cDfJ+_ zh?m-6JdEDi>LZcY`)6gu&FfdWoYzGS`8R%E)?E3Q_Zq?#NAuzhK{z-IBRITv2y?_ygvl8Cy_!DIxXwTNS~=KocqWx|$gl6zSmVs+ z>EO-=MvS;eJc=aaZWKn3xFZGmYjXxz@@;lB657#;bF|N~*1p#USyF9UPZbaUN`5U| z;0d}m@yWD!TM#hEh#TW#yt&Z;zY9_F}HDzn5RjhPeNtant8Q>eWQ-k62U2Zz4o_>{AO~_Y5EOcWyX$m3oV&8-~L+q`sQal5yKs3Z6mZ0c*?Ke)rz)! zf@;$-E9P}eJdcNWYP-QwC$_}TH$%Md=NRlp+Va)D0W0B-A8YHRJ*N$|A8H@8kD_>`VWNHq`Ayim zE^dC)i#VSd@@x4aR_AG-(LGJPyC?eOf8;~eO%VPWz_toJiJZ?j;g7&2O%THucf+k;|w4~d-=I(r!{<{2H z()Gv_>n+ETOm5r9sBts$z{nP3Xs)?svwXjcH{*J}faU)j(+BJR3O&Xs!hMXo#~W{! z#ceUhy!fCr^`~aU&25c%=uc;Hu2yOAoI=-Iwu#kJRPD1kv7g5o$6A)e&2^E?GoGsJ z%vHBem{r0W@O}6MmlCyySBT(gKYZgFg#*7Myv&$dSto9OuSpAgBBrI)<0t#rg6p^T z1=M@H20-(0Ze1%MTl;jOv?K##T9nab2lO)BJ^@M88|XcXutK|nX9ySrLH_!QHu*N+ zn=3u!U*y-a);+|jt>wl#{K`0PBQZOV9fv?W=<>q6URGIcy4)Z$=Xo(RXze+;pO1D6 zK8PL^b$~~7Xzk#`%~cMleb)NN7AkDt6aB4R`}RUX)eVp@|IMx3U*y+9V2&V+xhcj5 z>?g>D_27F17?CeUE|14Lo~CucGICs8?v08Pm3pjI(sG`FR}~&)1C^*UuL}M-9dt3~yP+vnq_O zF#1G`iP1LtAGDw7^YwUK?<3&38++i-zny7mV6$q6grfk<199jv{6y~xg7yBg z*2|3Vm6(~IwjQI3a$v0E90}8j`En9(55 zFGnqmo98uk*fZ~nnK9|MknfTLFWf`BimWx8=1LPxI+6b%*YYlltz2!r&4#1g7QQaO zR(pFn zv^;vm2W+%A&m}~#4ge!R+_6FJ;yQ*r=Ivi;i!L5SKL+Okr;fJYbX4SYp3?9?_OJLzZyfm6%ERV;`tIp}V(y~qJh*Md zz3ov{W4J|*o#gh?p z6#w8cB-SuvOpSI3^F)j+xF#b{^tF6v4Q-cw#EHE7zT$hwoZZ>-9xt_dLQJiOPoh?H z-uzAgjF5Q!)m0ROwgvfPHiCPv_S${v`JuS^4V8R`CCm?_2xt$>>brx{;{=Q_?Bgnw zZ*%vvto&@_%$H^}zV>yQ$Z7A2QY$B$$37r;S|5tJTd40< z!((~oicz1QOUC-iu?NnMo5P!u!=GYiTlNtPm&2N&@=APtHxM48pEYeMYZ^D72W7_p z$Cwez6tak()p0)19uiU4-~-k@1^b9<24r{tj_-eogKvZ-{x0Y;Rv!9$MYmGUEqr<*8d|)N=cbeHN-PUHk-B zk58kYOrTyt!>XQHuCCv#{(JRC);nJJfw~RquC3FGp3?Uz*;`y$oL9WIsC&^Dg%b}>pr*Y2i?1|ZjvgXlRg8MQXWxkrxHDgEm%=EnU zwP{1rB58|LJEk6tEQl0EHl;L9*`7Qk*+_nX-U+ZaJTSa3bbaVRaCxv{a7|!%;Fy20 zznA}z?*U(1-*#F9z~}$#=l{GQ92?0RQi*Z?|8?|>*!uKoNQ7#4h*np#p-*Zu@h>l> zOdM~;_{cKIZLRu#NqzHrgx3|lQGLImzTZ*b^dhD+h{(YbEAR3U@DT72@DT72@DT72 z@DT72@DT72@DT72@DT72@DT72@DT72@DT72@DT72@DT72@DT72@DT72`0qpDOuG2| ze|npLXUtOD-}%4z z-;EUa8MpoMI!L{kRykqS#SO+lT5Ez;MmVq9z80@1#q!FeS&|wYEakzE-ku97J=Hob z>}#!wltA9<8+=9!wJy{;ou|9XmG?=omYgpNh<*M(dK1B^_U<=Qt0T5882_%%=s~MU zu-+XjTd*^SSGeHhq3At)SpQ^S`_;%mj&~1SNHXe@l#A#Lgl=>~z(CTM;}+d^=KDTc zk8z1nVe}y^5D(2bw(PvN6x)(_{X-v}Kaf~c ztZd?ahgcajRcR0F@GfJVfHz95+`-DRS)#%3XI$|Sba&>6a{cY#9%}O$knc}rxXe+CQB;~shy&*)F!IaWd`YR>o}xTh!_Gbjje*0zKHjp! zXSAw<&%W!Dah_h;^K+k3q)u<>X$&(p{&v~?ohTtrbwGGD^3gg2ksphGy9?HgwwJc` zijCcN!&mKoz!DQ7R=?}7zVsO#75dIJr_v?otD$>=gWYnY9C_O@hyJ;_)BgqwS>?6c z)|t9r+weXgwJn3lZm{-+gwYWC3|9ET7CA|GP>Oz4*h0T=K<^{LUW|Bk=;J|8?FSNr zNj};P{0>w#q8rtOs!_aSQ|ALdqXB8vlUkum6=wx~!!FSB$eVBcfR-q6&9OYjsv+1d zf!0sgluLqV&^tfM2yfKm3i9%*wfg$=B}eg&5DQ`LCqEwE{gaQ*W{FpqM%mKG`rp|1 zUOmP-SnWgnlS#PbcYOT#&v=td%}S0{typu&D<{#qU|lG_S^A&;^UE)=S@gP1v@Te? ziM6D>uP3?6IHI@MgAI-ixp3kI6N3zp!_=JV3o3= zBcN3(>??7Vv@J?ZPN;D2LOzHM>5cCNx zIE4s1S+p+KNowG2?Ha=xa(g|}sc%rJ>&A^csp3$Fs`lmBHkkdR!7r!_O_Xe`B*tze z?9Q}oueCT=Qlb?{Ex}G7-c>e-xa{_QSfzx20t`LYLt&hYUW8U+;fwqDH=5A|vzAzgLhH?9jj&4;cS)?DfqC z<)gP7q}qP8{?VyMQ8`;u|KFT?W%LkbMjJXkiq2Z1ux=F6md4{O>8!_^7C}-E>XpD1 zPf|C+6?KqzIberuTar^jGP=`mOOZ74?FPlCl2oDUBkPLXnv)Fdt?f>^weN*TFF#C#BRu|EbGuPZ6)o%}HttlG8?M+)Cu%F#B)yc$AEtzyk?8*qL)! zx8zUteble&9C{G$R+@Nuv?keYsRXSlpH_q}%lXHq-_x;YeN0?q<;0@eixB8Rk}zWE zE^h0MLyAXuu{dd zL>rRThR}nzw;-Faq;8AvINPqVGe1a*Ejz4QuC#4MIIyI78|Tpr-mJP3Pm;a-Y>RTz z24}Z*Q@#4L4wS4Vp@f>D>)hGr z3_G`a-qDV{0yyK-S`fOjfBzVrDO2t6{r%XvQ1vzKb&Vv%;XQ_S`0 zLoJ(P-jj&St`BphY&hq9%v}<3aLyW0=IQ=roo4n@I(3QfQK*gG$$k}-TMH@WuZ*k< zP9@21LH4L#Bni7lxK(GJ)|Up$P9@3dI6x>sK&IS4}6p* zHM-_N^Xlt_cB_IckG@K`6}6{R?cr2=zFs?Zul8D}+G{auuYIbm7IVofJ6ocKn5{;< z7!Be+!1Zdkq_ZBg7k~Drt*zk2x+ijSqE5z+wOUerXiaTCYJ{%sk&~NR+v|f<5_W9b z`y!Uynp%wtlGc;zm>ykJG<=C(M`ZOx@g-TclqHpuB#a0!CeS?ys9f@WK1;ZC71 zB-yoMNxeu$IsKs@(WBOz?rGn(dOdp2HGl4nJ5%wzFB%)h@8%t!^ntF`so$-r%x%fe zC~-@()UO?Vx39g_@icJO?^a~V3X;)_$_@Wvoeq_3=yz&K7J|SJbC2%Im%EWP?SG60 zo(S0IF`Ub}U7qh>-LcQ>^AC>j8F;%LX4BSlnL#v*!f83Pqy&eb{^oK!s?PLm@#q<9 zJMu@=AdE{fj$kd%`)JolI~Gn!gOnfkrJQ@x{gcV+Kg=b25TX@?NDI?GtL`7`MiN?j zJi%f~n2+@$93iKp?7U5lA2~uop35imR+@^)}$9^+~{5PjA}yb(GxMF;+cihYe!X4gJ21IN4YB5 zA8+b2sp|U1>9SUKoD98nD;Aqy>?oxr>B}?b9#sDBl4IX3WmBp`AYOedCre-sfN?uo zG}dYU_oY{#T9RcKwl8Wd?pmQ=ZXuH1$S9tAYDtz|SQ0FP)3#9WbkB68Mfx?TZ^Omcyvm~q~u8B`(VGo)1mslN&c+R^S*h3ZN8oK zrhp~>2YgEcn?u_I1N_HB;ozLm*m~XT956;3chwtR=UDxxjh*!-)vsUw**Zt+bgsLj z?t;2Lym!Q}pZ~}1|DQ|IsF`)?Ll0MJg@AQ+Skrie^<3f zP3rqC^}ShrzpuV!|9`30p8~zhL%>78L%>78L%>78L%>78L%>78L%>78L%>78L%>78 zL%>78L%>78L%>78L%>78L%>78L%>78L*Ty%fivl{_WxriFRqA@L(llJdma1#2WRyw zxt@OU{9o_???SZR|9|zbcCDd*tGpUvvz2k0d*YRhTHmd%3Y}oLy2`Nz`^gnwHTRP% zp1t4Z{t;_!`8_Ro|DIkeHAZ%AVJ{`^JX2cNaF@5@t>!LorCqJ;%2tw2d*`$&Lp63z ztMoP6AFVj6u|Has@Bi5TXeGUd`=b@_Y3z?y{59Agt@t8pPw7zdXY3cmNU#u6Uzb{5Pbs4ZEt;P2$+lwsTv_ zt8|(TtJITBU2vKJ+MlV)N7*}I>!`i> zil-WT_f>k=d-qjp*L(L>>I8fDRoqXiY(3)OY}F=|4=4KY8y>AU9%|fAWB!B9Km z(VFV|kN36%(;0N40QU9k_5ge7QNPq_D2g{j@pg`*KXitL^!xu%r_dkFCi`j4GZlA> zINY&syW`d;OLp%=SL~;mAiLD9pmM%Crn3rd!&vlmp#Q=Gk^(o}Kwf{H)I*$bGm7zxi_P_eagVuF%X zD<>u>Nwsj=fRa-yrwu4cr+wOhl2R+D4Jb*qvZqx^s+E1VN>VNCX;pG+WtXjzblN+S zm6Tf98LcGM%1(PFsaAH{D@nDogIr0fm0j&hQmyQ?uVtNT52xDmr`qxF+G_!7uT`qO zHlVgzrCQnTu6(jqcDpM{33t1z*jm{?t|ZmU{&6L#7Iuj%IkmD&TuG{xUE)eot?Uw4 zl4@n=wUSgTJFk_bTG_X(B-P5kWhJRr_AM((wX&aBNvf6o#7a`F>?c-|YGpsMl2jY} ziRsWOx@u)#u98$M`*M|}+Sr$Cc(d`Cc{I+YnN0T=_(W@c66k;1Y@Gc*(QKS!YhyOf zlDyftb;4uJ*?+3G*T!s|v967AFH5S8u{cXQ{c$hLsg04iVT?#`5jvJL-xvEgwb&?m zwfJ~pkD~jE8W!&^%1GLud@Qvz`S!@j5G~WNO9(7XR6ubZb1`37K)T2)pee&s} zua0ZppQh==zt!3Q&#MjAlQ5t0iu%R@13u$T_5HT`{+;^XqP}JS{{nSOkV3r6L%>78 zL%>78L%>78L%>78L%>78L%>78L%>78L%>78L%>78L%>78L%>78L%>78L%>78L%>78 zL*Ty)fivl{_W$eW=Mm#D!QeA4_F@13&dl{C^VI(az2DI=!n6?J0{VSQj@w_}^u#Im z|A#5P;d^?kZ!=TxpOqohqP=-SeQOT9LP+b>&Ak;a@dxToQ<2#`Swf?72SKM|? zsNbwOE>x4RPYP8w%lA9RwEol#p^mjI5o&5>9ia~A))i{~L`}Ugua|`Fd!oNkxgTC6 z)S^ygRfo2{mv3N}(Qp_<5nedu^>ye@fXP)IIlpDAW^={6VN^mj6+xHx7I&)Y+Hr z73%SphlDDda#X0kulU|!BriQbB-G~aX9=};MX6B79ynX5EoDuGnsse!p+4E)L8ym) zy@d)czgVbSUmYye)^U|W{mH*Ts1N(xE7Vo5KPc4Op+|(ex6Ue|UaPxWs5`UP3w2xg z4WS~#KNqUQtAEj9o4yw6iS2(C>ZRrfh1&Yyzl1t+Z{S_V;Nv+#p*p=%EYzqi4TL%) zsZ^*n=bt0gx!9r>6X^`bpSLHxCr*ilv&uxgo4o zw7@arcnD{dP}HYTQxPH;fE6T!>|7=)bH2r5o&PS--X&;@1RhB-+n}>pZ@kA zp+5ax@_Ss$Xa15d)aS2f3f1E6T%jK5Q7F{(ZRZM=G5$QEI+S-3>e!S0g=)V^Q>}Vk zBw@x=n%Yu6M#BDQ$W=nkpFTyXL+{TN>h^PI3-#iM^MtzTtQ&aV+2 z3H8y+4MH{Euc_?2Uzf1<54|JQxQXuz_2G;UgnIGwtwKE!{z#~-JN_)xi2wacsE?=Z z6Y9oeCxp7;k>LA`>A=5d3pMVR9HC}SC>CnbZD$JAyj^Rd%Fb&m)TX1FTHCsvgsnN& zL8zBMst{`EgdRfeKRi&V>z=<aSejwCu|MHno?~eI{P_K>KBh>vje+gOg)RDb63H6^><_p!U=K`U=o%@(juhxHDs2?xV z)Rb#hNZ62zR}1yh8*7ES=el)5{W^VvP%B$)6lzh@8$$JbTT|2i{Jw;}(0jX3S1r}l zt!sZTVRi2Nqfqx>xm&0+u1ML+_)X7gAk>aK8w>SW!)8L&-`!HE(j%ROS~|Z%sFW)Q z3N`$j5kh6Ybfr*N^dBeGz{@o?<*o@5*7Cqap(Lfv^pQ?I`Lx`c)5Y!qtw8E*^qYWH`9dg6b+66&5t-w4%xg6~5{(3x!j)I9>gf`9kekRU*_g7dI1Xcg7H*E}fyN_nHiou-Vs+6Y7WiC+Kv)x=N@y zX_JLI_}6QN`o}Z#gnId_n}oWs!NWrRl>MAg<34>+s1KieNvQMwvreeRbzT)}S?(sG z^1s_IRKbHE3$?M`PN7~|^Nmo`KHVqO|CIkA)Y~Qh66)aQ<3er!G_Z{kdgiZTp?)(v zO{nYUWC-=-raYlWzF8#H<{1rz>UB+9q1NphCe$CcO%dvvlh+7!!IRU3nzQ0Yq3ZR# zRjAR^G&St(-$>Y)@})x68Tp)04{cv3)ZPDjL#PMt{XnQEFWoLw(&j%2_4bKB3pMOF zdxh$H_dkVd{o>C;O?mPcp?sJ5KVn?gk1G;t@W1N|HEr;jLai9oL8uRJyjUoly2iY> zv>7MVv>PT0^~Ektt&Gf*u)&|)A=H{F_X_n~oy9_}GnNX~c*`=O9&PlbQ1_QSC)8I< zHMO?%R&)?YOB&5dVB*lW)<66(2e=Lz*@q@_^b|Ffe|v)&pn)Egrv3)QsQHA204uI6Rxb|hCvfg}KsGNQ83pG9GbD_FT+$~ha#;=8% zRqwAtU3$~sg}UM7L7^@<^pjBMwE0D-dCwakGeZ0S85ZiYfoVeZ?vyRm6P@#fy8rJD zg&KD8xk6>nyFjSM!&(Zpr$twxj_39fYU=t4LM44SU8ubu&J$|F&vyv5Y|x!TJ$d&c zq0Sh(RH*V@%Y7nc&AVuFZhE{|E#x5sF!a4 zTByGt|5>Q;z>-hYyCZ$A?>p-g#_F%jG&N~Ksf4X=dY(|5UuY>*gD=a4I`idrLY;iB zLa1%;_Y}(b_F|!4oHkylwr5@|)QRh63AJbK^+LV%!kt3hckEH2W-eYX)Uq!%m2EsD zVK;YvN2njq-6qsM9d`@$ME+Mo{jta2gu37>O%3h0U&1c$^$(%`cJ)D_dc2~kzC8~~ z*b|5RpE6eOew`)M(|6Pt>e%iELJer$Sg7o8TL^X56)lBI$u1Xa*owA7E!^5(s9h&| z3f23aenMS&S%0BM_ZcSC`X|N+_2r${3N^9mT%kS;+#*!3xs^iYUoc;&)z{rARJ*bF z3iU;=g+h&gO;i7Q?jZ^L=lVy5N*=RJs9Ae7ReI-g37fh}Qx^_hAz>X#pBE~x^aY`A z@AR@zJMUUA)c%(>wPW*E2|H)wpM^@D^%tQ|Ecsffy=Na3YTVJ3&)70;{wE^TdD)pl zJvp>ksNZH?AXJkXWkSt;q`6R85492MthBa5ZU3o@P!mHHLM=YOuTU8+1_*WcZ!Z<< zg@29^>UXb=6zaJ~(}cR~*K>vHSLaTllCQc;sLzA<3$-X|u~5G*)zsR*J|bZ!u3IA1 zWyh8Z)uik(p?&A^jWsG`XsLiW)2z9vG=R)DURmQaSYd;G0 z*_@Oe9JXdeo=`deXe8ABz&R*U3gJn9d_Xmq2}H{T&S%tj}vOqu*pI_)Oxy5 zKmTx@Po))TN+jBx)F=&HOx8C%QP{W74FBHyyWt|)K{XnQx-*%zi{qyHS zeg5G-q5i%1qz?Pc_?&rL2J?i9q}CIv@?;~S{_$K3p{7^%6l&$Ymk71{7fs#z#TW@| z^4WZ$HZHnPsGl=e2-WrYN}(=2_bH+Jc6wE)i(YJRsPBUIjyAB6h4<4K{es|@bs^6u`ME!46|j!^%cQ6$un!S#f?_wX4)-SJsN zp-TVMPN+>K9fb;?>?PEVZx0sgo9BlJb#8dHP${=g7V4eCxkB~Mzd@*}ZEq6l+hy~G zx?{+%g<5*-aiL1ic~Yo*kF67G=+;d_{eHpQLJixiskue(Nm%KokA=#3_zyzm4cH~r zuV4JLjy<_gsM5ecbZkNR4~*aUXkiBgnDWE1wx(mlcti|HJ7lv zjSfP6bgZ{f>-*g(RO^dw6Y7bj_X^edoaI7Y{pkv!HvMI#P&aK_E7TnsuM5@rmN$i( z{kyk>s=IruP%TG(B-GvSZ5OJ+pr3@wxy9IpM@oio_^@Y7R+KC*xu;})$@L}EO2(Ir zC>d1JtE6K|i;~7A^-J3YRn(-YK~X_bT9Lo#SmD9Ky@g*Cep$v5(k<{ilUCU1A%$9eDNZOmJn_jKN} zyoGrS@@~$Xoi`?l~b8BCueHT*qq@x19N)hw9hHaX_QkpCnqO4=VbPg?C-PpWbew}p8Zbt zhU_)jtFo77KahP#_Kn#yvnOR=nLQ-CUv}5*^6aMB4YP}~GqQu($FmM)?aTTyYe&}B zthch(XFZ#>B5QHhJz4X!uFsm5H9l)Z)}X9jSsk-lWHrvJpOu#t$uhEzW**4=CUbY@ z$C>YCZp>Vp`E=&8%!Qc?GH=eDojE0Qbmq{^0h!%1+h#V)EX^#*%*qUBp2#?yu|MOh zjGY9+~8G|$WWOUAGmC+=lK}JDFT82O4So*>A zz3E@1f117}eN+0n^wsIh(-)=Rm0p=XCw*%A*!1D)1Jiq?w@)uiZDxBkx5vM%G52jx38Tj4X)U9GM-N5*ZyC8W|Aj9%&nC7AcLCM6x2` z$cdE0Df?5tO4*sREoF1ct0~W?tV~&wa$m~rDf3chq)bd1nKC$~PfF*MRw+$V8l)7Y zq^0;%jwK&V-kbbI@~6pLk~bxhkN!^5hNLw~tCE%`J&<%q(v3+olO`oynKUG+UsBhk@}#Co z4U>wJGLnKx$HRxh`@&y_cZ9cw-wLk}KTCVz7l-c&&ktW8o)#V-9uXcC?iKDBZV_%A zt{=_|N5V$ z2_y$j`j7a(_wVuV@^AOQVLq0hyO^L^>t;oIta%eUV5tZ#*HvF{!_Ti|-%G~amN2;U%IFJDJr3twYjeP5n0 z;xl|ljRVFv#%|+d<2_@evDSFnSY|9V78p0v>8Vrbd;s46ub=bk4 zA>bk4A>bk4A>bk4A>bk4A>bk4A>bk4A>bk4A>bk4A>bk4A>bk4A>bk4A>bk4A>bk4 zA@E;@z?pQZ{r^6C_V33Neq84m&(OEesB4td@BYF)NjIwh4Wj}5zDyszQh-R~dH*b4 zi-ms@TxBFPL~+O=)kx-4Iy?M_NJJUOd`3HZ&FfV48kyM!7?UU_AtNH=F=i2?q7v zhInj%24^&wfXjgm6l5q+{Qz8*32$FUPTA^z8;jjW9I07gBh8X97qG<71!~7t3@iar ztTnxicbw5e<&#&HY8)941gwfoh#g19W6P}Rv~~4 z6gmy!OQ%qG8MLk<1Jq#u>1NQQiVWa@r=3B|1R0=ltQ8wLGbl4!D;pq#TCqVZM+xj1 z)QSz9US!XpR&3z(B6|j?kEdnyKx>tMiGmyd)Ha{Fmm5-RL zZV#aen>miuEV@_0dcuUca3r%tcYBCQm=i}bo4rJrSCtn>YV~vvhR}rhaAa&gBdf}X zBc1tNQ56eE#$!pS8dy~4>M&|WRrzov=MxP#ViM-Xk+Co!JV2kgT{%bEnYb(OU6q0y z8Bf8URk3koBDRF(0$V%`5uUJI92r}#9#tvGk?|DlQxzLWGMiNi`&PxmkxmvYz)e^Q zInv3}tST0cjK`7?Y_P-w8{rAT=19)RJ|09krXg`Xk0b3&EmcQ1iWm}tz>&@pAv9r$ zIMSXE59<(~utXebXJX|>SEU?BGE;QDMNC2kIntgND~Rxf3UZ{KiRfO90X*?T~Y6chS5M`|nS9#9P~i7jqj z;z-S+`*egRbRdqjtHuu0p(@oll9`;h00vjZ$dSw#jo+nJv2kQPwl>6;5O$8VmyK&w z4dL2S?#ln&C6huryR5_B_?DY-d3DM+8I}_K0wpA&}k?|BnOhN@Y z(w-N4W?5BvaU?TY_~Crdglz~%I$6%IiiIQNm8e}+Y#bSn4Lgn!D#(#e1reGMJC0-) zyKxbo(6}6FXJX@?SCw)c$xIgD2u-LQM>30DIZW9Tg20i^d=Q#2AC8R8hwnq#x(8&c zFOGEPQ$W!PRpUrziEglmRK>=T&YUi*iiIQN<%F1oKyW0p*#W<(s=PQdUS26xv2kQP zwuRZ33Wmgw%L%*TW46nU8FVvt3^mrHh?+p}8J|TBHClW8uVcnh*m&c5)qq1ZN)Ojo z7yi)~%u_wlESOuHk6QQjvE@acUF$-d=xc1cIklcixBsV+{*&p==@Y0FD9af7;I^W@ z9LS8VD4E&IQB(_=*-I82(Mdfb0qE+om#i2eVvk#DSTejBezvmT94hTpM_G}5LYtNR zAIaWc`c5}D4Y`D3FaPqM9ZUz;V88U9+yz#QN|=`bf;4Te1odI zc4Hz7;1JLcBkiD^ZOa0+BEE;jX2H;8kwG6C_Pufv7&Ycp_j28}42AL}bT5wNdenh3nJOI<_aA7r)s(XVG>LmL>wo71C&L&Vs1vv; zzh8cS{+_%S@)~CB^$)1Ou;fMmJbzDryU_07TsnWZKWrR5<0kqKu?^@m zfIb+s=xau^kn5Pzilw+HnGi+p>Fy1B?&C6S)qQm;e;l&aJ zXCBxng!3K+g}y|757sT;L;s9dicQgPi0(duqTR}xS% zR}!2%g|VT%ygzZv))*hvlB#vUqCER1`BucCB)HbWxuM&X0DrAfDU<{(=X6~Prw+|g zimug>;6$<&p`vWzx)kxY<|`dsBkA0hZR&v9=L*SK9LOIURtE>?=JpnJ^o5e(x)g04 z9;GCdS4RgY4lStg)JxbwlZgooG#GwTpOQUpf z?GF`+Y~dP*Rt^cu7OVPqXD+xUl=^z^`Pd$$66;DDN%HMU}boLi5jW$Mk$LdIM){B+~ zwUdxg-ND} z3MBy^?HUIsl4?{839fN))@~&MrEuLw#p*!)1#~zKBx!8lf+V=ESxzKdVoW=xIue{U ztDH77DG9D^;q3L41oRg`(^VVgL{hbKs28rS=`4k+7Z}61_DQD>=4jBhKRD}!l7LZ= zYYDM^7FiRs1J^h>OQFX0m^IhfC)JD}dmu~(~7V3y>%6i#cl zpx(cIm&nLGYF*s7FwKotN_Udej_yabe`U&} zZL2AvEpgI#nsk7a_C449xp%cBw4$+758~}+^i<_3Z%!Dvu31ixYKhh!5?tHDSvO4y zu06_WO(kJho0mtq#sNCCCJS~ad!TipewW8lu4|UFc0-CmeP{G|-J1#X?8Tgg*4Rr_ zkB;$xYcFxy!qmaF1gD>wb0^m=xYJ8a39kLj*%z7;T(_RyOqhMp*$LKM{mK4Tz8?MtzB2y;-)P?hX#>;l%S%gJ7#xt-C}~^j|HIz9z{ycn`Qz0+ zGd5Ml^81Pr7TLI@ZUk(U_BAGXviu{mh%740vMjoY|MR`)+*7xzt7Zn`8dvY_Pt~ou=iGD8 z{ho6lRb6%K@}`xo^P7It_GstrjrC18H0)^qa{j*J*1`qt%e(Jx8!DdCu&wlb>;2iw zIv%c@)qY(4k6IpU-qQ9``R3eht^KXJx(7Q>D_!3*zO<@wYI$c@`+U3*$BWpU?q@I2*n@?S|X!aeDkl-v8&P4W?2#8F>;RT`p7n z`~M>$uU?_0l#bNPMWoCrZ3t;*UtY zUE*&^{G`PHEpfZ7xv{^*3nX49@dXlpO5(dD{;tIQJ((bAC~*BM62DF2lO#S{;wvTo zoW%D@{I3$fDshMS(=>^Xmbh$M!;UJKHZ+?*?`!r4+G~sn@(H$yNTyC~2rl=M_FEKV-hl!H-{D{x7a6jbS)0@OhJ$_852 zP?eHpLraN~D8=MLOL0i9K(rKxRISoE1(b#6;E+%b0!U~M4#~}h=HQUrT=02^}>3m)Z=++1)Q zhZI!loC0z!rZ|N(7$pr=>6`*`!8cNJ!8huHh;P_jeNmFDAsoQT<&xk4DI^%hAq7=B zrvMFMloS%G?2v}4bWQ=e1}Sz(t{Qzrst@bsmIdV<(t4-gAPTiTMPoY^k!7nPD$mKn{VhF&N1ftiB23g``HX8vlwPQFG!2}U>bBn03}rRGWE_X> zmJ5!{24jOsYDDN^xL%8JRWj7mugWm#w{a4j=2A*D8DCGLF1KQTmqf(`!{kMyLV!!D zJFcTMP%~R@-dpIPQm<19_NJ2IA(JOh-*;cb^u-7EFfI-;NlddK>AmNEqzndxTu_Zl zI$+;@4O8yf)AiZ=RHiQ-KM!wjnUKo#{Fa&BF{b^j;-|0Jw0y~?6_cgVz5a44U#Jp) zs=P(tte9`$LZ&dK$!nbYTXe%Fq{^!v_aEb9Olk7|{oe0Ph_Qw?u*miQ(Q<}W@ zHGFkqjI~zYb^G3KJE@WCJLkH~_8w8*dH0+*DaMqh-&dYmyHAX@R=*dr%O=N|(&X*E z&&ik{4Mt(s5M zI1VG!_iL~G1Fi*4NY(Gfv3Fw*?=q$7x8Jv)z?GZJTC3mkUp<7$`0z}h?)av@&6QpW zGw>}K`pYG$^6cn%(Jdcan#x4Y+eo_S!Aq8n$n>8toP$B#ge1(2q^WIdR>YVRFf*)2 zKQR4_7;6MG!*ucU{b!EI^mnB_*2I_+3Jrq&Y07ynZKnsDX$rWUrb#Pkn!1tZ8kig4 z8USHvHqALQbb-mtt7z`FlxA-Dx;j2NeHMM{J0;6Lu`DTURt^3DJXWw>LR$*+z9Mrq z#jJwM2%SY=%LwhD@fm3n-zpNB=}f}lTr+LQq&!uPw?r~+A&r3r=J1K&S!LD*=MY?& zY^N|<$kr3fYPv#5VYBki*6*yRFj}j@v}cjDEmXCoBzY~FJ0;7(M1WV|!sQ%_F-;$Z zu@6YdHmpPKmyjVvrM;9j)gZQ_@Cq0M7c=37RiaU>0?5K%o$4bNZ@zFFrj=OmHX4ji zCq;0r1MeFa3+qn&F?QP?Q{BnBtgRqyxtU5C*3WGjTV)aGvyH>TX%o@0Wq^H+ae%X^ zL98?GyOy9$%w(G~XIe>CSZ4eukvUqzdSf)OeSIr7gG!*FqQVLHlYQO{*?yoQWNEtrz9y)2?YD?V3-?`?`8@D&de|;?vHg~uFy7c4H z-$7ALdgU}bd(A9Gy6-;{tC0l{fbO5)$BiL_P`NZ&zz8_ebrWg zj(zY5cmzBG9s!SlN5CWC5%36j1Uv#B0gr%3z$4%h@CbMWJOUm8kAO$OBj6G62zUfM z0v-X6z@HBS6DgSY|M7=@*8G)D2jTz!_?!;@|G$`G{J9P`Jc#&1=b!c;eDq5EJwHNt zBme(TAz4lVBS;3>um3*^kUWb=z$4%h@CbMWJOUm8kAO$OBj6G62zUfM0v-X6fJeY1 z;1Tc$cmzBG9s!SlN5CWC5%387$s$mn{ZYpG|6l4E{{N3v3-SN|B^2Wyd91bYc{74LyA5=_ zdxM47YH=pvjBuL}zA5n&68}Qt`YiK}lX!;2M@u{?@i`J-CGo8i-z)LINc_CS8S#-G ziQgjee2L#D@g|8sBJs@RGr%HUb#FtC_8Hv9t@pmMC zM&kdGxE&9^P}o=Es>CNtyjJ25N_?ZlUy=ABiGL#Ts}i@0Jtj$fn8YVY9RJ`4l1Zg_ za#M10Ydo1h4}u42B0@MBZ8#x$OmZ^5y^+9;PktsOIas` zles!8lap5^C!dj=ye2t$ZF2JZ$(xds=_@@+P;HGT(>YcC+~nj3`frD-ZQ| z&WR57Lsi(EHaDi@KTLprZa^oBfDa)d@R*@fliA>>MsLish>mT3G0&Wa3p2}*kAgcB zTf#~7l{5~2bNex~i$D16tl7^^-mSASR2Lh(jLj3w34;6PvX;gqRX*N5dke2E{aZ3~ zc~ufxg<+D!he>>b#Aix;vBaN}_)dxcN#ds@{x6A}0SJY?BtBH)cS*cT;tM6dPU0^} ze80p$miQ%!3!;BT;)5kVR^k;BpD*#pCB9wa_!P#^RcsUGF#=sl&0GbB9GX4aNeOeW zqeut$ph{Qeu=NsYA0P(~L*wP?|}OOf%5LIeC9_ zcdaEf;pE6vpjx%b^IYyQ`A9c;h`4z>Dw3?SWfV6ZCL*OuKa2@51)vBa1^BYc#j z;1-GhPU6QT{<*}~Zt)K3jZKPcrn%KB42xbn;+EV<&Pq;Rmz;cda`N!AF?CDW6G7ba z`)|N4Y072Xa(B8WE^V=4*kHG;&Iy9JTf#kePaxYw!ikb_iln0ZMYxQk;L{S{CGoc< zep=#ROI#K?`$&xI5d?Nqco)LZ?3!_tlQ9*FI36djOiqqmxQ4Q8#|X+kG&|)|G}2** zU2vqs4#$X^2Ez)D;#vZ44ha}=>P*lVTxidEI*YErrlfOZQ6hzO4w z@TGub_)?aPC}SycgnCpG@Bl}s$Ib+fYuZk9WTbHnFXP*9JvuYI9^eRNBxzcI>S5X8 zWq@ON8HZhPK;7^%o_oFp_clz(1=|wv0LSp9Ol-}<;YCJLUBEH2jL`Z?GEP146{nOW zO~EmIDIY)i`TX!4OQ;rMUC34X>7~94?Y&wvd-?iP-wW=%BXm})HUq%Tny=6~=M!&@2RXR9By_={Lw^*AYeF>4Ruv}1u zt-kn%Z6$^7rpVd~F%Rjmi`JQrcWk8MV2F zX7A1>#Y*$Yk)@OWE9RoRgeJ_F80(WGSo6gv`a?vEOqIAdyO@(B)|_2j)Cm|6a>34o zfdd=>3n3R&5;#8b)6TKO%K*plGS1!fZ+nI^l1c%`@G`#pj+^!xUIsW)WpEXTsvPgW zeY~;$X)*%h+5JCVLGM$0-n-`wdv4wHq&*MXvwhEy z3)KJD^|h`~bZzXiIsSRf=f=z%_lZ3|IOgZw%f`$ZGhxhcJAd5y_0CUr-q*HY>+^-T z=Ldrf{{N?2jkr;Q|Nrs-U4}Y7+~Qqdn9}`0a~=d2QG6Zo$PEKJqdSdrucj&W@WBja z1H==0V1S|Qklclt3nVLUnmi~sO^%f`8$UC%H2cbF_sp8ua{O++>x@1H8=8q=FeeCZ zoXhH>b?n|2V&P?dg5c|9Rs`G^LwKjeD<#H%HVD^B{5KNcC-MK2_(h5B)Uy`=P{7s3UkoXr8*GsoMPU0C7A1(2q#OFwSmBhD7e6Pg+BJuMQ!>ti| zBz}v;^CfNPe%I9LiqgCWo?dyIX~X+_*EN z$*3i7gKlytWJz-JDWCiH78PQ+Nl;LoHS@;vC|L)NEF~h)P=kTvOLftKg~5*K^}#HV`%n?Cyt@xp(<}g+zmncOD*}689v-saJP5e zmkGzk5`R|WZ%F)OiS6H!_vt4YKIlZkVJvxCjS3bQSC)LRj3 zpw#8T;$Sruyqu1=jz+*nVq6xiGg+39h;t(Xeg{~wVer7XGFdi?OsLQv-~u3q33wb3 z%yarmK&a=+(Vj- z+bo(K3aNRl5n_gB!-m9d-AvsyyjfF8xOm4zBjhk6&*kLE=Q)l%?Z@oMx1t;hHs-Uy zUZ2Y8A3j3s#TIqsz5i$(*^V4WVbZ%w8^XyPQAfz(gA(5;@mD0qGmi*A;izV=4jj~N zLT`$=B>r+lpoh+BuiVut5=}CtY4Y{Tovk>@;XDaf(#q`?=_J22*N8Snnq=!o>Zx#S zgyh>y@YImQcvZVTaI^2l%-O!L1i920O2I-sk>c2 zJEB=|X39ZTVteDUU(btuIL41UCF9*on#4y+yhvhp z58Fo!%|^#ZB8I<*SY_GtSftCnLzAIkC`6M}CcmS4c}ImrZWe|`Ms60C=a2#vVmAvz z?tO`<3T~@{7u@JE6OyAh3#;G-_W`s|;EvoZ42wL_H>%Y88n{j@&E^ z6^z_03}wHK@~Dtd_N?UOYH~6#OAvzgp~<0w^W5Z6!6V&d+vbO6AC;WEz)cRSbVeb5 z$5Cy03=vh6iY7;HM24EA+;KeK6%tnGL^pY;N@o;?W=HN%?yQ^Z2X}`Jrm2nr0`9jC% z+Wx+^qve?5r*eYrKafyrng7>D_hQ%Mcx7i-2$M~;k zbRk1GtHYjgbb0*x|D(gnb9n?j0v-X6fJeY1;1Tc$cmzBG9s!SlN5CWC5%36j1Uv#B z0gr%3z$4%h@CbMWJOUm8kHDWM0^9OC8+rYIs^7)-X(anxWY)a-ban5V%!h~!DjsB+ zOWP^5*>FZM^m%)n7EcexoBXx}myaIw$OMN0v6ZZ+|3GUs@=Z3(4s4Q2)d6rV+}%;6ooHNiAGULLHZ zXRcTU`#@EV3LpMoQ(+A$b2=%q#wg+z?2kPH9s!SlN5CWC5%36j1Uv#B0gr%3z$4%h z@CbMWJOUm8kAO$OBj6G62zUfM0v-X6fJeY1@cTeuB88s@gFy!C(CPdCSWFh7!>lNH zN$<&-%jpdN-D6<}EI{)y+H5%D(QjR3kJI8DzSoFPfI&zOp9ouRPq4l@zHMwM>*)mF z&@(4z(+NIrY)+6FpV2cXpsaOI@FhJ%*-Di4?g>7oXDBFVgL{JS=@|;XL56QJn-i>v zj|6jqZ!zWU$x0G{j|3XZ1UhN3Cs-9>lY6pRPQXN45LC=QM|)CZs2pH*B&HCjp=N>$ z^Rj?ry(t2OI5VDIsL)1>&}8H@LA>+=2ytetGgYCDR{yULu)YJY63i>_#hJk{xvmO` zA#^YcFLxR;Lnd3TV&Y+OX68}i%*-LqDw!J)2yrzMaAxSDIJ4vsXGMddi{i}8A9W0*mRGh^N4ilHhR`_^MilHj=Tg@p5 zab_&VS}{~*=2fCW2$`W&Xl}>rfG`u{%%QmzXOj z?qA`XY=)UKnbmC^o!MVNsL(b-SHR3x=WN)zoArCHVFg1^gk%Q|UaT~#Gc$)eD;m5y zW7I{NIdoC&k$4fqsEaal=%OkaE7QeYl$k>pRmtr9Q5R)qpk0Bauwxu+PC%$(q&Nuw1r zhc2q-#6oQ!(i~7}j&v*3K=`d; zjye)EhmNE=zh;<0i0d3WlA-}a$LFFfIdmj-QSRlVj>OENBPlaa0;7(E7VjEmSl?h~ zYZPZzkmMW8Y>iSE_8SE=D~}q5nQiN?51HAKqDEn6U|*rFA!Kd~F!)4`!pyeI%>`eC zEcnJ4^U;N>d!1W^ky0XF^}ER9*LPl7gaUb>!L2o%<#mD5q&GSy&&L$9)u9*LBj&D9jx88)`uwQ=&#; z=Flk0%)_xYN?>kv&NFIY_1=m(QZ(M7gwQC=jJ}GQRp(<3GYD~J3jsO5HTSQ72W}8T z<^@O!LUZ@?^$8=)ggA3(Ze`}eqQeABPB3@BDKctqW)97**C~4&W)R|Pz^WBP)mw1; zo71Sdk2YzetRORo6;z`nRgjs(3Mv{rOhhZl%%iLzGlvyabEj7@!JiK>HIMo;OAh^6 z`;E66=BPh2Gu*afsOr!7P5@u6ghpZJ0;N|#3}?Bs%_#_R=7e$Z2*Vs52U&7B4l2$^ z8RqCX$jsq5sE%~9VUCW2%#3zlF;r#d9utJP&fz$y%%_{Y(Q%L^Q|7qjb%q&)xMVcE zilM5x&oQSU#F^3kR18&(@_us)LYz75WR&?5!wf>4IiZvJh+&R)GF(A4i;AJ%iiPQJqU4TOv9O3)%dK* z3qqV3JvTG|3>WeFAS0L3AjFyZ_9_wN@}HP_gasjF=4HP#lvbh5nK7bwhO6OJh)O#+!YMB`RF4)W|PiUu<~XjF_`JE4lA!OTE| zgU;*z#|+2O{+XE*`e*dQ@!KrS9QMy@l;0T1AjHvtZ7Z}n{WCh-_+=^ge@RApOGoW5 z+wuMO+uGmXer)^1_LtlKsqKcgv)Za{9c|B+zh1twytq80+)(~u>)*6q(E6^{{?`94 zJyiO1X?^L4QdjBcE%&y3tYvA-TU+uiKW@IG`J(0%n)hk`P1ARpwl!^Rn%}fX(+kCK z7OyF;D9$W46`v}6sc>oG@sT?8gl;PwCMp^t1Pz%xV{`j`Jw6L$u) zDBh6!=(sD)IX_OZfsXmH89Jb_{qHZ@n~&1>(@Ey6w-X&ttsu~oAlaZlIH2*u%xX?C z&(q&rcp`ZIF9TYxpM#CN?q5E;u6yRJzuH!bY{K>ji{3&dVZ&1|{FvnBbAsSuJQ6`+ zs7l*xiE&KZA2!%0IBcn3f}#|*3gKfCZBa)MkOiso#%?Z^xIyo7`M*{adl9Ta- zS_1dGl9S(^oP1((^2y1`?@3O6Z#(*EAPvVwlG6AW*j&@{W#Ja)?Z zf5kk0%F2$qd#9{sBIdN?5&FT^Ayk4sL*$^{AB=!X)LCnhKFm7KhHa`HaO$@?ZJ z@0Xmse{wQ9lmxvGNKW=MSv!dc8_A#MOx8?Uk0&p%18y!DOqdg4PCY!wNfC}pf(&qk z!}87)4s=lnxgd!HllV}Nq*9I>k>i9BIdDxdd@0}DCduZA{ip2?(X6-A+eEDvm;oSQ zv_^Lk`o2|032xJO97$1$W*Nwtd?N zP_3zT?*2X;LoznB(*FxB^nIi!!U~Q8+`>k{92j9fM{=8JhxWfnHr+BRxwDE>f6Ru>ixnX9U3DvVzw2U>y z;o=8dBxGYc;if*eNXRG?zYT2rYL_V!>cmW0qGEG{Q#)p|e&sS%;*tnrz#IuRl5hcw z%?;HFF~#Xl9SM&HM-uM!ha-{8R>PE3yCB4gB_-8vQ=RI>Oi8tKY{yJVwR3P{rli_E z+88Si^8svb$cBisBn)VFP_v8~+gS)uFFa^Q0ok_oMb>7%{PUrER z`*-F$f7Ud|zl#Yguo$Y_ueqH<7?F-xYY0tL*YunvzA8%XRc68fN_j|hs zy4$*6==!Iwo4Y>HbxK!%+waOhD*tWy>hhW8`Q?e_*IIwj`sLP-wytVDqP4g6*QLix zUo2fwT2ZQ&#+6=a`CiNCTRueZ_aD~M)AFCqk2L>v^QFy;n-6Us)BIx7x0|*%UDULw z>ENdJre72vEPl3lLGeAsgNm)i=L`Q>*j9Ld;iSR=h33M~^7rLGo!^>&cYa#FkbkD} zn~gU#Zf-oTalghKz3+c-?vuFV%#$61wEjPJ$roF2aYqHA&RF=Y2_FqULT7-#pSCh>UxG_YSaI)*uiE3Z7%r9n zuSavH(?=6G(t^y#DBYZ1gPfVSQ5kV7gD_(7@Bfbok!SD-cmzBG9s!SlN5CWC5%36j z1Uv#B0gr%3z$4%h@CbMWJOUm8kAO$OBj6G62zUfM0v>@sVFV^lydYQ?3G=?s ziU(pq#YV?M#d9m^dGU0?$W$vCaVXj5wPi{ygZ~95GtNxP1o5{ZP|!Jtt=JNoh>Fg*}iyqFTGq#O)eMD+PQhbMdwm3 z9~vok4}3s3)jVG%OVyR&P2Moh{X&I5h&*mWLQJ zLaZzmsZM@JvQ0%Ss5n&7)8v(YBu2H8DcP|CUjIT}ZGGif@>;6Ri2c2p}+UF)Mwgn19(Gp(;^DCJtJm5i9S7!_qZTa1dbK}AfP zP-oCtIvSv&EO6MGg*scR)k-)V$w;wzHYYDqtX5I1kXQIkjldP=#XJuwHm@9uWJ^VUNEJCT zs)G}_94h$JC5tp88U9S?vAn}ewmu0tp-&zvWhR$vsmN1XBTzv}&kL%}EBQrdo7d_r z+6nb-A~jjErCP~SN-VFHEOCr#(LfxcVI?Pzp_ZCFhGJm}=$ovwr6%iasmVH9YO>DN zVav7D;6Ri?}u~q++8?h$ZilbSBbNyHGNykOmH$ zzm{stjp}UkI{9Mdf?_30DWcU;La|iDVYv&2r5-&jb^M4_x4u!Wkk{22Z$yMzS*k?? z7u<9#HJUkWxuB+(JAK%^mTJpI9F~i>paebDJ=ED!lk;M6f%LqVnwUZiw7!;VB_pOSme)#_ zI7XH7OfO2uLftD?qiDI7np`ekt#{Fg=C#z}^Cs(zSF+P3TWYdoOHG!%_pp+2e*<@m zY}wJfJ)l~z1xEvI6a>j}bm-Wu5( zbe%EFb*WLTKy}NF))#2FI^zxo1<@I3*uJCI3b@;oUM{F^xlzeL(xpaqMqU?eeXg8=$&1s@2N&cc^dF3drl;Ni5Jg1;GkbcrEf_liTnP)xDG0L>v?x>R39p zd7~`_lF<$=wM54hoV@N_N8T3{Dy|k?8%6zjR*V|O8Ps$eftqdwP+coT%Y|01%Z+LUs#~L|1tHn>joQ5FTFs!mt`(wM!M>1g?HiR0tX!?4 zHbVP#>l@7rs;hGpE3|Hx8ue$C>((gRQc#XtqiFjD)x|klUr^l|MYRIeEf?n$#Gi5I z);EdB&VZ+9@v!}t|*Lt4r z+}`UJFoiBAf-tkp>&In&A(}SvgsR5+nO$J zTHbU_*VL~0O_Q67O)nH5DLz|%uzY*@hpqRt=Eq+=wm9~wo&`O37OyF8DxOrFSsYt@ ztuTM=K3cW@D%lxDH6UGgUdt{F<=daCg$)A!x zH2?g#hsWJ9ZhZdr#+{A#HFlO?X+5qyqkK!_WsR#Ek7=CRcx8EQ`RZ|0p~e?;kLB*l zU6(t*?X1poyW%r}qU+%uPdrS8z-G_FM@7~#U-I%SpQ**O&y}2Ow zbi=gHMIDECEFXJW*Ii?_j+r&4cg+0_+Z!%#IHO@8%ss~L@p{*N zUAJ_7wf_40^XeDXA6{Rnzp?d#*1^`ft#|IRX^)fkxV$r4|4iKjb+^@BQ5TH4zw?aF zg`I2aj;*_`{fhQA?Z>uHZ=YV*UiWhLiR|6k8?x=~FSk8Gs~FtSc7FD>Y&F}Ltj;T!n>ACC{&kG=;@!F6<+39bq7oY?1^rgvOr&iN^+edu^H zZ8psLk1hXZkJI7-exwQybkV~`nV>gV8Jr%h4wh5AF%T*qQZm$vp_~;g3C^I^2{u?d z9#e|YR|jidI?53G+F)~VRyD)H2+wlZ03ASQQgNXGLpwZCDhuK z$T{)khLpITG+u7XTw+VaL!X8^iE4@ZtRQVr?=7?^tyu;h!*gUnV~47Bs*sG+Nx#*U zAGMR*iW$mq>8nYXvn&@%(lSmr_^k_N5XDjxa8t{Tr5s`}l!`}GG#~U@LwXx*n5t6y zjMkv8H9C>KnM2VX8>gtPVwS{%b8ulP*RdBU_HOZKkUK^pbsmh@in# z$1ft5XR7*^V;?;7>{uY7p3LFYGvXUe)q0L6eKruz24SXYeL}xczhe%qQ$N**{myDn zzQsIFt73mYhrD-{rQ$(RLNr6)RN;1szG4L-w2?efB;avT!&4zoL0_~!O2=c_h92sv z*s~7s7{f8m=*jJNGs)q8B32$A`xKp)lGiSyZwP`nq7xoiH9V6^#%hwfl6-iH=`kXF zu%F?ZQo|S15t^oOqHjHmP!T-vIJ@DTRwENV*0QLk<1IJP!8mee=$VWT9$_`|D#{V5 zL$9S{ykZGksFVTtj^lx2N%lteAEv11RSabr8W6?T73}ZXSN6D*WQH5l0Cb?^CBv1x96eo3hCx)=(0K+{kwBy}Ct>`cM|WBvdrj?Ydu z2(2cb4aNrN28$^s-(o)XV5i?@3anvDm}#twnZ#-;X9eYlU7#sOJYX7;NO?Hl4AE=} z#fxiXI6A0*&op&FD?krfn@7iV)=*nOUrikc@R+}YLc-X=99n<0d}m(4RK>vh(TdOx z%%Qa%Pdcc6(99{lixKBkEpa?yve~o%vIf(%JdD^pr!_b+Rm-ZFSsnL9u!Q7R93dH+ zI(Z?%ShGSFgU4W2?9jE>NSN_*>DqH7V96Y5eFk1oaL^b_-iQ8xYRwcy1U7JHQA|}# z91mrRgU3?i-Dm}lTn7*I5;70xyoyI`ZiSK2(X~RFqTQ%urmMzIU6`WU!XLCurm4QM zdNNhDjcJ5&csPxio}>{|k~LylL?g%hnW`E^W=>2?!;h(sH`!LD^D5?0Z%Uk3F^~Gw zSn}u9!FlAd15DBW-S*2dy7un9)CzcXGcz*It-bnqY6;qAnWjB@q&+iD`}4$^9P?_+3*c-X*8_m)LANX;-x;Rd3=T(nWZwf&QjR|uoK%8 zcP=8f(%I@%V*zl&?idZA^?#ty)uv*s4eVJad^w`{&sS_>rAk`(*+Rl|@ za})K+KB^(+3b^kga|E<$r#I`Pkqn-VF$vy4^B3mO{!GSBPIdY+XY6DeS%R(6D>C`s zkjQiTGA?m5=_EAm%lgQFF)Ien%oW&~p7uDl-TE2jpV^FZn(zk#;5A+#6ogGx9f95;8GlBv1;7;EqJrk#D zf91?lnWBAG56LsLQ%-mKtH`*{RPC=)v~c>YWu!kw@zbfN-GD27mY{R6Ug}+OAAq@p zs`IZt>hWTC9XLOFRl#c`^@hvLOc+<0+S@aqwg_Bx*xp`B(RrA?R>$atzSUf-@1KY# zrz)QPq#v$+t+fn-%%jL+oMEZ<8h3y>(lBPKVvPHoE9hPbU3*VS)QMA7C&$K2QBBmw zoSs%bQzPZe-EO9+bz`<;s$*HUomiHsYS~`0`BF1;GtPWEoQq?qT&;~BI5iGMiCU4 zsuVG8nSVO*HO2Z@dcQ#zz zuqC%G*PmOM`+WVHh9K8lzp4J&x@+oBs;{q~S$}`s+|u^aO>LXnrnJA*`cUim@(V3v zTX&RRFP&Guv2{{uXQ{dUg|>&<7M2G~7nky-^IA`B9p5&;?V<8Z<;PkETEE<~y?kxU zsV!Stsx6h4V`xo-$xY7{x7S@>H>GY~-O9Rb%d^d&Z@#K|Q}YAO{l%+_PZu627K@9D zFSS43KGc49d#U5*_U5{mvX5rJoV`AKUUpG-AlsFFHS<{JuFSQW^D={(uQr|EbW-yZ zP3_IsH?3?ssQIO)xtY`2Zz)tV+00YHH-eRg%L>`TWLgj5zQRrPhX2m|U~q5#j>f+H zw8jOEmp4AySk0f7{|&8uaAW@d#tZTp^h4BV<03y392vZg&NIP#%sT%cZTM;L$4q(< ze2C(kh;|IcuT7#Ig*#uJz~d&LChp55lcz}ZsevHC0#PUt`_Gs?FErR_--a+jmBz zMJ9teGmRu8`*)l4kp-Dq0X+MCj-V;#nD-ZtQV?$J8I2&wR_$_=nfJJllMxDzI9Lrs z^P6!P8XaLWfXy;Z&oAR{4*FGr6S&3)y$P7 zG}2y0||2jL^?!0^aX4Nj;*6H;EBC9i!2%3fj*V#BTQHz@F*~vYw5!(S^`z zX3_$OMAghh;7wxm7L*M0FGh@$Hz^2{AOrTU3c~oOf_4S$8LpsR0s9~;Xb_s=3Yr6E2;%vT zIU6~@a)g48Fj+~7oXU8E8qv4CFan{^Hx9|uTa|``Q3TRR1VNY)ls5;u!@(#*C}=*o z(fV;c{ieVcjWBmGU=Lb3Z`89z5Qa0O(VO-o5rp9^$dF6#s-R=6Mu2TsFnYTc^rk&q zsSU`q8n-0Y7@vZB457P9un_wyT1Uvl?O2xhqz~<(Tp8 zldYUL>Djm_GZ^t@k~za}lpzEgS5ZbIG+OS7-dul#`vXR!Hgljm9E>7_8l4Dkw6$Fo zbdnK7efF*jg0W21_)^lGVK>SUR_zqzfM@fiq&XX<5U_=U-eawYRf@UK&8Q+|s)2$%BlVHw_xY6xGjaFGfy(;6) zX>_K^Pv)=eqM$V6U~9{a4?Dxg1rvhFn^yp&>ap&5kf&5 zzzsoslf;~jLV#rn1#L8038P&Vw8;n}jrKMNy2HUJLa5PZaHDE`+s2%YLV#rn1#K}| z$su=D&^bmBX~g$`%$Y526fra!Z!WWjz>TU+H3z(V3!P^I-p@40q_PQgVuC#n1zm)6 zOlw?0%siTXDClA%hzi(ML6;aoq%q&NF=xRcraHVo)EwKY(1{85Jk;n?la=Vx%z^F< z`^dXc&<9Oc!f00oU1kK4rn@TWLq-r)jqgaAGweng!m3@49PlH)BW2D;DFkexpbwj@ zgwd`Fy21z|jCNJfM~on<+5zT3cQ_bD2&;A_xPcMhBQs~C5MWtCK_4|)38P&Vbd?cA z811T{j~PK!wFAw8?r<=Q5LWGKa04U0{b$akCwgQ3(O;OXgpn%6!i2t0~*8jH1*uqeQx*k?w@tt)OBK4bJstNId9AXW1j2$Oy^0REuHsw zyuV{c$IsihwV&KxYX8T!^V<$=d%pZvYEpKgk zq4~4Tr#81WKiG6((?HWNinkQsTWl}>b781(Fn#mj*8HM;NB*J4iyCJ({wlXU_r6?b z?%NF)HyqONV*TgpPpcnO|8U(Ub%)mdNA|YtVtSt7JDE!}Z_B(C{B;K!%(p+Z| zU|IA2Ki2<;A<2y9!s}RyU#8854R`$W6nmT=o9mKvvO~!PaO6w?n_~?E>_2Yy*O~o| zW`DEUZ#VlO@az8*5I%SWJOUm8kAO$OBj6G62zUfM0v-X6fJeY1;1Tc$cmzBG9s!Sl zN5CWC5%36j1Uv#B0gu3+EdmoMxaHoLH%wzg1vX{oxWjEeF1cfc0wFQ%h|Rrjh2elq1vN2@-UNb-a;{N zvXL}=69sl&Nj{1-sRo!@2(1VzdciH0)?{g8i6X07axN`PaNtz!55}7Hkl}Yyii41? zjiaHqJ*?Y~Ro8SiHNt_OUve zH+swhI!V@Ls)GQpx{npxmzlZ_Fo$Z2_4v?N)NrU?710Y^#s(}wYlQXGFs=Y!!HPN5 zTl$p)GGv`_=1Hq1Kh~!b#*=g&yJ*E$rfCg$%{r`ShY?Gts=atB=TTf@m@-vsG>Igw zBDBt;d4!!IkR_Q*HFmyMV%}*ARHJ@_6R(emk$n|O8eksHjWvcr!<+z^nDwHWN83}M zpvc?Ma5ZBkSW?0$5M@Dj=>bCr&v#zL}()+Hc0I>@&yH~ zS-OdAxr+9(0wRy5(=wT^b&IWb&Q#SD>wok7U>#ZD z3|E5M2H(9PKjWNg)tJvP)xq3;AxYN;XAVUcV=`)e7U^%kyTEj{Hs&YzE{0G~jMjP* zX$1d9TU%|8P2HJG>y93exz3SRJHQ-Tf2_kOa}}m&tz-2&DO&yvgE_CQ%>KAoHIcQJ zIfv@PUxJ9{Fgi1zYBV)LvK=i3m{)b2t|K#-iME58GiKsuB}e90o7pwZhvilq4jAjQ zuZ8aL_o->55m(2bik(#8wAo zs`@v+DuQ~*>Yz+j@9w9XU?z;!C@~tF{_ccmeX&w5C`*Wkzx*Sf#e71vnpgde_#gFacx(jGtN z4V+WwUiiikTR_$UX1dNE(NFU?0$?NZHKyyeQNk$o&Zs{Knw+X=0y9$+PFE}=HDQ|K zskP^HMKi7=%EyvexL$L=Kx6u?hko^yt~Iw?I+268#&>b(s#_7dEv`60JttmL|wS`d1ijg$jx!oy3YXW)EVpIN3?SxaR=Pw?9k7E?})BlyaJv>wi@ zb)Gp)-pHK_&R4R!PS=qWTB1LLei+j*$6Ox_Fn^2XpPIn0VC`xODZ; zsj_A-z6*mH-(s>7*2#7>)wVV2Zy<3Q+G0~Ym$`HX74uxCj^w#Z$*zv~+j|hsyqq}{ zk;okkrYRQg{f8O}>g9ZI3jI$}xc&65q9%!9Fd6>-BK2bfQN$GszhF-Yj@fl)c! z`i*5+j`~n<)Wevn_{Wglyy)upJD5!&i`%c>!K2uFaqTt0oY}DLxSUIacM>=A({%{* zDwa{H8_kG<-hg^s=2SfKMGpSzj`%y%9V~eU3cb*}b>(&DQ!FQ&9%PNVLRwqPrB^kTP@LzQ9Jp_a-VG~aa}Ua2>EhL|qitR!q}k$*p-azq zY=ITxas7^~U)0si_?btoP@(I8o&ySAOjqP5#bn^Sb2L9>E=4`gCF3x2IoQYbkuMZ7 zpJJczHLO82Otan;m5G&V6RxtDNBfuQv5q>Rx#PgFklat4XH5kUH*14_C z<#OxJ(!;HjTd!$7ul0r2$D2znFE!uP+}V6j(+f@Oo2$)(O@}t!*mQBzO{EQ``K51^ zdQ01j_ZG)Dy;i)qxV-qI;=JN-TDG-Z-tuJ2w3g*93tGO>GOs+Xyr{gje0BNd`X}ml z)Nil9qJB;N{Q61s<$~wx9jV4MB78|<7s}3e=0VbT&NRz^YH61xTk>cE-yCv@Vzh0w|U-oE(x0GgGaz4 z;1Tc$cmzBG9s!SlN5CWC5%36j1Uv#B0gr%3z$4%h@CbMWJOUm8kAO$OBj6G62zUf) z5a`PsmkBbL1$PFI27~6STKNB;|1fWowfFzg{QuvaJEMpHXy^C;@1p;rdug*_-KT#3 zOM9Fa5Agr>DNkbvRi6tr>d^K<|#3KPm!tm#CXD+9L%9OI0!Mtc^Ze`SUz+o)UG(|KOdFE5i@SOQ_^UTE==E+(qLy_m_&^OWZ zw|Lf?-kRY2TI(3nOjYe29GRk?f%i7?><8h<6vZQgBh%D!vFFv9s#c4yldYa};RXieo!8Em9e@(3pu%&CgYI$Y^1BXUy80m$X zrpVRwZcNwOOCQFmT5634FkL+}p%-HgMaA(0rYIty$eWr>QKVx&z*I%cvG6QYf2Cl} z7d*Lz_rPT32IkOOjyL`)Z!j}W^}&0<7BrfV%Dwqu%>*k^i!bI5|ct`3cG%%K|hM>xbjM?|#~9643Xbx>f6 z%EU9Xcq&lVI$~-a$s~>pEwF^K*o?MJQEg-XJst?a zu5>wZ@Ov|M-3F;qo2^m5aKUzHS*U~XbXuO8x4yZg4okBynQIFh6X;W`~- ziMrfaRVZ3|Uv0^pSAAF77pFS)s#y_>In*P8ELIJRm8^d4v{25eb&a*qqfA}m`f#dK z547r)24`7=fH}0hls871%PBiz%>|}xm4Q}{HYhEbsj68owFzhaGp4F!e#bM`ikU}i zfoHJc=a`$Bb+nk?Kw1z_hCWJb>07BJGhaN~XsG^-r>?E1ML5)7`F%jVQ60WNEh~sQ zHHp-d%g`2ynJs!VUhx8N4pYy~Jla3t?LF|=UXA>oIkaWO05OMtvyO=f2HQ zRm;e@#5A>(crB-@4I=Y7ra9OH57-ZH;?R4VOjqou5^Xcpir=EdoE|-&ypzJbs<$(i zGNsX45E}4P^Hjn-Qy;t%V61CuG!b}o5fFmSk$pon0l0)8hz^kTZA!nP0J zXEnVh^C(8#PEM!R3s1xwqYjsYmVF~%-uGuI4qDt_2#{?0MpdVDu#j&P8ce8P2Wf zjVIrTi=(raMh6SzAt+->k5}RBbK&gcR->t)kp3=y(ma zT9KgRqbotFI>KV^gm%t73eD%Z1f4ne8b9QFhNoMq&bwhLF5luhFg@y17=?J%7aF;l zrk;iSL)=p;O?}JpI?km&73-gws(uw)F^Q?_Sy=D%9Ksv3r;W59c*`)_GEKF0G-8VC z8mR}<(zIo2nzn~TwUPG7sj7!v*-`KGG2PJyet@|n`5V(z8>~Bs720%#2&Oyw*p`Dg z?fiRe6MgUqcmzBGfA$FUwFa$E(p&F0l(v>mDh-s{OE0%P(Q&k1}9%}r2;}wmo z8W%QBX?(r)y4IfZQ0tdlm$yFFT5fzP_ru&bayRDA&#lbO&rQiK?3vp0V)u`_%RTpw znL6gi&hnT`$GqHmUgxSY3&#w09^Q3K=V@Ixjj41!HRh|G=Xbp}=CRJ>%emas4G%Qj z)^K^ls)hv((;Au^ep&x${a5R6s6Vg%wE6|~j(@iP*}8}59sjHAHr1V4SFP)-%ho-e zy(fE9_TudF?1JpnY zPuES|3%gf!-`jn0_XWWq|Nnn6F2oTqQA5ZE_|s_1gv)|!DFzi2z`v%0D=4;MMtR0x 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
0`Y~@VBf&z`;Jpl_cf?|E@drH9ZTjpRVjwxIr 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�Pp4+I( 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 _}a)Td<(Sq0~j$4mvVPt!Od1lP%RbLfhh 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

9Cq@G9s0D6{y?ZR#P%pBv=Q@lWbv{F5oZ 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 literal 0 HcmV?d00001 diff --git a/wpf.guide.md b/wpf.guide.md new file mode 100644 index 0000000..3ca4770 --- /dev/null +++ b/wpf.guide.md @@ -0,0 +1,209 @@ +# WPF Usage Guide + +## Table of Contents + +- [Introduction](#introduction) +- [Prerequisites](#prerequisites) +- [Setting Up the Environment](#setting-up-the-environment) +- [Creating the WPF Application](#creating-the-wpf-application) + - [XAML Layout](#xaml-layout) + - [PowerShell Code-Behind Example](#powershell-code-behind-example) +- [Binding Data to the DataGrid](#binding-data-to-the-datagrid) + - [Creating the SqlQueryDataSet Instance](#creating-the-sqlquerydataset-instance) + - [Executing the Query](#executing-the-query) + - [Binding the DataTable to the DataGrid](#binding-the-datatable-to-the-datagrid) +- [Handling CRUD Operations](#handling-crud-operations) + - [Adding New Rows](#adding-new-rows) + - [Updating Existing Rows](#updating-existing-rows) + - [Deleting Rows](#deleting-rows) + - [Saving Changes](#saving-changes) +- [Advanced Topics](#advanced-topics) + - [Handling Complex Queries](#handling-complex-queries) + - [Using Multiple DataGrids](#using-multiple-datagrids) + - [Customizing DataGrid Columns](#customizing-datagrid-columns) +- [Troubleshooting](#troubleshooting) +- [Conclusion](#conclusion) + +## Introduction + +This guide provides detailed instructions on how to use the `SqlQueryClass` module to bind the `SqlQueryTable` class result as a `DataTable` to a WPF `DataGrid` component. This allows for seamless integration of SQL query results into a WPF application, enabling data manipulation and display. + +## Prerequisites + +Before you begin, ensure you have the following: + +- Visual Studio or Visual Studio Code installed +- Basic knowledge of WPF and XAML +- SQL Server or SQL Express installed +- The `SqlQueryClass` module installed +- The example code below uses tests configuration and sample SQL Express database from [GitHub `SqlQueryClass` repository](https://github.com/BrooksV/SqlQueryClass) +- - Clone the Repository to C:\Git folder to maintain compatibility with the sample and test data + +## Setting Up the Environment + +1. Install the `SqlQueryClass` module if you haven't already: + + ```powershell + Install-Module -Name SqlQueryClass -Repository PSGallery -Scope CurrentUser + ``` + + + +2. Create a new WPF project in Visual Studio or Visual Studio Code. + +## Creating the WPF Application + +### XAML Layout + +Define the layout of your WPF application in the `MainWindow.xaml` file. Add a `DataGrid` component to display the data. + +The [PowerShell Code-Behind Example](#powershell-code-behind-example) uses the XAML in-line to avoid having to read from disk. + +```xml + + + + + + +### PowerShell Code-Behind Example + +Code-Behind is a PowerShell example script `WPF_SqlQueryClassUsageExample.ps1` to demonstrate the usage of the SqlQueryClass module in a WPF application and how to bind data to the `DataGrid`. + +```powershell +Add-Type -AssemblyName PresentationFramework + +# Define variable `$syncHash` for global use to store synchronized data and provide access to object data. +$syncHash = [System.Collections.Hashtable]::Synchronized((New-Object System.Collections.Hashtable)) +$syncHash.Add('UI', [PSCustomObject]@{ + SqlResults = $null +}) + +# Database Configuration +# Using sample database configuration data from tests `.\tests\TestDatabase1.parameters.psd1` and the SQL Express test database `.\tests\TestDatabase1.mdf`. + +$SqlServer = '(localdb)\MSSQLLocalDB' +$Database = 'TestDatabase1' +$ConnectionString = "Data Source=$SqlServer;AttachDbFilename=C:\Git\SqlQueryClass\tests\TestDatabase1.mdf;Integrated Security=True" + +# Use the `New-SqlQueryDataSet` function to create and initialize the `SqlQueryDataSet` instance. +$syncHash.UI.SqlResults = New-SqlQueryDataSet -SQLServer $SqlServer -Database $Database -ConnectionString $ConnectionString + +[xml]$xaml = @" + + + + + + +## Binding Data to the DataGrid + +### Creating the SqlQueryDataSet Instance + +Create an instance of the `SqlQueryDataSet` class and configure the necessary properties such as `SQLServer`, `Database`, or `ConnectionString`. + +```powershell +$syncHash.UI.SqlResults = New-SqlQueryDataSet -SQLServer $SqlServer -Database $Database +$syncHash.UI.SqlResults = New-SqlQueryDataSet -SQLServer -ConnectionString $ConnectionString +``` + +### Executing the Query + +Use the `ExecuteQuery` method to execute the SQL query and retrieve the results. + +### Binding the DataTable to the DataGrid + +Bind the `DataTable` result to the `DataGrid` by setting the `ItemsSource` property to the `DefaultView` of the `DataTable`. + +## Handling CRUD Operations + +### Adding New Rows + +To add new rows to the `DataGrid`, modify the `DataTable` and call the `SaveChanges` method on the `SqlQueryDataSet` instance. + +### Updating Existing Rows + +To update existing rows, modify the `DataTable` and call the `SaveChanges` method. + +### Deleting Rows + +To delete rows, remove them from the `DataTable` and call the `SaveChanges` method. + +### Saving Changes + +Call the `SaveChanges` method on the `SqlQueryDataSet` instance to persist changes to the database. + +## Advanced Topics + +### Handling Complex Queries + +Learn how to handle complex queries and multiple result sets. + +### Using Multiple DataGrids + +Bind multiple `DataGrids` to different `DataTables` within the same `SqlQueryDataSet` instance. + +### Customizing DataGrid Columns + +Customize the columns of the `DataGrid` to display specific data and apply formatting. + +## Troubleshooting + +Common issues and solutions when working with the `SqlQueryClass` module and WPF `DataGrid`. + +## Conclusion + +By following this guide, you can effectively bind SQL query results to a WPF `DataGrid` using the `SqlQueryClass` module. This enables seamless data manipulation and display within your WPF applications. + + From 4ad5e23f045902c6161f68b7d0fd46d14a1f45f4 Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sun, 9 Feb 2025 19:02:36 -0500 Subject: [PATCH 19/20] Updated WPF Code-Behind Example --- tests/TestDatabase1.mdf | Bin 3342336 -> 3342336 bytes tests/TestDatabase1_log.ldf | Bin 786432 -> 786432 bytes wpf.guide.md | 43 ++++++++++++++++++++++-------------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/tests/TestDatabase1.mdf b/tests/TestDatabase1.mdf index 0c16924d9a13ec21d03d332479e62e9ab4d393e2..6a9ff9ffe0e5d234b16f09c7e4a156e5e1572e95 100644 GIT binary patch delta 263 zcmXxaISztg6h&bkjyMk}&hX=`IQDGC!j;gu01G>7TN4v&V(Su&2|Mvnc$2TXCkWmW z#2(@~rmtz5;J@qrb32DG_jz>WAmU#_C6*CaIx?q733McoL<(udUls;($fJNFN+_d( xDr%_1L<3D&XrYY`y6B;g0ca52OPV@xo`409~7gohQ@*kFs@Gg5o|`vZF;VH*Gd delta 263 zcmXxaISztg6h&d4GtL8wGyFI!4%o083s*wt0xayTU4RKSv2_DBChWvR;Z45g<^;i8 zg2Yo?+we6_6a07gK96hka>BDMClUV^DKYh=N+EZNl^}&QGRPwN^C&<^5havSK@~OB x(LfU|7-*vd6J7Ms#{ff&Fop#i3JxZiVum>uSYm}WHgK`U4tpHng|RwX-yid^V1)nx diff --git a/tests/TestDatabase1_log.ldf b/tests/TestDatabase1_log.ldf index 0df18bffd493679c8779b7aa98fd01c9571b1e9e..689a8fd671f2879330db9d0795dff2a33a448b76 100644 GIT binary patch delta 735 zcmZo@FlcBnm>|b=P++2h49hOL*1E}s0ty=w=CU%{P8Q%1=d@*DU|<4b_RR)7AF&CZ z;@W(T>n-bM0|ilLruAIS|K!{M$uj~m6A&|R|0mDF6f!M?MS#Z&XbK|`=j|3Wo?N(1 zc)ETElOQAebVolHamiVG%^B-AF);iFDnJJ8(+izg!Z{&&nHbooUj(XVH3uqT-2T>y zMVXPu8pH zI1CR084e0;kl_*U_IrVYDE|?o`1C#jCO%fMNz)e!FiAVHfh_?>36yqWa02Q{09ytM z8BlaVz%+)JRhHmzg^4gQ@G-Ni1LN3e`-?ml4MrY2pbW^${qNWUKvquXt>B(+6~-dR zXhmJy3P85mLv5RTLeU*$8z@RTzz&C{GoSzv%w%{4bvVf15IMf-jJKG?CmSfZO`g!A oF)@In{Y4QA5VHa?+x8bl>=KD>57^rtaI`((Y;bm|02;BC@c;k- delta 209 zcmZo@FlcBnm>|b=S!|+$49h+Cr^%BYLlrhA%w=UXoGid2&S}WNz`z8=teXvZcCc*z zCH9te@_ZK6%`XIm*nos3BNla&S+-BGVM%3#kdp&Ky_pUQH2;%t|0mA~#7scUy#1d% u3sXp214~;2Yg+@`vIh19WKG1dCohCopy - 2. Create a new WPF project in Visual Studio or Visual Studio Code. ## Creating the WPF Application @@ -74,13 +72,38 @@ The [PowerShell Code-Behind Example](#powershell-code-behind-example) uses the X ``` - - ### PowerShell Code-Behind Example Code-Behind is a PowerShell example script `WPF_SqlQueryClassUsageExample.ps1` to demonstrate the usage of the SqlQueryClass module in a WPF application and how to bind data to the `DataGrid`. ```powershell + +# Define the module name +$moduleName = "SqlQueryClass" + +# Check if the module is already installed +$module = Get-Module -ListAvailable -Name $moduleName +if ($null -eq $module) { + # Module is not installed, install it + Write-Output "Module '$moduleName' is not installed. Installing..." + Install-Module -Name $moduleName -Repository PSGallery -Scope CurrentUser + + # Import the newly installed module + Write-Output "Importing module '$moduleName'..." + Import-Module -Name $moduleName +} else { + # Module is already installed, import it + Write-Output "Module '$moduleName' is already installed. Importing..." + Import-Module -Name $moduleName +} +# Verify the module is imported +if (Get-Module -Name $moduleName) { + Write-Output "Module '$moduleName' has been successfully imported." +} else { + Write-Output "Failed to import module '$moduleName'." +} + +# Add required .Net Assemblies required for WPF Add-Type -AssemblyName PresentationFramework # Define variable `$syncHash` for global use to store synchronized data and provide access to object data. @@ -137,8 +160,6 @@ $quitButton.Add_Click({ $window.ShowDialog() | Out-Null ``` - - ## Binding Data to the DataGrid ### Creating the SqlQueryDataSet Instance @@ -197,13 +218,3 @@ Common issues and solutions when working with the `SqlQueryClass` module and WPF ## Conclusion By following this guide, you can effectively bind SQL query results to a WPF `DataGrid` using the `SqlQueryClass` module. This enables seamless data manipulation and display within your WPF applications. - - From 701a02e6467fea46ed01bcbb266f9216cce9a28c Mon Sep 17 00:00:00 2001 From: Brooks Vaughn <18422308+BrooksV@users.noreply.github.com> Date: Sun, 9 Feb 2025 21:00:41 -0500 Subject: [PATCH 20/20] Improved documentation and final cleanup before merging and publishing --- .gitignore | 2 +- .vscode/settings.json | 5 + Build-Readme.ps1 | 454 ----------------------------------- README.md | 113 +++++++++ git_cheatsheet.md | 466 ------------------------------------ tests/TestDatabase1.mdf | Bin 3342336 -> 3342336 bytes tests/TestDatabase1_log.ldf | Bin 786432 -> 786432 bytes wpf.guide.md | 57 ++++- 8 files changed, 169 insertions(+), 928 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 Build-Readme.ps1 delete mode 100644 git_cheatsheet.md diff --git a/.gitignore b/.gitignore index 1075ba7..9e57944 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,7 @@ reflog.md # Ignore personal configuration files *.ps1rc -.vscode/ +!.vscode/ # Ignore IDE-specific files .vs/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cd4f5d4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "cheatsheet" + ] +} \ No newline at end of file diff --git a/Build-Readme.ps1 b/Build-Readme.ps1 deleted file mode 100644 index 1f6bee1..0000000 --- a/Build-Readme.ps1 +++ /dev/null @@ -1,454 +0,0 @@ -<# -. "C:\Git\SqlQueryClass\Build-Readme.ps1" -- Generates a README.md file but saves it as .\archive\ModuleDoc.md to prevent overwriting - -#> - - -<# #> -# $TestQuery.ExecuteQuery('DBTables', $Query) -# enum ResultType { DataTable; DataRows; DataAdapter; DataSet; NonQuery; } - -$projectData = Get-MTProjectInfo - -Remove-Module -Name SqlQueryClass -Force -Verbose -# Import-Module -Name SqlQueryClass -Force -Verbose -Import-Module C:\Git\SqlQueryClass\dist\SqlQueryClass\SqlQueryClass.psd1 -Verbose -Force - -# Configure Database settings for connection -$SqlServer = '(localdb)\MSSQLLocalDB' -$DatabaseName = 'C:\Git\SqlQueryClass\tests\TestDatabase1.mdf' -$ConnectionString = "Data Source={0};AttachDbFilename={1};Integrated Security=True" -f $SqlServer, $DatabaseName -$Query = "SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME;" - -$TestQuery = New-SqlQueryDataSet -SQLServer $SqlServer -Database $DatabaseName -ConnectionString $ConnectionString -DisplayResults $false -[void]$TestQuery.AddQuery('DBTables', $Query) - -Function Get-ClassMemberData { - [CmdletBinding()] - [OutputType([PSCustomObject])] - Param ( - [Parameter( - Mandatory = $true, - Position = 0, - ValueFromPipeline = $true - )] - [PSObject]$InputObject, - [String[]]$excludeMembers - ) - Begin { - If ($InputObject -is [System.Array]) { - Throw "-InputObject cannot be an Array or Collection" - } - If (-not $excludeMembers) { - $excludeMembers = @' -GetType -ToString -Equals -GetHashCode -'@ -split [System.Environment]::NewLine - } - $retResult = [PSCustomObject]@{ - Properties = [System.Collections.Generic.List[PSCustomObject]]::new() - Methods = [System.Collections.Generic.List[PSCustomObject]]::new() - } - } - - Process { - $members = $InputObject.PSObject.Members.GetEnumerator() | Select-Object -Property MemberType, Name, OverloadDefinitions, TypeNameOfValue - ForEach ($member in $members) { - If ($member.Name -in $excludeMembers -or $member.Name.StartsWith('get_') -or $member.Name.StartsWith('set_')) { - Continue - } - If ($member.MemberType -eq 'Method') { - # Expand Each Overload - ForEach ($overLoad in $member.OverloadDefinitions) { - [void]$retResult.Methods.Add([PSCustomObject]@{ - Name = $member.Name - Syntax = $overLoad - }) - } - } ElseIf ($member.MemberType -in @('Property','NoteProperty')) { - [void]$retResult.Properties.Add([PSCustomObject]@{ - Name = $member.Name - Type = ($member.TypeNameOfValue -replace ', PowerShell Class Assembly, Version=1.0.0.1, Culture=neutral, PublicKeyToken=null','') - }) - } Else { - Write-Warning "InputObject Has member of unexpected MemberType ($($member.MemberType)): $($member | Out-String)" - } - } - } - - End { - $retResult - } -} - - -# Initialize the Class Method and Property Data to document -$ClassData = $TestQuery | Get-ClassMemberData -If ([String]::IsNullOrEmpty($ClassData)) { - Throw "Get-ClassMemberData() Failed to retrieve Class Members for `$TestQuery" -} -$ChildClassData = $TestQuery.Tables[0] | Get-ClassMemberData -If ([String]::IsNullOrEmpty($ChildClassData)) { - Throw "Get-ClassMemberData() Failed to retrieve Class Members for `$TestQuery.Tables[0]" -} - -$psCodeStart = '```powershell' -$psCodeEnd = '```' -$eol = [System.Environment]::NewLine - -# ConvertTo-Markdown creates MarkDown Table from PS Object -. "C:\CMD\PowerShell\MarkDown\ConvertTo-Markdown.ps1" -#> - -#======================================================== -# Readme MarkDown Generation Starts Here !!! -#======================================================== - -# Reset the Class Report as MarkDown file -$fsoClassDoc = [System.IO.FileInfo]("C:\Git\SqlQueryClass\archive\ModuleDoc.md") -If ($fsoClassDoc.Exists) { $fsoClassDoc.Delete() } - -# Create String Builder for Assembling the MarkDown output -$sb = [System.Text.StringBuilder]::new() - -# Configure Project and User specific settings used to keep the README.md file generator as generic as possible -$projectUri = $projectData.Manifest.ProjectUri -$githubAccount = $projectUri.Split('/') -$ownerId = $githubAccount[-2] -$ProjectName = $githubAccount[-1] # $projectData.ProjectName -$githubAccount = $githubAccount[0..($githubAccount.Count -2)] -join '/' -$ProjectRoot = $projectData.ProjectRoot - -[void]$sb.AppendLine("# ``$ProjectName``" + $eol) -[void]$sb.AppendLine($projectData.Description + $eol) - -# Badges -# To use a different label -# [BadgeIOCount]: https://img.shields.io/powershellgallery/dt/SqlQueryClass?label=SqlQueryClass%40PowerShell%20Gallery -# ![Coverage](https://img.shields.io/codecov/c/github/$ownerId/$ProjectName) - -[void]$sb.AppendLine("## ``$($projectData.ProjectName)`` Module and Status Details" + $eol) -[void]$sb.Append(((Get-Module -Name "$($projectData.ProjectName)") | Select-Object -Property Name, Version, @{L='PS Compatibility'; E={$_.PowerShellHostVersion}}, @{L='Project Uri (GitHub)';E={('[{0}]({0})' -f $_.PrivateData.PSData.ProjectUri)}} | ConvertTo-Markdown | Out-String) +$eol) - -# Module Documentation Links / Uri -$docLinks = ((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData).GetEnumerator().Where({$_.Name -like '*Uri'}) | - Select-Object -Property @{L='DocLink'; E={$_.Name}}, @{L='Uri'; E={$_.Value}} -# How to add additional Links -# $docLinks += [PSCustomObject]@{ -# DocLink='Test' -# Uri='https://www.brooksvaughn.net' -# } -<# Table of Links # > -((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData).GetEnumerator().Where({$_.Name -like '*Uri'}) | - Select-Object -Property @{L='Link'; E={$_.Name}}, @{L='Uri'; E={$_.Value}} | - ConvertTo-Markdown | Out-File -FilePath $fsoClassDoc.FullName -Encoding utf8 -Width 999 -Append -#> - -[void]$sb.AppendLine(@" -[PSGalleryLink]: https://www.powershellgallery.com/packages/$ProjectName/ -[BadgeIOCount]: https://img.shields.io/powershellgallery/dt/$ProjectName.svg?label=downoads%20$ProjectName%40PSGallery -[WorkFlowStatus]: https://img.shields.io/github/actions/workflow/status/$ownerId/$ProjectName/tests.yml?label=tests.yml%20build - -[![maintainer](https://img.shields.io/badge/maintainer-$ownerId-orange)]($githubAccount) -[![License](https://img.shields.io/github/license/$ownerId/$ProjectName)]($projectUri/blob/main/LICENSE) -[![contributors](https://img.shields.io/github/contributors/$ownerId/$ProjectName.svg)]($projectUri/graphs/contributors/) -[![last-commit](https://img.shields.io/github/last-commit/$ownerId/$ProjectName.svg)]($projectUri/commits/) -[![issues](https://img.shields.io/github/issues/$ownerId/$ProjectName.svg)]($projectUri/issues/) -[![issues-closed](https://img.shields.io/github/issues-closed/$ownerId/$ProjectName.svg)]($projectUri/issues?q=is%3Aissue+is%3Aclosed) - -[![GitHub stars](https://img.shields.io/github/stars/$ownerId/$ProjectName.svg)]($projectUri/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/$ownerId/$ProjectName.svg)]($projectUri/network/members) -[![GitHub pull requests](https://img.shields.io/github/issues-pr/$ownerId/$ProjectName.svg)]($projectUri/pulls) - -### Build and Release Statistics - -[![$ProjectName@PowerShell Gallery][BadgeIOCount]][PSGalleryLink] -![WorkFlow Status][WorkFlowStatus] -![Build Status](https://img.shields.io/github/actions/workflow/status/$ownerId/$ProjectName/ci.yml?label=ci.yml%20build) -![Version](https://img.shields.io/github/v/release/$ownerId/$ProjectName.svg?label=version) - -![GitHub All Releases](https://img.shields.io/github/downloads/$ownerId/$ProjectName/total.svg?label=release%20dl%20all%40GitHub) -![GitHub release (latest by date)](https://img.shields.io/github/downloads/$ownerId/$ProjectName/latest/total.svg?label=release%20dl%20by%20date%40GitHub) -![Downloads](https://img.shields.io/github/downloads/$ownerId/$ProjectName/total.svg?label=total%20release%20dl%40GitHub) -"@ + $eol) - -[void]$sb.AppendLine("### Module Links to License and GitHub Project" + $eol) -[void]$sb.AppendLine(($docLinks.ForEach({"`n- [{0}]({1})" -f $_.DocLink, $_.Uri}).Trim() | Out-String)) - -# Module Tags -# (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData.Tags| Select-Object -Property @{L='Tags'; E={$_}} | ConvertTo-Markdown -[void]$sb.AppendLine("### Module Tags" + $eol) -[void]$sb.AppendLine("[$((Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData.Tags -join '], [')]" + $eol) - -# Module Installation -[void]$sb.AppendLine("## Installation" + $eol) -[void]$sb.AppendLine(@" -$psCodeStart -Install-Module -Name $($ProjectName) -Repository PSGallery -Scope CurrentUser -$psCodeEnd - -To load a local build of the module, use `Import-Module` as follows: - -$psCodeStart -Import-Module -Name "$($projectData.ManifestFilePSD1)" -Force -verbose -$psCodeEnd - -### Requirements - -- Tested with PowerShell 5.1 and 7.5x -- No known dependencies for usage -- VS Code and clone [Brooks Vaughn's $ProjectName]($projectUri) Repository -- Module build process uses [Manjunath Beli's](https://github.com/belibug) [ModuleTools](https://github.com/belibug) module. - -### ToDo - -- [ ] Seek peer review and comments -- [ ] Integrate feedback -- [ ] Improve Documentation -- [ ] Complete Build-Readme.ps1 script that generates the README.md file - -## How Build ``$ProjectName`` Module - -### Setup - -- Uses SQL Express but should work with other SQL Databases with proper connection strings and credentials -- Requires VS Code -- For Contributors, Fork the [$ProjectName]($projectUri) repository -- Clone the repository or fork to local pc. I like using c:\git as my local repository folder. Subfolder `$ProjectName` will be created with the GiHib repository contents -- Install [Manjunath Beli's ModuleTools](https://github.com/belibug/ModuleTools) module as the module build process uses ModuleTools -- - Find-Module -Name ModuleTools | Install-Module -Scope CurrentUser -Verbose -- Note that a sample SQL Express database file (.\tests\TestDatabase1.mdf) is included for pester tests. The database configuration is set in .\tests\TestDatabase1.parameters.psd1 - -#### Source Files used in the Module - -- Public functions that are exported, are separate files in the .\src\public folder. -- Private functions that are local to the Module, are separate files in the .\src\private folder. -- - Class Definitions and Enums are not accessible outside of the Module and cannot be accessed directly like Public Functions are. This is a PowerShell limitation. -- - - Classes [SqlQueryDataSet] and [SqlQueryDataSetParms] and enum ResultType used in the Module are defined in file .\src\private\$ProjectName.ps1 file. The classes have properties and methods used to maintain a Database connections and result sets making it useful WPF Data binding. -- Resources are files and folders in the .\src\resources folder that needs to be included with the Manifest and Module - -#### ``$ProjectName`` Module Build Process - -- Create a local branch for your changes -- - Use descriptive name that reflects the type of changes for branch for example features/database-table-access -- Update the build version using Update-MTModuleVersion (Find-Module -Name ModuleTools) -- Commit your changes to the branch -- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) -- Build the Module output using Invoke-MTBuild -Verbose (Find-Module -Name ModuleTools) -- - Outputs to the .\dist\$ProjectName folder -- - Combines the file contents of the files in Public and Private folder into .\dist\$ProjectName\$ProjectName.psd1 and exports the Public Functions -- - Generates the .\dist\$ProjectName\$ProjectName.psd1 Manifest file from the settings in .\project.json -- - Resources (.\src\resources) folder content is copied to .\dist\$ProjectName folder -- Run the Pester Teats using Invoke-MTTest (Find-Module -Name ModuleTools) -- Make corrections, repeat the build process -- For Contributors -- - Create an Issue if one does not exist that addresses the proposed changes -- - Upstream your branch -- - Create a Pull request - -#### Publishing ``$ProjectName`` Module to GitHub - -Stage and Commit Your Changes - -$psCodeStart -git add . -git commit -m "Implemented database and table access functions" -$psCodeEnd - -Update remote repository with branch changes - -$psCodeStart -# List status of remote repository -git branch -r -# Create Branch on remote repository if needed -# git push --set-upstream origin features/database-table-access -# Push branch changes to remote branch in repository -git push origin features/database-table-access -$psCodeEnd - -Create a Pull Request on remote repository - -- Go to [$ProjectName GitHub repository]($projectUri) -- Click on "Compare & pull request" for your branch -- Provide a meaningful title and description for the PR -- Select the base branch (main) to merge into -- Click "Create pull request" - -Code Review and Feedback - -- Engage with Repository Owner or collaborators to review the PR -- Address any feedback or requested changes by making additional commits to your branch and pushing them to the remote branch -- Ensure the PR passes any automated tests or checks - -Merge the Pull Request - -- Once the PR is approved and all checks pass, you can merge it into the main branch -- You can either use the "Merge pull request" button on GitHub or merge it locally and push the changes - -Cleanup - -- After merging, you can delete the feature branch from the remote repository to keep it clean - -$psCodeStart -git push origin --delete features/database-table-access -$psCodeEnd - -- Optionally, delete the local branch - -$psCodeStart -git branch -d features/database-table-access -$psCodeEnd - -These steps will ensure your changes are integrated into the main branch and your repository remains organized. - -#### Publishing ``$ProjectName`` Module to PowerShell Gallery - -$psCodeStart -`$data = Get-MTProjectInfo -`$ApiKey = "your-api-key-here" -Publish-Module -Path `$data.OutputModuleDir -NuGetApiKey `$ApiKey -Repository PSGallery -$psCodeEnd - -### New-SqlQueryDataSet Helper Function to Create Class Instance - -The main cmdlet provided by this module is New-SqlQueryDataSet, which returns an object instance of [SqlQueryDataSet] class. Note that all the parameters are optional. - -$psCodeStart -`$testQuery = New-SqlQueryDataSet [[-SQLServer] ] [[-Database] ] [[-ConnectionString] ] [[-Query] ] [[-TableName] ] [[-DisplayResults] ] [] -$psCodeEnd -"@ + $eol) - -# Module Exported Functions -# (Get-Module -Name "$($projectData.ProjectName)") | FL -# (Get-Module -Name "$($projectData.ProjectName)").ExportedFunctions.GetEnumerator().Key | Select-Object -Property Key -# (Get-Module -Name "$($projectData.ProjectName)").ExportedFunctions.Keys -# (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value)}) | Select-Object -Property Name, Value -# (Get-Module -Name "$($projectData.ProjectName)").PSObject.Properties.Where({-not [string]::IsNullOrEmpty($_.Value) -and $_.Name -eq 'PrivateData'}).Value.PSData | FT -AutoSize -Force -Wrap -[void]$sb.AppendLine("## ``$($projectData.ProjectName)`` Module Exported Functions" + $eol) -[void]$sb.AppendLine($psCodeStart) -[void]$sb.AppendLine("Get-Command -Module `"$($projectData.ProjectName)`" -Syntax"+ $eol) -# [void]$sb.AppendLine((((Get-Command -Module "$($projectData.ProjectName)" -Syntax) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_)}).ForEach({'- {0}' -f $_}) | Out-String).Replace('[]','')) -[void]$sb.AppendLine((((Get-Command -Module "$($projectData.ProjectName)" -Syntax) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_)}).ForEach({'- {0}' -f $_}) | Out-String).TrimEnd()) -[void]$sb.AppendLine($psCodeEnd + $eol) - -<# -Common Help Metadata Fields Descriptions - -SYNOPSIS: A brief summary of what the cmdlet does. -DESCRIPTION: A detailed description of the cmdlet’s functionality. -PARAMETER: Descriptions for each parameter, detailing its purpose. -EXAMPLE: Examples showing how to use the cmdlet. -INPUTS: Types of objects that can be piped to the cmdlet (if any). -OUTPUTS: Types of objects that the cmdlet emits. -NOTES: Any additional notes, such as author information. -LINK: Links to related documentation or resources. -#> -$Lines = ForEach($foo in (Get-Command -Module "$($projectData.ProjectName)").Name) { - If ($foo -ne 'New-SqlQueryDataSet') { - # Continue - } - $header = [string]::Empty - # Get-Command -Name $foo -Syntax - "### $foo" + $eol - $psCodeStart - ForEach ($line in ((Get-Help -Name $foo | Out-String) -split [System.Environment]::NewLine).Where({-not [String]::IsNullOrWhiteSpace($_)})) { - Switch -Regex ($line) { - '^\s{4}None$' {$header = [string]::Empty; break} - # Common Help Metadata Fields - '^NAME$' {$header = $line; break} - '^SYNTAX$' {$header = $line; break} - '^ALIASES$' {$header = $line; break} - '^REMARKS$' {$header = $line; break} - '^DESCRIPTION$' {$header = $line; break} - '^RELATED LINKS$' {$header = $line; break} - '^REMARKS$' {$header = $line; break} - '^SYNOPSIS$' {$header = $line; break} - '^PARAMETERS$' {$header = $line; break} - '^INPUTS$' {$header = $line; break} - '^OUTPUTS$' {$header = $line; break} - '^EXAMPLES$' {$header = $line; break} - '^NOTES$' {$header = $line; break} - '^RELATED LINKS$' {$header = $line; break} - # Module / Manifest Help Metadata Fields - '^TOPIC$' {$header = $line; break} - '^SHORT DESCRIPTION$' {$header = $line; break} - '^LONG DESCRIPTION$' {$header = $line; break} - '^AUTHOR$' {$header = $line; break} - '^COMPANYNAME$' {$header = $line; break} - '^COPYRIGHT$' {$header = $line; break} - '^TAGS$' {$header = $line; break} - '^FUNCTIONSTOEXPORT$' {$header = $line; break} - '^CMDLETSTOEXPORT$' {$header = $line; break} - '^REQUIREDMODULES$' {$header = $line; break} - '^REQUIREDASSEMBLIES$' {$header = $line; break} - '^VERSION$' {$header = $line; break} - '^HELPURI$' {$header = $line; break} - '^MODULEVERSION$' {$header = $line; break} - '^GUID$' {$header = $line; break} - '^VARIABLESTOEXPORT$' {$header = $line; break} - '^ALIASESTOEXPORT$' {$header = $line; break} - '^PROJECTURI$' {$header = $line; break} - '^LICENSEURI$' {$header = $line; break} - '^RELEASENOTES$' {$header = $line; break} - Default { - If (-not [string]::IsNullOrWhiteSpace($header)) { - $header - $header = [string]::Empty - } - $line - } - } - } - $psCodeEnd + $eol -} -[void]$sb.AppendLine(($Lines | Out-String).TrimEnd() + $eol) - -# Class Details -[void]$sb.AppendLine("### [$($TestQuery.GetType().Name)] Parent Class Details" + $eol) -[void]$sb.AppendLine("Instances of [$($TestQuery.GetType().Name)] Parent Class are created using the New-SqlQueryDataSet() helper CmdLet. The object returned id of type [$($TestQuery.GetType().Name)]. The properties and methods are used to manage and configure database information and connections, manages creation of the Child Class, executes queries, and saves the results. Instances of Child Classes are collected in the Tables property of the Parent Class. Tables is a collection of [$($TestQuery.Tables[0].GetType().Name)] objects. One is created for every unique query that was added or executed." + $eol) -[void]$sb.AppendLine("Each instance of the [$($TestQuery.Tables[0].GetType().Name)] Class, holds the Query configuration and execution results." + $eol) -[void]$sb.AppendLine("For technical information, See" + $eol) -[void]$sb.AppendLine("- Get-Help New-SqlQueryDataSet -Full") -[void]$sb.AppendLine("- New-SqlQueryDataSets.tests.ps1 in the Tests ($ProjectRoot\tests\) folder has full usage examples used to validate usage" + $eol) - -# Parent Class Properties -[void]$sb.AppendLine("### Class [$($TestQuery.GetType().Name)] Properties" + $eol) -If ([string]::IsNullOrEmpty($ClassData.Properties)) { - [void]$sb.AppendLine("Class Has No Properties") -} Else { - [void]$sb.AppendLine(($ClassData.properties | Select-Object -Property Name, @{L='Type'; E={"[$($_.Type)]"}} | ConvertTo-Markdown | Out-String)) -} -# Parent Class Methods -[void]$sb.AppendLine("### Class [$($TestQuery.GetType().Name)] Methods" + $eol) -If ([string]::IsNullOrEmpty($ClassData.Methods)) { - [void]$sb.AppendLine("Class Has No Methods") -} Else { - [void]$sb.AppendLine(($ClassData.Methods | Select-Object -Property Name, Syntax | ConvertTo-Markdown | Out-String)) -} - -# Child Class Properties -[void]$sb.AppendLine("### Child Class [$($TestQuery.Tables[0].GetType().Name)] Properties" + $eol) -If ([string]::IsNullOrEmpty($ChildClassData.Properties)) { - [void]$sb.AppendLine("Class Has No Properties") -} Else { - [void]$sb.AppendLine(($ChildClassData.properties | Select-Object -Property Name, @{L='Type'; E={"[$($_.Type)]"}} | ConvertTo-Markdown | Out-String)) -} -# Child Class Methods -[void]$sb.AppendLine("### Child Class [$($TestQuery.Tables[0].GetType().Name)] Modules" + $eol) -If ([string]::IsNullOrEmpty($ChildClassData.Methods)) { - [void]$sb.AppendLine("Class Has No Methods") - } Else { - [void]$sb.AppendLine(($ChildClassData.Methods | Select-Object -Property Name, Syntax | ConvertTo-Markdown | Out-String)) - } - -# $sb.ToString() -$sb.ToString() | Out-File -FilePath $fsoClassDoc.FullName -Encoding utf8 -Width 999 -Append -Break -[void]$sb.AppendLine("" + $eol) -[void]$sb.AppendLine("" + $eol) -[void]$sb.AppendLine("" + $eol) -[void]$sb.AppendLine("" + $eol) -[void]$sb.AppendLine("" + $eol) -[void]$sb.AppendLine("" + $eol) diff --git a/README.md b/README.md index c2bfcee..fc4fff7 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,8 @@ This includes details on: ### ToDo +- [ ] Include database query checks to Pester Tests +- [ ] Add comment-based help sections to all CmdLets and Functions - [ ] Seek peer review and comments - [ ] Integrate feedback - [ ] Improve Documentation @@ -194,6 +196,117 @@ For additional technical information, see: - [New-SqlQueryDataSets.tests.ps1](.\tests\New-SqlQueryDataSets.tests.ps1) in the [.\tests](.\tests) folder has full usage examples used to validate usage - [Developer and Contributor Guide](contributor.guide.md) +## Folder Structure and Build Management + +The folder structure of the SqlQueryClass module is based on best practices for PowerShell module development and was initially created using [Manjunath Beli's](https://github.com/belibug) [ModuleTools](https://github.com/belibug) module. Check out his [Blog article](https://blog.belibug.com/post/ps-modulebuild) that explains the core concepts of ModuleTools. + +The the following ModuleTools CmdLets used in the build and maintenance process. They need to be executed from project root: + +- Get-MTProjectInfo -- returns hashatble of project configuration which can be used in pester tests or for general troubleshooting +- Update-MTModuleVersion -- Increments SqlQueryClass module version by modifying the values in `project.json` or you can manually edit the json file. +- Invoke-MTBuild -- Run `Invoke-MTBuild -Verbose` to build the module. The output will be saved in the `dist` folder, ready for distribution. +- Invoke-MTTest -- Executes pester configuration (*.text.ps1) files in the `tests` folder + +- To skip a test, add `-skip` in describe block of the Pester *.test.ps1 file to skip. + +### Folder and Files + +```powershell +.\SQLQUERYCLASS +| .gitignore +| api.guide.md +| CODE_OF_CONDUCT.md +| contributor.guide.md +| GitHub_Action_Docs.md +| LICENSE +| project.json +| README.md +| wpf.guide.md +| ++---.github +| \---workflows +| tests.yml +| ++---archive ++---dist +| \---SqlQueryClass +| about_SqlQueryClass.help.txt +| SqlQueryClass.psd1 +| SqlQueryClass.psm1 +| ++---src +| +---private +| | SqlQueryClass.ps1 +| | +| +---public +| | Dismount-Database.ps1 +| | Get-Database.ps1 +| | Get-DatabaseTable.ps1 +| | Invoke-DatabaseNonQuery.ps1 +| | Invoke-DatabaseQuery.ps1 +| | Mount-Database.ps1 +| | New-SqlQueryDataSet.ps1 +| | +| \---resources +| about_SqlQueryClass.help.txt +| +\---tests + Module.Tests.ps1 + New-SqlQueryDataSets.tests.ps1 + OutputFiles.Tests.ps1 + ScriptAnalyzer.Tests.ps1 + TestDatabase1.mdf + TestDatabase1.parameters.psd1 + TestDatabase1_log.ldf +``` + +All files and folders in the `src` folder, will be published Module. + +All other folder and files in the `.\SqlQueryClass` folder will resides in the [GitHub SqlQueryClass Repository](https://github.com/BrooksV/SqlQueryClass) except those excluded by inclusion in the `.\SqlQueryClass\.gitignore` file. + +### Project JSON File + +The `project.json` file contains all the important details about your module, is used during the module build process, and helps to generate the SqlQueryClass.psd1 manifest. + +### Root Level and Other Files + +- .gitignore -- List of file, folder, and wildcard specifications to ignore when publishing to GitHub repository +- CODE_OF_CONDUCT.md -- Standard GitHub code of conduct and standards +- GitHub_Action_Docs.md -- How to add GitHub Action WorkFlows to automate CI/CD (Continuous Integration/Continuous Deployment) +- LICENSE -- MIT License notice and copyright +- project.json -- ModuleTools project configuration file used to build the `SqlQueryClass` module +- README.md -- Documentation (this) file for the `SqlQueryClass` module +- .vscode\settings.json -- VS Code settings used during `SqlQueryClass` module development +- *.guide.md -- various guides such as api, contributor, wpf + +### archive Folder + +`.\SqlQueryClass\archive` is not used in this project. Its a temporary place / BitBucket to hold code snippets and files during development and is not part of the build. + +### Dist (build output) Folder + +Generated module is stored in `dist\SqlQueryClass` folder, you can easily import it or publish it to PowerShell Gallery or repository. + +### Src Folder + + - All functions in the `public` folder are exported during the module build. + - All functions in the `private` folder are accessible internally within the module but are not exposed outside the module. + - All files and folder contained in the `resources` folder will be published to the `dist\SqlQueryClass` folder. + +### Tests Folder + +If you want to run any `pester` tests, keep them in `tests` folder and named *.test.ps1. + +Run `Invoke-MTTest` to execute the tests. + +- .\tests\New-SqlQueryDataSets.tests.ps1 -- Full set of usage example Tests. Good Resource for usage examples +- .\tests\Module.Tests.ps1 -- General Module Control to verify the module imports correctly +- .\tests\OutputFiles.Tests.ps1 -- Module and Manifest testing to verify output files are readable +- .\tests\ScriptAnalyzer.Tests.ps1 -- Code Quality Checks to verify PowerShell syntax and best practices +- .\tests\TestDatabase1.parameters.psd1 -- PowerShell Data File of configuration settings used in New-SqlQueryDataSets.tests.ps1 +- .\tests\TestDatabase1.mdf -- Sample SQL Express Database File with samples data used in New-SqlQueryDataSets.tests.ps1 +- .\tests\TestDatabase1_log.ldf -- Created when using TestDatabase1.mdf + ## Join the Conversation We encourage you to participate in our [Discussions](https://github.com/BrooksV/SqlQueryClass/discussions) section! Whether you have questions, ideas, or just want to chat with other users, Discussions is the place to be. Your feedback and contributions are valuable to us! diff --git a/git_cheatsheet.md b/git_cheatsheet.md deleted file mode 100644 index fef3c2c..0000000 --- a/git_cheatsheet.md +++ /dev/null @@ -1,466 +0,0 @@ -# CheetSheet - -& "C:\Program Files (x86)\Info Keep\info keep.exe" - -Photography Co-worker [Kevin Hecht](mailto://kevin.a.hecht@pwc.com) - -## To Publish Module to PowerShell Gallery - -```powershell -Publish-Module -Path -NuGetApiKey -Repository PSGallery - -Publish-Module -Path "C:\Git\SqlQueryClass\dist\SqlQueryClass" -NuGetApiKey "" -Repository PSGallery - -Find-Module -Name SqlQueryClass | Install-Module -Scope CurrentUser -AcceptLicense - -Find-Module -Name SqlQueryClass | FL - -Name : SqlQueryClass -Version : 0.1.0 -Type : Module -Description : Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result object. -Author : Brooks Vaughn -CompanyName : BrooksV -Copyright : (c) Brooks Vaughn. All rights reserved. -PublishedDate : 2/6/2025 3:43:39 AM -InstalledDate : -UpdatedDate : -LicenseUri : https://github.com/BrooksV/SqlQueryClass/blob/main/LICENSE -ProjectUri : https://github.com/BrooksV/SqlQueryClass -IconUri : -Tags : {PowerShell, Database, SQL, SQLServer…} -Includes : {[RoleCapability, System.Object[]], [DscResource, System.Object[]], [Cmdlet, System.Object[]], [Workflow, System.Object[]]…} -PowerShellGetFormatVersion : -ReleaseNotes : -Dependencies : {} -RepositorySourceLocation : https://www.powershellgallery.com/api/v2 -Repository : PSGallery -PackageManagementProvider : NuGet -AdditionalMetadata : @{summary=Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result object.; - ItemType=Module; IsPrerelease=false; PackageManagementProvider=NuGet; NormalizedVersion=0.1.0; SourceName=PSGallery; tags=PowerShell Database SQL SQLServer SQLQuery DataAdapter DataSet DataTable - PSModule; description=Module that create an instance of a PowerShell class which is used to execute SQL Queries and manages output as DataTable, DataAdapter, DataSet, SqlReader, or NonQuery result - object.; Authors=Brooks Vaughn; versionDownloadCount=0; GUID=8375edbe-fb0f-4cb6-acb0-9964b45725c0; lastUpdated=2/6/2025 3:43:39 AM -05:00; requireLicenseAcceptance=False; downloadCount=0; - isLatestVersion=True; CompanyName=Unknown; Functions=New-SqlQueryDataSet; FileList=SqlQueryClass.nuspec|about_SqlQueryClass.help.txt|SqlQueryClass.psd1|SqlQueryClass.psm1; - PowerShellHostVersion=5.1; created=2/6/2025 3:43:39 AM -05:00; isAbsoluteLatestVersion=True; copyright=(c) Brooks Vaughn. All rights reserved.; packageSize=15464; developmentDependency=False; - updated=2025-02-06T03:43:39Z; published=2/6/2025 3:43:39 AM -05:00} -``` - -## Code Signing - -Get-ChildItem -Path Cert:\CurrentUser -Recurse | FL -Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert -Get-ChildItem -Path Cert:\LocalMachine -Recurse | FL - -## git config commands - -- ps.readinglist.md -- Quick Reference Reading list of helpful PowerShell sites, articles, and documents - -### Support for Long Paths - -git config --system core.longpaths true - -#### git remote urls - -git remote -v - -## User Config - -### To Set your username - -```powershell -git config --global user.name "FIRST_NAME LAST_NAME" -``` - -### To Set your email address - -```powershell -git config --global user.email "MY_NAME@example.com" - -git config --global user.name "Brooks Vaughn" -git config --global user.email "18422308+BrooksV@users.noreply.github.com" - -git config --worktree user.name "Brooks Vaughn" -git config --global user.email "18422308+BrooksV@users.noreply.github.com" -``` - -### Check configuration for your user - -$ cat $HOME/.gitconfig - -## Proxy Config - -### Get system value - -```powershell -git config --system --get https.proxy -git config --system --get http.proxy -``` - -### Get global value - -```powershell -git config --global --get https.proxy -git config --global --get http.proxy -``` - -### Unset system value - -```powershell -git config --system --unset https.proxy -git config --system --unset http.proxy -``` - -### Unset global value - -```powershell -git config --global --unset https.proxy -git config --global --unset http.proxy -``` - -## Proxy Config using Environment Variables - -Your proxy could also be set as an environment variable. Check if your environment has any of the env variables http_proxy or https_proxy set up and unset them. Examples of how to set up: - -### Linux - -```bash -export http_proxy=http://proxy:8080 -export https_proxy=https://proxy:8443 -``` - -### Windows - -```powershell -set http_proxy http://proxy:8080 -set https_proxy https://proxy:8443 -``` - -## SSL Config - -```powershell -git config --global http.sslVerify -git config --global http.sslVerify true -``` - -### Repro Clone SSL Errors - -```powershell -SSL_VERIFY=false -git config --global http.sslVerify false -``` - -My agents are running as Network Service too but that wasn't really a problem to use user level config. Here is what I did: -1.Save all the necessary certificates in folder %systemroot%\ServiceProfiles\NetworkService\.gitcerts\. -2.Create a file at %systemroot%\ServiceProfiles\NetworkService\.gitconfig with the following content: - -[http "https://tfs.com/"](http "https://tfs.com/") - -$sslCAInfo = ~/.gitcerts/certificate.pem - -[adding-a-corporate-or-self-signed-certificate-authority-to-git-exes-store](https://blogs.msdn.microsoft.com/phkelley/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exes-store/) - -git config --global http.sslBackend schannel - -[how-to-make-git-work-with-self-signed-ssl-certificates-on-tfs2018](https://www.benday.com/2017/12/15/how-to-make-git-work-with-self-signed-ssl-certificates-on-tfs2018/) -[fix-git-self-signed-certificate-in-certificate-chain-on-windows](https://mattferderer.com/fix-git-self-signed-certificate-in-certificate-chain-on-windows) - -## Git Repo and Branch Commands - -### Reset Local Master - -git fetch origin master -git checkout master -git reset --hard origin/master -git reset origin/master --hard -git pull origin master - -### Reset Local Main - -git fetch origin main -git checkout main -git reset --hard origin/main -git pull origin main - -If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. - -```powershell -Example: - git switch -c - -Or undo this operation with: - git switch -? -``` - -## Status and Info Commands - -```powershell -git status -git log -git branch --all -git branch features/ - -git fetch origin -git fetch origin master -git checkout master -git pull origin master -git checkout features/ -git merge branch master -git status -git log -git push - -git pull -git branch -a -``` - -## To Create Branch from Master - -```powershell -git fetch origin master -git checkout master -git pull origin master -git checkout -b features/??? -git push --set-upstream origin features/??? -git checkout features/??? -``` - -### Create local branch - -```powershell -git checkout -b features/ -git status -git add foo.txt -git commit -m "" -git commit -a -m "" ## ? -git push -``` - -### Create Branch on origin (UpStream) to Repository - -```powershell -git push --set-upstream origin features/ -``` - -### To sync local master - -```powershell -git checkout master -git pull - -git checkout features/readme-updates -git merge master ???? -``` - -## Notes - -Origin is the plcae where the branch was cloned from - -```powershell -git remote add -git add -p -git log --online - -npm config set strict-ssl false -``` - -## Git Merging commands - -```powershell -git merge branch master -git status -git log -git push - -git config --get --local core.filemode -false - -git config --local --list -``` - -## Commits - -```powershell -git add yaml\???.yml -git commit -m "???" -git commit -a -m "" ## ? -git push -git merge --abort -git branch -a --sort=-committerdate --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))' -(git reflog > reflog.md) | Invoke-Item -git reflog | Select-String -``` - -## Explanation of what each of those Git commands do - -### `git add yaml???.yml` - -- **Description**: Adds files matching the pattern `yaml???.yml` to the staging area. -- **Wildcard**: The `???` matches exactly three characters, so this would match files like `yaml123.yml` or `yamlABC.yml`. -- **Example**: `git add yaml123.yml` or `git add yamlABC.yml`. - -### `git commit -m "???"` - -- **Description**: Commits the staged changes to the repository with a commit message `"???"`. -- **Purpose**: The message `"???"` is a placeholder and should be replaced with a meaningful description of the changes. -- **Example**: `git commit -m "Added new YAML configuration files"`. - -### `git commit -a -m ""` - -- **Description**: Commits all changes to tracked files (bypassing the staging area) with an empty commit message. -- **Purpose**: This is unusual because an empty commit message is generally not recommended. It's better to provide a meaningful commit message. -- **Example**: `git commit -a -m "Updated configuration files"`. - -### `git push` - -- **Description**: Pushes the committed changes from your local repository to the remote repository. -- **Purpose**: Sends your local commits to the remote repository (e.g., GitHub). -- **Example**: `git push origin master`. - -### `git merge --abort` - -- **Description**: Aborts the current merge process and attempts to revert the repository back to the state before the merge began. -- **Purpose**: Used when a merge conflict occurs, and you decide to cancel the merge and resolve conflicts later. -- **Example**: `git merge --abort` while in the middle of a conflicting merge. - -### `git branch -a --sort=-committerdate --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'` - -- **Description**: Lists all branches sorted by the most recent commit date, with a custom format for the output. -- **Purpose**: Provides a detailed, color-coded list of branches, showing which branch is current (HEAD), commit hash, subject of the commit, author name, and the date relative to now. -- **Example**: `git branch -a --sort=-committerdate --format='...'`. - -### `(git reflog > reflog.md) | Invoke-Item` - -- **Description**: Redirects the output of `git reflog` to a file named `reflog.md` and opens the file. -- **Purpose**: Records the reflog (history of changes) into a markdown file and opens it in the default text editor. -- **Example**: `(git reflog > reflog.md) | Invoke-Item`. - -### `git reflog | Select-String` - -- **Description**: Displays the reflog and filters the results using `Select-String`. -- **Purpose**: Allows you to search the reflog for specific patterns or keywords. -- **Example**: `git reflog | Select-String "commit"` to find entries related to commits. - -These commands cover a range of Git operations, from staging and committing changes to managing branches and searching through logs. Let me know if you have any more questions or need further details! - -## Git Command docs - -```powershell -git remote add upstream -git fetch upstream -git rebase upstream/master -git push origin master --force -``` - -## Explanation of what each of those Git commands does - -### `git remote add upstream` - -This command adds a new remote repository, typically the original repository from which you forked your project. - -```bash -git remote add upstream -``` - -- **Purpose**: To add a reference to the original repository (upstream) so you can pull updates from it. -- **Example**: If you forked a repository on GitHub, you would use the URL of the original repository. - -### `git fetch upstream` - -This command fetches updates from the `upstream` remote repository. - -```bash -git fetch upstream -``` - -- **Purpose**: To get the latest changes from the upstream repository without merging them into your working branch. -- **Example**: This updates your local copy of the remote branches from the upstream repository. - -### `git rebase upstream/master` - -This command rebases your current branch on top of the `master` branch from the `upstream` repository. - -```bash -git rebase upstream/master -``` - -- **Purpose**: To integrate changes from the upstream repository into your current branch by applying your local commits on top of the upstream/master branch. -- **Example**: Useful for keeping your forked repository up-to-date with the original repository. - -### `git push origin master --force` - -This command pushes your local `master` branch to the remote repository (origin) with force. - -```bash -git push origin master --force -``` - -- **Purpose**: To overwrite the remote `master` branch with your local changes, even if it results in non-fast-forward updates. -- **Example**: Use with caution as it can overwrite changes in the remote repository that others may be relying on. - -## 2025-02-05 22:59:55 - -```powershell -git fetch origin main -git checkout main -git reset --hard origin/main -git pull origin main - -git checkout -b features/readme-updates -git checkout features/readme-updates -git status - -# Rename Branch -git branch -m features/database-table-access - -# Delete old branch from remote repository -git push origin --delete features/readme-updates - -# Push the renamed branch and set upstream: -git push --set-upstream origin features/database-table-access -git push origin features/database-table-access - -# Stage and Commit Your Changes: -git add . -git commit -m "Implemented database and table access functions" - -# Push Your Changes to the Remote Branch: -git push origin features/database-table-access - -git commit -m "" - -git commit -a -m "Updated SQL query class and added error handling" -git push -``` - -## 2025-02-08 14:08:55 - -```powershell -git fetch origin main -git checkout main -git reset --hard origin/main -git pull origin main - -git checkout -b features/reverse-parameters-for-AddQuery -git checkout features/reverse-parameters-for-AddQuery -git status - -# Delete old branch from remote repository -# git push origin --delete features/reverse-parameters-for-AddQuery - -# Push the renamed branch and set upstream: -git push --set-upstream origin features/reverse-parameters-for-AddQuery -git push origin features/reverse-parameters-for-AddQuery - -``` - -```powershell -``` - -```powershell -``` - -```powershell -``` - -```powershell -``` diff --git a/tests/TestDatabase1.mdf b/tests/TestDatabase1.mdf index 6a9ff9ffe0e5d234b16f09c7e4a156e5e1572e95..5db30b6a1a4888d7739f7af1699f7ff7aeb7ff71 100644 GIT binary patch delta 263 zcmXxaISztg6h&bkjyMk}&hX=`IIe+pShx~87hqv$ZEIp;O>A9*36%2AB1$Nu yf+}jL!$bp3SZJY*4!Y=}j{$5rP;fEC2xCkz#SC*Su!M&d*4SW+-7`{q`||^sWnnx3 delta 263 zcmXxaISztg6h&bkjyMk}&hX=`IQDGC!j;gu01G>7TN4v&V(Su&2|Mvnc$2TXCkWmW z#2(@~rmtz5;J@qrb32DG_jz>WAmU#_C6*CaIx?q733McoL<(udUls;($fJNFN+_d( xDr%_1L<3D&XrYY`y6B;g0ca52OPV@xo`409~7gohQ@*kFs@Gg5o|`vZF;VH*Gd diff --git a/tests/TestDatabase1_log.ldf b/tests/TestDatabase1_log.ldf index 689a8fd671f2879330db9d0795dff2a33a448b76..0da2156e856dd747eaa41f78f440cefb5c1980f8 100644 GIT binary patch delta 665 zcmZuvJ!lkB5T4n4>uv6yo0S|{HR=T{E=r2SE{T`i#xso|rwl) z%vRZ4zG1y)>x1&EK^aLc(wrKUnbq1_Wgf2+KazINo_ZJs{e*5E*{Y)&lZO<^>HgS`Q|k(QyW(MiuI zlP&mGnm6w?v;ep{ry_&pE2@8=O(DNd9-Z*K+8?8Y(tGO2S>YA4XReZ`epuleRajg) z2$=49vVDjC2)ndlQV+id`AN19Q|rPrpBv+E%cuD-$?nUksOcpA&C?hP779BQCwd}( SJ52Lo>V)Y?m==0zaq=I|Y>mwT delta 210 zcmZo@FlcBnm>|b=P++2h49hOL*1E}x=?WVYQdlC7%+GU^W%D&IAvPdk$;fCv zS%62J)0}~UfeDD&HXHDKWW^#lnPu~WU-67!V)BBzaHjQK&Hv=v|H(4~F%u9oZ~rIH t!j#a~$I{lv+SbRmtdBhip@mr1WP^0Cwg>EO4>;N$aJD_*TK0fj0RY>UPrCpB diff --git a/wpf.guide.md b/wpf.guide.md index 02a1e5c..95b0435 100644 --- a/wpf.guide.md +++ b/wpf.guide.md @@ -32,12 +32,20 @@ This guide provides detailed instructions on how to use the `SqlQueryClass` modu Before you begin, ensure you have the following: -- Visual Studio or Visual Studio Code installed +- PowerShell Version 5.1 or higher +- A text or code editor of you choice +- - PowerShell scripts and even XAML can created and edited with any text or code editor +- - PowerShell_ISE comes with most every Windows OS +- - VS Code or Visual Studio are also very good for serious development +- - - Helps with cloning repository and PS Code development +- - - Visual Studio comes with Blend which is a WPF GUI based editor +- Git for version control - Basic knowledge of WPF and XAML - SQL Server or SQL Express installed - The `SqlQueryClass` module installed - The example code below uses tests configuration and sample SQL Express database from [GitHub `SqlQueryClass` repository](https://github.com/BrooksV/SqlQueryClass) -- - Clone the Repository to C:\Git folder to maintain compatibility with the sample and test data +- - Clone the Repository (using git commands, VS Code, or Visual Studio) to C:\Git folder to maintain compatibility with the sample and test data +- - Can also be done downloading the repository as a zip file ## Setting Up the Environment @@ -47,7 +55,12 @@ Before you begin, ensure you have the following: Install-Module -Name SqlQueryClass -Repository PSGallery -Scope CurrentUser ``` -2. Create a new WPF project in Visual Studio or Visual Studio Code. +2. Create a new PowerShell project in VS Code or Visual Studio. + +- Visual Studio's WPF project is a .Net C# project and is great for creating the XAML file that can be used with PowerShell or with C#. +- There are a few differences in the XAML such as PowerShell does not support Click and other OnEvent handlers and need to be added in Code-Behind. +- The advantage is it's PowerShell which is much easier to learn, use, and edit than a traditional .Net C# application development, test, and release process. +- PowerShell WPF is great for adding simple to very complex GUI interfaces and applications for your scripts. ## Creating the WPF Application @@ -77,7 +90,6 @@ The [PowerShell Code-Behind Example](#powershell-code-behind-example) uses the X Code-Behind is a PowerShell example script `WPF_SqlQueryClassUsageExample.ps1` to demonstrate the usage of the SqlQueryClass module in a WPF application and how to bind data to the `DataGrid`. ```powershell - # Define the module name $moduleName = "SqlQueryClass" @@ -143,13 +155,13 @@ $dataGrid = $window.FindName("dataGrid") $saveButton = $window.FindName("saveButton") $quitButton = $window.FindName("quitButton") -$syncHash.UI.SqlResults.ExecuteQuery("SELECT * FROM myTable") +$syncHash.UI.SqlResults.ExecuteQuery("SELECT * FROM [dbo].[SqlQuery]") $dataGrid.ItemsSource = $syncHash.UI.SqlResults.Tables[0].Result.DefaultView # Event handler for Save button $saveButton.Add_Click({ $syncHash.UI.SqlResults.SaveChanges() - [System.Windows.MessageBox]::Show("Changes saved successfully.", "Save", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information) + [System.Windows.MessageBox]::Show("`n`nChanges saved successfully.", "Save", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Information) }) # Event handler for Quit button @@ -167,7 +179,8 @@ $window.ShowDialog() | Out-Null Create an instance of the `SqlQueryDataSet` class and configure the necessary properties such as `SQLServer`, `Database`, or `ConnectionString`. ```powershell -$syncHash.UI.SqlResults = New-SqlQueryDataSet -SQLServer $SqlServer -Database $Database +# Either one of the following is needed. 1st one creates a SqlConnectonString, 2nd one uses the $ConnectionString value +# $syncHash.UI.SqlResults = New-SqlQueryDataSet -SQLServer $SqlServer -Database $Database $syncHash.UI.SqlResults = New-SqlQueryDataSet -SQLServer -ConnectionString $ConnectionString ``` @@ -175,6 +188,36 @@ $syncHash.UI.SqlResults = New-SqlQueryDataSet -SQLServer -ConnectionString $Conn Use the `ExecuteQuery` method to execute the SQL query and retrieve the results. +```powershell +$syncHash.UI.SqlResults.ExecuteQuery("SELECT * FROM [dbo].[SqlQuery]") +$dataGrid.ItemsSource = $syncHash.UI.SqlResults.Tables[0].Result.DefaultView +``` + +Explanation: + +Class [SqlQueryDataSet] has these properties: SQLServer, Database, ConnectionTimeout, CommandTimeout, ConnectionString, SQLConnection, TableIndex, Tables, TableNames, DisplayResults, KeepAlive + +- `$syncHash.UI.SqlResults` is the instance of [SqlQueryDataSet] created and returned by the New-SqlQueryDataSet function +- `$syncHash.UI.SqlResults.Tables` is the collection of [SqlQueryTable], one for each unique query added or executed by the class +- `$syncHash.UI.SqlResults.Tables[0]` is the first instance of [SqlQueryTable] which is the Query just created by ExecuteQuery() method +- `$syncHash.UI.SqlResults.Tables[0].Result` is the ExecuteQuery() results returned as a [System.Data.DataTable] +- - Execute methods always saves data to Tables[0].Result +- `$syncHash.UI.SqlResults.Tables[0].Result.DefaultView` is the [System.Data.DataView] required for binding to the WPF XAML DataGrid component + +Other `$syncHash.UI.SqlResults` properties: +- TableIndex -- `[int]` value that represents the currently selected index used in `Tables[TableIndex]` +- TableNames -- HashTable of Unique Query Table identifiers and the index in the Table[] collection +- - Used to lookup index by TableName, Example: `$syncHash.UI.SqlResults.TableNames['DBTable']` returns 0 +- DisplayResults -- Helpful when wanting to see the results from the PS Pipeline +- - True sends the results to the PS Pipeline after its saved to `$syncHash.UI.SqlResults.Tables[0].Result` +- - False only saves Result to `$syncHash.UI.SqlResults.Tables[0].Result` + +Class [SqlQueryTable] has these properties: TableIndex, TableName, Query, SQLCommand, SqlDataAdapter, ResultType, Result, isDirty, QueryFile, Parent + +For WPF data binding to work both ways, properties (Result, SqlDataAdapter, and SQLCommand) need to be persistent to performing CRUD actions. A WPF application might involve many tables and datasets for controls like comboboxes, lists, datagrids, treeviews, ect.. This is why [SqlQueryTable] was needed for every unique query dataset. + +See [API Guide and Class Documentation](api.guide.md) for detailed information. + ### Binding the DataTable to the DataGrid Bind the `DataTable` result to the `DataGrid` by setting the `ItemsSource` property to the `DefaultView` of the `DataTable`.